Erster Test von Ubuntu 18.04 LTS

Ich habe mir gerade den RC (Release Candidate) von Ubuntu 18.04 LTS angesehen. Das LTS steht bei Ubuntu für Long Term Support und bedeutet, dass es 5 Jahre lang Sicherheitsupdates für die Release von Ubuntu geben wird. Die LTS Version erscheint aktuell alle zwei Jahre und ist durch den langen Zeitraum mit Sicherheitsupdates besonders für Server interessant.

Upgrade auf die neue Version von Ubuntu

Da bei einem Release Candidate ein Einsatz in der Produktion noch nicht sinnvoll ist, gibt es bei den üblichen Hostern und Rechenzentren aktuell natürlich noch kein Image für die Installation des neuen Ubuntu 18.04. Um es dennoch auf einen Server zu bekommen, muss man eine älter Installation aktualisieren. Um die neue Version von Ubuntu auf einen Server in einem Rechenzentrum zu bekommen, habe ich einfach bei einem Server mit einer Installierten Version 16.04 LTS die Datei /etc/apt/sources.list editiert und alle „xenial“ durch „bionic“ ersetzt.

#######################################################################################
# Hetzner APT-Mirror
#
deb http://mirror.hetzner.de/ubuntu/packages  bionic           main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages  bionic-backports main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages  bionic-updates   main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/security  bionic-security  main restricted universe multiverse
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial main restricted
 
## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial universe
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
 
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
 
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu xenial partner
 
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

Danach noch ein schnelles Update der lokalen Paketquellen mit dem folgenden Befehl.

sudo apt update

Und und schon konnte ich die Aktualisierung auf Version 18.04 LTS starten.

sudo apt dist-upgrade

Nachdem die Installation durchgelaufen war und ich den Server neu gestartet hatte, begrüßte mich der Login der neuen Ubuntu Version mit „Welcome to Ubuntu Bionic Beave“.

Mein erster Eindruck

Ubuntu hat wie üblich bei der LTS Version keine großen Experimente gewagt und aller Komponenten auf den aktuellen Stand gebracht. Cononical legt den Fokus bei den LTS-Versionen auf die Stabilität. Dies sieht man z. B. an dem X-Server. Als X-Server kommt immer noch der X-Server von x.org zu Einsatz, obwohl Canonical auf den schnelleren und moderneren X-Server Wayland setzt. Auf die Einführung des neuen Wayland wurde bei Ubuntu 18.04 LTS aber noch bewußt verzichtet, da es bei Wayland mit einigen X-Anwndungen noch Probleme gibt.

Alle Kernkomponenten und auf den aktuellen Stand gebracht worden. In der folgenden Tabelle habe ich mal einige Versionen von Kernkomponenten im Vergleich zu der vorherigen LTS-Version 16.04 zusammengefasst, die für mich immer besonders wichtig sind.

Softwarename Version bei 16.04 LTS Version bei 18.04 LTS
gcc (The GNU Compiler Collection) 5.4 7.3
Apache 2.4.18 2.4.29
php 7.0 7.2
perl 5.22.1 5.26.1
python  3.5.2 3.6.5
MariaDB 10.0.34  10.1.29

Fazit

Das neue Ubuntu 18.04 LTS macht einen soliden und stabilen Eindruck. Alle für mich wichtigen Komponenten wurden auf den aktuellen Stand gebracht und es gab für mich keine großen Überraschungen. Einige Geschwindigkeitstests mit Rechenintensiven Aufgaben haben ergeben, dass das neue Ubuntu um ca. 3-5 % schneller geworden ist. Dies dürfte an dem deutlich neueren GCC liegen. Insgesamt hat Canonical also ein etwas neueres, ein etwas umfangreicheres und ein etwas schnelleres LTS an den Start gebracht. Wenn sich das System in der Praxis jetzt noch als stabil erweist, hat Cononical einen guten Job gemacht.

Bei einem Linux unter VMware im laufenden Betrieb eine Festplatte einbinden

Oft ergibt sich die Notwendigkeit auf einem Server mit Linux im laufenden Betrieb eine neue Festplatte anzuschließen. Z.B. wenn der Server virtuell unter VMware läuft und man diesem eine neue Festplatte zuordnet hat und diese ohne Neustart des Servers einbinden möchte.

