HowTo: rsync –include-from folder whitelist

Wenn man bei rsync eine Textdatei uebergeben moechte, in der rekursiv zu synchronisierenden Ordner drin stehen geht das mit der Option –include-from. Bei der Textdatei ist darauf zu achten, dass

  1. der komplette Verzeichnisbaum inklusive vorgestellten Ordnern erlaubt ist
  2. Alles verboten ist
  3. *** (drei Sterne) fuer rekursiv stehen

Includes werden mit einem + gekennzeichnet, Excludes mit einem -. Beispiel fuer eine solche rsyncIncludeFrom Datei:

+ /foo/
+ /foo/bar/
+ /foo/bar/baz/
+ /foo/bar/baz/one/***
+ /foo/bar/baz/two/***
+ /foo/bar/baz/five/***
- *

Bei Kopiervorgaengen IO beschraenken

Um bei Kopiervorgaengen den IO zu beschraenken kann man das z.B. machen, indem man rsync nutzt und die Option –bwlimit in KB/s uebergibt, z.B.

rsync -avh --progress -bwlimit=5000 /my/source /my/destination

wobei die Bandwith auf 5MB/s beschraenkt wird.

Eine andere alternative ist mit dem Programm ionice zu arbeiten. Mehr dazu in diesem Blogeintrag:
How To Avoid Sudden Outburst Of Backup Shell Script / Program Disk I/O

~/.ssh/config ueberall

Vor einiger sehr langer Zeit habe ich mal ueber „Saving SSH options for specific host“ geschrieben. Fuer mich ist die ~/.ssh/config nicht mehr wegzudenken. Bloed ist natuerlich, wenn ich diese Datei auf meinem Rechner zuhause habe, aber auf der Arbeit etc. auch haben moechte. Auf jeden Rechner auf dem ich die Datei haben will raufkopieren, nach jedem Update ueberall neu. Ganz schoen bloed und nervig.

Viel schoener waere es fuer mich, die Datei an einem Ort zu haben, wo sie immer aktuell ist, wo ich immer rankomme, und von wo ich sie mir schnell ziehen kann. Was bietet sich da mehr an als mein Webserver?! Auf der bash ist ein „wget myServer.tld/myFile -O ~/.ssh/config“ sehr schnell geschrieben ;-)

Meine ~/.ssh/config passe ich hauptsaechlich zuhause auf meinem Rechner an. Von daher reicht fuer mich eine simple Moeglichkeit diese Datei schnell und unkompliziert von da auf meinen Webserver zu bekommen. Am besten automatisch, dass ich mich nicht drum kuemmern muss. Hier meine Loesung:

  1. Auf dem Webserver einen rsync-User angelegt und ihn der Gruppe „www-data“ hinzugefuegt, so dass er in meine htdocs schreiben darf , und in die Gruppe „ssh-allow“ hinzugefuegt, so dass er sich auch via SSH einloggen darf (in der /etc/ssh/sshd_config: AllowGroups ssh-allow)
    (adduser myRemoteRsyncUser && adduser myRemoteRsyncUser www-data && adduser myRemoteRsyncUser ssh-allow)
  2. Auf meinem Desktop-PC einen User angelegt und fuer diesen einen ssh-key generiert
    (adduser myLocalRsyncUser && su – myLocalRsyncUser && ssh-keygen -t dsa -f .ssh/myKey)
  3. Die myKey.pub auf dem Websever in die entsprechende authorized_keys gepackt
    (scp /home/myLocalRsyncUser/.ssh/myKey.pub myRemoteRsyncUser@myServer.tld: -> ssh myRemoteRsyncUser@myServer.tld -> cat myKey.pub >> ./ssh/authorized_keys )
  4. Auf meinem lokalen Rechner rsync Befehl zum kopieren der config beim herunterfahren des Rechners automatisch ausfuehren lassen
    (in der /etc/conf.d/local.stop [Gentoo] den Befehl su myLocalRsyncUser -c „rsync -avu -e ssh /path/to/.ssh/config myRemoteRsyncUser@myServer.tld:/var/www/myRemoteSSHConfigFilename“)

Voila. Beim runterfahren wird nun die Datei automatisch auf meinen Webserver kopiert falls sich diese geaendert hat :-) EEEENDLICH!!