diff --git a/_man/.gitignore b/_man/.gitignore deleted file mode 100644 index a0a4573..0000000 --- a/_man/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -vendor/ -.bundle/ \ No newline at end of file diff --git a/_man/Gemfile b/_man/Gemfile deleted file mode 100644 index eb161ff..0000000 --- a/_man/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source "https://rubygems.org" - - -gem "ronn", "~> 0.7.3" diff --git a/_man/Gemfile.lock b/_man/Gemfile.lock deleted file mode 100644 index 7cbc678..0000000 --- a/_man/Gemfile.lock +++ /dev/null @@ -1,19 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - hpricot (0.8.6) - mustache (1.1.1) - rdiscount (2.2.0.2) - ronn (0.7.3) - hpricot (>= 0.8.2) - mustache (>= 0.7.0) - rdiscount (>= 1.5.8) - -PLATFORMS - x86_64-linux - -DEPENDENCIES - ronn (~> 0.7.3) - -BUNDLED WITH - 2.3.15 diff --git a/_man/README.md b/_man/README.md index c8dd5e4..e7252e8 100644 --- a/_man/README.md +++ b/_man/README.md @@ -1,14 +1,12 @@ # README -Build man pages with `ronn`. +Build man pages. -- Install Ruby and `gem` -- Install `gem install bundler` or via system package `bundler` -- Execute the following to build and serve via _Jekyll_ +- Install `pandoc` +- Execute the following to build ```shell -bundle config set --local path 'vendor/bundle' -bundle install +cd _man # generate man pages in /usr/share/man/man1 -for file in src/*.ronn; do bn=$(basename $file .ronn); bundle exec ronn --pipe < $file > ../usr/share/man/man1/$bn; done +for file in src/*.md; do bn=$(basename $file .md); pandoc $file -s -t man -o ../usr/share/man/man1/$bn; done ``` \ No newline at end of file diff --git a/_man/src/check_updates.1.md b/_man/src/check_updates.1.md new file mode 100644 index 0000000..26acb00 --- /dev/null +++ b/_man/src/check_updates.1.md @@ -0,0 +1,32 @@ +% check_updates(1) check_updates +% Alexander Schäferdiek +% January 2023 + +# NAME +check_updates - Notifies about available updates. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**check_updates** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**check_updates** checks for available updates using *checkupdates* and sends out a mail. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **check_updates** tries to read from *$HOME/.check_updates.conf* and */etc/check_updates.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **CHECK_UPDATES_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available. + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.check_updates.conf* and add *CHECK_UPDATES_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/check_updates*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/disk_space_alert.1.md b/_man/src/disk_space_alert.1.md new file mode 100644 index 0000000..63f7af5 --- /dev/null +++ b/_man/src/disk_space_alert.1.md @@ -0,0 +1,36 @@ +% disk_space_alert(1) disk_space_alert +% Alexander Schäferdiek +% January 2023 + +# NAME +disk_space_alert - Checks available disk space and sends out notification via mail. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**disk_space_alert** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**disk_space_alert** checks available diskspace for configured **mounts** and sends out a mail if certain limits are reached. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **disk_space_alert** tries to read from *$HOME/.disk_space_alert.conf* and */etc/disk_space_alert.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **DISK_SPACE_ALERT_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available.\ + +The following are optional or have reasonable defaults: +- **DISK_SPACE_ALERT_THRESHOLD=93** in percentage +- **DISK_SPACE_ALERT_MOUNTPOINTS=("/")** is an array of mountpoints + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.disk_space_alert.conf* and add *DISK_SPACE_ALERT_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/disk_space_alert*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/docker_check.1.md b/_man/src/docker_check.1.md new file mode 100644 index 0000000..bd2e9c2 --- /dev/null +++ b/_man/src/docker_check.1.md @@ -0,0 +1,35 @@ +% docker_check(1) docker_check +% Alexander Schäferdiek +% January 2023 + +# NAME +docker_check - Checks a set of docker containers and notifies if their state is not up and running. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**docker_check** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**docker_check** checks a list of docker containers and notifies if their state is not up and running. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **docker_check** tries to read from *$HOME/.docker_check.conf* and */etc/docker_check.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **DOCKER_CHECK_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available.\ +- **DOCKER_CHECK_LIST_FILE="$HOME/.docker_check.list"** which lists to be checked docker containers separated by lines. Provide their container name, e.g. output of current running docker containers piped into the file: *docker ps --format '{{.Names}}' >> $HOME/.docker_check.list*).\ +- **DOCKER_CHECK_NOTIFY_LEVELS=("UNKNOWN" "WARNING" "CRITICAL")** determines when to notify/output/send mail. Possible: *"UNKNOWN"* *"WARNING"* *"CRITICAL"* *"INFO"*.\ +- **DOCKER_CHECK_MAIL_ENABLED=false** enables or disables sending mail notifications. + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.docker_check.conf* and add *DOCKER_CHECK_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/docker_check*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/docker_compose_update.1.md b/_man/src/docker_compose_update.1.md new file mode 100644 index 0000000..bb1181e --- /dev/null +++ b/_man/src/docker_compose_update.1.md @@ -0,0 +1,36 @@ +% docker_compose_update(1) docker_compose_update +% Alexander Schäferdiek +% January 2023 + +# NAME +docker_compose_update - An utility to batch update *docker-compose* deployments residing in sub folders. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**docker_compose_update** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**docker_compose_update** is an utility to batch update *docker-compose* deployments residing in sub folders of a **base directory**, e.g */root/deployments/* having different sub folders, each having a *docker-compose* deployment in it. + +If no *CONFIG_FILE* is provided, **docker_compose_update** tries to read from *$HOME/.docker_compose_update.conf* and */etc/docker_compose_update.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **DOCKER_COMPOSE_UPDATE_BASEDIR="/root/deployments"** determines the **base directory** where all *docker-compose* stacks are located in their own sub-folders.\ +- **DOCKER_COMPOSE_UPDATE_IGNORES=("mailcow")** folder names which will be ignored and not be updated, at least () is required.\ +- **DOCKER_COMPOSE_UPDATE_COMMANDS[aDirectoryName]="./callFancyScriptInDirectory"** to explicitly define update command for one sub folder *aDirectoryName*. This is a map and defining different instructions for multiple locations is possible. Example: accessor has to match the folder, e.g. */aDirectoryName* will use command "*./callFancyScriptInDirectory"* when changing directory into it.\ +- **DOCKER_COMPOSE_UPDATE_COMMAND="sudo docker-compose down; sudo docker-compose pull; sudo docker-compose up -d;"** determines the default update command executed for each deployment.\ +- **DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR="false"** determines if script fails if at least one update procedure failed + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.docker_compose_update.conf* and necessary configuration. Examples can be found in */usr/share/doc/docker_compose_update*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/dynv6.1.md b/_man/src/dynv6.1.md new file mode 100644 index 0000000..e22fde5 --- /dev/null +++ b/_man/src/dynv6.1.md @@ -0,0 +1,38 @@ +% dynv6(1) dynv6 +% Alexander Schäferdiek +% January 2023 + +# NAME +dynv6 - Updates dynv6 (an external service) and notifies about changes of IP addresses. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**dynv6** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**dynv6** updates dynv6 (an external service) and notifies about changes of IP addresses. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **dynv6** tries to read from *$HOME/.dynv6.conf* and */etc/dynv6.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **DYNV6_MAIL_ENABLED** to enable or disable mail notification. +- **DYNV6_MAIL_ADDRESS** which requires *mail.rc* to be configured and '*mailx*' command has be available.\ +- **DYNV6_TOKEN** the dynv6 token.\ +- **DYNV6_HOSTNAME** the dynv6 hostname.\ +- **DYNV6_IPV4_ENABLED** enable or disable updating IPv4.\ +- **DYNV6_IPV6_ENABLED** enable or disable updating IPv6.\ +- **DYNV6_IPV6_INTERFACE** which interface to track, be sure that Privacy Extensions are disabled.\ + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.dynv6.conf* and add *DYNV6_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/dynv6*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/memory_usage_alert.1.md b/_man/src/memory_usage_alert.1.md new file mode 100644 index 0000000..6ca1ed8 --- /dev/null +++ b/_man/src/memory_usage_alert.1.md @@ -0,0 +1,35 @@ +% memory_usage_alert(1) memory_usage_alert +% Alexander Schäferdiek +% January 2023 + +# NAME +memory_usage_alert - Checks available memory and sends out notification via mail. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**memory_usage_alert** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**memory_usage_alert** checks available memory and sends out a mail if certain limits are reached. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **memory_usage_alert** tries to read from *$HOME/.memory_usage_alert.conf* and */etc/memory_usage_alert.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **MEMORY_USAGE_ALERT_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available.\ + +The following are optional or have reasonable defaults: +- **MEMORY_USAGE_ALERT_THRESHOLD=512** threshold to warn about (in *megabytes*) + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.memory_usage_alert.conf* and add *MEMORY_USAGE_ALERT_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/memory_usage_alert*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/system-helpers.1.md b/_man/src/system-helpers.1.md new file mode 100644 index 0000000..53da59b --- /dev/null +++ b/_man/src/system-helpers.1.md @@ -0,0 +1,26 @@ +% system-helpers(1) system-helpers +% Alexander Schäferdiek +% January 2023 + +# NAME +system-helpers - Collection of helper systemd services, systemd timers and +shell scripts for common configuration. Designed for use with ArchLinux, although most scripts should work on any distribution. + +# DESCRIPTION +**system-helpers** collection provides the following helpers + +- checking if systemd services and timers are running (see **man systemd_check**) +- borgmatic backup (see exposed systemd services *borgmatic@* which require a valid *borgmatic.yml* file in */etc/borgmatic* or your **$HOME/.config/borgmatic**) +- restic backup (see */usr/share/doc/system-helpers/restic* for an example *mybackup*) +- checking if docker containers are running (see **man docker_check**) +- batch docker-compose upgrades (see **man docker_compose_update**) +- dynamic dns update (see **man docker_compose_update**) +- memory and disk checks (see **man disk_space_alert** and **man memory_usage_alert**) +- docker housekeeping for removing unused docker containers, volumes and images +- update check for pacman (ArchLinux specific, see **man check_updates**) + +Provided systemd services mostly support mail notifications if they have failed +via **systemd_failure_notify**. + +See */usr/share/doc/system-helpers* for example configurations which should +be copied inside **$HOME** or **/etc** depending on the helper script. \ No newline at end of file diff --git a/_man/src/system-helpers.1.ronn b/_man/src/system-helpers.1.ronn deleted file mode 100644 index 64b8b00..0000000 --- a/_man/src/system-helpers.1.ronn +++ /dev/null @@ -1,20 +0,0 @@ -# system-helpers - -system-helpers is a collection of helper systemd services, systemd timers and -shell scripts for common configuration and tasks like - - * checking if systemd services and timers are running - * borgmatic backup - * restic backup - * checking if docker containers are running - * batch docker-compose upgrades - * docker housekeeping for removing unused docker containers, volumes and images - * dynamic dns update - * update check for pacman - * memory and disk checks - -Provided systemd services mostly support mail notifications if they have failed -via systemd_failure_notify. - -See `/usr/share/doc/system-helpers` for example configurations which should -be copied inside $HOME or /etc depending on the helper script. \ No newline at end of file diff --git a/_man/src/systemd_check.1.md b/_man/src/systemd_check.1.md new file mode 100644 index 0000000..c362ef3 --- /dev/null +++ b/_man/src/systemd_check.1.md @@ -0,0 +1,34 @@ +% systemd_check(1) systemd_check +% Alexander Schäferdiek +% January 2023 + +# NAME +systemd_check - Checks a set of systemd services, targets, mounts of timers, and notifies if their state is not up and running. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**systemd_check** [CONFIG_FILE (absolute path)] + +# DESCRIPTION + +**systemd_check** checks a set of systemd services, targets, mounts of timers, and notifies if their state is not up and running. It comes with systemd services. + +If no *CONFIG_FILE* is provided, **systemd_check** tries to read from *$HOME/.systemd_check.conf* and */etc/systemd_check.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **SYSTEMD_CHECK_LIST_FILE="$HOME/.systemd_check.list"** which lists to be checked systemd services, timers or targets separated by lines.\ +- **SYSTEMD_CHECK_MAIL_ENABLED=false** enables or disables sending mail notifications. +- **SYSTEMD_CHECK_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available.\ + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.systemd_check.conf* and add *SYSTEMD_CHECK_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/systemd_check*. + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/_man/src/systemd_failure_notify.1.md b/_man/src/systemd_failure_notify.1.md new file mode 100644 index 0000000..c5dd7f2 --- /dev/null +++ b/_man/src/systemd_failure_notify.1.md @@ -0,0 +1,42 @@ +% systemd_failure_notify(1) systemd_failure_notify +% Alexander Schäferdiek +% January 2023 + +# NAME +systemd_failure_notify - Notifies via mail or gotify when a service has failed. Configuration is done in environment files.\ +It's part of **system-helpers**. + +# SYNOPSIS +**systemd_failure_notify** [CONFIG_FILE (absolute path)] [service name] + +# DESCRIPTION + +**systemd_failure_notify** executes *mailx* or *gotify* to send out notifications. It comes with systemd services. Use the provided systemd service in the **OnFailure** directive with *OnFailure=systemd_failure_notify@%n.service*. + +If no *CONFIG_FILE* is provided, **systemd_failure_notify** tries to read from *$HOME/.systemd_failure_notify.conf* and */etc/systemd_failure_notify.conf* for configuration. It will exit with a non-zero exit code if it cannot find an proper configuration file. + +The following are at least required for the script to work:\ +- **SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS=""** which requires *mail.rc* to be configured and '*mailx*' command has be available¸ + +By default, **SYSTEMD_FAILURE_NOTIFY_MAIL_ENABLED** is set to **true**. Set it to **false** to use *gotify* only.¸ + +The following are optional and integrate gotify-cli to send notifications, it defaults to false: +- SYSTEMD_FAILURE_NOTIFY_GOTIFY_ENABLED="true" // 'gotify' command has be available and needs to be properly configured by having a cli.json file + +You can copy this script to */usr/local/bin* and use create a custom **CONFIG_FILE** as user. + +# EXAMPLE + +Create a *$HOME/.systemd_failure_notify.conf* and add *SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS="alias@domain.tld"*. Notifications will be delivered to alias@domain.tld. Examples can be found in */usr/share/doc/systemd_failure_notify*. + +Then, add **systemd_failure_notify@serviceName** in a systemd unit file in the **OnFailure** directive: + +[Unit]\ +OnFailure=systemd_failure_notify@%n.service\ + +# EXIT VALUES +**0** +: Success + +**1** +: Error \ No newline at end of file diff --git a/usr/local/bin/check_updates b/usr/local/bin/check_updates index c537d46..e0646aa 100755 --- a/usr/local/bin/check_updates +++ b/usr/local/bin/check_updates @@ -5,15 +5,7 @@ usage() { USAGE=$(cat <'. +Sends out update notifications. Please see man check_updates. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/disk_space_alert b/usr/local/bin/disk_space_alert index 64d2266..0935018 100755 --- a/usr/local/bin/disk_space_alert +++ b/usr/local/bin/disk_space_alert @@ -5,19 +5,7 @@ usage() { USAGE=$(cat <'. +Checks available diskspace for configured **mounts** and sends out a mail if certain limits are reached. Please see man disk_space_alert. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/docker_backup_volume b/usr/local/bin/docker_backup_volume deleted file mode 100755 index 773ed08..0000000 --- a/usr/local/bin/docker_backup_volume +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -# https://github.com/spherex-dev/docker-backup-volume -# creates a backup of the docker volume - -while [ $# -gt 0 ]; do - case "$1" in - -v|-volume|--volume) - volume="$2" - ;; - -p|-prefix|--prefix) - prefix="$2" - ;; - -h|-help|--help) - printf "--volume the name of the volume\n" - printf "--mount the mount point of the volume\n" - exit 1 - ;; - *) - printf "***************************\n" - printf "* Error: Invalid argument.*\n" - printf "***************************\n" - exit 1 - esac - shift - shift -done - -uuid=$(cat /proc/sys/kernel/random/uuid) -if [ ! -d $prefix/$volume ]; then - mkdir -p $prefix/$volume -fi - -IMAGE=alpine:latest -docker run \ ---mount "type=volume,src=${volume},dst=/data" \ ---name $uuid \ -$IMAGE - -timestamp=$(date +%Y-%m-%d_%H%M%S) -docker cp -a $uuid:/data /tmp/$uuid -tar -C /tmp/$uuid -czf $prefix/$volume/${timestamp}_${volume}.tar.gz . -rm -rf /tmp/$uuid -docker rm $uuid \ No newline at end of file diff --git a/usr/local/bin/docker_backup_volume_restore b/usr/local/bin/docker_backup_volume_restore deleted file mode 100755 index 0712a31..0000000 --- a/usr/local/bin/docker_backup_volume_restore +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash -# https://github.com/spherex-dev/docker-backup-volume -# creates a docker volume from a backup - -while [ $# -gt 0 ]; do - case "$1" in - -v|-volume|--volume) - volume="$2" - ;; - -p|-prefix|--prefix) - prefix="$2" - ;; - -n|-volume-name|--volume-name) - volume_name="$2" - ;; - -s|-snapshot|--snapshot) - snapshot="$2" - ;; - -h|-help|--help) - printf "--volume the backup name of the volume\n" - printf "--volume-name (optional) create the backup as this volume name\n" - printf "--prefix the storage prefix of the backup location" - exit 1 - ;; - *) - printf "***************************\n" - printf "* Error: Invalid argument.*\n" - printf "***************************\n" - exit 1 - esac - shift - shift -done - -if [ -z "$volume_name" ]; then - volume_name=$volume -fi - -volume_exists=$(docker volume ls | grep -q $volume_name) -if [ $volume_exists ]; then - printf "***********************************\n" - printf "Error: volume $volume_name exists. \n" - printf "Please delete before proceeding \n" - printf "***********************************\n" - exit 1 -fi - -if [ -z "$snapshot" ]; then - snapshot=$(ls -At ${prefix}/${volume}/ | tail -n 1) -fi - -if [ -z "$snapshot" ]; then - printf "**********************************\n" - printf "* Error: Unable to find snapshot.*\n" - printf "**********************************\n" - exit 1 -else - echo "creating from snapshot: ${snapshot}" -fi - -uuid=$(cat /proc/sys/kernel/random/uuid) -cwd=$(pwd) - -IMAGE=alpine:latest -docker run \ ---mount "type=volume,src=${volume_name},dst=/data" \ ---name $uuid \ -$IMAGE - -mkdir /tmp/$uuid -tar -xf $prefix/$volume/$snapshot -C /tmp/$uuid -cd /tmp/$uuid - -docker cp -a . $uuid:/data -docker rm $uuid -cd $cwd diff --git a/usr/local/bin/docker_check b/usr/local/bin/docker_check index eeb54e3..79fa4e9 100755 --- a/usr/local/bin/docker_check +++ b/usr/local/bin/docker_check @@ -5,18 +5,7 @@ usage() { USAGE=$(cat <> $HOME/.docker_check.list) -DOCKER_CHECK_NOTIFY_LEVELS=("UNKNOWN" "WARNING" "CRITICAL") // when to notify/output/send mail. possible: "UNKNOWN" "WARNING" "CRITICAL" "INFO", should at least be () -DOCKER_CHECK_MAIL_ENABLED=false // send email (address has to be set), values: false|true -DOCKER_CHECK_MAIL_ADDRESS="" // mail.rc has to be configured - -You can copy this script to '/usr/local/bin' and use create a custom CONFIG_FILE as user. Examples can be found in '/usr/share/doc/'. +Checks a list of docker containers and notifies if their state is not up and running. Please see man docker_check. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/docker_compose_update b/usr/local/bin/docker_compose_update index 8fa14b5..39b3a5b 100755 --- a/usr/local/bin/docker_compose_update +++ b/usr/local/bin/docker_compose_update @@ -5,20 +5,7 @@ usage() { USAGE=$(cat </aDirectoryName will use command "./callFancyScriptInDirectory" when changing directory into it. -- DOCKER_COMPOSE_UPDATE_COMMAND="sudo docker-compose down; sudo docker-compose pull; sudo docker-compose up -d;" // the default update command for deployments -- DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR="false" // if set to true, script fails if at least one update procedure failed - -You can copy this script to '/usr/local/bin' and use create a custom CONFIG_FILE as user. Examples can be found in '/usr/share/doc/'. +An utility to batch update *docker-compose* deployments residing in sub folders. Please see man docker_compose_update. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/dynv6 b/usr/local/bin/dynv6 index 7b812ac..4c4ab88 100755 --- a/usr/local/bin/dynv6 +++ b/usr/local/bin/dynv6 @@ -5,22 +5,7 @@ set -e; usage() { USAGE=$(cat <'. +updates dynv6 (an external service) and notifies about changes of IP addresses. Please see man dynv6. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/memory_usage_alert b/usr/local/bin/memory_usage_alert index e31fcc3..47e852f 100755 --- a/usr/local/bin/memory_usage_alert +++ b/usr/local/bin/memory_usage_alert @@ -5,18 +5,7 @@ usage() { USAGE=$(cat <'. +Checks available memory and sends out notification via mail. Please see man memory_usage_alert. EOF ) echo "$USAGE"; diff --git a/usr/local/bin/smartdnotify b/usr/local/bin/smartdnotify index df489af..d4b8b96 100755 --- a/usr/local/bin/smartdnotify +++ b/usr/local/bin/smartdnotify @@ -1,4 +1,5 @@ #!/usr/bin/env bash + HOSTNAME=$(hostname) echo "$SMARTD_MESSAGE" | mail -s "[smartd $HOSTNAME] $SMARTD_FAILTYPE" "$SMARTD_ADDRESS" wall "$SMARTD_MESSAGE" \ No newline at end of file diff --git a/usr/local/bin/systemd_check b/usr/local/bin/systemd_check index fdf47b7..e8e7f26 100755 --- a/usr/local/bin/systemd_check +++ b/usr/local/bin/systemd_check @@ -5,21 +5,8 @@ usage() { SYSTEMD_CHECK_USAGE=$(cat <'. EOF ) echo "$SYSTEMD_CHECK_USAGE"; diff --git a/usr/local/bin/systemd_failure_notify b/usr/local/bin/systemd_failure_notify index 3573d24..5e107f2 100755 --- a/usr/local/bin/systemd_failure_notify +++ b/usr/local/bin/systemd_failure_notify @@ -3,26 +3,9 @@ # usage usage() { USAGE=$(cat < -Notifies via mail when a service has failed. You need to place the following in the service which should be checked: - -[Unit] -Description=... -OnFailure=systemd_failure_notify@%n.service -... - -You should place the 's service into systemd's user and systemd's system folder so it can be used by global and user services. - -If no CONFIG_FILE is given, HOME/.systemd_failure_notify.conf or /etc/systemd_failure_notify.conf is used. This fallback option -has to exist or the script will exit. - -Configuration can be done in any file and any pre-defined variable can be overwritten. - -The following are at least required for the script to work: -- SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS="" // mail.rc has to be configured - -You can copy this script to '/usr/local/bin' and use create a custom CONFIG_FILE as user. Examples can be found in '/usr/share/doc/'. +Sends out notifications for failed services. Please see man systemd_failure_notify. EOF ) echo "$USAGE"; @@ -40,8 +23,12 @@ fi SYSTEMD_FAILURE_NOTFY_HOSTNAME=$(hostname) SYSTEMD_FAILURE_NOTFY_USER=$(whoami) + +SYSTEMD_FAILURE_NOTIFY_MAIL_ENABLED="true"; SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS=""; +SYSTEMD_FAILURE_NOTIFY_GOTIFY_ENABLED="false"; + # check for config file apply_config() { local config=$1; @@ -59,6 +46,19 @@ apply_config() { set +a; } +check_requirements() { + local mailEnabled=$1; + local gotifyEnabled=$2; + + if [[ "${mailEnabled}" == "true" ]]; then + type mailx &> /dev/null || echo "Requiring 'mailx' but it's not installed"; exit 1 + fi + + if [[ "${gotifyEnabled}" == "true" ]]; then + type gotify &> /dev/null || echo "Requiring 'gotify' but it's not installed"; exit 1 + fi +} + source_config() { local config=$1; local configFallback=$2; @@ -80,7 +80,27 @@ source_config() { fi } source_config "$2" "$HOME/.systemd_failure_notify.conf" "/etc/systemd_failure_notify.conf" +check_requirements "$SYSTEMD_FAILURE_NOTIFY_MAIL_ENABLED" "$SYSTEMD_FAILURE_NOTIFY_GOTIFY_ENABLED" SUBJECT="[systemd $SYSTEMD_FAILURE_NOTFY_HOSTNAME for $SYSTEMD_FAILURE_NOTFY_USER] $SYSTEMD_FAILURE_NOTFY_SERVICE RUN FAILED" MESSAGE="$SYSTEMD_FAILURE_NOTFY_SERVICE run failed" -echo "$MESSAGE"|mailx -Ssendwait -s "$SUBJECT" "$SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS"; \ No newline at end of file + +if [[ "${SYSTEMD_FAILURE_NOTIFY_MAIL_ENABLED}" == "true" ]]; then + echo "$MESSAGE"|mailx -Ssendwait -s "$SUBJECT" "$SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS"; + echo "Sent notifiction via mail" +else + echo "Sending notifictions via mail is disabled" +fi + +if [[ "${SYSTEMD_FAILURE_NOTIFY_GOTIFY_ENABLED}" == "true" ]]; then + + if [[ ! -f "${HOME}/.config/gotify/cli.json" && ! -f "${HOME}/gotify/cli.json" && ! -f "./cli.json" && ! -f "/etc/gotify/cli.json" ]]; then + echo "Cannot find a valid cli.json, please run 'gotify init' before using this" + exit 1; + fi + + echo "$MESSAGE"|gotify push --quiet --title "${SUBJECT}"; + echo "Sent message via gotify" +else + echo "Sending notifictions via gotify is disabled" +fi \ No newline at end of file diff --git a/usr/share/man/man1/check_updates.1 b/usr/share/man/man1/check_updates.1 new file mode 100644 index 0000000..3a0d41d --- /dev/null +++ b/usr/share/man/man1/check_updates.1 @@ -0,0 +1,66 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "check_updates" "1" "January 2023" "check_updates" "" +.hy +.SH NAME +.PP +check_updates - Notifies about available updates. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]check_updates\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]check_updates\f[R] checks for available updates using +\f[I]checkupdates\f[R] and sends out a mail. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]check_updates\f[R] tries +to read from \f[I]$HOME/.check_updates.conf\f[R] and +\f[I]/etc/check_updates.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]CHECK_UPDATES_MAIL_ADDRESS=\[lq]\[lq]\f[R] which requires +\f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' command has be +available. +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.check_updates.conf\f[R] and add +\f[I]CHECK_UPDATES_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/check_updates\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/disk_space_alert.1 b/usr/share/man/man1/disk_space_alert.1 new file mode 100644 index 0000000..174453a --- /dev/null +++ b/usr/share/man/man1/disk_space_alert.1 @@ -0,0 +1,75 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "disk_space_alert" "1" "January 2023" "disk_space_alert" "" +.hy +.SH NAME +.PP +disk_space_alert - Checks available disk space and sends out +notification via mail. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]disk_space_alert\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]disk_space_alert\f[R] checks available diskspace for configured +\f[B]mounts\f[R] and sends out a mail if certain limits are reached. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]disk_space_alert\f[R] +tries to read from \f[I]$HOME/.disk_space_alert.conf\f[R] and +\f[I]/etc/disk_space_alert.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]DISK_SPACE_ALERT_MAIL_ADDRESS=\[lq]\[lq]\f[R] which requires +\f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' command has be +available. +.PD 0 +.P +.PD +.PP +The following are optional or have reasonable defaults: - +\f[B]DISK_SPACE_ALERT_THRESHOLD=93\f[R] in percentage - +\f[B]DISK_SPACE_ALERT_MOUNTPOINTS=(\[lq]/\[rq])\f[R] is an array of +mountpoints +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.disk_space_alert.conf\f[R] and add +\f[I]DISK_SPACE_ALERT_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/disk_space_alert\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/docker_check.1 b/usr/share/man/man1/docker_check.1 new file mode 100644 index 0000000..74b2ecf --- /dev/null +++ b/usr/share/man/man1/docker_check.1 @@ -0,0 +1,87 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "docker_check" "1" "January 2023" "docker_check" "" +.hy +.SH NAME +.PP +docker_check - Checks a set of docker containers and notifies if their +state is not up and running. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]docker_check\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]docker_check\f[R] checks a list of docker containers and notifies +if their state is not up and running. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]docker_check\f[R] tries to +read from \f[I]$HOME/.docker_check.conf\f[R] and +\f[I]/etc/docker_check.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]DOCKER_CHECK_MAIL_ADDRESS=\[lq]\[lq]\f[R] which requires +\f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' command has be +available. +.PD 0 +.P +.PD +- \f[B]DOCKER_CHECK_LIST_FILE=\[lq]$HOME/.docker_check.list\[rq]\f[R] +which lists to be checked docker containers separated by lines. +Provide their container name, e.g.\ output of current running docker +containers piped into the file: \f[I]docker ps \[en]format `{{.Names}}' +>> $HOME/.docker_check.list\f[R]). +.PD 0 +.P +.PD +- \f[B]DOCKER_CHECK_NOTIFY_LEVELS=(\[lq]UNKNOWN\[rq] \[lq]WARNING\[rq] +\[lq]CRITICAL\[rq])\f[R] determines when to notify/output/send mail. +Possible: \f[I]\[lq]UNKNOWN\[rq]\f[R] \f[I]\[lq]WARNING\[rq]\f[R] +\f[I]\[lq]CRITICAL\[rq]\f[R] \f[I]\[lq]INFO\[rq]\f[R]. +.PD 0 +.P +.PD +- \f[B]DOCKER_CHECK_MAIL_ENABLED=false\f[R] enables or disables sending +mail notifications. +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.docker_check.conf\f[R] and add +\f[I]DOCKER_CHECK_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/docker_check\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/docker_compose_update.1 b/usr/share/man/man1/docker_compose_update.1 new file mode 100644 index 0000000..82dbed9 --- /dev/null +++ b/usr/share/man/man1/docker_compose_update.1 @@ -0,0 +1,97 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "docker_compose_update" "1" "January 2023" "docker_compose_update" "" +.hy +.SH NAME +.PP +docker_compose_update - An utility to batch update +\f[I]docker-compose\f[R] deployments residing in sub folders. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]docker_compose_update\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]docker_compose_update\f[R] is an utility to batch update +\f[I]docker-compose\f[R] deployments residing in sub folders of a +\f[B]base directory\f[R], e.g \f[I]/root/deployments/\f[R] having +different sub folders, each having a \f[I]docker-compose\f[R] deployment +in it. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]docker_compose_update\f[R] +tries to read from \f[I]$HOME/.docker_compose_update.conf\f[R] and +\f[I]/etc/docker_compose_update.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]DOCKER_COMPOSE_UPDATE_BASEDIR=\[lq]/root/deployments\[rq]\f[R] +determines the \f[B]base directory\f[R] where all +\f[I]docker-compose\f[R] stacks are located in their own sub-folders. +.PD 0 +.P +.PD +- \f[B]DOCKER_COMPOSE_UPDATE_IGNORES=(\[lq]mailcow\[rq])\f[R] folder +names which will be ignored and not be updated, at least () is required. +.PD 0 +.P +.PD +- +\f[B]DOCKER_COMPOSE_UPDATE_COMMANDS[aDirectoryName]=\[lq]./callFancyScriptInDirectory\[rq]\f[R] +to explicitly define update command for one sub folder +\f[I]aDirectoryName\f[R]. +This is a map and defining different instructions for multiple locations +is possible. +Example: accessor has to match the folder, +e.g.\ \f[I]/aDirectoryName\f[R] will use command +\[lq]\f[I]./callFancyScriptInDirectory\[rq]\f[R] when changing directory +into it. +.PD 0 +.P +.PD +- \f[B]DOCKER_COMPOSE_UPDATE_COMMAND=\[lq]sudo docker-compose down; sudo +docker-compose pull; sudo docker-compose up -d;\[rq]\f[R] determines the +default update command executed for each deployment. +.PD 0 +.P +.PD +- \f[B]DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR=\[lq]false\[rq]\f[R] +determines if script fails if at least one update procedure failed +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.docker_compose_update.conf\f[R] and necessary +configuration. +Examples can be found in \f[I]/usr/share/doc/docker_compose_update\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/dynv6.1 b/usr/share/man/man1/dynv6.1 new file mode 100644 index 0000000..a06e3c4 --- /dev/null +++ b/usr/share/man/man1/dynv6.1 @@ -0,0 +1,91 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "dynv6" "1" "January 2023" "dynv6" "" +.hy +.SH NAME +.PP +dynv6 - Updates dynv6 (an external service) and notifies about changes +of IP addresses. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]dynv6\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]dynv6\f[R] updates dynv6 (an external service) and notifies about +changes of IP addresses. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]dynv6\f[R] tries to read +from \f[I]$HOME/.dynv6.conf\f[R] and \f[I]/etc/dynv6.conf\f[R] for +configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]DYNV6_MAIL_ENABLED\f[R] to enable or disable mail notification. +- \f[B]DYNV6_MAIL_ADDRESS\f[R] which requires \f[I]mail.rc\f[R] to be +configured and `\f[I]mailx\f[R]' command has be available. +.PD 0 +.P +.PD +- \f[B]DYNV6_TOKEN\f[R] the dynv6 token. +.PD 0 +.P +.PD +- \f[B]DYNV6_HOSTNAME\f[R] the dynv6 hostname. +.PD 0 +.P +.PD +- \f[B]DYNV6_IPV4_ENABLED\f[R] enable or disable updating IPv4. +.PD 0 +.P +.PD +- \f[B]DYNV6_IPV6_ENABLED\f[R] enable or disable updating IPv6. +.PD 0 +.P +.PD +- \f[B]DYNV6_IPV6_INTERFACE\f[R] which interface to track, be sure that +Privacy Extensions are disabled. +.PD 0 +.P +.PD +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.dynv6.conf\f[R] and add +\f[I]DYNV6_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/dynv6\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/memory_usage_alert.1 b/usr/share/man/man1/memory_usage_alert.1 new file mode 100644 index 0000000..f087a41 --- /dev/null +++ b/usr/share/man/man1/memory_usage_alert.1 @@ -0,0 +1,74 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "memory_usage_alert" "1" "January 2023" "memory_usage_alert" "" +.hy +.SH NAME +.PP +memory_usage_alert - Checks available memory and sends out notification +via mail. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]memory_usage_alert\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]memory_usage_alert\f[R] checks available memory and sends out a +mail if certain limits are reached. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]memory_usage_alert\f[R] +tries to read from \f[I]$HOME/.memory_usage_alert.conf\f[R] and +\f[I]/etc/memory_usage_alert.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]MEMORY_USAGE_ALERT_MAIL_ADDRESS=\[lq]\[lq]\f[R] which requires +\f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' command has be +available. +.PD 0 +.P +.PD +.PP +The following are optional or have reasonable defaults: - +\f[B]MEMORY_USAGE_ALERT_THRESHOLD=512\f[R] threshold to warn about (in +\f[I]megabytes\f[R]) +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.memory_usage_alert.conf\f[R] and add +\f[I]MEMORY_USAGE_ALERT_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/memory_usage_alert\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/system-helpers.1 b/usr/share/man/man1/system-helpers.1 index 1d0c0ce..2c1fb85 100644 --- a/usr/share/man/man1/system-helpers.1 +++ b/usr/share/man/man1/system-helpers.1 @@ -1,27 +1,62 @@ -.\" generated with Ronn/v0.7.3 -.\" http://github.com/rtomayko/ronn/tree/0.7.3 -system\-helpers is a collection of helper systemd services, systemd timers and shell scripts for common configuration and tasks like -. -.IP "" 4 -. -.nf - -* checking if systemd services and timers are running -* borgmatic backup -* restic backup -* checking if docker containers are running -* batch docker\-compose upgrades -* docker housekeeping for removing unused docker containers, volumes and images -* dynamic dns update -* update check for pacman -* memory and disk checks -. -.fi -. -.IP "" 0 -. -.P -Provided systemd services mostly support mail notifications if they have failed via systemd_failure_notify\. -. -.P -See \fB/usr/share/doc/system\-helpers\fR for example configurations which should be copied inside $HOME or /etc depending on the helper script\. +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "system-helpers" "1" "January 2023" "system-helpers" "" +.hy +.SH NAME +.PP +system-helpers - Collection of helper systemd services, systemd timers +and shell scripts for common configuration. +Designed for use with ArchLinux, although most scripts should work on +any distribution. +.SH DESCRIPTION +.PP +\f[B]system-helpers\f[R] collection provides the following helpers +.IP \[bu] 2 +checking if systemd services and timers are running (see \f[B]man +systemd_check\f[R]) +.IP \[bu] 2 +borgmatic backup (see exposed systemd services \f[I]borgmatic\[at]\f[R] +which require a valid \f[I]borgmatic.yml\f[R] file in +\f[I]/etc/borgmatic\f[R] or your \f[B]$HOME/.config/borgmatic\f[R]) +.IP \[bu] 2 +restic backup (see \f[I]/usr/share/doc/system-helpers/restic\f[R] for an +example \f[I]mybackup\f[R]) +.IP \[bu] 2 +checking if docker containers are running (see \f[B]man +docker_check\f[R]) +.IP \[bu] 2 +batch docker-compose upgrades (see \f[B]man docker_compose_update\f[R]) +.IP \[bu] 2 +dynamic dns update (see \f[B]man docker_compose_update\f[R]) +.IP \[bu] 2 +memory and disk checks (see \f[B]man disk_space_alert\f[R] and \f[B]man +memory_usage_alert\f[R]) +.IP \[bu] 2 +docker housekeeping for removing unused docker containers, volumes and +images +.IP \[bu] 2 +update check for pacman (ArchLinux specific, see \f[B]man +check_updates\f[R]) +.PP +Provided systemd services mostly support mail notifications if they have +failed via \f[B]systemd_failure_notify\f[R]. +.PP +See \f[I]/usr/share/doc/system-helpers\f[R] for example configurations +which should be copied inside \f[B]$HOME\f[R] or \f[B]/etc\f[R] +depending on the helper script. +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/systemd_check.1 b/usr/share/man/man1/systemd_check.1 new file mode 100644 index 0000000..05bdc5e --- /dev/null +++ b/usr/share/man/man1/systemd_check.1 @@ -0,0 +1,78 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "systemd_check" "1" "January 2023" "systemd_check" "" +.hy +.SH NAME +.PP +systemd_check - Checks a set of systemd services, targets, mounts of +timers, and notifies if their state is not up and running. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]systemd_check\f[R] [CONFIG_FILE (absolute path)] +.SH DESCRIPTION +.PP +\f[B]systemd_check\f[R] checks a set of systemd services, targets, +mounts of timers, and notifies if their state is not up and running. +It comes with systemd services. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, \f[B]systemd_check\f[R] tries +to read from \f[I]$HOME/.systemd_check.conf\f[R] and +\f[I]/etc/systemd_check.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]SYSTEMD_CHECK_LIST_FILE=\[lq]$HOME/.systemd_check.list\[rq]\f[R] +which lists to be checked systemd services, timers or targets separated +by lines. +.PD 0 +.P +.PD +- \f[B]SYSTEMD_CHECK_MAIL_ENABLED=false\f[R] enables or disables sending +mail notifications. +- \f[B]SYSTEMD_CHECK_MAIL_ADDRESS=\[lq]\[lq]\f[R] which requires +\f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' command has be +available. +.PD 0 +.P +.PD +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.systemd_check.conf\f[R] and add +\f[I]SYSTEMD_CHECK_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in \f[I]/usr/share/doc/systemd_check\f[R]. +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek. diff --git a/usr/share/man/man1/systemd_failure_notify.1 b/usr/share/man/man1/systemd_failure_notify.1 new file mode 100644 index 0000000..9605d62 --- /dev/null +++ b/usr/share/man/man1/systemd_failure_notify.1 @@ -0,0 +1,94 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "systemd_failure_notify" "1" "January 2023" "systemd_failure_notify" "" +.hy +.SH NAME +.PP +systemd_failure_notify - Notifies via mail or gotify when a service has +failed. +Configuration is done in environment files. +.PD 0 +.P +.PD +It\[cq]s part of \f[B]system-helpers\f[R]. +.SH SYNOPSIS +.PP +\f[B]systemd_failure_notify\f[R] [CONFIG_FILE (absolute path)] [service +name] +.SH DESCRIPTION +.PP +\f[B]systemd_failure_notify\f[R] executes \f[I]mailx\f[R] or +\f[I]gotify\f[R] to send out notifications. +It comes with systemd services. +Use the provided systemd service in the \f[B]OnFailure\f[R] directive +with \f[I]OnFailure=systemd_failure_notify\[at]%n.service\f[R]. +.PP +If no \f[I]CONFIG_FILE\f[R] is provided, +\f[B]systemd_failure_notify\f[R] tries to read from +\f[I]$HOME/.systemd_failure_notify.conf\f[R] and +\f[I]/etc/systemd_failure_notify.conf\f[R] for configuration. +It will exit with a non-zero exit code if it cannot find an proper +configuration file. +.PP +The following are at least required for the script to work: +.PD 0 +.P +.PD +- \f[B]SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS=\[lq]\[lq]\f[R] which +requires \f[I]mail.rc\f[R] to be configured and `\f[I]mailx\f[R]' +command has be available\[ac] +.PP +By default, \f[B]SYSTEMD_FAILURE_NOTIFY_MAIL_ENABLED\f[R] is set to +\f[B]true\f[R]. +Set it to \f[B]false\f[R] to use \f[I]gotify\f[R] only.\[ac] +.PP +The following are optional and integrate gotify-cli to send +notifications, it defaults to false: - +SYSTEMD_FAILURE_NOTIFY_GOTIFY_ENABLED=\[lq]true\[rq] // `gotify' command +has be available and needs to be properly configured by having a +cli.json file +.PP +You can copy this script to \f[I]/usr/local/bin\f[R] and use create a +custom \f[B]CONFIG_FILE\f[R] as user. +.SH EXAMPLE +.PP +Create a \f[I]$HOME/.systemd_failure_notify.conf\f[R] and add +\f[I]SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS=\[lq]alias\[at]domain.tld\[rq]\f[R]. +Notifications will be delivered to alias\[at]domain.tld. +Examples can be found in +\f[I]/usr/share/doc/systemd_failure_notify\f[R]. +.PP +Then, add \f[B]systemd_failure_notify\[at]serviceName\f[R] in a systemd +unit file in the \f[B]OnFailure\f[R] directive: +.PP +[Unit] +.PD 0 +.P +.PD +OnFailure=systemd_failure_notify\[at]%n.service +.PD 0 +.P +.PD +.SH EXIT VALUES +.TP +\f[B]0\f[R] +Success +.TP +\f[B]1\f[R] +Error +.SH AUTHORS +Alexander Sch\[:a]ferdiek.