Um dies bei einem Server mit Linux zu machen benötigt man als erstes die Nummer des HBA (Host Bus Adapter). Diese findet man am besten über das sysfs raus.  Jeder HBA hat ein Verzeichnis unterhalb des Ordners /sys/class/scsi_host/.  Der HBA mit der Nummer 0 hat somit den Ordner /sys/class/scsi_host/host* usw.. In jedem dieser Ordner existiert eine Datei mit dem Namen proc_name. In dieser befindet sich der name des Treibers des jeweiligen HBA. Mit dem Wissen das der Treiber für den LSI Controller von VMware mptspi heißt, muss man jetzt nur noch den HBA, der einen Treiber mit diesem Namen hat. Um nicht in allen Dateien von Hand nachzusehen, kann man dies am besten den Befehl grep fürs ich erledigen lassen. Mit dem folgten Befehlt erhält man eine Ausgabe aller HBA, die die Buchstabenfolge mpt enthalten.

grep mpt /sys/class/scsi_host/host*/proc_name

Wenn die Ausgabe wie folgt aussieht, hat der HBA die Nummer 32.

/sys/class/scsi_host/host32/proc_name:mptspi

Nachdem man die Nummer des HBA rausgefunden hat, muss man den HBA seine Geräte neu scannen lassen. Mit dem folgenden Befehl bittet man den HBA mit der Nummer 32, seine Geräte im laufenden Betrieb neu zu scannen.

echo "- - -" > /sys/class/scsi_host/host32/scan

Danach sollte man mit dmesg sich die Kernelmeldungen ausgeben lassen. Ganz unten bei der Ausgabe sollte der Fund der neuen Festplatte gemeldet werden. Wenn die letzten Zeilen z.B. wie folgt aussehen, ist die Festplatte als Device /dev/sdb von Linux erkannt worden.

Mar  1 14:52:07 portal kernel: [ 1287.033631] scsi 32:0:1:0: Direct-Access     VMware   Virtual disk     2.0  PQ: 0 ANSI: 6
Mar  1 14:52:07 portal kernel: [ 1287.033641] scsi target32:0:1: Beginning Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034017] scsi target32:0:1: Domain Validation skipping write tests
Mar  1 14:52:07 portal kernel: [ 1287.034020] scsi target32:0:1: Ending Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034046] scsi target32:0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 127)
Mar  1 14:52:07 portal kernel: [ 1287.034346] sd 32:0:1:0: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
Mar  1 14:52:07 portal kernel: [ 1287.034422] sd 32:0:1:0: [sdb] Write Protect is off
Mar  1 14:52:07 portal kernel: [ 1287.034425] sd 32:0:1:0: [sdb] Mode Sense: 61 00 00 00
Mar  1 14:52:07 portal kernel: [ 1287.034444] sd 32:0:1:0: [sdb] Cache data unavailable
Mar  1 14:52:07 portal kernel: [ 1287.034447] sd 32:0:1:0: [sdb] Assuming drive cache: write through
Mar  1 14:52:07 portal kernel: [ 1287.034908] sd 32:0:1:0: Attached scsi generic sg2 type 0
Mar  1 14:52:07 portal systemd-udevd[1657]: Process '/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'' failed with exit code 2.
Mar  1 14:52:07 portal kernel: [ 1287.042034] sd 32:0:1:0: [sdb] Attached SCSI disk

Wenn die Festplatte als /dev/sdb erkannt wurde, können wir mit dem einrichten einer Partition weiter machen. Dazu muss zunächst eine Partitionstabelle auf der Festplatte angelegt und dann eine Partition erstellt werden. Dies kann man für die Festplatte /dev/sdb aus unserem Beispiel z.B. mit dem folgenden Befehlt erreichen.

cfdisk /dev/sdb

Nach eingäbe dieses Befehlt wird man zunächst gefragt welche Partitionstabelle man anlegen möchte. Ich empfehle die neuere und modere gpt anstelle der älteren dos zu wählen. Danach kann man in einem kleinen Menü eine neue Partition anlegen und speichern. Auf dieser Partition kann man dann mit mkfs ein Dateisystem anlegen und dieses kann man dann mit dem Befehlt mount in das laufende Linux einbinden. Und voilà, die neue Platte steht ohne Neustart zur verfügung.

VMware-Tools oder lieber open-vm-tools verwenden?

