Software/Debian-Paketierung
Freifunk MWU Debian Pakete
Auf den Freifunk Servern, insbesondere Gateways, wird zum Teil Software eingesetzt, für die es in den Distributionen (bei uns Debian Stable) gar keine oder völlig veraltete Pakete gibt. Damit wir diese Software nicht auf jedem System per Hand kompilieren müssen und um uns das Automatisieren (z.B. mit ansible) einfacher zu machen, bauen wir ein paar Pakete selbst und stellen diese in unserem eigenen Repository bereit.
Wir paketieren aktuell folgende Software:
- B.A.T.M.A.N Advanced Kernel Modul (DKMS-Paket)
- batctl
- A.L.F.R.E.D + batadv-vis
- ecdsautils
Repository:
deb http://repo.freifunk-mwu.de/debian stretch main
deb-src http://repo.freifunk-mwu.de/debian stretch main
Key:
wget -O - http://repo.freifunk-mwu.de/83A70084.gpg.key | apt-key add -
Aktualisierung eines Pakets
Hier wird anhand des Kernel Moduls für Batman beschrieben, wie man das Debian Paket aktualisiert und unserem Repo hinzufügt.
Voraussetzungen:
- Build-VM mit Zielbetriebssystem
- PGP-Key
- debian Ordner der vorherigen Version
Die Pakete werden in einer beliebigen Test-VM gebaut und anschließend auf den Repo-Server kopiert.
Benötigte Pakete auf Build-VM:
apt-get install build-essential dh-make devscripts autoconf automake autotools-dev debhelper fakeroot gnupg lintian patch patch
Je nach Software werden weitere Abhängigkeiten benötigt. Dies stellt die Grundausrüstung für das Bauen von Debian Paketen dar.
Grobe Vorgehensweise:
- Debian Paket für neue Software-Version auf unabhängigem Build-System bauen.
- Erzeugten Pakete auf Repo-Server übertragen.
- Neue Pakete per reprepro dem Repo hinzufügen.
# Sourcen des vorherigen Pakets holen (Freifunk MWU Repo muss eingebunden sein!)
tobias@debian-package:/tmp/$ apt-get source batman-adv-dkms
Reading package lists... Done
Building dependency tree
Reading state information... Done
Picking 'batman-adv-kernelland' as source package instead of 'batman-adv-dkms'
NOTICE: 'batman-adv-kernelland' packaging is maintained in the 'Git' version control system at:
git://git.debian.org/git/collab-maint/batman-adv-kernelland.git
Need to get 198 kB of source archives.
Get:1 http://repo.freifunk-mwu.de/debian/ jessie/main batman-adv-kernelland 2016.4-1+ffmwu0 (dsc) [2,098 B]
Get:2 http://repo.freifunk-mwu.de/debian/ jessie/main batman-adv-kernelland 2016.4-1+ffmwu0 (tar) [187 kB]
Get:3 http://repo.freifunk-mwu.de/debian/ jessie/main batman-adv-kernelland 2016.4-1+ffmwu0 (diff) [8,812 B]
Fetched 198 kB in 0s (867 kB/s)
gpgv: keyblock resource `/root/.gnupg/trustedkeys.gpg': file open error
gpgv: Signature made Thu 10 Nov 2016 11:45:01 PM CET using RSA key ID 1D5909CF
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./batman-adv-kernelland_2016.4-1+ffmwu0.dsc
dpkg-source: info: extracting batman-adv-kernelland in batman-adv-kernelland-2016.4
dpkg-source: info: unpacking batman-adv-kernelland_2016.4.orig.tar.xz
dpkg-source: info: unpacking batman-adv-kernelland_2016.4-1+ffmwu0.debian.tar.xz
# Debian Paketinfos entpacken
tobias@debian-package:/tmp$ tar xvf batman-adv-kernelland_2016.4-1+ffmwu0.debian.tar.xz
# Ordner-Struktur je nach belieben, hier ist sie ~/$software-name/$version/
tobias@debian-package:/tmp$ cd ~/batman
tobias@debian-package:~/batman$ mkdir 2017.0.1
tobias@debian-package:~/batman$ cd 2017.0.1/
# sourcen der neuen version holen und entpacken
tobias@debian-package:~/batman/2017.0.1$ wget https://downloads.open-mesh.org/batman/releases/batman-adv-2017.0.1/batman-adv-2017.0.1.tar.gz
--2017-03-20 13:32:19-- https://downloads.open-mesh.org/batman/releases/batman-adv-2017.0.1/batman-adv-2017.0.1.tar.gz
Resolving downloads.open-mesh.org (downloads.open-mesh.org)... 78.46.248.236, 2a01:4f8:141:3341:78:46:248:236
Connecting to downloads.open-mesh.org (downloads.open-mesh.org)|78.46.248.236|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 247594 (242K) [application/x-gzip]
Saving to: ‘batman-adv-2017.0.1.tar.gz’
batman-adv-2017.0.1.tar.gz 100%[========================================================================================>] 241.79K --.-KB/s in 0.1s
2017-03-20 13:32:19 (2.35 MB/s) - ‘batman-adv-2017.0.1.tar.gz’ saved [247594/247594]
tobias@debian-package:~/batman/2017.0.1$ tar xvzf batman-adv-2017.0.1.tar.gz
# Ordner mit Sourcen umbenennen (ist sehr wichtig, muss auch Paketname in debian/control passen)
tobias@debian-package:~/batman/2017.0.1$ mv batman-adv-2017.0.1/ batman-adv-kernelland-2017.0.1/
tobias@debian-package:~/batman/2017.0.1$ cd batman-adv-kernelland-2017.0.1/
# Debian-Paketinfos aus dem vorherigen Paket in den source-Ordner kopieren
tobias@debian-package:~/batman/2017.0.1/batman-adv-kernelland-2017.0.1$ cp -a /tmp/debian .
# Upstream Tarball erzeugen
tobias@debian-package:~/batman/2017.0.1/batman-adv-kernelland-2017.0.1$ dh_make --createorig
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
[s/i/m/l/k/n] m
Maintainer name : Tobias Hachmer
Email-Address : tobias@debian-package.lan.kokelnet.de
Date : Mon, 20 Mar 2017 13:46:56 +0100
Package Name : batman-adv-kernelland
Version : 2017.0.1
License : blank
Type of Package : Multi-Binary
Hit <enter> to confirm:
You already have a debian/ subdirectory in the source tree.
dh_make will not try to overwrite anything.
# Changelog aktualisieren
tobias@debian-package:~/batman/2017.0.1/batman-adv-kernelland-2017.0.1$ dch -i
batman-adv-kernelland (2017.0.1-1+ffmwu0) unstable; urgency=medium
* new upstream version
-- Tobias Hachmer (KokelNET) <network@kokelnet.de> Mon, 20 Mar 2017 13:43:08 +0100
...
...
In der letzten Zeile des Blocks muss der Name+E-Mail Adresse mit der uid des zu verwendenden PGP-Keys übereinstimmen.
# Installieren der build dependencies
tobias@debian-package:~/batman/2017.0.1_test/batman-adv-kernelland-2017.0.1$ apt-get build-dep batman-adv-dkms
# Das Paket bauen
tobias@debian-package:~/batman/2017.0.1_test/batman-adv-kernelland-2017.0.1$ dpkg-buildpackage
...
dpkg-deb: building package `batman-adv-source' in `../batman-adv-source_2017.0.1-1+ffmwu0_all.deb'.
dpkg-deb: building package `batman-adv-dkms' in `../batman-adv-dkms_2017.0.1-1+ffmwu0_all.deb'.
dpkg-genchanges >../batman-adv-kernelland_2017.0.1-1+ffmwu0_amd64.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build batman-adv-kernelland-2017.0.1
dpkg-buildpackage: full upload (original source is included)
signfile batman-adv-kernelland_2017.0.1-1+ffmwu0.dsc
signfile batman-adv-kernelland_2017.0.1-1+ffmwu0_amd64.changes
...
# Im Ordner eine Ebene höher liegen nun die fertigen Pakete:
tobias@debian-package:~/batman/2017.0.1_test/batman-adv-kernelland-2017.0.1$ ls -al ../
total 844
drwxr-xr-x 3 tobias tobias 4096 Mar 20 13:48 .
drwxr-xr-x 7 tobias tobias 4096 Mar 20 13:46 ..
-rw-r--r-- 1 tobias tobias 247594 Mar 7 16:41 batman-adv-2017.0.1.tar.gz
-rw-r--r-- 1 tobias tobias 190748 Mar 20 13:48 batman-adv-dkms_2017.0.1-1+ffmwu0_all.deb
drwxr-xr-x 9 tobias tobias 4096 Mar 20 13:48 batman-adv-kernelland-2017.0.1
-rw-r--r-- 1 tobias tobias 3046 Mar 20 13:48 batman-adv-kernelland_2017.0.1-1+ffmwu0_amd64.changes
-rw-r--r-- 1 tobias tobias 8832 Mar 20 13:48 batman-adv-kernelland_2017.0.1-1+ffmwu0.debian.tar.xz
-rw-r--r-- 1 tobias tobias 2112 Mar 20 13:48 batman-adv-kernelland_2017.0.1-1+ffmwu0.dsc
-rw-r--r-- 1 tobias tobias 190676 Mar 20 13:46 batman-adv-kernelland_2017.0.1.orig.tar.xz
-rw-r--r-- 1 tobias tobias 192624 Mar 20 13:48 batman-adv-source_2017.0.1-1+ffmwu0_all.deb
Diese müssen nun auf den Repo-Server transferiert werden.
Auf dem Repo-Server werden die neuen Pakete nun dem Repo hinzugefügt:
root@okra:~# su - repo
repo@okra:~$ cd /var/www/repos/apt/debian/
repo@okra:/var/www/repos/apt/debian$ reprepro includedeb jessie /tmp/batman-adv-dkms_2017.0.1-1+ffmwu0_all.deb
repo@okra:/var/www/repos/apt/debian$ reprepro includedeb jessie /tmp/batman-adv-source_2017.0.1-1+ffmwu0_all.deb
repo@okra:/var/www/repos/apt/debian$ reprepro includedsc jessie /tmp/batman-adv-kernelland_2017.0.1-1+ffmwu0.dsc