Kategorien
Betriebssysteme Programmieren Tools Webserver

Ein Webserver auf deinem iPhone/iPad

Die Verbreitung von Apple iPhones und iPads ist in der Schweiz, verglichen mit anderen Ländern, besonders hoch. Bei den Anteilen der Betriebssysteme an den Web-Besuchen in der Schweiz im Jahr 2019 liegt der Anteil von iOS Geräten bei 44.6%. Der vergleichbare Wert bei Android Geräten liegt bei 31.5%, Windows bei 18.9%, MacOS bei 4.7% (Quelle). Nach der Einführung eines Split Modes und der Mausunterstützung in iOS würden immer mehr Benutzer von iPads gern auf ihrem Gerät eine Entwicklungsumgebung haben um lokal programmieren zu können. Für das reine Programmieren liess sich da mit verschiedenen Apps durchaus etwas tun, aber ein lokaler Webserver und ein eigenes Dateisystem war bisher nicht wirklich möglich. Die im Apple App Store verfügbare App iSH ändert das nun – ein Selbstversuch.

Kategorien
Content Management Systeme Infrastruktur

Viel Zeit, viele Themen und Iron Blogging

In der letzten Woche habe ich mit wirklich vielen Menschen über Blogging gesprochen. Das Feedback zum Artikel Starte (d)ein Blog – heute! war unerwartet zahlreich und durchgehend positiv.

Wie angekündigt, habe ich hier im Novatrend Blog eine Blogroll in der Seitenleiste erstellt. Ich habe ein Plugin für eine RSS Blogroll gefunden, die nicht die Links zu den einzelnen Blogs anzeigt, sondern die letzten Artikel der verlinkten Blogs. Neben dem Titel eines jedes Blog Posts steht der Name des Autor und das Datum, pro Blog sind maximal vier Einträge gelistet.

  • Wenn du dort auch erscheinen willst, schreibe bitte unter dem Starte (d)ein Blog – heute! Artikel die URL deines Blogs als Kommentar.
  • Falls du ein noch besseres Plugin kennst, schreibe bitte ebenfalls einen Kommentar.

Feedback

Vielen Bloggern sprach ich mit dem Artikel aus der Seele, viele „noch nicht“ Blogger gaben mir grundsätzlich recht, aber … die drei häufigsten Sätze, warum sie nicht bloggen, waren:

Ich habe keine Zeit!
Worüber soll ich denn schreiben?
Das halte ich nicht durch!

Interessanterweise kam sehr selten

Ich kann das nicht!
Ich will das nicht!
Ich bin mit der Technik überfordert!

Alle, wirklich alle Menschen, mit denen ich geredet haben, finden bloggen irgendwie gut, würden prinzipiell auch gern bloggen wollen und haben keine Angst vor der Technik! Gerade der letzte Punkt freut mich doch sehr. Vor 10 Jahren war es noch eine Herausforderung ein eigenes Blog auf seinem eigenen Webspace zu betreiben. Heute geht das alles sehr „fluffig“.

Jetzt sage ich mal ein paar Worte zu den drei Gründen, kein Blog zu schreiben.

Ich habe keine Zeit!