Die VMware-Tools sind Programme und Treiber, mit denen die Gastbetriebssysteme in einer virtuellen Maschine unter VMware zusätzliche Funktionalitäten erhalten. Durch diese wird die Arbeit erleichtert und die Leistung verbessert. Seit dem Jahr 2007 hat VMware weite Teile der VMware Tools als Open Source Software unter dem Namen open-vm-tools (Open Virtual Machine Tools) freigegeben.

Bei aktuellen Linux Distributionen sind die open-vm-tool in den Repositorys enthalten und können bequem über das Paket Management installiert werden.  Bei Ubuntu sind die open-vm-tools z.B. seit Version 14.04 mit dabei. Bei Debian ab der Version 7.

Bei der Installation eines Gastbetriebssystems stellt sich somit heute immer die Frage: Soll man die originalen VMware-Tools oder die open-vm-tools der jeweiligen Distribution installieren?

VMware empfiehlt in dem Knowledge Base Artikel 2073803 nach Möglichkeit die bei den Linux-Distributionen mitgelieferten open-vm-tools und nicht die VMware Tools von VMware zu verwenden. Hier heißt es dazu: „VMware recommends using OVT redistributed by operating system vendors.“

Fazit

Wenn man Linux als Betriebssystem bei einer virtuellen Maschine unter VMware verwendet, sollte man wenn möglich immer die open-vm-tools aus den Repositorys der verwendeten Distribution benutzen. Bei Windows und Linux-Distributionen die keine open-vm-tools in ihrem Repository bereitstellen, sollte man die WMware-Tools von VMware installieren.

Einzelnachweise

Installationsanleitungen

Gebrauchte Hardware kaufen

Muss man immer neue Hardware kaufen? Nach meine Meinung muss es nicht immer ein neues Produkt sein. Für die Umwelt und den eigenen Geldbeutel ist es oft besser ein gebrauchtes Produkt zu erwerben. Dank dem Internet ist es heute so einfach wie nie zuvor gebrauchte Hardware zu kaufen. In vielen großen Webshops gibt es einen extra Bereich für den Gebrauchtkauf.

In diesem Beitrag habe ich eine Tabelle mit den Links zu  Webseiten mit gebrauchten Artikeln zusammengestellt. Dabei habe ich mich auf die Webseiten konzentriert, bei denen ich bereits gebrauchte Artikel gekauft und damit gute Erfahrungen gemacht habe. Zudem aktualisiere ich die Tabelle in diesem Artikel, damit diese immer auf dem aktuellen Stand bleibt. Wenn jemand noch einen guten Online-Shop kennt, kann er mir gerne schreiben. Dann nehme ich den Shop in die Liste mit auf.

Link zu der Webseite Name Welche Artikel werden angeboten
https://www.alternate.de Alternate Outlet Technische Geräte aller art
https://www.amazon.de Amazon Renewed Technische Geräte aller art
https://www.calumetphoto.de Calumet Second Hand Foto- und Videozubehör
https://www.ebay.de eBay Alles mögliche
https://www.itsco.de ITSCO Technische Geräte aller art

Test einer Synology DS416play mit DSM 6.1

Synology DS416play

Die taiwanische Firma Synology wurde im Jahr 2000 von den ehemaligen Microsoft Managern Cheen Liao und Philip Wong gegründet und hat sich zum Ziel gesetzt Network Attached Storage-Geräten (kurz NAS) mit umfangreicher Software auf Basis von Linux zu bauen. Dabei nennt Synology die Hardware DS (DiskStation) und die Software DSM (DiskStation Manager).

Als ich vor 10 Jahren die ersten NAS (Network Attached Storage) Geräte von Synology eingerichtet habe, war ich bereits überrascht wir groß der Funktionsumfang der Software und die Anpassungsmöglichkeiten dieser Geräte waren. Man merkte den Geräten aber an, dass sie eher für kleinere Firmen und den privaten Gebrauch gebaut wurden. Für den Einsatz in großen Firmennetzen waren sie noch nicht reif.

Inzwischen hatte ich einige Jahre keine Synology mehr in der Hand und es wurde höchste Zeit, sich so ein Gerät mit der aktuellen Software mal wieder näher anzuschauen. Als zudem noch mein Speicherplatz für das Backup meiner privaten Daten knapp wurde, beschoss ich mir ein aktuelles NAS der Firma Synology zuzulegen und dieses genauestens unter die Lupe zu nehmen.

