Debian-Paket für Bind 9.11 dnssec-keymgr erstellen

Wer Debian 9 (Stretch) oder höher verwendet, kann das offizielle BIND 9.11.2 Paket aus stretch-backports verwenden.


Bind 9.11 liefert den in Python geschriebenen "DNSSEC Keymanager" (dnssec-keymgr), der eine auf Regeln basierende, voll-automatische Generierung von DNSSEC-Schlüsseln erlaubt, und somit das Schlüsselmanagement und Rollover von Schlüsseln enorm erleichtert.

Da viele Hochschulen und Universitäten auf Ihren Nameservern keine selbst kompilierte Bind-Version aus den offiziellen Quellen installieren wollen, sondern von Updates und Patches, die durch den jeweiligen Paketmanager installiert werden, profitieren wollen.

Da wir für den reibungslosen und vor allem sorgenfreien Betrieb von DNSSEC die Verwendung des DNSSEC Keymanagers empfehlen, haben wir ein binäres Debian-Paket aus den Bind9-9.11.1-P3-Quellen erstellt, das nur den DNSSEC Keymanager nachinstalliert. Wie schon in den Howto-Seiten für die händische Installation beschrieben, kann diese problemlos auf Bind 9.9.x laufen.

Hier sind die notwendigen Schritte, um ein Debian Paket für den DNSSEC Keymanager zu erstellen:


Download der Quellen

Zuerst lädt man die originalen Quellen der neuesten Bind-Version 9.11.1-P3 von ISC.org herunter.


curl -o bind9_9.11.1-P3.orig.tar.gz https://www.isc.org/downloads/file/bind-9-11-1-p3/


Um ein Debian-Paket mit den von Debian zur Verfügung gestellten Tools zu bauen, sollte man ein Verzeichnis nach dem Schema "<paketname>_<version>" verwenden:


mkdir bind9-keymgr_9.11.1-P3

cd bind9-keymgr_9.11.1-P3


Für unsere Zwecke brauchen wir aber noch ein Arbeitsverzeichnis, in das die herunter gelandenen Bind-Quellen extrahiert werden können. Im Gegensatz zum Erstellen eines Debian-Pakets aus einem neueren Upstream-Tarball, wollen wir nur die Dateien des DNSSEC Keymanagers einbinden.


mkdir bind9-9.11.1-P3-sources

cd bind9-9.11.1-P3-sources

tar xzf bind9_9.11.1-P3.orig.tar.gz


Extrahieren der dnssec-keymgr Python-Dateien

Da wir nur an den Dateien, die für den DNSSEC Keymanager benötigt werden, interessiert sind, können wir uns ein Bauen von Bind selbst sparen. Der dnssec-keymgr ist ein Pythonskript und benötigt selbst nur einige eingebundene Python-Module (Vorausgesetzt wird, dass das Paket python-ply auf dem Zielsystem installiert.).

Da aber auch für Python Abhängigkeiten in ".in"-Dateien erst durch Ausführen des configure-Skripts aufgelöst werden, muss zumindest der ./configure-Schritt durchgeführt werden:


./configure


Diese Python-Dateien ordnen wir dann in einer Verzeichnisstruktur innerhalb unseres Debianpaket-Verzeichnisses an, die den Zielordnern entspricht. Der Debian-Paketbuilder, dpkg, kann selbstständig die entsprechenden Datein mit den Zielverzeichnissen zur Installation daraus ablesen:


NB: Dabei wurde die ./bin/pythondnssec-keymgr.8-Datei, die den Text für die man-Page enthält, mit gzip noch komprimiert.


DEBIAN-Verzeichnis und Meta-Dateien

Damit man mit den Package-Tools von Debian - hier gibt es mehrere Möglichkeiten - ein Debian-Paket bauen kann, muss ein Verzeichnis "DEBIAN" existieren, in denen Meta-Dateien liegen, die das Paket beschreiben. Der Paket-Builder verwendet dann diese Informationen, um das Paket zu Bauen, und auch entsprechende Kurzzusammenfassungen und Abhängigkeiten in das .deb-Paket einzubinden.


mkdir DEBIAN


Mindestens sind notwendig, die control-Datei, die das Paket beschreibt:


vim DEBIAN/control

Source: bind9-keymgr
Package: bind9-keymgr
Priority: optional
Maintainer: Sven Duscha <duscha@lrz.de>
Depends: dh-python, python (>=2.6), python-ply, bind9utils (>=9.9)
Version: 9.11.1-P3
Architecture: amd64
X-Python-Version: >= 2.6
Description: dnssec-keymgr from Bind 9.11.1-P3  (Python 2)
 BIND 9.11.1-P3 keymanager Python script and required isc python modules. This package installs the library for Python 2.

Bauen des Pakets

Dann kann im übergeorgneten Verzeichnis, also eine Ebene oberhalb des Verzeichnisses bind9-keymgr_9.11.1-P3, in dem wir die benötigten Dateien abgelegt haben, dpkg -b aufgerufen werden, das die Dateien in ein .deb-Paket packt:


dpkg -b bind9-keymgr_9.11.1-P3

dpkg-deb: building package "bind9-keymgr" in 'bind9-keymgr_9.11.1-P3.deb'

Installation auf dem Zielsystem

Dieses .deb-Paket kann dann auf einem Debian-Zielsystem installiert werden. Um zu Testen, ob alles richtig installiert wird, sollte das aber vorher auf einer VM ausprobiert werden:


dpkg -i bind9-keymgr_9.11.1-P3

(Reading database ... 58060 files and directories currently installed.)

Preparing to upack bind9-keymgr_9.11.1-P3.deb ...

Unpacking bind9-keymgr (9.11.1-P3) ...

Processing triggers for man-db (2.7.6.1-2) ...



Download und Installation auf anderen Distributionen

Das Debian-Paketfile kann hier herunter geladen werden.

Das Paket wurde auf einem Debian9 "Stretch"-System gebaut und getestet und wurde auch erfolgreich auf einem Ubuntu 17.04 LTS installiert. Weitere Tests auf anderen Versionen und Distributionen müssen noch durchgeführt werden. Grundsätzlich sollte es sich aber auch auf diesen Distributionen installieren lassen.

Als "alien"-Paket kann es auch mit dem Tool alien zu einem RPM konvertiert werden


alien --to-rpm --keep-version bind9-keymgr_9.11.1-P3.deb

bind9-keymgr-9.11.1-P3.x86_64.rpm generated


und auf RPM-basierten Distributionen, z.B. SLES 11/12, installiert werden. Das RPM ist hier herunterladbar.


Pythonpath

Auf SLES installiert sich das Paket auch nach /usr/lib/python2.7/dist-packages, die aber standardmäßig nicht im Pythonpfad sind. Man muss entweder

export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages

setzen, oder

mv /usr/lib/python2.7/dist-packages/isc /usr/lib/python2.7/site-packages/

durchführen, damit die isc-Pakete gefunden werden.

Ferner benötigt der dnssec-keymgr "python-ply", das nicht in der offiziellen Distribution von SLES12 enthalten ist, sondern wie unter in der Kommentarsektion erwähnt aus anderer Quelle installiert werden muss

Ob alternativ der Bau aus den Originalquellen vertrauenswürdiger und schmerzloser ist, als Paketjonglieren an Zypper vorbei, muss man für sich selbst entscheiden.