Softwareinstallation unter Linux

LinuxBeginner
Jetzt üben

Einführung

Ubuntu-Software wird normalerweise als Paket bereitgestellt. Repositorys veröffentlichen Paketdateien und Metadaten mit Angaben zu Namen, Versionen, Abhängigkeiten und Download-Speicherorten. apt arbeitet mit Repositorys und löst Abhängigkeiten auf. dpkg verwaltet auf einer niedrigeren Ebene die lokale Datenbank der installierten .deb-Pakete.

Sie aktualisieren Metadaten, suchen vor der Installation nach einem Paket, überprüfen ein installiertes Paket, entfernen es und installieren ein reproduzierbares lokales .deb-Paket. Jede Änderung verwendet ein entbehrliches Übungspaket und lässt sich anhand des Paketstatus statt anhand des Verlaufs im Terminal überprüfen.

Paketstatus und Paketquellen lesen

In diesem Schritt unterscheiden Sie zwischen der Konfiguration der Repositorys, verfügbaren Metadaten und dem Status installierter Pakete.

Überprüfen Sie die aktivierten Paketquellen. Moderne Ubuntu-Images können Dateien mit der Endung .list oder .sources verwenden. Diese schreibgeschützte Pipeline durchsucht beide Speicherorte: grep -R sucht rekursiv, -h blendet Dateinamen aus, -s unterdrückt Meldungen zu fehlenden Dateien und -E aktiviert das gruppierte Suchmuster. head begrenzt die Ausgabe auf zwölf passende Zeilen:

grep -RhsE '^(deb |Types:|URIs:|Suites:)' /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null | head -n 12

Fragen Sie dpkg ab, ob Bash installiert ist. -W wählt Paketdatensätze aus, während -f das Ausgabeformat festlegt. ${Package}, ${Version} und ${db:Status-Status} sind dpkg-Felder und keine Shell-Variablen, weil sich das Format innerhalb einfacher Anführungszeichen befindet:

dpkg-query -W -f='package=${Package} version=${Version} status=${db:Status-Status}\n' bash

dpkg-query liest den lokalen Status installierter Pakete. Im Gegensatz dazu vergleicht apt-cache policy die installierte Version mit den Versionen, die aus den konfigurierten Repositorys bekannt sind:

apt-cache policy bash

Speichern Sie eine stabile Beobachtung des Installationsstatus:

mkdir -p /home/labex/project/package-lab
dpkg-query -W -f='${Package} ${db:Status-Status}\n' bash > /home/labex/project/package-lab/bash-state.txt
cat /home/labex/project/package-lab/bash-state.txt

Repository-Metadaten aktualisieren

In diesem Schritt aktualisieren Sie den Paketindex und lernen, welche Änderungen apt update vornimmt.

Führen Sie den folgenden Befehl aus:

sudo apt update

Dabei werden aktuelle Repository-Metadaten heruntergeladen. Es werden nicht automatisch neuere Versionen aller Pakete installiert. Das Aktualisieren installierter Pakete ist ein separater Vorgang mit apt upgrade.

Überprüfen Sie das Verzeichnis mit dem Metadaten-Cache:

ls -ld /var/lib/apt/lists
find /var/lib/apt/lists -maxdepth 1 -type f | head

Ermitteln Sie, wie viele reguläre Metadatendateien vorhanden sind:

find /var/lib/apt/lists -maxdepth 1 -type f | wc -l | tr -d ' ' > /home/labex/project/package-lab/index-file-count.txt
cat /home/labex/project/package-lab/index-file-count.txt

Ein Repository-Paket suchen, überprüfen und installieren

In diesem Schritt untersuchen Sie ein Paket, bevor Sie es installieren.

Suchen Sie in Paketnamen und Beschreibungen nach dem Dienstprogramm zum Auflisten von Verzeichnisbäumen:

apt search '^tree$'

Lesen Sie die Paketmetadaten:

apt show tree

Installieren Sie das Paket und lassen Sie dabei Abhängigkeiten verwalten. sudo stellt die erforderlichen Administrationsrechte bereit. -y beantwortet diese zuvor geprüfte Installationsanfrage automatisch mit „Ja“:

sudo apt install -y tree