Welches NAS von Synology ist für mich das beste?
Zunächst stellte sich die Frage, welches der aktuellen NAS-Geräte von Synology am ehesten für meine Bedürfnissen passt. Synology bietet inzwischen über 20 unterschiedliche NAS Geräte an, die für verschiedenste Einsatzzwecke ausgelegt sind. Es gibt sowohl für den Privatanwender als auch für Firmen verschiedener Größenordnungen passende Geräte zu finden. Für mich persönlich war eine große Speicherkapazität und ein geringer Stromverbrauch wichtig. Außerdem wollte ich gerne eine etwas leistungsfähigere CPU, um 4k Videos von dem NAS auf den Fernseher übertragen zu können. Nach einer Recherche im Internet entschied ich mich für das Model DS416play welches es aktuell bei Amazon für 442,19- € gibt. Es kann mit vier Platten bestückt werden und bringt eine etwas leistungsstärkere CPU mit. Mit vier Festplatten mit einer Größe von 4 TB und der Verwendung eines RAID (Redundant Array of Independent Disks) mit einer Festplatte für Redundanz erhält man über 10 TB Speicherplatz. Für meine privaten Zwecke ist das zunächst ausreichend. Zudem reicht die CPU der DS416play, um 4k Videos zum Fernseher zu übertragen.

Zusammenbauen und einrichten
Das zusammenbauen und einrichten des NAS ist für jemanden mit Computerkenntnissen schnell erledigt. Die Festplatten können ohne Schrauben eingebaut werden. Sobald man das Gerät anschaltet, holt es sich eine IP-Adresse per DHCP und ist über die URL http://diskstation:5000 erreichbar. Wenn man diese URL im Browser aufruft, landet man auf dem Desktop des DSM (DiskStation Managers). Dort kann man in der Systemsteuerung die Konfiguration des Gerätes vornehmen. Die vier von mir verbauten Festplatten hatte das NAS bereits automatisch zu einem SHR1 (Synology Hybrid RAID) zusammengefasst. Bei Bedarf kann das NAS natürlich auch andere RAID-Arten. Das SHR1 dürfte für die meisten aber auch das geeignetste RAID sein, da es am flexibelsten ist. Danach ist das Gerät prinzipiell einsatzbereit. Es gibt natürlich noch haufenweise kostenlose und kostenpflichtige Zusatzsoftware, die man über das sogenannte „Paket-Zentrum“ installieren kann. Ähnlich wie bei einem iPhone, ist das NAS damit nach Bedarf erweiterbar und kann zu einem kleinen Server mit diversen Funktionalitäten ausgebaut werden.

Fazit
Die NAS Systeme von Synology sind extrem erweiterbar, haben ein sehr gutes Preis-Leistung-Verhältnis und sind fast schon kleine Applikationsserver mit diversen Funktionen. Für den privaten Gebrauch und für kleine Firmen sind sie völlig ausreichend und mehr Leistung und mehr Funktionen sind für das Geld nicht zu bekommen. Ich kann diese Geräte sehr empfehlen.

Wenn man möchte gibts die Synology DS416play bei Amazon auch bereits bestückt mit Festplatten. Die Variante mit 12 TB Speicherplatz kostet bei Amazon aktuell z.B. gerade 995,- €.

Vielen Dateien eine andere Dateiendung geben

Ab und zu hat man bei der Administration die Aufgabenstellung vielen Datei eine andere Dateiendung zu geben. Hier eine kleine Programmzeile, mit der man diese Aufgabe sehr erleichtern kann. Mit dieser kann man unter Linux oder MacOSX an alle Dateien in einem Verzeichnis die Dateiendung „.pdf“ anhängen.

ls * | cat | while read n; do mv "$n" "$n.pdf"; done

Große Mengen an Dateien per Kommandozeile mit FTP löschen

Eine häufige Aufgabenstellung bei einem Dateitransfer per FTP (File Transfer Protocol) ist das löschen von großen Mengen von Dateien per FTP. Bei einem FTP-Client mit GUI ist dies mit wenigen Klicks gemacht. Wenn man das ganze jedoch per Kommandozeile mit dem Befehlt mdel machen möchte, ist dies mit der Schwierigkeit verbunden, dass der Befehl mdel bei jeder Datei nachfragt, ob er diese wirklich löschen soll. Dies kann bei vielen Dateien sehr anstrengend werden.

