Monthly Archive for January, 2024

Automated Database Restart

Here is a script that checks to ensure the database is running and restarts the service if it is not running.  This was used on a very low memory server to ensure a database remained operational, despite it sometimes crashing due to out of memory errors.

#!/bin/bash

timestamp="$(date)"
systemctl stop httpd && echo "${timestamp}" Stopping Apache... >> /home/centos/administration/apache.log
systemctl is-active mariadb && echo "${timestamp}" MariaDB is active so not starting >> /home/centos/administration/mariadb_active.log || echo "${timestamp}" MariaDB is not Active >> /home/centos/administration/mariadb_inactive.log
systemctl is-active mariadb && echo "${timestamp}" No need to restart MariaDB || systemctl start mariadb
systemctl start httpd && echo "${timestamp}" restarting apache...>> /home/centos/administration/apache.log

AppImage Integration

To install AppImages and integrate them with the desktop environment like a conventional package,  use the AppImage Launcher. LibreWolf’s documentation contains a how-to document on using AppImage Launcher.

Thunderbird Row Highlighting

Revisions: 21 January 2024, first publication

The Thunderbird developers are moving to a new user interface code base for Thunderbird 115 and Thunderbird 102 is the last version that will work with the historical userChrome.css customizations. The userbase for Mozilla products has continually shrunk over the past few years and the chances of equivalent customization abilities being discovered and written about strike me as pretty low.  Because of the change, I have mirrored Thunderbird 102.14 for Windows and Linux in 64-bit and 32-bit versions in the event that the old versions disappear from the Mozilla site. The Source is available on the Mozilla mirror as of August 11, 2023.  The releases are located here.

The userChrome.css below allows the following persistent tag colors.  It also contains text customization for the interface.  And it contains alternate row highlighting, where one row is light grey and the other white.  The alternate row highlighting conflicts with the background colors for tags.  One must choose which feature to have. The userChrome.css goes in the profile directory in a subfolder called chrome.

Screenshot 2024-01-21 151250
The code for highlighting the tag backgrounds was found on a French website located here. E.g. C:\Users\username\AppData\Roaming\Thunderbird\Profiles\1a2b3cde.default-release\chrome

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* set default namespace to XUL */
/* thanks to Jean-Claude, */
/* https://forums.mozfr.org/viewtopic.php?t=143173 */
/*Important tag IMPORTANT*/ 
treechildren::-moz-tree-row(T_24label1)
{
      border-bottom: 1px solid #FFFFFF !important;
      background-color:  #FF0033   !important;
}
treechildren::-moz-tree-cell-text(T_24label1)
{
      color: #FFFFFF !important;
}
treechildren::-moz-tree-row(T_24label1, selected)
{
      background-color: #b71c1c !important;
}
treechildren::-moz-tree-cell-text(T_24label1, selected)
{
  color: #00FF00  !important;
}

/*Travail tag   WORK*/
treechildren::-moz-tree-row(T_24label2)
{
  border-bottom: 1px solid #FFFFFF !important;
  background-color:  #FF9900   !important;
}
treechildren::-moz-tree-cell-text(T_24label2)
{
  color: #FFFFFF !important;
}
treechildren::-moz-tree-row(T_24label2, selected)
{
  background-color: #FF9900 !important;
}
treechildren::-moz-tree-cell-text(T_24label2, selected)
{
  color: #00FF00  !important;
}

/*Personnel tag PERSONAL*/ 
treechildren::-moz-tree-row(T_24label3)
{
  border-bottom: 1px solid #FFFFFF !important;
  background-color:  #009900   !important;
}
treechildren::-moz-tree-cell-text(T_24label3)
{
  color: #FFFFFF !important;
}
treechildren::-moz-tree-row(T_24label3, selected)
{
  background-color: #009900 !important;
}
treechildren::-moz-tree-cell-text(T_24label3, selected)
{
  color: #00FF00  !important;
}

/*A faire tag*/
treechildren::-moz-tree-row(T_24label4)
{
  border-bottom: 1px solid #FFFFFF !important;
  background-color:  #3333FF   !important;
}
treechildren::-moz-tree-cell-text(T_24label4)
{
  color: #FFFFFF !important;
}
treechildren::-moz-tree-row(T_24label4, selected)
{
  background-color: #3333FF !important;
}
treechildren::-moz-tree-cell-text(T_24label4, selected)
{
  color: #00FF00  !important;
}

/*Peut attendre tag*/
treechildren::-moz-tree-row(T_24label5)
{
  border-bottom: 1px solid #FFFFFF !important;
  background-color:  #993399  !important;
}
treechildren::-moz-tree-cell-text(T_24label5)
{
  color: #FFFFFF !important;
}
treechildren::-moz-tree-row(T_24label5, selected)
{
  background-color: #993399 !important;
}
treechildren::-moz-tree-cell-text(T_24label5, selected)
{
  color: #00FF00  !important;
}

