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/$2

Wenn 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

  1. ein Debian Paket mit meinem Skript
  2. 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.deb

anzeigen 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