Pakete aktualisieren

Die Entwickler von Debian integrieren kontinuierlich freie Software nach unstable, propagieren unproblematische Pakete nach testing und veröffentlichen ungefähr alle 2 Jahre eine neue stable-Version. Diese gibt das Release-Team erst nach einer ausgiebigen Testphase frei. Anschließend werden dort nur noch Fehler behoben und Sicherheitslücken geschlossen.

Werkzeug

Rund um die Paketverwaltung stehen diverse Programme zur Verfügung.

Kommando Operanden Beschreibung
apt Command [Package] Oberbau für apt-get und apt-cache
apt-get Command Installiere Pakete aus dem Internet
apt-cache Command Lokale Paketlisten durchsuchen
apt-key Command PGP-Schlüssel verwalten
dpkg [File] Paketdatei (*.deb) untersuchen und installieren
dpkg-deb File [Dir] Paketdatei (*.deb) erzeugen
debootstrap [Suite] Dir [Mirror]Grundsystem installieren
tasksel [Task] Paketsammlungen auswählen
aptitude [Command] Textbasierte Oberfläche für apt
synaptic Graphische Oberfläche für apt
gnome-software App-Store für den GNOME-Arbeitsumgebung
-i, --install Paket installieren
--unpack Nur entpacken
--configure Nur konfigurieren
-r, --remove Paket entfernen
-P, --purge Konfiguration und Daten löschen
-V, --verify Integrität prüfen
-C, --autio Konsistenz prüfen
--get-selections Paketauswahl ausgeben
--set-selections Paketauswahl setzen
--clear-selections Paketauswahl löschen
--print-architecture Architekturen auflisten
--add-architecture Architekture hinzufügen
-b, --build Paket bauen
-c, --contents Dateien auflisten
-e, --control DEBIAN Verzeichnis extrahieren
-x, --extract Dateien extrahieren
-f, --field Kontrolldatei ausgeben
--ctrl-tarfile Metadaten-Archiv ausgeben
--fsys-tarfile Dateisystem-Archiv ausgeben
-I, --info Informationen ausgeben
update Paketliste aktualisieren
upgrade Installierte Pakete aktualisieren
install Paket installieren
remove Paket entfernen
purge Konfiguration und Daten löschen
autoremove Automatisch installierte Pakete entfernen
search Schlüsselwort suchen
show Kontrolldatei ausgeben
list Pakete auflisten
edit-sources sources.list im $EDITOR öffnen
add [File] Schlüssel hinzufügen
del KeyId Schlüssel entfernen
export KeyId Schlüssel ausgeben
exportall Alle Schlüssel ausgeben
update Schlüssel aus Datei aktualisieren
net-update Schlüssel aus dem Internet herunterladen
list Schlüssel auflisten
finger Fingerabdrücke auflisten
adv Optionen an PGP durchreichen
--include Package joe,tree,psmisc Pakete hinzufügen
--exclude Package nano Pakete ausschließen
--arch Architecture amd64 Architektur der Pakete festlegen
--extra-suites Suite stable-backports Pakete aus Also use packages from the listed suites of the archive.
--components Component main,contrib,non-free Pakete aus zusätzlichen Zweigen des Archivs verwenden
--no-resolve-deps Abhängigkeiten (nicht) automatisch auflösen
--log-extra-deps Abhängigkeiten protokollieren
--variant Variant minbase Umfang der Installation wählen
--[no-]merged-usr Symbolische Verweise auf /usr/{bin,sbin,lib} (nicht) erzeugen
--keyring Dir /etc/apt/trusted-gpg.d Eigenen Schlüsselbund verwenden
--[no|force]-check-gpg Signaturen (nicht) prüfen
--verbose Mehr Details ausgeben
--print-debs Pakete nur ausgeben
--download-only Pakete nur herunterladen
--foreign Pakete nur entpacken, zweite Stufe auf dem Zielsystem ausführen
--second-stage Zweite Stufe ausführen
--second-stage-target Dir Zweite Stufe in Unterverzeichnis ausführen
--keep-debootstrap-dir Verzeichnis debootstrap aufheben
--cache-dir Dir Pakete in einem anderen Verzeichnis speichern
--unpack-tarball File Pakete aus einem Archiv lesen
--make-tarball File Pakete nur in einem Archiv speichern
--debian-installer Reserviert für interne Verwendung
--extractor Type dpkg-deb ar Verfahren zum auspacken
--no-check-certificate Zertifikate nicht prüfen
--certificate File Eigenes Zertifikat verwenden
--private-key File Eigenen Schlüssel verwenden
--inrelease-path Pfad zur InRelease Datei festlegen
-t, --test Testmodus
--new-install Auswahldialog für Arbeitsumgebungen, Drucker und Standard anzeigen
--list-tasks Sammlungen auflisten
--task-packages Pakete der Sammlung auflisten
--task-desc Beschreibung ausgeben
standard apt-listchanges apt-utils bash-completion cron
debian-faq doc-debian gdbm-l10n ifupdown liblockfile-bin
logrotate nano ncurses-term python3-reportbug reportbug
rsyslog telnet vim-common vim-tiny wamerican
task-laptop avahi-autoipd bluetooth powertop iw wireless-tools wpasupplicant
desktop xorg xserver-xorg-video-all xserver-xorg-input-all desktop-base
task-gnome-desktop gnome gimp synaptic firefox libreoffice network-manager-gnome …
(über 1000 Pakete)
kde-desktop task-desktop kde-standard sddm
cinnamon-desktop task-desktop cinnamon-desktop-environment
mate-desktop task-desktop mate-desktop-environment lightdm
lxde-desktop task-desktop lxde lightdm
lxqt-desktop task-desktop lxqt sddm sddm-theme-debian-elarun
web-server apache2
print-server cups cups-client cups-bsd
ssh-server openssh-server