Überprüfen Sie anschließend sowohl den Paketstatus als auch die Auflösung des Befehls und führen Sie ihn aus:

dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' tree | tee /home/labex/project/package-lab/tree-installed.txt
command -v tree
tree -L 1 /home/labex/project/package-lab

Listen Sie die vom Paket bereitgestellten Pfade auf:

dpkg -L tree | head

Ein Paket entfernen und das Ergebnis überprüfen

In diesem Schritt entfernen Sie das Übungspaket aus dem Repository und unterscheiden zwischen verwandten Bereinigungsvorgängen.

Entfernen Sie tree:

sudo apt remove -y tree

remove löscht die vom Paket installierten Programme, kann jedoch die Paketkonfiguration beibehalten. purge entfernt zusätzlich die zum Paket gehörende Konfiguration. autoremove entfernt Abhängigkeiten, die automatisch installiert wurden und nicht mehr benötigt werden. Überprüfen Sie den Vorschlag, bevor Sie diesen Befehl auf einem echten Host bestätigen.

Zeigen Sie an, was eine Bereinigung der Abhängigkeiten bewirken würde, ohne das System zu ändern. Die Option --dry-run führt die Berechnung aus, entfernt aber nichts:

sudo apt autoremove --dry-run | tee /home/labex/project/package-lab/autoremove-preview.txt

Lesen Sie die vorgeschlagenen Aktionen, bevor Sie apt autoremove jemals ohne --dry-run ausführen, insbesondere auf einem gemeinsam genutzten oder produktiven Host.

Die aktuelle Bash-Sitzung kann sich noch an den alten Pfad eines Befehls erinnern. Leeren Sie diesen Befehls-Cache. Überprüfen Sie anschließend, dass der Befehl nicht mehr vorhanden ist, und speichern Sie den Status in der Paketdatenbank:

hash -r
command -v tree || echo "tree command is unavailable"
dpkg-query -W -f='${db:Status-Status}\n' tree 2>/dev/null || echo "not-installed" | tee /home/labex/project/package-lab/tree-removed.txt

Legen Sie unabhängig davon, ob dpkg einen Restdatensatz beibehält, eine stabile Statusmarkierung an:

if dpkg-query -W -f='${db:Status-Status}' tree 2>/dev/null | grep -qx installed; then echo "still-installed"; else echo "not-installed"; fi > /home/labex/project/package-lab/tree-removed.txt
cat /home/labex/project/package-lab/tree-removed.txt

Ein lokales Deb-Paket überprüfen und installieren

In diesem Schritt überprüfen Sie ein vorbereitetes .deb-Paket, installieren es mit apt, führen den enthaltenen Befehl aus und entfernen das Paket anschließend vollständig.

Wechseln Sie in den Arbeitsbereich und überprüfen Sie die Paketmetadaten sowie den Paketinhalt, ohne das Paket zu installieren:

cd /home/labex/project/package-lab
dpkg-deb -I labex-greeter_1.0_all.deb
dpkg-deb -c labex-greeter_1.0_all.deb

Das Präfix ./ teilt apt mit, dass es sich um eine lokale Datei und nicht um den Namen eines Repository-Pakets handelt:

sudo apt install -y ./labex-greeter_1.0_all.deb

Fragen Sie das Paket ab und führen Sie den enthaltenen Befehl aus:

dpkg-query -W -f='${Package} ${Version} ${db:Status-Status}\n' labex-greeter
labex-greeter | tee local-package-output.txt

Entfernen Sie das Paket nach dem Test und weisen Sie nach, dass der enthaltene Befehl nicht mehr vorhanden ist:

sudo apt remove -y labex-greeter
if command -v labex-greeter >/dev/null; then echo "still-installed"; else echo "local-package-removed"; fi > local-package-state.txt
cat local-package-state.txt

Zusammenfassung

Sie haben Repository-Metadaten vom Status installierter Pakete unterschieden, die apt-Indizes aktualisiert, ein Paket vor der Installation untersucht, bereitgestellte Dateien und die Befehlsauflösung überprüft, ein Repository-Paket entfernt und den vollständigen Lebenszyklus eines untersuchten lokalen .deb-Pakets durchlaufen.