Wenn man jetzt nach einem Parameter sucht, der den Befehlt mdel dazu bringt ohne eine Nachfrage alle Dateien zu löschen, wird man nicht fündig. Dies liegt daran, dass es diesen gar nicht gibt.

Man kann das Problem aber dennoch anders lösen. Und zwar in dem man als erstes den Befehlt prompt eingibt. Dieser stellt den „interactive mode“ auf off. Dadurch laufen alle FTP-Befehle ohne Rückfragen oder Rückmeldungen. Somit läuft auch der Befehlt mdel, ohne bei jeder Datei nachzufragen, ob er diese wirklich löschen soll.

Reparatur eines Servers mit Ubuntu oder Debian bei Hetzner

Des öfteren habe ich einen Linux-Server in einem Rechenzentrum der nicht mehr bootet und bei dem man nicht direkt auf den Monitor schauen kann. Bei dem Anbieter Hetzner ist es z.B. so, dass zunächst ein Gerät an den Server angeschlossen werden muss, bevor man das Monitorbild des Servers angezeigt bekommt. Dies dauert etwas länger und man verliert wertvolle Zeit.

Wesentlich schneller ist man bei Hetzner, wenn man das Rescue-System bootet und von diesem aus den Server untersucht. Dazu muss man nur über die Management-Webseite von Hetzner das Rescue-System aktivieren und den Server rebooten.

Im folgenden habe ich mir ein paar nützliche Befehle notieret, mit denen man im Rescue-System den Server untersuchen und reparieren kann. Damit habe ich diese im Notfall immer schnell zur Hand und muss nicht lange im Wiki von Hetzner suchen.

Überprüfung des RAID (Plattenspiegelung)
mit dem Befehl cat /proc/mdstat kann man sich den Status des RAID-Systems ausgeben lassen. Dies ausgäbe sollte dann wie folgt aussehen, wenn alles o.k. ist.

root@rescue ~ $ cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0] sdb3[1]
      1936077760 blocks super 1.2 [2/2] [UU]
 
md1 : active raid1 sda2[0] sdb2[1]
      523968 blocks super 1.2 [2/2] [UU]
 
md0 : active raid1 sda1[0] sdb1[1]
      16768896 blocks super 1.2 [2/2] [UU]

Filesystem-Check
Mit dem Befehlt fsck /dev/md1 und fsck /dev/md2 kann man dann die Filesysteme prüfen lassen. Wenn diese heil sind, sollte die Ausgabe wie folgt aussehen.

root@rescue ~ $ fsck /dev/md1
fsck from util-linux 2.25.2
e2fsck 1.42.12 (29-Aug-2014)
/dev/md1: recovering journal
/dev/md1: clean, 313/131072 files, 125273/523968 blocks
root@rescue ~ $ fsck /dev/md2
fsck from util-linux 2.25.2
e2fsck 1.42.12 (29-Aug-2014)
/dev/md2: recovering journal
Setting free blocks count to 440126453 (was 440126531)
/dev/md2: clean, 5444918/121012224 files, 43892987/484019440 blocks

Erneutes schreiben des Boot-Blocks
Oft ist auch nur der Boot-Block auf der Festplatte nicht vorhanden, oder beschädigt. Mit den folgenden Befehlen kann man diesen neu schreiben.

mount /dev/md2 /mnt
mount /dev/md1 /mnt/boot
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
cp /proc/mounts /mnt/etc/mtab
chroot /mnt /bin/bash
grub-install /dev/sda
grub-install /dev/sdb
grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb
mkdir /run/lock
cp /proc/mounts /etc/mtab
update-grub

10 Jahre Purrucker Blog und ein moderneres Layout

dsc_9873Mein alter Technik-Blog feiert seinen zehnten Geburtstag. Somit hatte er ziemlich genau 10 Jahren das gleiche Layout. Im Internet ist das eine Ewigkeit. Außerdem störte mich zunehmend der für Smartphones und Tabletts nicht ganz optimale Aufbau der Menüs und Widgets. Deshalb habe ich den Blog auf ein neues und moderneres Layout mit einem Responsive Webdesign umgestellt. Damit ist der Blog jetzt auch optimal auf mobilen Geräten zu lesen.