/*test tag*/
treechildren::-moz-tree-row(Ttest)
{
  border-bottom: 1px solid #FFFFFF !important;
  background-color:  #FFCC33  !important;
}
treechildren::-moz-tree-cell-text(Ttest)
{
  color: #FFFFFF !important;
}
treechildren::-moz-tree-row(Ttest, selected)
{
  background-color: #FFCC33 !important;
}
treechildren::-moz-tree-cell-text(Ttest, selected)
{
  color: #00FF00  !important;
}

/* 9 August 2023 Additions */
/* Set Font Size In Folder Pane */

#folderTree >treechildren::-moz-tree-cell-text {
  /*font-family: Lucida Sans !important;*/
  font-size: 9pt !important; }

/* Set Font Size In Thread Pane */

#threadTree >treechildren::-moz-tree-cell-text {
  /*font-family: Lucida Sans !important;*/
  font-size: 9pt !important; }

#threadTree treechildren::-moz-tree-row    {
/*  border-bottom: 1px dotted grey !important;  */
  height: 24px !important; }

/* folder list spacing */

#folderTree treechildren::-moz-tree-row    {
  height: 24px !important; }

/* The silver background color on alternating rows */
#threadTree treechildren::-moz-tree-row(odd) {
  -moz-appearance: none !important;
  background-image: none !important;
  /* the !important property overrides previous styling rules */
  /* this line enables alternate color row highlighting, but
  tag backgrounds on this row cannot be highlighted.  Only one 
  background highlighting can be applied Disabled 9 August 2023
  to enable tag background highlights*/
  /* background-color:#F3F6FA !important; */

}

#threadTree treechildren::-moz-tree-row(selected) {
  background-color: -moz-Dialog !important;
}
#threadTree treechildren::-moz-tree-row(selected, focus) {
  background-color: Highlight !important;
}

#folderTree treechildren::-moz-tree-row(selected) {
  -moz-appearance: none !important;
  background-image: none !important;
  background-color: Highlight !important;
}
#folderTree treechildren::-moz-tree-row(selected, focus) {
  -moz-appearance: none !important;
  background-image: none !important;
  background-color: Highlight !important;
}

Functions in Bash

This is the code for a function in Bash script.

 #!/bin/bash
 # Define a function
 greet() {
 echo "Hello, $1"
 }
 # Call the function with "World" as the argument
 greet "World"

Looping through filenames in Bash

To loop through the subdirectories in a folder, when those subdirectories may contain spaces in the file names, use the following procedure.

OLD_IFS=$IFS && IFS=$'\n'
 for directory in $HOME/somefolder/*/; do
 echo “some code here”
 done
 IFS=$OLD_IFS

 

Bash and *nix Note no. 2

 

This document contains some notes on .bashrc for use with Linux systems.

alias ll=’ls -alF’
alias la=’ls -A’
alias l=’ls –CF’

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

The preceding two blocks come standard on Ubuntu as of version 2022.04. One tweak for WSL2 on Windows might be the addition of this line.

sudo bash “/etc/rc.local”

and in the rc.local follow, add the following.

#!/bin/bash
rm -f /etc/resolv.conf
echo “nameserver 1.1.1.1″ >> /etc/resolv.conf
echo “nameserver 8.8.8.8″ >> /etc/resolv.conf

This is because WSL2 may place non-routable IP addresses using 172… in resolv.conf. As of this writing, following steps recommended to disable the generation of the file fails to resolve the issue where the file is newly generated with every new terminal launched in Windows terminal. Having this run with each new Bash login ensures success with network communications.  The location /etc/rc.local may seem like an odd location for this.

The crontab to ensure to check each minute to ensure a virtual machine is running in VirtualBox is as follows.

*/1 * * * * VBoxManage startvm “VMNAME” –type headless
*/1 * * * * VBoxManage startvm “VMNAME2″ –type headless

If the virtual machine is already running, then it will not start a new copy of it. This is better than attempting to run the script via a system wide script after a reboot.  Running it this way allows a simple crontab for the user for whom the machine needs to run under. To run a script every five minutes, add the crontab as follows:

*/5 * * * * /home/USERNAME/nextcloudcron

In this example, the nextcloudcron script will run every five minutes.  This particular script is one for use contacting my Nextcloud instance for webcron.  It does not contain a .sh on the filename, because some implementations may disallow crontab scripts with file extensions.

The following checks inside a subdirectory and pulls in the files therein as bash sources. This is useful for breaking aliases, variables, and other items into different files.

if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. “$rc”
fi
done
fi

The following uses nano as the crontab editor.

export VISUAL=nano

On Oracle Linux 9 on AWS, it is necessary to install Cronie to enable cron jobs.  To ensure this starts after reboots, add the following to /etc/rc.local.

bash /sbin/crond

To create a date line for a log file, use the following:

echo $(date) >> /home/USER/FILENAME

The Shebang for the top of bash files is

#!/usr/bin/env bash

To auto-update via DNF and leave a log of what was accomplished, use the following script.  The script will write a list of the updates to the systemupdates.log file, and then update the system with details of that process written to the dnfupdates.log file.

#!/usr/bin/env bash
echo $(date) >> /home/USER/systemupdates.log
sudo dnf check-update >> /home/USER/systemupdates.log
echo $(date) >> /home/USER/dnfupdates.log
sudo dnf update -y >> /home/USER/dnfupdates.log 2>&1