Monday, November 28. 2005
Kleines Cpio Howto
Es stand wieder mal ein kleines Update von Serendipity an. Am Mittwoch wurde Serendipity 0.9.1 released. Die Möglichkeit möchte ich nutzen, um auf eine etwas unkonventionelle Art des Upgrades mittels cpio hinzuweisen:
CODE:
chrisbra@256bit:~/temp/$ ls
serendipity-0.9.1.tar.gz
chrisbra@256bit:~/temp/$ tar -xzf serendipity-0.9.1.tar.gz
chrisbra@256bit:~/temp/$ ls serendipity
bundled-libs serendipity_admin.php
comment.php serendipity_config.inc.php
deployment serendipity.css.php
docs serendipity_define.js.php
exit.php serendipity_editor.js
htmlarea serendipity_xmlrpc.php
include sql
index.php templates
lang templates_c
plugins uploads
rss.php wfwcomment.php
serendipity_admin_image_selector.php
chrisbra@256bit:~/temp/$
serendipity-0.9.1.tar.gz
chrisbra@256bit:~/temp/$ tar -xzf serendipity-0.9.1.tar.gz
chrisbra@256bit:~/temp/$ ls serendipity
bundled-libs serendipity_admin.php
comment.php serendipity_config.inc.php
deployment serendipity.css.php
docs serendipity_define.js.php
exit.php serendipity_editor.js
htmlarea serendipity_xmlrpc.php
include sql
index.php templates
lang templates_c
plugins uploads
rss.php wfwcomment.php
serendipity_admin_image_selector.php
chrisbra@256bit:~/temp/$
Nichts spektakuläres bis jetzt. Jetzt kommt der Trick. Alle diese Dateien müssen in das DocumentRoot Verzeichnis des blogs kopiert werden. Nun könnte man cp nehmen, aber das ist ja langweilig
CODE:
chrisbra@256bit:~/temp/$ cd serendipity
chrisbra@256bit:~/temp/serendipity$ find . -depth |sudo cpio
--pass-through --preserve-modification-time --make-directories
--unconditional -R www-data:www-data ~/public_html/blog
16898 blocks
chrisbra@256bit:~/temp/serendipity$ ls ~/public_html/blog
bundled-libs serendipity_admin.php
comment.php serendipity_config.inc.php
deployment serendipity.css.php
docs serendipity_define.js.php
exit.php serendipity_editor.js
htmlarea serendipity_xmlrpc.php
include sql
index.php templates
lang templates_c
plugins uploads
rss.php wfwcomment.php
serendipity_admin_image_selector.php
chrisbra@256bit:~/temp/serendipity$
chrisbra@256bit:~/temp/serendipity$ find . -depth |sudo cpio
--pass-through --preserve-modification-time --make-directories
--unconditional -R www-data:www-data ~/public_html/blog
16898 blocks
chrisbra@256bit:~/temp/serendipity$ ls ~/public_html/blog
bundled-libs serendipity_admin.php
comment.php serendipity_config.inc.php
deployment serendipity.css.php
docs serendipity_define.js.php
exit.php serendipity_editor.js
htmlarea serendipity_xmlrpc.php
include sql
index.php templates
lang templates_c
plugins uploads
rss.php wfwcomment.php
serendipity_admin_image_selector.php
chrisbra@256bit:~/temp/serendipity$
cpio wurde im sogenannten Copie-Pass Modus betrieben. Es hat auf der Standardeingabe den Namen der zu kopierenden Dateien gelesen und diese dann in das Verzeichnis ~/public_html kopiert. Der Grund für das cd serendipity im ersten Schritt ist, dass alle Dateien aus diesem Verzeichnis in dieser Struktur in das Dokument Root kopiert werden soll. Ein find serendipity ... hätte zur Folge, dass im Zielverzeichnis ebenso ein Verzeichnis serendipity erstellt worden wäre.
Der Grund, warum das als root ausgeführt wird, ist der, dass ansonsten die Benutzerrechte (Option -R) nicht geändert werden könnten. Die restlichen Optionen sollten für sich sprechen. Der Vorteil von cpio im Vergleich zu tar ist, dass es nicht per default nicht bereits vorhandene Dateien überschreibt. Um dies zu erreichen, muß cpio explizit mit der Option --unconditional aufgerufen werden. Alle anderen Optionen sollten selbsterklärend sein. Verkürzt sieht das so aus: cpio -pumd -R www-data:www-data ~/public_html/blog
So im Browser die Blog-Seite aufrufen und auf "OK" klicken. Das wars, Serendipity läuft jetzt mit Version 0.9.1
Achtung: Natürlich sollte vor so einer Aktion ein Backup gemacht werden, um evtuelle unerwünschte Änderungen rückgängig zu machen (z.B. sollte die Datei serendipity_config_local.inc.php nicht unbedingt überschrieben werden -- ok, die könnte man mit einem Muster für find noch ausschließen).

Nun brauche ich nicht mehr über den tar-Umweg Verzeichnisse exakt abbilden. cp reicht dafür manchmal ja nicht aus.
THX
einem "rsync -avP /mydir/dir /myotherdir".