class: center, middle ![img33r](distribution.png) ## Linux begreifen 2a:Paketverwaltung ### Hauke Goos-Habermann #### https://weisheit.goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Verwendet Linux seit 1996 auf vielen Systemen. --- ### Serie: Linux begreifen ![img33r](Administration_von_Debian_und_Co_im_Textmodus-2021.png) * **Nicht**: *"1000 unglaublich tolle Tips, wie Du Deinen Desktop noch schicker machen kannst"* * Sondern für alle gedacht, die sich **eingehender** mit Linux beschäftigen wollen * Hintergründe und Grundlagenwissen * Praxisbezug * Fähigkeiten auf den Kommandozeile * Konfiguration ohne grafische Oberfläche * **Jetzt buchen: *Schulungen und Workshops*** * Online oder vor Ort * Wunschthemen aus Linux- und OpenSource-Bereich * Aufzeichnung als Video * Anfragen:
https://goos-habermann.de/kontakt
Kostenloses Basisschulungsmaterial:
https://goos-habermann.de/data/Administration_von_Debian_und_Co_im_Textmodus-2021.pdf
--- ### Stichwort: Paketverwaltung ![img33r](distribution.png) Bei vielen Distributionen wird die Software in **Paketen ausgeliefert** und über diese **installiert**. Statt die Pakete mühsam einzeln aus dem Internet herunterzuladen und zu installieren, kümmert sich die Paketverwaltung (bzw. package manager) um diese Aufgaben * Herunterladen eines Softwarekataloges aus dem Internet * Bezug von Paketen * (De-)Installation * Aktualisierung von installierter Software * (Grund-)Konfiguration Paketmanager gibt es sowohl auf der Kommandozeile, als auch mit grafischer Oberfläche. --- ### Debian-Pakete 1/2 ![img20r](paket.png) Ein Paket ist ein komprimiertes Archiv mit Verwaltungs- und Skriptdateien, sowie einem Datenteil (die eigentliche Software). Unter ***./DEBIAN*** liegen ausschließlich **paketinterne Dateien** und wird beim Installieren **nicht** ins Wurzelverzeichnis des Dateisystems entpackt: * **Paketinformationen** (z.B. Paketname, Abhängigkeiten, installierte Größe): DEBIAN/control (immer benötigt) * **Konfigurationsdialoge** (Textmodus mit blauem Hintergrund bei Debian, mit Lilahintergrund bei Ubuntu): DEBIAN/templates * Auswertung der Konfigurationsdialoge und Speichern in der **debconf** die **Debian-Konfigurationsdatenbank** **Alle anderen** Dateien und Verzeichnisse landen so unter **/**. --- ### Debian-Pakete 2/2 ![img20r](paket.png) **Skripte** werden ausgeführt * **nach** der Paket**installation**: DEBIAN/postinst * **nach** der Paket**deinstallation**: DEBIAN/postrm * **vor** der Paket**installation**: DEBIAN/preinst * **vor** der Paket**deinstallation**: DEBIAN/prerm Mehr zu Paketen und Paketverwaltung * Video:
Weihnachtsspezial: Debian-Pakete packen
* Video:
wine-Anwendung in Debian-Paket verpacken
* Video:
Server absichern - Paketverwaltung und automatische Updates
--- ### dpkg ![img20l](paket.png) Das Kommandozeilenprogramm *dpkg* kann ***einzelne* Debian-Paketdateien installieren**, **Informationen** zu installierten Paketen **ausgeben**, auflisten, welche **Dateien** sich **in einem Paket** befinden und vieles mehr, aber **keine Pakete herunterladen** oder Abhängigkeiten auflösen. Einige Funktionen von *dpkg*: * Paketdatei(en) installieren: ***dpkg -i [Paket1.deb] [Paket2.deb]*** * Pakete deinstallieren: ***dpkg -r [Paket1] [Paket2]*** * Pakete komplett (z.B. auch Konfigurationsdateien) deinstallieren:***dpkg -P [Paket1] [Paket2]*** * Liste (de)installierter Pakete: ***dpkg --get-selections*** * Alle Dateien in einem installierten Paket auflisten: ***dpkg -L [Paket]*** * Welches **installierte Paket** enthält Datei/Verzeichnis?:***dpkg -S [Datei/Verzeichnis]*** * Informationen zu einem installierten Paket abfragen: ***dpkg -s [Paketname]*** Möchte man die **Konfiguration** eines Paketes nachträglich **ändern**, so geschieht dies über den Befehl *dpkg-reconfigure [Paketname]*. --- ### APT ![img20r](paket.png) APT (**A**dvanced **P**ackaging **T**ool) ist für die *normale Paketverwaltung*, also auch das Herunterladen von Paketen zuständig: * **Informationen** über installierbare Pakete aktualisieren: ***apt-get update*** * Installierbare Pakete **suchen**:***apt-cache search [Suchbegriff]*** * Paket(e) **herunterladen** und **installieren**: ***apt-get install [Paket1] [Paket2]*** * Bereits installierte Paket(e) **erneut installieren**: ***apt-get --reinstall install [Paket1] [Paket2]*** * Installierte Pakete **aktualisieren**: ***apt-get upgrade*** * Installierte Pakete aktualisieren (ggf. werden **zusätzliche Pakete** installiert): ***apt-get dist-upgrade*** * Paket(e) **entfernen**: ***apt-get remove [Paket1] [Paket2]*** * Nicht mehr benötigte Paket(e) **automatisch entfernen**, die ursprünglich als Abhängigkeit von jetzt deinstallierten Paketen installiert wurden:***apt-get autoremove*** * **Paketgruppen** anzeigen: ***tasksel --list-tasks*** * Paketgruppe **installieren**: ***tasksel install [Paketgruppe]*** * **Paketinstallationsdateien löschen**: ***apt-get clean*** --- ### apt-get, apt-cache oder nur apt? ![img20r](paket.png) Statt die Parameter an ***apt-get*** oder ***apt-cache*** zu übergeben, könnt Ihr diese auch mit dem neueren und **kombinierten** ***apt***-Kommando verwenden. So wird aus ```bash apt-cache search vim ``` dann ```bash apt search vim ``` . Die **Ausgabe** kann sich aber bei einzelnen Kommandos **voneinander unterscheiden**, sodaß ich Euch entscheiden müßt, wenn Ihr die Ausgabe parsen möchtet. --- ### Paketquellenliste ![img20r](notizen.png) Damit APT weiß, von wo die Pakete heruntergeladen/kopiert werden können, werden in der Datei ***/etc/apt/sources.list*** und/oder in ***.list***-Dateien unter ***/etc/apt/sources.list.d/*** die Quellen festgelegt. Hinter der Angabe der jeweiligen Art der Quelle (***deb*** für fertige binäre Pakete, ***deb-src*** für Quellcode) folgen die Angabe der Quelladresse, der Version (hier bookworm) und der Archivbereiche, aus denen Software geladen werden soll. ```bash deb http://deb.debian.org/debian/ bookworm main non-free\ non-free-firmware contrib ``` ***main*** beschreibt hierbei den Teil der Quelle, der ausschließlich Software enthält, die fest zur Distribution gehört. ***non-free*** und ***non-free-firmware*** enthalten Software, die nach den
Debian Free Software Guidelines
als unfrei gilt. ***contrib*** beinhaltet Pakete, die zwar selbst nach dieser Richtlinie als frei gelten, aber **von** Software aus **non-free abhängig** sind. --- ### Beispiel-Paketquellenliste Neben den Internetpaketquellen können auch **lokale Verzeichnisse** mit Debian-Paketen (ein Index muß vorhanden sein) oder Wechselmedien angegeben werden. ```bash #Binaer-Pakete deb http://deb.debian.org/debian bookworm main contrib non-free\ non-free-firmware deb http://security.debian.org/debian-security bookworm-security\ main contrib non-free non-free-firmware #Quellcode-Pakete deb-src http://deb.debian.org/debian bookworm main contrib\ non-free non-free-firmware #Lokale Paketquelle deb file:/meinmirror/ bookworm main non-free contrib #CD/DVD deb cdrom:[Debian GNU/Linux 12.1.0 _Bookworm_ - Official amd64 NETINST\ with firmware 20230722-10:48] bookworm main non-free-firmware ``` --- ### Sicherheit (Signatur) ![img20r](schloss.png) Damit **Pakete nicht verfälscht** (durch bewußte Manipulation oder Übertragungsfehler) werden, sind diese durch **Checksummen** und **digitale Signaturen geschützt**. Die Datei ***
Release
*** enthält Checksummen über die Paketindexdateien (***
Packages
*** und die komprimierten Versionen), die ihrerseits Checksummen über alle Pakete enthalten. Mittels GPG-Signatur wird die Release-Datei gegen Manipulationen abgesichert: * ***
InRelease
***: Enthält den kompletten Inhalt der Release-Datei und bettet die GPG-Signatur ein * ***
Release.gpg
***: Enthält nur die GPG-Signatur --- ### Sicherheit ![img20r](schloss.png) Der öffentliche Teil des Signaturschlüssels wird heruntergeladen (*repo.asc*) und anschließend importiert, bzw. als Datei genutzt: **Alte Variante** (funktioniert noch immer) ```bash apt-key add repo.asc ``` **Neue Variante** Von ASCII- in binäre Kodierung umwandeln: ```bash gpg --dearmor < repo.asc > /etc/apt/trusted.gpg.d/repo.gpg ``` In der sources.list (oder einer eigenen .list-Datei) eintragen: ```bash deb [signed-by=/etc/apt/trusted.gpg.d/repo.gpg] https://... ``` --- ### Was steht wo? ![img33r](wegweiser.png) Die Paketverwaltung speichert Zustandsinformationen in verschiedenen Dateien: * ***/var/lib/dpkg/status***:APTs Paketdatenbank mit Informationen über alle Pakete, die auf dem System installiert sind oder waren. * ***/var/lib/dpkg/info/\****:Skripte, debconf-Dialoge, Dateilisten mit Checksummen und Weiteres aus dem Informationsbereich von Paketen * ***/var/lib/dpkg/arch***:Vom System unterstützte Architekturen. * ***/var/log/apt/term.log***:Konsolen-Ausgaben von vergangenen APT-Aufrufen. * ***/var/log/apt/history.log***:Informationen über vergangene APT-Aufrufe (z.B. Start- und Endzeit, Aktion, betroffene Pakete, etc.). --- ### Problemlösung ![img33r](pinguinhandwerker.png) Wurde die Installation von Paketen unterbrochen (z.B. wegen nicht erfüllter Abhängigkeiten nach einer manuellen Paketinstallation mittels ***dpkg -i Paket.deb***), so kann diese mit ***apt-get install -f*** wieder aufgenommen werden. In seltenen Fällen (meist, wenn in der Paketquellenliste Quellen kombiniert werden, die nicht zusammenpassen) kann der ***"Vorschlaghammer"*** nötig sein, um ein Paket dennoch zu installieren: ```bash dpkg -i --force-all Paketname.deb ``` Dies sollte aber nur der **letzte Lösungsansatz** sein! Wurde das Paket bereits mit APT heruntergeladen, so befindet es sich im Verzeichnis ***/var/cache/apt/archives/***. --- ### Flatpak ![img33r](Pappkarton.png) Flatpak ist ein alternatives freies Paketformat, das distributionsunabhängige Pakete bereitstellt und ***am offiziellen Paketmanager vorbeiarbeitet***. Da nur wenige Bibliotheken der Distribution verwendet werden, müssen viele Bibliotheken doppelt (und ggf. in verschiedenen Versionen) heruntergeladen und auf der Platte abgelegt werden, was einen **erhöhten Speicherbedarf** nach sich zieht. ```bash # Flatpak apt install flatpak # GNOME-Anbindung apt install gnome-software-plugin-flatpak # KDE-Anbindung apt install plasma-discover-backend-flatpak # Flathub-Paketquelle aktivieren flatpak remote-add --if-not-exists flathub\ https://flathub.org/repo/flathub.flatpakrepo ``` --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de