System-Tools
Tools for Basic System Management
https://www.nntb.no/~dreibh/system-tools
System-Tools is a collection of helpful tools for basic system management of Linux and FreeBSD systems:
- System-Info (display banners and system information),
- System-Maintenance (run basic system maintenance tasks),
- Print-UTF8 (print UTF-8 text with options for centering, adjusting, etc.),
- Text-Block (flexible tool for inserting, replacing or removing text blocks in files or streams),
- Fingerprint-SSH-Keys (show the machine's SSH public key fingerprints in different formats),
- Configure-Grub (configure options for the GRUB boot loader),
- Try-Hard (run a command, with configurable retries on failure),
- Random-Sleep (wait for random time span, with support of fractional seconds).
System-Info displays basic status information about the system: hostname, uptime, CPU, memory statistics, disk space statistics, SSH public key hashes, and networking information. Furthermore, it can be configured to show one or more banners (for example, a project name). System-Info can be configured to be automatically run when logging in, providing the user an up-to-date overview of the system.
One main purpose of System-Info is to run on login, to particularly show a nice login banner (for example, a project or company logo) and then present the basic system information. For this purpose, System-Info can be configured with banner scripts (by default looked up in /etc/system-info.d or /usr/local/etc/system-info.d), which are processed in alphabetically descending order by file name, like:
- 95-application-logo,
- 90-project-logo,
- 60-department-logo,
- 50-company-logo,
- 01-example.
The names of all scripts MUST begin with two decimal numbers. That is, scripts must be named [0-9][0-9]... to be processed by System-Info!
If one of the scripts exits with non-zero exit code, the processing of further banner scripts is stopped. This can be used for preconfiguring a system for example with a department and company logo, where the company logo script terminates further processing. A modified system for a certain project can add a project logo as well. The project logo script may terminate further processing, not showing department and company logos. This may be combined with packaging scripts, for example adding an application logo as part of the application's install package (like adding a script 95-application-logo).
Some examples, using the banner-helper library provided by System-Info:
![]() 01-example The default example. |
![]() 09-hostname-example Dynamically showing the hostname of the machine. |
![]() 10-company-logo-example A SimulaMet company branding. |
![]() 10-nornet A NorNet project branding. |
![]() 18-neat A NEAT project branding. |
![]() 30-rsplib A RSPLIB project branding. |
System-Maintenance runs some system maintenance tasks to keep the system clean and up to date. These tasks are:
- Ensuring that all packages are configured,
- Updating the package repositories,
- Removing obsolete kernels,
- Installing all available package updates,
- Auto-removing unused packages,
- Ensuring that Grub (the bootloader) is installed and up-to-date,
- Delete network interface mapping (only on request by option, see below),
- Updating package and file search caches,
- Updating firmware,
- Trimming SSDs and virtual storage.
The typical usage is quite simple, e.g.:
sudo System-Maintenance
Print-UTF8 is a simple program to print UTF-8 strings in the console with options for indentation, centering, separator as well as size/length/width information. It can e.g.Β be utilised for printing System-Info banners, or for displaying error messages like this classic Amiga Guru Meditation example:
print-utf8 -n -s "\e[1;31;40;5mβ" "β" "β\e[0m" echo -e "Software Failure. Press left mouse button to continue.\nGuru Meditation #00000004.48454C50" | \ print-utf8 -n -C "\e[1;31;40;5mβ\e[25m" "\e[5mβ\e[0m" print-utf8 -n -s "\e[1;31;40;5mβ" "β" "β\e[0m"
Text-Block is a flexible tool for inserting, replacing or deleting text blocks in files or streams. The blocks to be modified can be selected by begin/end tags, or line numbers. The static pages of this website are generated by using Text-Block to insert contents like publications and project lists, add new software releases, etc.
For example, the publications list in index.html is placed between the tags '<!-- BEGIN-OF-PUBLICATIONS -->' and '<!-- END-OF-PUBLICATIONS -->'. Text-Block can be used to manipulate this block:
-
To extract the publications list to standard output:
text-block -i index.html --begin-tag '' --end-tag '' --extract
-
To delete the publications list and write the page to output.html:
text-block -i index.html -o output.html --begin-tag '' --end-tag '' --delete``
-
To replace the publications list by contents from update.block (e.g.Β generated by BibTeXConv), and write the page to output.html:
text-block -i index.html -o output.html --begin-tag '' --end-tag '' --replace update.block
Fingerprint-SSH-Keys prints the SSH key fingerprints of the local machine in different formats: SSH hash, DNS SSHFP RR, or Python dictionary. Its typical usage is straightforward:
Fingerprint-SSH-Keys
Configure-Grub adjusts a GRUB configuration file by applying a configuration from a template, and merging the existing configurations settings with additional customisations. It can for example be used to set a custom screen resolution (GRUB_GFXMODE option) or startup tune (GRUB_INIT_TUNE option). The VM Image Builder Scripts use Configure-Grub to configure the screen resolution and a boot splash image.
Try-Hard runs a command and retries for a given number of times in case of error, with a delay between the trials.
Example to try a file download up to 3Β times, with a delay of 60Β seconds between trials:
try-hard 3 60 -- wget -O example.tar.gz https://www.example.net/example.tar.gz
Random-Sleep waits for a random time, selected from a given interval, with support for fractional seconds.
Example to wait between 0.5Β and 299.5Β seconds:
random-sleep 0.5 299.5 && echo "Finished waiting!"
Please use the issue tracker at https://github.com/dreibh/system-tools/issues to report bugs and issues!
For ready-to-install Ubuntu Linux packages of System-Tools, see Launchpad PPA for Thomas Dreibholz!
sudo apt-add-repository -sy ppa:dreibh/ppa sudo apt-get update sudo apt-get install system-tools
For ready-to-install Fedora Linux packages of System-Tools, see COPR PPA for Thomas Dreibholz!
sudo dnf copr enable -y dreibh/ppa sudo dnf install system-tools
For ready-to-install FreeBSD packages of System-Tools, it is included in the ports collection, see FreeBSD ports tree index of net/system-tools/!
pkg install system-tools
Alternatively, to compile it from the ports sources:
cd /usr/ports/net/system-tools make make install
System-Tools is released under the GNU General Public LicenceΒ (GPL).
Please use the issue tracker at https://github.com/dreibh/system-tools/issues to report bugs and issues!
The Git repository of the System-Tools sources can be found at https://github.com/dreibh/system-tools:
git clone https://github.com/dreibh/system-tools cd system-tools cmake . make
Contributions:
-
Issue tracker: https://github.com/dreibh/system-tools/issues. Please submit bug reports, issues, questions, etc. in the issue tracker!
-
Pull Requests for System-Tools: https://github.com/dreibh/system-tools/pulls. Your contributions to System-Tools are always welcome!
-
CI build tests of System-Tools: https://github.com/dreibh/system-tools/actions.
See https://www.nntb.no/~dreibh/system-tools/#current-stable-release for the release packages!