Backup mit duply

Seit geraumer Zeit sichere ich meine Linuxserver am liebsten mit der Software duply. Der Name duply ist die Abkürzung von „simple duplicity“. Wie der Name schon verrät, wurde diese Software entwickelt, um das komplexe aber gleichzeitig auch leistungsfähige Backupframework duplicity einfach bedienbar zu machen. Und dies ist meiner Meinung nach auch hervorragend gelungen.dsc_9889

In diesem Artikel blogge ich die einzelnen Schritte, mit denen ich ein duply auf einem Debian 8 oder Ubuntu 16.04 einrichte.

Als erstes muss duply und ein brauchbares FTP-Programm für die Datenübertragung installiert werden.

apt-get install duply
apt-get install lftp

Danach muss ein zentrales Verzeichnis für die Konfiguration unter /etc angelegt und danach eine Backup-Konfiguration erstellt werden. Es ist wichtig, dass das Verzeichnis als erstes angelegt wird, da duply die Konfiguration sonst in das home-Verzeichnis und nicht unter /etc ablegt. Als Namen für die Konfiguration wähle ich immer den vollen Hostnamen. Dies ist zumeist eindeutig und läßt sich im Nachhinein leichter Skripten.

mkdir /etc/duply
duply hostname.domain.de create

Danach erzeugt man sich einen GPG-Schlüssel.

gpg --gen-key

Sofern man einen bereits existierenden GPG-Schlüssel verwenden möchte, kann man natürlich auch Schlüssel in GPG importieren. Dabei sollte man dann aber nicht vergessen, neben dem öffentlichen auch den privaten Schlüssel und die Ownertrusts zu importieren. Ich habe die beiden Schlüssel und die Ownertrusts für diese Zwecke immer in drei Dateien mit den Namen backup-key.asc, backup-secret-key.asc und backup-ownertrusts.asc. Diese brauche ich dann nur übermitteln und importieren.

gpg --import backup-key.asc
gpg --import backup-secret-key.asc
gpg --import-ownertrust backup-ownertrusts.asc

Sobald man den Schlüssel angelegt oder importier hat, läßt man sich die Public-Key-ID des GPG-Schlüssels anzeigen. Diese muss man nämlich später in die Konfiguration von duply eintragen, damit die Backups mit GPG verschlüsselt werden. Dies führt zu einer zusätzlichen Datensicherheit, die gerade bei FTP-Servern im Internet zu empfehlen ist.

gpg --list-keys

Danach passt man die Konfiguration von duply entsprechend an.

cd /etc/duply/hostname.domain.de/
vi conf

Die Datei sollte ungefähr wie folgt aussehen. Dabei muss die Schlüssel-ID und die FTP-VErbindung natürlich auf die eigene Umgebung angepasst werden.

# gpg encryption settings, simple settings:
#  GPG_KEY='disabled' - disables encryption alltogether
#  GPG_KEY='<key1>[,<key2>]'; GPG_PW='pass' - encrypt with keys,
#   sign if secret key of key1 is available use GPG_PW for sign & decrypt
#  Note: you can specify keys via all methods described in gpg manpage,
#        section "How to specify a user ID", escape commas (,) via backslash (\)
#        e.g. 'Mueller, Horst', 'Bernd' -> 'Mueller\, Horst, Bernd'
#        as they are used to separate the entries
#  GPG_PW='passphrase' - symmetric encryption using passphrase only
GPG_KEY='1234567'
GPG_PW='Hier kommt das Passwort fuer den eigenen key hin'
# gpg encryption settings in detail (extended settings)
#  the above settings translate to the following more specific settings
#  GPG_KEYS_ENC='<keyid1>[,<keyid2>,...]' - list of pubkeys to encrypt to
#  GPG_KEY_SIGN='<keyid1>|disabled' - a secret key for signing
#  GPG_PW='<passphrase>' - needed for signing, decryption and symmetric
#   encryption. If you want to deliver different passphrases for e.g.
#   several keys or symmetric encryption plus key signing you can use
#   gpg-agent. Simply make sure that GPG_AGENT_INFO is set in environment.
#   also see "A NOTE ON SYMMETRIC ENCRYPTION AND SIGNING" in duplicity manpage
# notes on en/decryption
#  private key and passphrase will only be needed for decryption or signing.
#  decryption happens on restore and incrementals (compare archdir contents).
#  for security reasons it makes sense to separate the signing key from the
#  encryption keys. https://answers.launchpad.net/duplicity/+question/107216
#GPG_KEYS_ENC='<pubkey1>,<pubkey2>,...'
#GPG_KEY_SIGN='<prvkey>'
# set if signing key passphrase differs from encryption (key) passphrase
# NOTE: available since duplicity 0.6.14, translates to SIGN_PASSPHRASE
#GPG_PW_SIGN='<signpass>'
 
