Archive for category Server

How to check, if there is an update for mailcow

Let us assume that mailcow (dockerized) is installed in the directory /opt/mailcow-dockerized, then the script below checks, if there is an update and sends an email to the hostmaster:

set -o nounset
set -o errexit

cd /opt/mailcow-dockerized && ./ --check > /dev/null

[ $exit_code -eq 0 ] && echo -e "Subject:MAILCOW: Update available \n\n Update your mailcow instance please!\n" | sendmail
exit 0

The scrip can be run as cron.

Leave a comment

MySQL: backup databases in separate files and zip it to STDOUT

It’s not very comfortable to restore one database, if you have just one big fat backup file, which contains all databases.

My solution is the bash script above does the following steps:

  1. It crreates one dump file for each database.
  2. It packs all dump files in one zipfile
  3. and sends it to STDOUT.

Step 3 is very helpful e.g. for using this script with backup software like rsnapshot.

## Dumps every database to a single file, all dump files will be zipped and redirected to the stdout.
## Usage: >
#! /bin/bash
set -o nounset
set -o errexit

trap 'rm -rf "$BACKUP_DIR"' EXIT
BACKUP_DIR=$(mktemp -d)

databases=`$MYSQL --defaults-extra-file=/etc/mysql/credentials.cnf --default-character-set=utf8mb4 -e "SHOW DATABASES;" \
        | grep -Ev "(Database|information_schema|performance_schema)"`
for db in $databases; do
  $MYSQLDUMP --defaults-extra-file=/etc/mysql/credentials.cnf --default-character-set=utf8mb4 --force --opt --databases $db \
        > "$BACKUP_DIR/$db.sql"
zip -rjq - "$BACKUP_DIR"
exit 0

The corresponding gist at github:

, ,

Leave a comment

dnsmasq and logrotate on ubuntu 20.04

I had same issues with dnsmasq and logrotate on ubuntu 20.04. Here is my solution:

In /etc/dnsmasq.conf the following entry is required:


Create /etc/logrotate.d/dnsmasq with the following content:

/var/log/dnsmasq/dnsmasq.log {
   size 100M
   rotate 7
      service dnsmasq restart

The important thing was the restart of dnsmasq!

, ,

Leave a comment

How to check the expiration date of a ssl certificate?

To check a certificate of an host:

openssl s_client -servername your.domain -connect your.domain:443 2>&- | openssl x509 -enddate -noout | sed 's/^notAfter=//g'

To check a certificate file:

openssl x509 -noout -enddate -in your.crt | sed 's/^notAfter=//g'



Leave a comment

Apache failed on system boot, when binding to an additional IP

Starting point:

My system (Ubuntu 18.04.1) is a VPS running on KVM. The network with some additional IPs is configured with Netplan.



The Apache server is running on an additional IP. If the VPS reboots, the apache didn’t start because, it couldn’t be bind on an aditional IP. A log entry like the following can be found:
apachectl[631]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to address [xxxxxxxx]:80

But if you restart Apache after the reboot, it runs as expected!
Strange, isn’t it?



Ok, I couldn’t find the exact reason of this reason. But I think, there is a strange timing issue on reboot. The network isn’t completely up before Apache is starting.

To solve the problem, just edited the section ‘Unit’ in the file /lib/systemd/system/apache2.service and replace


That’s it!

More information about the network-target can be found her:

, ,

Leave a comment