1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Pakete verwalten

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.

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

Um Pakete nur einmal aus dem Internet zu holen, kann man auf einem lokalen Server den Apt-Cacher betreiben, der als Proxy für alle Rechner im Netzwerk Pakete speichert.

/etc/apt/apt.conf.d/02proxy
Acquire::http { Proxy "http://Host:3142"; };

Kochbuch

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

apt update

System aktualisieren

apt upgrade

Installierte Pakete auflisten

apt list --installed

Paketliste durchsuchen

apt search Keyword

Paket aus einem externen Depot installieren

apt install -t bullseye-backports 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'

Werkzeug

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

dpkg [File] Einzelne Paketdatei (*.deb) verarbeiten
dpkg-deb File [Dir] Paketdatei (*.deb) erzeugen
apt Command [Package] Oberbau für apt-get und apt-cache
apt-get Pakete aus dem Internet installieren
apt-cache Lokale Paketlisten durchsuchen
apt-key Command PGP-Schlüssel verwalten
tasksel [Task] Paketsammlungen auswählen
apticron Aktualisierungen per Elektropost ankündigen
aptitude Curses Oberfläche für apt
synaptic Graphische Oberfläche für apt
-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
-t, --test Testmodus
--new-install Dialog mit Desktop, 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

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 Ebenfalls freie Software, die aber von nicht-freier Software abhängt
non-free Kostenlose Software, die nicht unter einer freien Lizenz steht; hauptsächlich Firmware
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
Default 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) können wir ein privates Depot betrieben. Dazu generieren und exportieren wir auf dem Arbeitsrechner 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 nas:

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 Architektur und Distribution wir Pakete anbieten.

/var/www/html/debian/conf/distributions
Origin: Fnord Motorenwerke Description: Debian Repository for Fnord Motorenwerke Label: fnord Codename: bullseye 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 bullseye hello_0.1_all.debreprepro remove bullseye hello
/var/www/html/debian/dists/Suite/Component/Architecture/Packages.gz

Depot auf dem Client hinzufügen:

curl http://nas/debian/gpg.key | apt-key add
echo "deb http://nas/debian bullseye main" >> /etc/apt/sources.list
apt update
apt install hello

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