# uncomment and set a file path or name force duply to use this gpg executable
# available in duplicity 0.7.04 and above (currently unreleased 06/2015)
#GPG='/usr/local/gpg-2.1/bin/gpg'
 
# gpg options passed from duplicity to gpg process (default='')
# e.g. "--trust-model pgp|classic|direct|always"
#   or "--compress-algo=bzip2 --bzip2-compress-level=9"
#   or "--personal-cipher-preferences AES256,AES192,AES..."
#   or "--homedir ~/.duply" - keep keyring and gpg settings duply specific
#   or "--pinentry-mode loopback" - needed for GPG 2.1+ _and_
#      also enable allow-loopback-pinentry in your .gnupg/gpg-agent.conf
#GPG_OPTS=''
 
# disable preliminary tests with the following setting
#GPG_TEST='disabled'
 
# backend, credentials & location of the backup target (URL-Format)
# generic syntax is
#   scheme://[user[:password]@]host[:port]/[/]path
# eg.
#   sftp://bob:secret@backupserver.com//home/bob/dupbkp
# for details and available backends see duplicity manpage, section URL Format
#   http://duplicity.nongnu.org/duplicity.1.html#sect7
# NOTE:
#   some backends (eg. cloudfiles) need additional env vars to be set to
#   work properly, when in doubt consult the man page mentioned above.
# ATTENTION:
#   characters other than A-Za-z0-9.-_.~ in the URL have to be
#   replaced by their url encoded pendants, see
#     http://en.wikipedia.org/wiki/Url_encoding
#   if you define the credentials as TARGET_USER, TARGET_PASS below duply
#   will try to url_encode them for you if the need arises.
#TARGET='scheme://user[:password]@host[:port]/[/]path'
TARGET='ftp://user:passwort@ftphost.domain.de/'
# optionally the username/password can be defined as extra variables
# setting them here _and_ in TARGET results in an error
#TARGET_USER='_backend_username_'
#TARGET_PASS='_backend_password_'
# alternatively you might export the auth env vars for your backend here
# when in doubt consult (if existing) the NOTE section of your backend on
#  http://duplicity.nongnu.org/duplicity.1.html for details
# eg. for cloud files backend it might look like this (uncomment for use!)
#export CLOUDFILES_USERNAME='someuser'
#export CLOUDFILES_APIKEY='somekey'
#export CLOUDFILES_AUTHURL ='someurl'
 
# base directory to backup
SOURCE='/'
 
# a command that runs duplicity e.g.
#  shape bandwidth use via trickle
#  "trickle -s -u 640 -d 5120" # 5Mb up, 40Mb down"
#DUPL_PRECMD=""
 
# override the used python interpreter, defaults to "python2"
#   e.g. "python" or "/usr/bin/python2.7"
#PYTHON="python2"
 
# exclude folders containing exclusion file (since duplicity 0.5.14)
# Uncomment the following two lines to enable this setting.
#FILENAME='.duplicity-ignore'
#DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'"
 
# Time frame for old backups to keep, Used for the "purge" command.
# see duplicity man page, chapter TIME_FORMATS)
MAX_AGE=3M
 
# Number of full backups to keep. Used for the "purge-full" command.
# See duplicity man page, action "remove-all-but-n-full".
MAX_FULL_BACKUPS=3
 
# Number of full backups for which incrementals will be kept for.
# Used for the "purge-incr" command.
# See duplicity man page, action "remove-all-inc-of-but-n-full".
#MAX_FULLS_WITH_INCRS=1
 
# activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3)
# forces a full backup if last full backup reaches a specified age, for the
# format of MAX_FULLBKP_AGE see duplicity man page, chapter TIME_FORMATS
# Uncomment the following two lines to enable this setting.
#MAX_FULLBKP_AGE=1M
#DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE "
 
