Debian: WordPress mit apt-pinning

Wie jedes Debian Paket aus dem stable-Zweig, hat auch WordPress die aktuellste Version nur im unstable-Zweig. Über das sog. apt-pinning lassen sich gezielt einzelne Pakete aktualisieren.

Wenn man WordPress in der stabilen Version installiert erhällt man leider nicht die aktuellste, jedoch eine Version die gut auf Sicherheitslücken getestet wurde. Die unstabile Version hält dahingehend jedoch bereits mehr neue Features vor.

Indem man gezielt WordPress aus dem unstable Bereich installiert, ohne jedoch das ganze System aktualisieren zu müssen, kommt man mit einem stable-Debian an ein aktuelles WordPress - dank apt-pinning.

Zuallererst wird die Datei /etc/apt/sources.list erweitert um die folgenden Einträge:

deb ftp://ftp.uni-erlangen.de/pub/Linux/debian/ unstable main non-free contrib

In der Datei /etc/apt/preferences wird festgelegt welche Priorität das bestehende stabile System zu den neuen unstabilen Quellen hat:

Package: *
Pin: release a=stable
Pin-Priority: 700
Package: wordpress
Pin: release a=unstable
Pin-Priority: 710
Package: *
Package: libjs-scriptaculous
Pin: release a=unstable
Pin-Priority: 710
Package: libjs-prototype
Pin: release a=unstable
Pin-Priority: 710
Package: tinymce
Pin: release a=unstable
Pin-Priority: 710
Pin: release o=Debian
Pin-Priority: -10

Der erste Block legt die Priorität der stabilen Version mit 700 fest. Im zweiten Block wird definiert, dass die unstabile Version von WordPress mit 710 eine höhere Priorität hat, also vor der stabilen Version steht. Der dritte Block ist nur nötig, wenn man seine php-Version von dotdeb bezogen hat, denn dann liegen diese Pakete zwischen vom Status dazwischen und beim nächsten apt-get update && apt-get upgrade würden diese gegen die unstable-Version ersetzt. Wichtig ist, dass diese Prioritätsangabe später nicht mehr geändert werden kann. Bei Problemen hilft die Übersicht von apt-cache policy wordpress weiter.

Mit apt-get update && apt-get upgrade kommen die aktuellen Paketlisten in das System. Es ist sehr wahrscheinlich, dass der folgende Fehler eintreten wird:

Paketlisten werden gelesen... Fehler!
E: Dynamic MMap ran out of room
E: Ein Fehler trat beim Bearbeiten von kadu-external-modules auf (NewVersion1)
E: Problem with MergeList /var/lib/apt/lists/ftp.uni-erlangen.de[...]
E: Die Paketliste oder die Statusdatei konnte nicht geparst oder geöffnet werden.

Der Cache-Speicher von Debian reicht nicht aus die neu hinzugekommene Liste der Pakete zu speichern. Dies wird in der Datei /etc/apt/apt.conf neben der Nennung der Primären Debian Version angepasst. Wichtig dabei ist eine darauffolgende letzte Leerzeile:

APT::Default-Release "stable";
APT::Cache-Limit 16777216;

Nach einem erneuten Update der Paketlisten kann nun das aktuelle WordPress installiert werden. Über den Parameter -t wird die Version angegeben und gleichzeitig werden auch die Abhängigkeiten beachtet. Falls WordPress schon zuvor in der stable-Version installiert war, sieht die Ausgabe wie folgt aus:

apt-get -t unstable install wordpress
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
libphp-phpmailer
Die folgenden NEUEN Pakete werden installiert:
libphp-phpmailer
Die folgenden Pakete werden aktualisiert:
wordpress
1 aktualisiert, 1 neu installiert, 0 zu entfernen und 371 nicht aktualisiert.
[...]
Vorbereiten zum Ersetzen von wordpress 2.0.10-1etch1 (durch .../wordpress_2.5.0-1_all.deb) ...

Nun liegt die aktuelle WordPress-Version unter /usr/share/wordpress/ bereit. Zur Einrichtung von WordPress folgt später noch ein Eintrag hier.

Englische Anleitung: apt-pinning
Englisches Handbuch: apt_preferences

Update vom 02.07.2008: /etc/apt/preferences an WordPress 2.5.1-4 angepasst.

About admirableadmin

Hello World! Ich bin Andreas Peichert und entwickle und programmiere Webseiten seit 2000. Zurzeit studiere ich Informatik (Komplexe Softwaresysteme) an der Hochschule Bremen.

4 Responses to “Debian: WordPress mit apt-pinning”


Leave a Reply

Time limit is exhausted. Please reload CAPTCHA.