{"id":181,"date":"2006-06-30T13:26:20","date_gmt":"2006-06-30T11:26:20","guid":{"rendered":"http:\/\/blog.tokbela.de\/2006\/06\/30\/181\/"},"modified":"2006-06-30T13:26:20","modified_gmt":"2006-06-30T11:26:20","slug":"bashen-fuer-anfaenger","status":"publish","type":"post","link":"https:\/\/blog.tokbela.de\/?p=181","title":{"rendered":"Bashen fuer Anfaenger"},"content":{"rendered":"<p>In einer der letzten c&#39;ts gab es einen interessanten Artikel ueber <a href=\"http:\/\/www.nongnu.org\/duplicity\/\">duplicity<\/a>, ein Tool fuer Backups auf nicht vertrauenswuerdige Systemen (und zig weiteren Anwendungsmoeglichkeiten). Prima, dachte ich mir, genau das richtige, um meine bisherige Backupstrategie (rsync ueber GPRS auf ein auf einer externen Firewire-Platte liegendes und in einer VMware laufendes grml &#8211; ich schwoere!) zu ergaenzen. Installieren und Einrichten war in Minuten erledigt und der erste Test erfolgreich. Nun noch schnell in die crontab eintragen und fertig.<\/p>\n<p>Am naechsten Tag die Enttaeuschung: Das naechtliche Backup konnte wegen Verbindungsproblemen zum FTP-Server nicht durchgefuehrt werden. Nachdem diese Probleme unregelmaessig auch in den naechsten Naechten anzutreffen waren, entschloss ich mich, das Problem zu zerlegen. Das Backup von duplicity sollte im lokalen Dateisystem abgelegt werden und ich wuerde mich um den Transport zum Server selbst kuemmern.<\/p>\n<p>Eine Suche bei Google zum Thema Synchronisation per FTP (wobei mein Rechner die Quelle und nicht das Ziel spielen sollte), blieb erfolglos. Also Editor auf und los. Resultat der Anstrengungen ist ein kleines Shellskript, welches ein Verzeichnis im lokalen Dateisystem mit einem auf einem FTP-Server abgleicht, wobei alle nur remote verfuegbaren Dateien geloescht und alle nur lokal verfuegbaren uebertragen werden. Dateien mit gleichem Namen und gleicher Groesse werden dabei ausgelassen, um Traffic einzusparen.<\/p>\n<p>Der Clou ist, dass Dateien, die durch Verbindungsabbrueche die falsche Dateigroesse besitzen, ebenfalls geloescht und neu uebertragen werden (auf eine Fortsetzung des fehlerhaften Uploads moechte ich mich dabei nicht verlassen). Einzig eine Pruefung per Hashwert wuerde ich gern ergaenzen, nur kenne ich keine Moeglichkeit, die Hashwerte vom Server geliefert zu bekommen. Naja, damit muss ich leben.<\/p>\n<p>Ich stelle das Skript hier als Anregung zur Verfuegung, muss jedoch _dringend_ davon abraten, es ohne Anpassungen an die eigenen Gegebenheiten einzusetzen! Die Kommentare sind absichtlich sehr spaerlich, da sie bei einem so kleinen Skript schnell dazu fuehren, dass man es einsetzt, ohne es genau durchdacht zu haben.<\/p>\n<p><code>#!\/bin\/bash<\/code><\/p>\n<p><code>USER=XXX<br \/> PASS=XXX<\/code><\/p>\n<p><code>SERVER=backupXX.pureserver.info<\/code><\/p>\n<p><code>LOCAL=\/root\/backup\/duplicity<br \/> REMOTE=duplicity<\/code><\/p>\n<p><code> # Remote-Verzeichnis einlesen<br \/> ncftp -u $USER -p $PASS $SERVER &gt;_tmp.remote_dir &lt;&lt;EOF<br \/> dir $REMOTE<br \/> EOF<br \/> <\/code><\/p>\n<p><code># ACHTUNG: An die Ausgabe von ls anpassen!<br \/> # ($9 bei mir im cron; $8 auf der Konsole)<br \/> ls -l $LOCAL | grep &#39;duplicity-&#39; | awk &#39;{print $5&quot; &quot;$9}&#39;&nbsp; &gt; _tmp.local_files<br \/> grep &#39;duplicity-&#39; _tmp.remote_dir | awk &#39;{print $5&quot; &quot;$9}&#39; &gt; _tmp.remote_files<\/code><\/p>\n<p><code>echo &quot;ncftp -u $USER -p $PASS $SERVER &lt;&lt;EOF&quot; &gt; _tmp.ncftp_cmd<br \/> echo &quot;cd $REMOTE&quot; &gt;&gt; _tmp.ncftp_cmd<br \/> echo &quot;lcd $LOCAL&quot; &gt;&gt; _tmp.ncftp_cmd<br \/> grep -vf _tmp.local_files _tmp.remote_files | sed -e &#39;s\/^[^ ]*\/rm\/&#39;&nbsp; &gt;&gt; _tmp.ncftp_cmd<br \/> grep -vf _tmp.remote_files _tmp.local_files | sed -e &#39;s\/^[^ ]*\/put\/&#39; &gt;&gt; _tmp.ncftp_cmd<br \/> echo &quot;EOF&quot; &gt;&gt; _tmp.ncftp_cmd<\/code><\/p>\n<p><code>. _tmp.ncftp_cmd<\/code><\/p>\n<p><code>rm _tmp.remote_dir<br \/> rm _tmp.local_files<br \/> rm _tmp.remote_files<br \/> rm _tmp.ncftp_cmd<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einer der letzten c&#39;ts gab es einen interessanten Artikel ueber duplicity, ein Tool fuer Backups auf nicht vertrauenswuerdige Systemen (und zig weiteren Anwendungsmoeglichkeiten). Prima, dachte ich mir, genau das richtige, um meine bisherige Backupstrategie (rsync ueber GPRS auf ein auf einer externen Firewire-Platte liegendes und in einer VMware laufendes grml &#8211; ich schwoere!) zu [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-181","post","type-post","status-publish","format-standard","hentry","category-chaos"],"_links":{"self":[{"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=\/wp\/v2\/posts\/181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=181"}],"version-history":[{"count":0,"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=\/wp\/v2\/posts\/181\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tokbela.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}