# sets duplicity --volsize option (available since v0.4.3.RC7)
# set the size of backup chunks to VOLSIZE MB instead of the default 25MB.
# VOLSIZE must be number of MB's to set the volume size to.
# Uncomment the following two lines to enable this setting.
#VOLSIZE=50
#DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE "
 
# verbosity of output (error 0, warning 1-2, notice 3-4, info 5-8, debug 9)
# default is 4, if not set
#VERBOSITY=5
 
# temporary file space. at least the size of the biggest file in backup
# for a successful restoration process. (default is '/tmp', if not set)
#TEMP_DIR=/tmp
 
# Modifies archive-dir option (since 0.6.0) Defines a folder that holds
# unencrypted meta data of the backup, enabling new incrementals without the
# need to decrypt backend metadata first. If empty or deleted somehow, the
# private key and it's password are needed.
# NOTE: This is confidential data. Put it somewhere safe. It can grow quite
#       big over time so you might want to put it not in the home dir.
# default '~/.cache/duplicity/duply_<profile>/'
# if set  '${ARCH_DIR}/<profile>'
#ARCH_DIR=/some/space/safe/.duply-cache
 
# DEPRECATED setting
# sets duplicity --time-separator option (since v0.4.4.RC2) to allow users
# to change the time separator from ':' to another character that will work
# on their system.  HINT: For Windows SMB shares, use --time-separator='_'.
# NOTE: '-' is not valid as it conflicts with date separator.
# ATTENTION: only use this with duplicity < 0.5.10, since then default file
#            naming is compatible and this option is pending depreciation
#DUPL_PARAMS="$DUPL_PARAMS --time-separator _ "
 
# DEPRECATED setting
# activates duplicity --short-filenames option, when uploading to a file
# system that can't have filenames longer than 30 characters (e.g. Mac OS 8)
# or have problems with ':' as part of the filename (e.g. Microsoft Windows)
# ATTENTION: only use this with duplicity < 0.5.10, later versions default file
#            naming is compatible and this option is pending depreciation
#DUPL_PARAMS="$DUPL_PARAMS --short-filenames "
 
# more duplicity command line options can be added in the following way
# don't forget to leave a separating space char at the end
#DUPL_PARAMS="$DUPL_PARAMS --put_your_options_here "

Bei Bedarf, kann man dann noch Verzeichnisse vom Backup ausschließen.

vi exclude

Anzeige der bereits gelaufenen Backups:

duply $(hostname -f) status

Starten eines Full-Backups:

duply $(hostname -f) full

Löschen veralteter Backups:

duply $(hostname -f) purge-full --force

Einrichtung einer täglichen, inkrementellen Sicherung mit anschließendem löschen der veralteten Backups:
Um duply jede Nacht ein Backup machen zu lassen, muss ein Cron-Job angelegt werden. Dazu legt man am besten die Datei /etc/cron.d/duply mit dem folgenden Befehlt an.

vi /etc/cron.d/duply

Wenn man jede Nacht um 2 Uhr eine Sicherung machen möchte, sollte in dieser Datei die folgende Zeile eingetragen werden.

0 2 * * * root /usr/sbin/duply.sh >/dev/null 2>&1

Danach muss die Datei /usr/sbin/duply.sh angelegt werden, die vom Cron-Job aufgerufen wird.

vi /usr/sbin/duply.sh

In dieser sollte dann das folgende stehen.

#!/bin/sh
#
# Script created on 04-10-2015 KPU
#
# This script was created to make Duplicity backups.
#
# 05.01.2016 K.Purrucker
# Ergaenzung: Es wird immer der Hostname als Konfigname verwendet
#
 
duply $(hostname -f) backup >>/var/log/duply.log
duply $(hostname -f) purge-full --force >>/var/log/duply.log
 
exit 0

Danach muss noch cron neu gestartet, die Datei ausführbar gemacht und das Log-File angelegt werden.

chmod a+x /usr/sbin/duply.sh
service cron restart
touch /var/log/duply.log

Beispiel: Rücksicherung einer 7 Tage alten Version der Datei etc/fstab in das Verzeichnis /root/:
duply $(hostname -f) fetch etc/fstab /root/fstab 7D