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.