Debian-Pakete patchen

Debian Swirl
Foto: Jesse Ramirez on Unsplash

Manchmal kommt man um das Ändern von Quelltexten und Paketen nicht herum. In dem folgenden Fall ging es um das Paket cron, in dessen Quelltext der Pfad zum Speichern von Laufzeitdaten fest vorgegeben ist.


Das ist so lange kein Problem, wie das Dateisystem normal funktioniert. Nun war es bei einem Produktivsystem aber leider so, dass das Dateisystem exakt an der Stelle des cron-Laufzeitverzeichnisses einen Fehler hatte, der den Zugriff (auch Ändern, Löschen, etc. mit Root-Rechten) auf dieses verhinderte.

Quelltext anpassen


Das Wiederherstellen des Betriebssystems zur Korrektur des grundlegenden Fehlers schied zu dem Zeitpunkt aus. Es blieb als Möglichkeit nur, den Pfad innerhalb des cron-Paketes zu ändern. Diese Kurzanleitung beschreibt das Vorgehen vom Herunterladen des cron-Quelltextes bis zum Installieren des gepatchten Paketes.

Den Quelltext von cron herunterladen und die Pakete installieren, die zum Bauen benötigt werden:

cd /tmp/
apt source cron
apt build-dep cron

Im cron-Quelltext alle Vorkommen des Pfades /var/spool/cron auflisten, durch den neuen Pfad /var/spool/cron2 ersetzen und das Ersetzen überprüfen:

cd cron-3.0pl1
grep var/spool/cron -r -l .
grep var/spool/cron -r -l . | xargs -n 1 sed -i 's#var/spool/cron#var/spool/cron2#g'
grep var/spool/cron -r -l .

Nun den Quelltext übersetzen und das Paket neu bauen:

dpkg-buildpackage -us -uc
Anschließend das neue Paket installieren:

cd ..
dpkg -i cron_3.0pl1-127+deb8u1_amd64.deb

Überprüfen, ob cron jetzt läuft und der neue Pfad existiert:

ps -A | grep cron
ls /var/spool/cron2/

Die nun installierte cron-Version von späteren Aktualisierungen ausschließen:

echo cron hold | dpkg --set-selections

Mit freundlicher Genehmigung übernommen von der Webseite von Hauke Goos-Habermann. Lizenz: CC BY-NC-ND 3.0 DE

Kommentare

3 Antworten zu „Debian-Pakete patchen“

  1. Avatar von Manfred
    Manfred

    Das ist ein Beispiel für’s patchen von Paketen. Für das aktuelle Problem – Pfad ändern – wär’s auch so gegangen:

    sed -b 's/spool\/cron/spool\/cro2/g' /usr/sbin/cron > my-cron
    
  2. Avatar von Manfred
    Manfred

    Oh Backslash fehlt:

    sed -b ’s/spool\/cron/spool\/cro2/g‘ /usr/sbin/cron > my-cron

  3. Avatar von Manfred
    Manfred

    So geht’s auch

    sed -b ’s!spool/cron!spool/cro2!g‘ /usr/sbin/cron > my-cron

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert