Neues SSL-Zertifikat und spdy Unterstuetzung
Ab heute hat mein Blog ein neues SSL-Zertifikat von CAcert.org. Wenn mich jemand "assuren" wuerde, waere ich dem sehr dankbar.
Weiter ist mein Blog nun auch ueber spdy erreichbar. Ein deutlicher Geschwindigkeitszuwachs, um es mal einfach auszudruecken. Die Installation gestaltete sich sehr einfach: runterladen, installieren, Apache neu starten, fertig. Das Apache-Modul gibt es hier bei Google.
Um in den Genuss des schnelleren Seitenaufbaus zu kommen als Firefox-Nutzer unter about:config nach network.http.spdy.enabled suchen und auf true setzen.
Howto: Apache mit SVN sowie ACL + Migration
Im folgenden ist beschrieben, wie man einen SVN-Server mit HTTP-Zugang einrichtet und anschliessend ein vorhandenes Repository auf diesen neuen Server umzieht. Die Anleitung bezieht sich auf einen Ubuntu Server, es sollte sich jedoch auf Debian Systemen alles analog verhalten.
Zuerst wird die benoetigte Software installiert:
apt-get install subversion libapache2-svn
Danach werden die erforderlichen Ordnerstrukturen angelegt:
mkdir /srv/svn mkdir /srv/svn/repository chown www-data:www-data /srv/svn/repository chmod 770 /srv/svn/repository
Als naechstes wird die Datei /etc/apache2/mods-available/dav_svn.conf entsprechend konfiguriert. Hier werden verschiedene Dinge eingestellt, unter anderem fuer die Zugangsbeschraenkungen und ACLs:
<Location /svn> DAV svn SVNParentPath /srv/svn/repository AuthType Basic AuthName "Subversion Repository" AuthUserFile /srv/svn/dav_svn.passwd AuthzSVNAccessFile /srv/svn/dav_svn.authz Require valid-user </Location>
Nun wird in der /srv/svn/dav_svn.passwd ein neuer Benutzeraccount angelegt, der Zugriff auf das Repository bekommen soll:
htpasswd -c /srv/svn/dav_svn.passwd USERNAME
Und in der /srv/svn/dav_svn.authz die entsprechenden ACL-Rechte gesetzt:
[example:/] USERNAME = rw
Zum Schluss wird das Repository migriert. Dafuer muss auf dem alten Server ein entsprechender Repository-Dump erzeugt, und auf den neuen Server kopiert werden:
svnadmin dump /path/to/repository/foobar > foobar.dump scp foobar.dump user@example.net:
Auf dem neuen Server wird nun ein neues Repository angelegt und mit dem vorher erstellten und kopierten Dump befuellt. Damit es die richtigen Rechte hat, wird es als Benutzer www-data gemacht
cd /srv/svn/repository su www-data svnadmin create foobar svnadmin load foobar < foobar.dump
Das wars! Ab nun kann man auf das Repository auf den neuen Server schwenken und damit arbeiten. In diesem Beispielfall koennte es das folgende sein:
http://example.net/svn/foobar
Apache mod_alias, mod_rewrite und GET-Parameter
Das Umleiten von einer Seite auf eine andere ist mit mod_alias sehr einfach:
Redirect /mydestination http://example.net/Das geht auch noch recht einfach mit Regex wenn man einzelne Bereiche woanders hinschreiben will. Um diese URL-Transformation zu machen:
- http://foobar.net/mydestination/folder/page.php -> http://example.net/foobar/folder/stuff/page.php
den folgenden RedirectMatch verwenden:
RedirectMatch ^/mydestination/(.*)/(.*)$ http://example.net/foobar/$1/stuff/$2Wenn man jedoch mit GET-Parametern rumhantieren will, muss man mod_rewrite anstatt mod_alias nehmen. Fuer die folgende URL-Transformation:
- http://example.net/mydestination/getstuff?pagename=foo.bar -> http://exmpla.net/blafasel/foo.bar
kann man diese Regel nutzen:
RewriteEnginge On RewriteCond %{REQUEST_URI} ^/mydestination/getstuff$ RewriteCond %{QUERY_STRING} ^pagename=(.*)$ RewriteRule ^(.*)$ http://example.net/blafasel/%1? [R=302,L]
Eigene Debian-Pakete und Repository erstellen
Sobald als man Admin mehrere Server zu administrieren hat, kommt man in den Genuss ein- und das dasselbe auf viele Servern immer wieder machen zu muessen. Heute moechte ich mich dem Thema widmen auf vielen Servern z.B. eine neue Version des Backupskriptes einzuspielen. Dafuer brauche ich zwei Dinge
- ein Debian Paket mit meinem Skript
- ein Debian Repository ueber das das Paket verteilt wird
Der hier im folgenden vorgestellte Weg ist sehr simpel und rudimentaer gehalten und behandelt explizit Dinge wie SecureApt nicht.
Erstellen eines eigenen Debian-Paketes
Zum Erstellen des eigenen Debian Paketes benoetige ich nun zwei Dinge. Einmal mein Backupskript pregoBackup.sh und einmal eine control-Datei, die Informationen ueber das Debian Paket enthaelt. Die control Datei koennte z.B. wie folgt aussehen:
Package: pregoBackup Version: 0.5 Section: server Priority: optional Architecture: all Essential: no Installed-size: 1024 Maintainer: prego presto Description: pregos Backup Skript zum Sichern des Servers
Das ganze vorgehen jetzt in Worte zu fassen waere sehr umstaendlich. Deswegen in kurz: die control Datei liegt in dem Unterordner ./DEBIAN und neben das DEBIAN Verzeichnis packe ich das Skript an die Stelle, wo ich es im Dateisystem liegen haben moechte:
cd /tmp mkdir pregoBackup cd pregoBackup mkdir ./DEBIAN mkdir -p ./root/skripte cp control ./DEBIAN cp pregoBackup.sh ./root/skripte
Als naechstes wird das Debian-Paket erstellt:
cd /tmp dpkg-deb --build pregoBackup
Danach sollten wir die Datei /tmp/pregoBackup.deb haben. Was darin enthalten ist koennen wir uns mit:
dpkg-deb --contents pregoBackup.debanzeigen lassen, und wer moechte kann es auch spasseshalber mal mit
dpkg -i pregoBackup.deb aptitude show pregoBackup aptitude purge pregoBackup
installieren, angucken und deinstallieren.
Anlegen eines Debian Repositories
An zweiter Stelle lege ich nun ein Repository an. Dafuer erstelle ich zuerst eine Verzeichnisstruktur dafuer:
mkdir -p /srv/myrepository/{binary,source}
Anschliessend lege ich einen simplen Apache vhost an mit einer Zugangsbeschraenkung fuer das Repository auf mein lokales Netz:
ServerAdmin webmaster@example.net ServerName myrepository.example.net DocumentRoot /srv/myrepository/ AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order Deny,Allow Deny from all Allow from 192.168.0.0/255.255.0.0
Nun kann ich mein frisch erstelltes Debian-Paket in die Repository Dateisystemstruktur kopieren:
cp /tmp/pregoBackup.deb /srv/myrepository/binary/
Zu guter letzt muss noch der Repository Index erstellt werden. Dafuer muss das Paket dpkg-dev vorhanden sein:
aptitude install dpkg-dev cd /srv/myrepository dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz
Wenn das alles fertig ist, brauche ich nur noch auf meinem Server die entsprechenden Zeilen in die /etc/apt/sources.conf eintragen, die Liste der verfuegbaren Pakete von den apt-Quellen erneuern und dann kann das Paket installiert werden.
## my personal repository deb http://myrepository.example.net binary/ deb-src http://myrepository.example.net source/
aptitude update aptitude install pregoBackup
