Einfaches WordPress Backup via Bash-Script

Bevor ich beim nächsten Fall schon wieder alles einzeln zusammensuche, hier eine kleine und schnelle Copypasta aus dem Admin-Alltag:

Sicherung einer WordPress-Instanz

Achtung: WordPress wird damit zwar vollständig eingepackt und die Datenbank gesichert, aber es gibt keine Fehlerbehandlung (Datei existiert bereits …) und auch keinen CSRF-Schutz. Die Kommandozeilen-Argumente werden un-escaped ausgeführt.

⚠ Das Backup landet automatisch in ~/priv wenn man den zweiten Parameter weglässt.

Syntax:

./wordpress-backup.sh /var/www/path-to-wordpress

Code:

#!/bin/bash
#
# SEHR einfaches WordPress-Backup

# Commandline-Argumente da?
if [ $# -eq 0 ]; then
    echo "SYNTAX: wordpress-backup.sh <path-to-WordPress> <path-to-BackupFolder> [dbonly]"
    exit 1
fi

wpdir=$1
bakdir=$2

# Backupverzeichnis angegeben?
if [ -z "$bakdir" ]; then
    bakdir="~/priv"
fi

# Verzeichnisse da?
if [ ! -d $wpdir ]; then
    echo "Directory $wpdir does not exist."
    exit 1
fi
if [ ! -d $bakdir ]; then
    echo "Directory $bakdir does not exist."
    exit 1
fi

# Sinnvolle Dateinamen zusammenbauen
db_backup_name="wp-db-backup-"`date "+%Y%m%d"`".sql.gz"
wpfiles_backup_name="wp-files-backup-"`date "+%Y%m%d"`

# Zugangsdaten aus der config suchen
db_name=`grep DB_NAME $wpdir/wp-config.php | cut -d \' -f 4`
db_username=`grep DB_USER $wpdir/wp-config.php | cut -d \' -f 4`
db_password=`grep DB_PASSWORD $wpdir/wp-config.php | cut -d \' -f 4`

# MySQLdump, gzip
mysqldump --opt -u$db_username -p$db_password $db_name | gzip > $bakdir/$db_backup_name

# Nur wenn der dbonly Parameter nicht gesetzt ist
if [ ! "$3" = "dbonly" ]; then
    # WordPress einpacken
    tar -czvf $bakdir/$wpfiles_backup_name.tar.gz $wpdir

    # Oder als zip:
    #zip -r $bakdir/$wpfiles_backup_name $wpdir
fi

„GParted Bug: Eine Partition kann nicht (xxx) nach dem Ende des Laufwerks enden (%2)“

Problem

GParted beschwert sich bei der Anpasung von Partitionsgrößen: „GParted Bug: Eine Partition kann nicht (xxx) nach dem Ende des Laufwerks enden (%2)“

Die gleiche Meldung gibt es auch auf Englisch: „GParted Bug: A partition cannot end after the end of the device (%2)“

Das tritt beim resizing oder verschieben einer Partition auf, obwohl noch genug Platz da ist und das Ende des Laufwerks noch nicht erreich scheint.

Lösung

Der Fehler (Bug) liegt in der Berechnung der Partitionsgrenzen bei der Verwendung des Binärpräfixe gemäß IEC (MiB/KiB …). Man stelle den Dialog also einfach einfach auf „Zylinder“ (Cylinder) um, schon funktioniert die selbe Operation fehlerfrei.

CUPS: Alle Drucker auf einmal aktivieren

Nach einem abgeschlossenen „dist-upgrade“ sind konfigurierte CUPS Drucker gerne mal deaktiviert („disabled“). Man kann einen Drucker nach dem anderen natürlich manuell einschalten („enable“), aber schöner wäre es die ganze Liste auf einmal zu aktivieren. Dafür gibt es das tool „cupsenable„.

Die konfigurierten Drucker zeigt „lptstat -t“ an.

Liste inaktiver Drucker anzeigen

lpstat -t | grep disabled | awk '{ print $2; }'

Alle diese Drucker aktivieren

lpstat -t | grep disabled | awk '{ print $2; }' | xargs -I{} cupsenable {}

Debian GNU/Linux 9 (stretch) Zeit via NTP synchronisieren

Dies ist wieder einer von diesen „jedesmal-google-ich-das-wieder“ Schnippsel, die hoffentlich beim nächsten mal Zeit sparen.

Ein Debian stretch Server soll die aktuelle Zeit von einem [internen] NTP (NTPS) Server bekommen.

# NTP installieren
root@rabbithole:~# apt install ntp

# In der /etc/ntp.conf den lokalen NTP-Dienst konfigurieren
root@rabbithole:~# vi /etc/ntp.conf


  # Zeitquellen
  server MYNTP1.MEINEDOMA.IN
  server MYNTP2.MEINEDOMA.IN
  # Darf lokal genutzt werden
  restrict lo
  # Soll NTP *NICHT* nach außen (*:123) zur Verfuegung stellen
  interface ignore wildcard
  interface listen lo

# NTP restart
root@rabbithole:~# systemctl restart ntp

# NTP, config und Zeitserver testen
root@rabbithole:~#  ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
MYNTP1.MEINEDOMA.IN 352.29.139.27     3 u    9   64    3    0.485    7.615   1.192
MYNTP2.MEINEDOMA.IN 392.468.0.10      4 u   11   64    3    0.438   14.571   0.182



Linux (SuSE/Debian/RedHat) 802.1q VLAN-Interfaces erstellen und IP-Adressen vergeben

Dies ist mal wieder eine dieser „schnellen Notizen“, weil ich das jetzt ständig neu nachschlagen musste. 802.1q VLANs unter Linux werden in der Regel an ein bestehendes (physisches) Interface gebunden und stehen dann als Unterinterface mit einem Punkt (bzw. in „ip addr“ mit einem @-Zeichen) getrennt zur Verfügung.

Ein neues VLAN Interface unter Linux erstellen

Das Interface eth1 ist das physische Interface und eth1.3 wird das zugehörige VLAN-Interface (VLAN ID 3):


ip addr add 192.168.100.23/24 dev eth1
ip link set dev eth1 up
ip link add dev eth1.3 link eth1 type vlan id 3

Das Interface eth1.3 hat so noch keine IP-Adresse.

Ein VLAN Interface unter Linux konfigurieren

Das Interface eth1.3 wird mit einer IP-Adresse konfiguriert:


ip addr add  172.16.3.1/24 dev eth1.3
ip link set dev eth1.3 up

Der Netzwerverkehr für 172.16.3.0/24 passiert dann nun auf eth1.3, wird also direkt mit der VLAN ID=3 getaggt. Die Route für das Linklokale Netzwerk wird, wie bei Physischen Interfaces auch,  automatisch hinzugefügt.

Ein VLAN Interface unter Linux entfernen

Wenn man es nicht mehr braucht, kann es auch wieder gelöscht werden:


ip link set dev eth1.3 down
ip link delete eth1.3 type vlan