Da ich keine aussagefähigen Zahlen über die Schweiz gefunden habe, hier mal ein Blick nach Deutschland (Durchschnittliche tägliche Nutzungsdauer ausgewählter Medien in Deutschland in den Jahren 2014 und 2015. Quelle: http://de.statista.com/statistik/daten/studie/165834/umfrage/taegliche-nutzungsdauer-von-medien-in-deutschland/).

Hier die Zahlen für 2015

  • TV – 259 Minuten
  • Radio – 115 Minuten
  • Internet – 53 Minuten
  • Games – 35 Minuten
  • Buch – 28 Minuten
  • Print – 31 Minuten
  • Sonstige – 33 Minuten

Das sind 9 Stunden und 14 Minuten – täglich!

Ich wiederhole:

9 Stunden und 14 Minuten …

Selbst, wenn du nun ein paar von diesen Dingen parallel machen kannst, Umfragen so eine Sache sind und in der Schweiz eh alles anders ist – so wie es aussieht hast du Zeit ein Blog zu betreiben, du müßtest deine Zeit nur anders verbringen 😉

Worüber soll ich denn schreiben?

Denke mal an deine letzten sieben Tage.

  • Was war das Beste, das Interessanteste, das Schönste, das Bewegendste, das Lustigste, das Traurigste, das Schrecklichste?
  • Was hat dich geärgert, was gefreut?
  • Hast du mit anderen Menschen gesprochen? Worüber?
  • Hast du etwas gelernt oder anderen etwas beigebracht?
  • Hast du etwas gekauft oder verkauft?
  • Hast du eine gute Tat vollbracht?
  • Hast du einen Ausflug gemacht? Wo warst du? Wie ist es da?

Nimm einfach eins dieser Themen und schreibe darüber.
Wenn du erst mal angefangen hast, kommen dir bestimmt noch viele andere Ideen.

Das halte ich nicht durch!

Den Satz lasse ich gelten, ich hatte auch Probleme damit, regelmässig etwas zu bloggen. Das ist so ein wenig wie Sport treiben oder Gewicht abnehmen. Oft ist es leichter wenn andere dabei mitmachen.

Genau das ist die Idee von Iron Blogging.

Jeder Teilnehmer bloggt mindestens einmal die Woche. Wenn kein Blogpost geschrieben wird, wirft er oder Sie eine gewisse Menge Geld, beispielsweise 5 CHF/Euro/US$, in eine gemeinsame Kasse. Wenn etwas Geld in der Kasse ist, treffen sich alle Blogger und verspeisen und vertrinken die Kasse.

In Deutschland ist die Iron Blogger Zentrale unter http://ironblogger.de erreichbar. Thomas Renger legt gern lokale Subdomains an, beispielweise http://stuttgart.ironblogger.de. Die Seiten werden automatisiert aktualisiert, so dass es keinen Pflegeaufwand für die Teilnehmer gibt.

Vor drei Jahren wurde die Iron Blogging Idee auf der re:publica vorgestellt. Stilecht ging es in erster Linie um Blogs und Bier 🙂

re:publica 2013: Blogs und Bier? Das lob‘ ich mir!

Und in der Schweiz?

In der Schweiz gibt es auch Iron Blogger (http://ironblogger.ch). Leider ist die Seite aber leer und der Text

Die Ironblogger Schweiz pausieren.

erscheint. Vielleicht können wir das ja wiederbeleben 🙂

Und wenn man nicht lokal zusammen ist?

Das Problem hatte ich neulich. Seit 25.05.2015 bin ich Mitglied der Iron Blogger Gruppe Rhein-Neckar. Ich wurde auf die Idee durch Tweets über eine Session bei einem BarCamp aufmerksam und wollte mitmachen, obwohl ich keinen Bezug zum Rhein-Neckar Gebiet habe. Nach einem Jahr war ich der einzige verbliebene Teilnehmer der Gruppe und überlegte, wie es weitergeht. Bei einem Besuch in Uganda (#CMSSUMMIT16, Kampala, Uganda) lernte ich viele WordPress Nutzer kennen und startete zusammen mit ein paar Freunden eine eigene Iron Blogger Gruppe die für jeden offen ist, unabhängig vom Wohnort. Vom Erlös wollen wir sinnvolle Projekte fördern. Wer Schulden macht, kann sie durch „Gute Taten und darüber bloggen“ wieder reduzieren. Thomas Renger half mir bei der Einrichtung der Site. Die Scripte zum Aktualisieren sind auf Github verfügbar. Das ist beispielsweise die Version, die in Stuttgart läuft (https://github.com/steinhobelgruen/iron-blogger).

Du kannst dich also einer bestehende Iron Blogger Gruppe anschliessen, oder eine neue Iron Blogger Gruppe gründen!

Technik

An dieser Stelle kommt nun auch noch Webhosting bei Novatrend ins Spiel (was für ein Blog Post 🙂 ), denn die Scripte sind in Python geschrieben und man benötigt eine selbst gehostete WordPress Installation. Einmal pro Woche wird per Cron-Job eine Zusammenfassung der Iron Blogger Posts über die XML-RPC Schnittstelle der WordPress Installation gepostet und ich war natürlich neugierig, wie das alles so funktioniert.

Auf ibcoco.net läuft es momentan so, dass:

  • alle Teilnehmerblogs zusätzlich per Feed eingelesen werden und dann auf den Original Eintrag verlinken,
  • wenn jemand etwas auf seinem eigenen Blog veröffentlich, tweeted der ibcoco Twitter den Titel des Posts, die URL zum Quellblog und den Hastag #ibcoco,
  • am Montag morgen läuft das Python Script, das die Zusammenfassung erstellt und die Kasse aktualisiert,
  • alle Teilnehmer sind für den Anfang in einem gemeinsamen Facebook Chat und auch per Twitter vernetzt.

Was soll ich sagen? Wir sind sechs Leute, die seit ein paar Wochen bloggen. Es macht Spass und 5 Euro für eine gute Sache haben wir auch schon gesammelt 🙂

Fazit

Du hast Zeit für ein Blog, dir fallen ständig neue Themen ein und damit du durchhältst, gibt es Iron Blogger, die nur zu gern gemeinsam mit dir bloggen. Worauf wartest du?


tl;dr: Iron Blogger bloggen mindestens einmal die Woche und tun auch sonst gute Dinge

Kategorien
Messenger Server

Zulip – Open Source Messaging Server

Die Mitarbeiter der Firma wollen (und sollen) online kommunizieren, aber die Firma möchte keinen Chat Service wie beispielsweise Slack nutzen, bei dem nicht klar ist, wo die Daten gespeichert werden und wer alles darauf zugreifen kann. Es sollte ein selbst gehostetes System sein, bei dem die Daten im eigenen Hause gespeichert werden.

Eine mögliche Lösung wäre ein Jabber Server (siehe auch Ein eigenes Messenger System mit Jabber/XMPP).

Eine Alternative ist die Chatanwendung Zulip.

Das Startup Zulip wurde Anfang 2014 in seiner Beta Phase vom Cloud Speicher Anbieter Dropbox gekauft. Im September 2015 wurde die Software dann von Dropbox als Open Source Projekt veröffentlicht. Zulip ist Slack sehr ähnlich und zeichnet sich unter anderem durch weitreichende Integrationsmöglichkeiten für Tools, die in der Softwareentwicklung genutzt werden, aus.

Integrationen für Zulip
Integrationen für Zulip

Ausser diesen Integrationen bietet Zulip

  • Themenspezifische Gruppenchats (Streams)
  • Die Speicherung aller Nachrichten und in einem Stream auch im Nachhinein lesbar und durchsuchbar
  • Privatchats
  • Statusanzeige: Wer ist online
  • Automatische Inline-Darstellung von in den Chat kopierten Links (Bilder, Videos, Tweets)
  • Dateiupload per Drag and Drop
  • Benachrichtigungen per @name
  • Gruppenweite Benachrichtungen per @all
  • E-Mail- und Desktop Benachrichtigungen
  • Emojis
  • Syntax Highlighting bei Code
  • Die Bearbeitung von Chat-Nachrichten
  • Gruppen, die nur per Einladung zugänglich sind
  • Die Darstellung markierter Nachrichten in einer Liste (Favoriten)
  • Mobile Apps für Android und iOS
  • Desktop Apps für Windows, OSX und Linux

Um das System nutzen zu können, muss ein eigener Zulip Server aufgesetzt werden.
Es existiert ein Installationsscript für Ubuntu 14.04 Trusty das ich auch in diesem Blogbeitrag nutze. Das Script geht davon aus, dass Zulip die einzige Anwendung auf dem Server ist. Ein eventuell bereits laufender Apache Web Server auf Port 80 sollte gestoppt werden, Zulip nutzt Nginx.

Die Servervoraussetzungen für ein kleines Team sind 2 GB Hauptspeicher, bei mehr als 50 Nutzern sollten es mindestens 4 GB oder sein. Viel Speicher ist selten eine schlechte Wahl!

Die Chats sind verschlüsselt. Letsencrypt Zertifikate können genutzt werden.

Installation

Die Installation erfolgt als root User. Logge dich auf der Konsole ein. Der Befehl

sudo -i

schaltet dauerhaft root ein.

Codepaket laden

Wechsle in das /root Verzeichnis, lade und überprüfe das Codepaket, entpacke es und verschiebe die Dateien in das /root/zulip Verzeichnis.

cd /root
wget https://www.zulip.com/dist/releases/zulip-server-1.3.10.tar.gz
echo "3d96694abc878056bb6436d24b381e1776f3f70e zulip-server-1.3.10.tar.gz" | sha1sum -c
tar -xf zulip-server-1.3.10.tar.gz
mv zulip-server-1.3.10 zulip

SSL Zertifikate

Zulip setzt HTTPS voraus. Zertifikatserzeugung mit Letsencrypt oder anderen Anbietern funktioniert „wie immer“, ist aber abhängig vom Zertifikatsanbieter.
Wenn du kein Zertifikat „zur Hand“ hast, findest du hier die Befehle für ein selbst unterschriebenes Zertifikat. Die Abhörsicherheit, verglichen mit signierten Zertifikaten, ist die Gleiche, die Browserwarnung für selbst zertifizierte Zertifikate kann in diesem Fall von deinem Team ignoriert werden.

apt-get install openssl
openssl genrsa -des3 -passout pass:x -out server.pass.key 4096
openssl rsa -passin pass:x -in server.pass.key -out zulip.key
rm server.pass.key
openssl req -new -key zulip.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey zulip.key -out zulip.combined-chain.crt
rm server.csr
cp zulip.key /etc/ssl/private/zulip.key
cp zulip.combined-chain.crt /etc/ssl/certs/zulip.combined-chain.crt

Installationscript

Wechsle in das /root/zulip Verzeichnis und starte das Installationsscript.

cd /root/zulip
./scripts/setup/install

Die Installation kann ein paar Minuten dauern.

Konfiguration

Bevor der Server gestartet werden kann, müssen in der Datei /etc/zulip/settings.py ein paar Einstellungen getätigt werden.

/etc/zulip/settings.py
/etc/zulip/settings.py

Zulip ist standardmässig so organisiert, dass alle Nutzer aus einer Domain kommen und sich mit Ihrer E-Mail Adresse registrieren müssen. Diese Einstellungen können natürlich verändert werden, aber gerade der Standard passt hervorragend auf Firmenstrukturen.

Daher muss der Parameter ADMIN_DOMAIN mit deinem Domainnamen versehen werden und es muss mindestens ein AUTHENTICATION_BACKEND ausgewählt werden (in meinem Fall E-Mail/Paswort).

Im weiteren Verlauf der Konfigurationsdatei muss ein SMTP Server angegeben werde, damit E-Mails verschickt werden können.

EMAIL_HOST = 'mail.seafolly.ch'
EMAIL_HOST_USER = 'hagen@seafolly.ch'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = "Hagen (Zulip) <hagen@seafolly.ch>"
NOREPLY_EMAIL_ADDRESS = "noreply@seafolly.ch"

Jetzt sind die Änderungen in der /etc/zulip/settings.py erledigt. Damit der E-Mail Versand funktioniert, muss in der Datei /etc/zulip/zulip-secrets.conf noch das Passwort für den E-Mail Versand hinterlegt werden. Einfach am Ende der Datei

email_password = geheim
email_host_password = geheim

eintragen.

Datenbank initialisieren

Auf der Basis der Konfigurationsdateien kann nun die Datenbank initialisiert werden.

su zulip -c /home/zulip/deployments/current/scripts/setup/initialize-database

Damit ist die Installation beendet und der Zulip Server läuft. Für den produktiven Einsatz solltest du noch das Zulip in Production README lesen und dich in die Zulip Annoucement Mailing Liste eintragen um Nachrichten über Updates u erhalten.

Mit dem Befehl

su zulip -c /home/zulip/deployments/current/scripts/restart-server

kann der Zulip Server nach Konfigurationsänderungen neu gestartet werden.

Beim Aufruf im Browser erwartet dich folgendes Bild:

Zulip - Erster Start
Zulip – Erster Start

Registrierung

Jeder Chatteilnehmer muss sich mit einer E-Mail Adresse registrieren, deren Domain mit der in der Konfiguration definierten Domain übereinstimmt.

Zulip - Registrierung
Zulip – Registrierung

Der Server verschickt eine E-Mail an die angegebene Adresse mit einem Bestätigungslink.

Zulip - E-Mail mit Aktivierungslink
Zulip – E-Mail mit Aktivierungslink

Nack Klicken des Links wird man zur Eingabe eines Namens und des gewünschten Passworts aufgefordert:

Zulip - Kontoaktivierung
Zulip – Kontoaktivierung

Nach dem Klick auf den Register Button erfolgt eine kleine Tour die die Zusammenhänge zwischen Streams und Topics zeigt.

Zulip - Tour
Zulip – Tour

Drei Streams sind bereits vorkonfiguriert (engineering, social und zulip).
Das Einzige, was nun noch fehlt, sind deine Arbeitskollegen (It’s lonely in here! Invite some coworkers).

Zulip - Web-Oberfläche
Zulip – Web-Oberfläche

Ausser der gut funktionierenden Webversion gibt es auch native Apps für Windows, OSX, Linux, iOS und Android!

Fazit

Um es mal kurz zu machen – es läuft!

Links


tl;dr: Zulip ist eine Open Source Group Chat Anwendung mit zahlreichen Integrationsmöglichkeiten, die auf einem eigenen Server installiert wird und über zahlreiche Clients angesprochen werden kann.

Kategorien
Server

Media Publishing mit MediaGoblin

Letzte Woche habe ich die kleine Reihe dezentraler Netzwerke mit dem Aktivitäts Server Pump.io abgeschlossen. Auf der Suche nach Anwendungen, die pump.io nutzen, bin ich dann über MediaGoblin gestolpert.

MediaGoblin ist die Open Source Alternative zu YouTube, Flickr, SoundClound und Thingiverse.

Falls Sie schon mal versucht haben, gängige Content Management Systeme um solche Funktionen zu erweitern, sollten Sie den letzten Satz ein wenig länger wirken lassen … und sich dann überlegen, was daraus in Verbindung mit pump.io, dezentralen sozialen Netzwerken wie GNU social, Friendica und Diaspora und vielen dezentralen Instanzen werden könnte.

MediaGoblin nutzt momentan nur Teile der Upload Funktionalität von pumpi.io und es ist auch erst bei der Release Version 0.7 angekommen. Trotzdem können damit bereits heute die folgenden Medientypen verwalten:

  • Bilder (auch RAW)
  • Video
  • Audio
  • Ascii Art
  • STL/3d Modelle (Thingiverse)
  • PDF
  • Dokumente

Da ich selbst etwa 15,000 Bilder bei Flickr und zahlreiche Videos bei Vimeo und YouTube habe, war ich neugierig ob das wirklich alles so hinhaut, wie auf der Projektseite versprochen und muss nach 2 Tagen Bastelei sagen: „Ja, es haut hin“ aber es ist im momentanen Zustand nicht wirklich „installationsfreundlich“.

Es arbeitet mit nginx und Apache Webserver zusammen, benötigt aber viele „Kleinigkeiten“ wie beispielsweise ffmpeg, das in der Ubuntu 14.04 Distribution nicht mehr enthalten ist, bzw. geforked wurde und nun Libav heisst. Es gibt auch eine MediaGoblin Android App im Quellcode und eine ambitionierte Wunschliste What’s coming in MediaGoblin 1.0?

Das folgende Mediagoblin Video liegt übrigens auf dem Serverblogger Testserver und kann auch in Websites eingebunden werden. Der Code funktioniert im Firefox, Chrome und Opera Browser.

 

 

 

 

 

 

 

 

 

 

 

<video controls        
  preload="auto" class="video-js vjs-default-skin"
  data-setup='{"height": 261, "width": 500 }'>
  <source src="http://media.serverblogger.ch:6543/mgoblin_media/media_entries/6/mediagoblin_campaign2_video-medium.medium.webm"           
          type="video/webm; codecs=&#34;vp8, vorbis&#34;"
  />

Ich möchte, wie auch im pumpi.io Artikel, keine detallierte Installationsanleitung aufschreiben, die schnell überholt sein wird. Das Beste, was ich finden und empfehlen kann, ist die offizielle Dokumentation (http://mediagoblin.readthedocs.org/en/stable/).

Das Ergebnis können Sie auf unserem Testserver besichtigen und ausprobieren:

  1. Neueste Uploads: http://media.serverblogger.ch:6543/
  2. Userprofil: http://media.serverblogger.ch:6543/u/hagengraf/
  3. Kollektionen: http://media.serverblogger.ch:6543/u/hagengraf/collections/
  4. Tags: http://media.serverblogger.ch:6543/u/hagengraf/tag/marrakesch/
  5. Photo: http://media.serverblogger.ch:6543/u/hagengraf/m/marrakesch/
  6. Video: http://media.serverblogger.ch:6543/u/hagengraf/m/maxilamps-db46/
  7. Audio: http://media.serverblogger.ch:6543/u/hagengraf/m/here-comes-my-baby/

Erster Aufruf von MediaGoblin
Erster Aufruf von MediaGoblin

Registrierung im Debug Mode
Registrierung im Debug Mode

Wenn der Server im Debug Modus ist, wird die E-Mail auf der Konsole angezeigt.

===== Email =====
From address: hagen.graf@gmail.com
To addresses: hagen.graf@gmail.com
Subject: GNU MediaGoblin - Verify your email!
-- Body: --
Hi hagengraf,

to activate your GNU MediaGoblin account, open the following URL in
your web browser:

http://46.232.178.78:6543/auth/verify_email/?token=MQ.B9SBVA.psduo2TS9mpenvdzb4ruECnEu4w

E-Mail wurde verifiziert
E-Mail wurde verifiziert

Die Einstellungen für den E-Mail Debug Modus können in der mediagoblin_local.ini Datei geändert werden

# Set to false to enable sending notices

email_debug_mode = false

Um auch Video und Audio File verwalten zu können, müssen die beiden Dateitypen als zusätzliche Plugins in der mediagoblon_local.ini eingetragen werden.

Hier ist eine gute Beschreibung http://mediagoblin.readthedocs.org/en/latest/siteadmin/media-types.html

Beispiele für Dateitypen

Audio Datei in Media Goblin

Audio Datei in Media Goblin

Video Datei in Media Goblin
Video Datei in Media Goblin

Bild Datei in Media Goblin
Bild Datei in Media Goblin

Fazit

Die Idee ist genauso verückt, wie verführerisch und Sie funktioniert prinzipiell. In der Version 1.0 soll es Verbindungen zu GNU social, Friendica, Diaspora und Installationspakete für gängige Linuxdistrubutionen geben und im Web wird bereits über Import wizards, Bildbearbeitungsfunktionen, Rechteverwaltung und ähnliche Features diskutiert.


tl;dr: MediaGoblin ist die Open Source Alternative zu YouTube, Flickr, SoundClound und Thingiverse.

Kategorien
Backup Server Verschlüsselung

Ein Backup mit Duply

Backup ist so ein Thema, dass man in seiner Vollständigkeit versteht, wenn man kein Backup hat oder es nicht möglich ist, das vorhandene Backup wiederherzustellen. Es gibt zahlreiche Lösungsansätze fuer das Backup/Restore Szenario.

Beispielsweise gibt es für die meisten Content Management Systeme Erweiterungen, die ein Datei- und ein Datenbank Backup auf dem Root-Server erzeugen und danach auf ein Ziel Ihrer Wahl übertragen (z.B. Drupal Backup & Migrate oder WordPress UpdraftPlus Backup and Restoration). Bis zu einem gewissen Umfang (der schwer errechenbar ist, weil er von so vielen Parametern abhängt) klappt das auch gut und zuverlässig.

Das Backup der Datenbank (Dump) funktioniert meist reibungsloser als das der Dateien. Datenbanken sind komprimiert erheblich kleiner als tausende von PDF oder JPG-Dateien, daher kann es bei den Dateien ab einem gewissen Umfang kompliziert werden. Sie werden normalerweise komprimiert und dann als zip oder tar.gz Archiv auf das Ziel übertragen. Alle paar Tage wird ein Vollbackup erzeugt und dazwischen inkrementelle Backups. Die Komprimiererei bei einem Voll-Backup kann auch einen Root-Server schnell an den Rand der Leistungsfähigkeit bringen und für locker mal 30 Minuten beschäftigen. Abhängig von der sonstigen Konfiguration des Systems kann das bedeuten, das manche Services in dieser Zeit sehr langsam laufen. Was aber viel wichtiger ist: Die Backups sind normalerweise nicht verschlüsselt. Genau an dieser Stelle kommt Duply ins Spiel.

Was ist Duply?

Zunächst gibt es das Backup Programm Duplicity. Duplicity ist ein

Encrypted bandwidth-efficient backup using the rsync algorithm

Das hört sich gut an. Es nutzt den rsync Algorithmus, erstellt inkrementelle Backups und das auch noch verschluesselt. Leider ist es etwas aufwendig zu konfigurieren, so dass die Zeitschrift Ct im Jahr 2006 das Script ftplicity schrieb und die Bedienung damit erleichterte (Ct – Hinter Schloss und Siegel).

Aus ftplicity entwickelte sich Duply, ein in der Programmiersprache Python geschriebenes Skript, das die Nutzung von Duplicity vereinfacht.

Beispiel

Nehmen wir an, sie haben viele virtuelle Server auf Ihrem Root-Server. Jeder soll ein eigenes Datei-Backup des Dokumentenverzeichnisses erhalten. Das Backup soll auf einen FTP Server übertragen werden und verschluesselt sein. Wir haben die FTP Zugangsdaten fuer den Ziel-Server und den Pfad des zu sichernden Verzeichnisses auf unserem Root-Server. Es soll alle 7 Tage ein Vollbackup erstellt werden und dazwischen 7 inkrementelle Backups. Eine Wiederherstellung der Dateien in einem anderen Verzeichnis soll möglich sein. Auf dem Root-Server läuft Ubuntu 14.04.

Installation

Wir benötigen zunächst das Paket Duplicity und einen FTPclient (ncFTP), der dann den eigentlich Dateitransfer übernimmt.

apt-get install duplicity ncftp

Erstes Backup

Sie können nun bereits ein Backup erstellen und per FTP übertragen. Den folgenden Befehl müssen Sie nur mit Ihren Zugangsdaten füllen und abschicken.

FTP_PASSWORD=[FTP-Passwort] duplicity [zu-sicherndes-Verzeichnis] ftp://[FTP-User]@[FTP-Host]/[Verzeichnis]

Nach dem Absenden werden Sie nach einem Passwort gefragt. Geben Sie ein beliebiges Passwort ein und merken es sich, Sie benötigen es bei der Wiederherstellung der Daten wieder.

root@server1:~# FTP_PASSWORD=*** duplicity /var/www/piwik.serverblogger.ch ftp://****@****/****
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Retype passphrase to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1420383883.70 (Sun Jan  4 16:04:43 2015)
EndTime 1420383889.16 (Sun Jan  4 16:04:49 2015)
ElapsedTime 5.46 (5.46 seconds)
SourceFiles 7119
SourceFileSize 41831081 (39.9 MB)
NewFiles 7119
NewFileSize 41831081 (39.9 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 7119
RawDeltaSize 38427305 (36.6 MB)
TotalDestinationSizeChange 11915629 (11.4 MB)
Errors 0
-------------------------------------------------

root@server1:~#

Herzlichen Glückwunsch, auf der Ziel FTP-Seite sind tatsächlich Dateien angekommen – Ein erstes Backup!

Sicherungsdateien von Duplicity
Sicherungsdateien von Duplicity

Auf der Handbuchseite man duplicity sehen Sie zahlreiche Parameter, mit denen Sie Ihr Backup verfeinern koennen und bekommen eine Ahnung von der Komplexität des Programms.

Wiederherstellung des Backups (restore)

Nachdem das mit dem Backup recht einfach ging, wollen wir die Daten in einem anderen Verzeichnis wiederherstellen.

FTP_PASSWORD=[FTP-Passwort] duplicity ftp://[FTP-User]@[FTP-Host]/[Verzeichnis] [restore-Verzeichnis]

root@server1:~/backup# FTP_PASSWORD=**** duplicity  ftp://****@****/****/backup /root/backup/test
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sun Jan  4 16:04:38 2015
GnuPG passphrase:
root@server1:~/backup# cd test
root@server1:~/backup/test# ls
logs  public_html

Nach Eingabe des richtigen Passworts wird das Verzeichnis test erstellt und die gesicherten Daten dort wiederhergestellt. Das funktioniert alles sehr schnell und elegant, nun wollen wir es mit Duply automatisieren.

Automatisierung der Backups mit Duply

Bevor wir Duply installieren muss die Sache mit der Passworteingabe automatisiert werden. Dazu erstellen wir uns Schlüssel mit dem Befehl.

gpg --gen-key

Es folgt ein Dialog

root@server1:# gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Waehlen Sie DSA and Elgamal aus

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 2

Die Schlüssellaenge von 2048 koennen Sie uebernehmen

DSA keys may be between 1024 and 3072 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits

Der Schlüssel soll nicht verfallen

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all

Antworten Sie mit y

Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Hagen Graf
Email address: hagen@novatrend.ch
Comment: Serverblogger Test
You selected this USER-ID:
    "Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

Geben Sie an dieser Stelle wieder Ihr Passwort ein und merken es sich. Dieses Passwort brauchen Sie später in der Duply Konfigurationsdatei. Die nächste Meldung bezieht sich auf einen gpg-agent, der beim Start einer Session die Passphrase abfragt und zur Verfügung stellt. Dieser gpg-agent ist nicht installiert und daher kommt diese Meldung. Sie können sie ignorieren.

gpg: gpg-agent is not available in this session

Jetzt startet die Schlüsselerzeugung.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size
+++++...+++++....+++++.++++++++++++++++++++++++++++++.+++++++++++++++..+++++.....+++++++++++++++.+++++.+++++....+++++.++++++++++.+++++.++++++++++....+++++++++++++++>+++++................>+++++..................................................................................................+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 288 more bytes)

In meinem Fall brach die Schlüsselerzeugung nach kurzer Zeit ab, weil nicht genug „entropy“ (Zufall) im System vorhanden war. Um die Entropie zu erhoehen, müssen Sie ihr System beschaftigen. Es gibt unterschiedliche Ansaetze (Beispiel). Ich habe es zuerst mit der mehrfachen Ausfuehrung des Befehls ls / -R probiert. Der Screenshot zeigt eine Shell mit der Schlüsselgenerierung, die Shell oben rechts zeigt die Entropie an, unten rechts wird das System beschäftigt.

Entropie erhöhen
Entropie erhöhen

Nach ein paar Minuten erfolgloser Beschäftigung habe ich dann das Paket stress installiert (apt-get install stress) und mit dem Befehl stress -c 4 -m 2 -d 1 -t 40s vierzig Sekunden „Stress“ in CPU, Hauptpeicher und auf der Festplatte erzeugt (Stress Test Your Ubuntu Computer with ‘Stress’).

Die Schlüsselerzeugung ging daraufhin weiter.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++.+++++++++++++++.+++++++++++++++.+++++.++++++++++++++++++++.+++++..++++++++++++++++++++>++++++++++>+++++...............................................................................+++++^^^
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ******* marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048D/6986FD72 2015-01-04
      Key fingerprint = 43C1 DA7D 7CAE A2BC 34CF  6665 BB91 22E0 6986 FD72
uid                  Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>
sub   2048g/27AC130F 2015-01-04

Merken Sie sich den Key, der im gelb markierten Bereich steht.

wget http://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.9.x/duply_1.9.1.tgz
tar xvfz duply_1.9.1.tgz
cp duply_1.9.1/duply /usr/local/bin

Nun müssen Sie ein Profil erstellen.

duply [name-des-profils] create

Ich möchte wieder die Piwik Installation sichern und geben folgendes ein

root@server1:~# duply piwik.serverblogger.ch create

Congratulations. You just created the profile 'piwik.serverblogger.ch'.
The initial config file has been created as
'/root/.duply/piwik.serverblogger.ch/conf'.
You should now adjust this config file to your needs.

Sie müssen nun die Konfigurationsdatei bearbeiten

nano /root/.duply/piwik.serverblogger.ch/conf

Diese Werte müssen Sie anpassen

GPG_KEY='*****' // Der gelb markierte Key von oben
GPG_PW='*****' // ihr Passwort bei der key-Erzeugung
TARGET='ftp://****@****/****/****'  // FTP Zugangsdaten
TARGET_PASS='*****' // FTP Passwort
SOURCE='/var/www/piwik.serverblogger.ch' // zu sichernden Verzeichnis
MAX_AGE=1M // Nach 1 Monat werden alle aelteren Backups geloescht
TEMP_DIR=/tmp // Das temporaere Verzeichnis

OPTIONAL

Wenn Sie die Datenbank (MySQL Dump) mit sichern wollen, können Sie sich eine Datei mit dem Namen pre anlegen

/root/.duply/piwik.serverblogger.ch/pre

Inhalt der Datei

mysqldump -u [Benutzername] -p[Passwort] piwik > piwik.sql

Backup mit Duply

Mit dem Befehl duply [profilname] backup koennen Sie nun ein Backup ausühren. In meinem Fall

duply piwik.serverblogger.ch backup

Ein Vollbackup wird mit full aufgerufen

duply piwik.serverblogger.ch full

Ein inkrementelles Backup mit incr

duply piwik.serverblogger.ch incr

Sie sollten nun nicht nach einem Passwort gefragt werden! Mit duply -h können Sie sich die Hilfeseite anzeigen lassen.

Automatisierung

Der letzte Schritt ist nun der Eintrag in der Crontab um den Backup Befehl regelmässig auszuführen.

crontab -e

Sonntags um 0:00 wird ein volles Backup erstellt und alte Backups gelöscht. Von Montag bis Samstag wird jeweils um 0:00 Uhr ein inkrementelles Backup durchgeführt.

# do a full backup on sunday  & delete old backups

0 0 * * 7 /usr/bin/duply /root/.duply/piwik.serverblogger.ch full_verify_purge --force

# run the incremental backup each night at 00:00h

0 0 * * 1-6 /usr/bin/duply /root/.duply/piwik.serverblogger.ch incr

Restore mit Duply

Die Wiederherstellung funktioniert ebenso einfach wie das Backup

duply [Profilname] restore [Zielverzeichnis]

Andere Plattformen

Mit Duplicity und Duply können Sie auf auf andere Ziele sichern, beispielsweise S3 Amazon Web Services, Google Cloud Storage, Rackspace Open Cloud, und Dropbox.


tl;dr: Backups sind hilfreich und nicht schwer!