Quellen konfigurieren

Das Advanced Packaging Tool lädt Programmpakete aus Depots im Internet herunter, löst Abhängigkeiten auf, installiert Programme und hält das System stets aktuell. Das Depot für Rückportierungen enthält aktuelle, aber weniger gut getestete Programm-Versionen.

/etc/apt/sources.list
# Type Repository Suite Component deb http://deb.debian.org/debian stable main deb http://deb.debian.org/debian-security stable-security main deb http://deb.debian.org/debian stable-updates main deb http://deb.debian.org/debian stable-backports main

Pakete aus der Zukunft installieren

Für Pakete aus dem unstable Zweig legen wir eine geringere Priorität fest, so dass Pakete aus dem stabilen Zweig bevorzugt werden.

/etc/apt/preferences
Package: * Pin: release a=bookworm Pin-Priority: 500 Package: * Pin: release a=unstable Pin-Priority: 100

Nun tragen wir eine weitere Paketquelle ein.

/etc/apt/sources.list
… deb http://deb.debian.org/debian unstable main non-free-firmware

Schließlich können wir explizit Pakete aus diesem Zweig installieren.

apt update
apt install -t sid linux-image-amd64 firmware-iwlwifi firmware-misc-nonfree

Kontrolldatei

Die Datei DEBIAN/control beschreibt die Metadaten des Pakets

Feld Inhalt Beispiel Beschreibung
Package Package hello Name des Pakets
Version Version 1.0 Versionsnummer
Maintainer EmailAddress Frank <phrank@….de> Kontaktdaten
Description Text Hello World Kurzbeschreibung
Section Section utils Kategorie
Priority Priority optional Priorität
Installed-Size Size 42 Speicherplatz in Kilobyte
Essential no yes Kennzeichen für Pakete
Build-Essential no yes
Architecture Architecture all Hardwaretyp
Origin Name debian Ursprungs-Distribution
Bugs Url debbugs://… Fehlerdatenbank
Homepage Url http://illusioni.de Webseite des Entwicklers
Tag Name::Value[, …] role::program Etiketten, siehe debtags
Package-Type Type deb Normal oder Installer
Multi-Arch no
Source Package Name des Quellpakets
Pre-Depends Package[, …] Abhängigkeit in preinst
Depends Package[, …] Abhängigkeiten
Recommends Package[, …] Empfehlungen
Suggests Package[, …] Vorschläge
Breaks Package[, …] Beschädigung
Conflicts Package[, …] servus Gemeinsame Dateien
Replaces Package[, …] servus Ersatz für anderes Paket
Enhances Package[, …] Umgekehrter Vorschlag
Provides Package[, …] greeting Instanz für virtuelles Paket
Built-Using Package[, …] Zusätzliche Quellpakete
[Epoch:]UpstreamVersion[-DebianRevision]
deb Binärpaket
deb-src Quellpaket
http://deb.debian.org/debian CDN für Spiegelserver
http://security.debian.org Sicherheitsaktualisierungen
https://download.virtualbox.org/virtualbox/debian Oracle VirtualBox
stable Aktuelle Version von Debian
testing Nächste Version von Debian
unstable Aktueller Entwicklungsstand ohne jede Garantie
sid Still In Development
experimental Experimente einzelner Entwickler oder Arbeitsgruppen
main Freie Software gemäß DFSG
contrib Freie Software, die von nicht-freier Software abhängt
non-free Kostenlose Software, die nicht unter einer freien Lizenz steht
non-free-firmware Gerätetreiber von Hardware Anbietern
admin Systemverwaltung
net Netzwerk
mail Elektropost
text Textverarbeitung
utils Hilfsprogramme
web World Wide Web
x11 X Window System
required Minimalsystem
important Netzwerkbetrieb
standard Systemwerkzeuge
optional Anwendungsprogramme
extra Ergänzungen
all Plattformunabhängig
amd64 Aktuelle Intel- und AMD-Prozessoren
i386 Alte PCs und Netbooks
armel NAS mit Kirkwood Chipsatz (Little Endian)
armv6k Raspberry Pi
armhf ARM-Prozessoren mit FPU
arm64 Mobiltelefone
mips[[64]el] Kleine Router, z.B. Fritz!Box
ppc64el IBM p-Series, RS/6000
s390x IBM z-Series, System/390 Großrechner
(Vorgabe) Alle Pakete mit Priorität required und important
minbase Nur Pakete mit Priorität required
buildd …mit build-essential
fakechroot …ohne root-Rechte
no
same
foreign
allowed
deb Normales Paket
udeb Modul des Installers

