BackupPC unter Ubuntu 11.04 mit lighttpd installieren

BackupPC ist eine Software, die zentral auf einem Server läuft und über das Netzwerk ein Backup von anderen Computern oder Servern erstellen kann. Dabei können Vollbackups oder inkrementelle Backups erstellt werden. Zusätzlich wird versucht durch sogenanntes Pooling, dass keine gleichen Dateien doppelt auf dem Backup-Server liegen. Dabei werden auch gleiche Dateien in unterschiedlichen Backups nur einmal abgelegt. Diese Technik kann bei sehr ähnlichen Servern den Speicherplatzverbrauch sehr stark verringern.

Für ein einfacheres Verständnis wird im folgenden der Begriff Backup für den Server, auf dem BackupPC später läuft, und Client für den Computer, der gesichert werden soll, verwendet.

Zunächst werden auf dem Backup Server die nötigen Pakete installiert. In apache2-utils sind nur Tools zum Erstellen von Passwortdateien enthalten, die auch mit lighttpd verwendet werden können.

$ sudo apt-get install lighttpd backuppc apache2-utils

Da es sich bei dem Client in diesem Fall auch um ein Ubuntu System handelt werden der SSH-Server und rsync installiert. Für andere Systeme wie zum Beispiel Windows müssen eventuell andere Pakete installiert werden.

$ sudo apt-get install openssh-server rsync

Jetzt kann mit der Konfiguration des Backup Server fortgefahren werden. Dazu muss zunächst die Datei /etc/lighttpd/lighttpd.conf angepasst werden. Die in ihrer Ausgangsform so aussehen sollte.

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)

server.document-root        = "/var/www"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"

index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm",
                               " index.lighttpd.html" )

url.access-deny             = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl"

dir-listing.encoding        = "utf-8"
server.dir-listing          = "enable"

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/x-javascript", "text/css", "text/html", "text/plain" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Und nach den Anpassungen wie folgt aussehen sollte.

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
        "mod_cgi",
        "mod_auth",
        "mod_accesslog"
)

server.document-root        = "/usr/share/backuppc/cgi-bin"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "backuppc"
server.groupname            = "backuppc"

index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm",
                                "index.lighttpd.html",
                                "index.cgi"
                              )

url.access-deny             = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl"

dir-listing.encoding        = "utf-8"
server.dir-listing          = "enable"

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/x-javascript", "text/css", "text/html", "text/plain" )

cgi.assign = ( ".cgi" => "/usr/bin/perl")

alias.url  = ( "/backuppc" => "/usr/share/backuppc/cgi-bin" )

auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/htpasswd.backuppc"
auth.require += ( "/backuppc" => ( "method" => "basic", "realm" => "BackupPC", "require" => "valid-user" ))

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Anschließend müssen noch die Rechte so gesetzt werden, dass der backuppc Nutzer die Log- und die Cache-Dateien vom lighttpd lesen und schreiben kann.

$ sudo chown -R backuppc:backuppc /var/log/lighttpd/
$ sudo chown -R backuppc:backuppc /var/cache/lighttpd/

Ist das geschafft, muss noch ein Nutzer für das Webinterface angelegt werden. In diesem Fall wird zu nächst der Nutzer backuppc angelegt. Achtung: Der folgende Befehlt löscht die Datei /etc/lighttpd/htpasswd.backuppc und legt sie mit dem angegeben Nutzer neu an. Ist diese Datei also schon vorhanden, bietet es sich an, den Parameter -c wegzulassen, damit sie nur erweitert wird.

$ sudo htpasswd -c -m /etc/lighttpd/htpasswd.backuppc backuppc

Zum Schluss dieser Aktionen kann der lighttpd neu gestartet werden.

$ sudo service lighttpd restart

In der Datei /etc/backuppc/config.pl sind alle Grundeinstellung für BackupPC enthalten. Diese Datei ist mit sehr vielen Kommentaren versehen. Da für eine Grundinstallation zunächst keine Änderungen vorgenommen werden müssen, wird an dieser Stelle nicht genauer darauf eingegangen.

Wichtiger ist im Moment die Datei /etc/backuppc/hosts, in ihr werden alle Server und Computer aufgeführt, die im Backup enthalten sein sollen. An dieser Stelle wird der localhost Eintrag auskommentiert und ein Eintrag für den Client ergänzt.

host        dhcp    user    moreUsers     # <--- do not edit this line
#farside    0       craig   jill,jeff     # <--- example static IP host entry
#larson     1       bill                  # <--- example DHCP host entry
#localhost   0       backuppc
client         0       backuppc

Damit das Backup durchgeführt werden kann, muss noch eine Konfigurationsdatei /etc/backuppc/client.pl angelegt werden. Mit ihrer Hilfe wird genauer spezifiziert, was bei einem Backup vom Client alles gemacht werden soll. In folgenden Fall wird rsync über eine SSH-Verbindung verwendet. Dabei wird der Nutzer backuppc dafür verwendet, sich auf dem Client einzuloggen und die Dateien für das Backup zu lesen. Unter dem Eintrag RsyncShareName können weitere Verzeichnisse, die im Backup enthalten sein sollen, eingetragen werden.

$Conf{XferMethod} = 'rsync';

$Conf{RsyncClientPath} = '/usr/bin/rsync';
$Conf{RsyncClientCmd} = '$sshPath -q -x -l backuppc $hostIP $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l backuppc $hostIP $rsyncPath $argList+';
$Conf{RsyncShareName} = [ '/home/user/meine_daten' ];

Damit der backuppc Nutzer sich am Clienten ohne Passwort anmelden kann muss dafür noch ein SSH-Schlüssel erzeugt werden.

$ sudo su backuppc -c "ssh-keygen -t rsa"

Anschließend muss die Datei /var/lib/backuppc/.ssh/id_rsa.pub auf den Client übertragen und ein neuer Nutzer backuppc angelegt werden. Da sich dieser Nutzer so wie so nur per SSH-Key anmelden soll, kann der Login per Passwort gleich deaktiviert werden.

$ sudo adduser --disabled-password backuppc

Bevor es auf dem Backup Server weitergeht muss auf dem Client noch der SSH-Key eingespielt werden. Dies könnte wie folgt aussehen.

$ sudo su backuppc
$ mkdir .ssh
$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Damit sich der Backup Server erfolgreich anmelden kann muss einmal der Fingerprint beim Login per SSH bestätigt werden. Dies kann auf dem Server wie folgt geschehen.

$ sudo su backuppc -c "ssh cherry"

Zum Schluss muss muss nur noch derBackupPC Dienst auf dem Backup Server neu gestartet werden.

$ sudo service backuppc restart

Anschließend sollte die Weboberfläche unter http://name-des-backup-servers/ verfügbar sein.

Verwandte Artikel