Paket bauen

Das folgende Minimalbeispiel legt eine Verzeichnisstruktur mit einer Kontrolldatei an und erzeugt daraus ein installierbares Paket.

dest=hello_0.1_all
mkdir -p $dest/{DEBIAN,usr/bin}
cat << . > $dest/usr/bin/hello
echo "Hello, World!"
.
cat << . > $dest/DEBIAN/control
Package: hello
Version: 0.1
Priority: Optional
Maintainer: Frank Hoffmann <phrank@illusioni.de>
Section: main
Architecture: all
Description: Say "Hello" to the world.
 In a nice way.
.
dpkg-deb --build --root-owner-group $dest

Beim Installieren und Entfernen von Paketen führt dpkg Skripte aus. Diese werden in /var/lib/dpkg/info/ abgelegt.

DEBIAN/preinst
Benutzer anlegen
DEBIAN/postinst
Daemon starten
DEBIAN/prerm
Daemon stoppen
DEBIAN/postrm
Daten löschen

Depot füllen

Mit reprepro(1) betreiben wir ein privates Depot. Dazu generieren und exportieren wir auf dem Rechner ein Schlüsselpaar und kopieren dieses auf den Server.

gpg --gen-key
gpg --armor --export            User --output gpg.key
gpg --armor --export-secret-key User --output sec.key
scp *.key Host:

Den privaten Schlüssel importieren wir in den Schlüsselbund und stellen den öffentlichen Schlüssel per Webserver zur Verfügung.

apt install reprepro
export REPREPRO_BASE_DIR=/var/www/html/debian
mkdir   -p $REPREPRO_BASE_DIR/conf
mv gpg.key $REPREPRO_BASE_DIR
gpg --import sec.key

In die Konfigurationsdatei legen wir fest, für welche Architekturen und Distributionen wir Pakete anbieten.

/var/www/html/debian/conf/distributions
Origin: Fnord Motorenwerke Description: Debian Repository for Fnord Motorenwerke Label: fnord Codename: bookworm Suite: stable Components: main Architectures: amd64 SignWith: phrank

Weitere Einstellungen

/var/www/html/debian/conf/options
verbose basedir /var/www/html/debian ask-passphrase

Nun können wir selbst erstelle Pakete dem Depot hinzufügen.

reprepro includedeb bookworm hello_0.1_all.debreprepro remove bookworm hello
/var/www/html/debian/dists/Suite/Component/Architecture/Packages.gz

Depot auf dem Client hinzufügen:

echo "deb http://nuc10/debian bookworm main" >> /etc/apt/sources.list
curl http://nuc10/debian/gpg.key > /etc/apt/trusted.gpg.d/nuc10.asc
apt update
apt install hello

Kochbuch

Paketliste aktualisieren (/var/lib/apt/lists)

apt update

System aktualisieren

apt upgrade

Installierte Pakete auflisten (/var/lib/dpkg/status)

apt list --installed

Paketliste durchsuchen

apt search Keyword

Paket aus einem externen Depot installieren

apt install -t Suite Package

Paket entfernen

apt remove Package

Konfiguration und Daten von deinstallierten Paketen restlos aufräumen.

apt purge $(dpkg -l | grep '^rc' | awk '{print $2}')

Pakete mit bestimmter Priorität finden

aptitude search '~pPriority'

Essentielle Pakete auflisten

aptitude search '?essential'

Grundsystem in Verzeichnis installieren

debootstrap --variant=Variant Suite Dir http://ftp.de.debian.org/debian

Literatur

  1. Debian: Policy Manual
  2. Debian: Backports
  3. Debian Wiki: Packaging Intro
  4. Debian Wiki: Debian Repository Setup With Reprepro
  5. Daniel Burrows: Aptitude user's manual
  6. Frank Hofmann, Axel Beckert: Debian-Paketmanagement-Buch
  7. Triangles: Building binary deb packages: a practical guide, 05/2020