orm@doc-tcpip.org | Erstellt: Januar 2012 - Letzte Modifikation: Februar 2021 |
Hier handelt es sich sowohl um ein Format von installierbaren Software-Paketen als auch um einen Satz von Kommandos, die mit diesen Paketen umgehen. Das Format erlaubt Versionierung und die Definition von Abhängigkeiten. Mit den Kommandos kann man alle Arten von Abfragen machen, Pakete Verifizieren, Installieren, Updaten und entfernen.
Ist ein Satz an Kommandos, mit denen unter Debian die Software verwaltet wird. Es ist analog zu RPM. Das Format der Paket heisst hier "deb", ein Archive, in dem zwei TAR Archive eingebettet sind (control und data).
Diese Tool setzt auf RPM auf und bietet ein kompletes Paket Management mit automatischen Updates, dem Management von Abhängigkeiten und einer Infrastruktur aus Software Repositories im Netz (oder Lokal). Es wird eine Software-Datenbank auf dem lokalen System erzeugt und gepflegt - es ist also empfehlenswert, nichts mehr an YUM vorbei zu installieren.
APT ist ein Tool spezifisch für Debian und seine Abkömmlinge. Es ist ein Frontend für das dpkg Kommando. Das Verhältnis von DPKD zu APT ist analog zu dem von RPM und YUM. Es gelten hier auch die Aussagen zu YUM.
Ein gegebenes RPM Paket läßt sich per rpm-Kommando nur unter gleichzeitiger Angabe alle abhängigen Pakete installieren oder entfernen. Der Administrator ist also aufgefordert, die Dependencies aufzulösen und alle Pakete bereitzustellen. Um das zu vereinfachen, benutzt man YUM (im Fall von Debian stellt sich das Problem nicht, da APT die Funktionalität mitbringt).
YUM wird in der Datei /etc/yum.conf parametrisiert. Zur Funktion braucht es Software Repositories, die im Verzeichnis /etc/yum.repos.d definiert sind. Dort gibt es für jedes gewünschte Repository ein blabla.repo File.
rpm -i xyz.rpm ==> Dependencies muß man selber lösen und die Pakete mitgeben yum install xyz ==> YUM macht alles (wenn die Sachen im Repository zu finden sind) yum localinstall xyz.rpm ==> wenn man das Paket lokal hat
rpm -e xyz.rpm ==> Dependencies muß man selber lösen und die Pakete nacheinander beseitigen --test ==> zeigt, was so an dem Paket hängt --nodeps ==> wenn man nur das eine Paket löschen möchte, aber alle Abhängigen nicht yum remove xyz ==> YUM macht alles
yum update ==> das ganze System wird mit den neuesten Version aus den definierten Repos installiert yum update 'yxz*' ==> nur diese Gruppe an Paketen wird installiert rpm -U ==> es wird entweder das bestehende Paket geupdated, oder das Paket wird installiert rpm -F ==> es wird nur ein schin vorhandes Paket geupdatet (Freshen) -v ==> erweiterte Informationen -h ==> es werden Hash-Marks gesetzt, man sieht, wie es vorangeht Man kann die Pakete aus verschiedenen Quellen beziehen: rpm -Uvh *.rpm http://blabla/bloblo/xyz.rpm Hier wird alles geupdate oder installiert, was im loaklen Verzeichnis .rpm heisst. Zusätzlich wird das Paket xyz.rpm geholt und verarbeitet.
RPM und YUM haben eine Datenbank, die man abfragen kann - als normaler User. yum list xy ==> Ist es installiert? yum info xy ==> Detailierte Info zum Paket yum search xy ==> Findet zusammenhängende Pakete und umliegende Ortschaften yum provides /path/to/xy ==> Welches rpm und repo bringt dieses File? In der Regel ist rpm das Mittel der Wahl für gezielte Informationen: rpm -qa ==> Was ist alles installiert? rpm -q xy ==> Ist dieses Paket installiert? rpm -qi xy ==> Detailierte Info zum Paket rpm -ql xy ==> Alle Files im installierten Paket rpm -qpi xy.rpm ==> Detailierte Info zum lokalen Paket rpm -qlp xy.rpm ==> Alle Files im Paket -c ==> Zeigt nur Konfigurations-Files -d ==> Zeigt nur Dokumentations-Files rpm -qf /../abc ==> Zu welchem Paket gehört ein File? rpm -qf 'which cmd_abc' ==> Zu welchem Paket gehört ein Kommando? rpm -qf $(cmd_abc) ==> Alternative ... Die Abhängigkeiten (Dependencies) eines Pakets rpm -qR xy ==> Für ein installiertes Paket (rpm -q --requires) rpm -qpR xy.rpm ==> Für ein Paket Welche Dependencies bringt das Paket eventuell mit? rpm -q --provides Allerdings werden hier nicht die Packages gezeigt, sondern nur die nötigen Files oder Libraries. Die Packages, die das mitbringen, findet man im YUM: yum deplist $(rpm -q xy) - schlauerweise grept man nach "provider": yum deplist $(rpm -q xy) |grep provider|awk '{ print $2 }' Einen Downgrade durchführen: rpm -U==> Package wird in der älteren Version neu instatlliert (rpm hat folgende Funktionalitäten: --oldpackage ==> letzte Version installieren --replacepkgs, ==> schon installierte Packages überschreiben --replacefiles ==> schon installierte Files überschreiben)
Dabei wird die installierte Software gegen die Daten in der RPM DB verglichen. Abweichungen werden angezeigt. # rpm -Va (geht über alle Files in der RPM DB) ... .M....... /opt/ibm/notes/doFCRC39.so .....UG.. g /var/run/avahi-daemon SM5....T. /etc/ibm/lotus/expeditor/Notes.cfg ....L.... c /etc/pam.d/fingerprint-auth S.5...... c /etc/security/limits.conf missing /var/spool/cups/tmp (Permission denied) ... Die ersten beiden Spalten zeigen Daten zum File. Die Felder sind: S: Größe des Files weicht ab M: Mode, also Permissions und File Type, weichen ab 5: Der Inhalt (über eine Checksumme, zB. MD5) weicht ab L: Ein Link zeicht woanders hin U: UID weicht ab G: GID weicht ab T: Das File wurde geändert Die zweite Spalte zeigt den Typ des Files, wie er beim Erstellen des RPMs festgelegt wurde: c: Konfigurationsfile (%config) d: Dokumentation (%doc) l: Lizenz File (%license) r: Readme File (%readme) Im Listing sind die Buchstaben dort gesetzt, wo Abweichungen gefunden wurden. Ist ein File nicht mehr vorhanden, wird "missing" angezeigt. Man kann das natürlich auch auf ein RPM und auf ein installiertes Package anwenden: rpm -Vp xy.rpm rpm -V xy Yum bringt auch einen etwas komfortableren Mechanismus mit, allerdings muss man ein Plugin installieren: yum-plugin-verify yum verify(prüft keine Konfigurations-Files) yum verify-rpm (prüft alles) Hat man Differenzen gefunden, und möchte den Original-Zustand wieder herstellen: Mit rpm gibt es die Optionen --setperms und --setugids Mit yum nutzt man das "reinstall" Kommando Prüfen des Hashes eines Packages: rpm -K xy.rpm
yum repolist all ==> zeigt alle konfigurierten Repositories Diese Repos kann man an- und ausschalten: yum-config-manager --enableyum-config-manager --disable yum-config-manager ==> zeigt alle Details zu den konfigurierten Repositories Repositories anlegen: yum-config-manager --add-repo "http://content.example.com/rhel8.0/x86_64/blabla/blub" Oder man editiert ein File in /etc/yum.repos.d/ Das File muss die Endung .repo haben, und in dem File sind enthalten: die URL, der Name, ob GPG benutzt wird, und für diesen Fall der URL zum GPG Key. Den GPG kann man mit dem Keywort "gpgcheck=0" an- und ausschalten. Temporär kann man sowohl einzelne Repositories an- und ausschalten, sowie den GPG Check unterbinden: --enablerepo=PATTERN --disablerepo=PATTERN --nogpgcheck
yum update kernel ==> installiert einen neuen Kernel. Der alte Kernel bleibt erhalten und kann im Notfall gebootet werden. yum list kernel ==> zeigt alle Kernels, die so rumliegen. (uname -r und uname -a zeigen den Kernel, der wirklich läuft).
yum hat ein Gruppen-Konzept. Es gibt "regular groups" (verwandte Software Packages) und "environmental groups" (ein Set von regular groups). Die Bestandteile einer Gruppe koennen die Typen mandatory, default und optional haben. yum group list ==> zeigt alle installierten und zugaenglichen Gruppen. yum group info "gruppen_name" ==> zeigt alle Packages in der Gruppe und ihren Typ. yum group install "gruppen_name" ==> installiert eine Gruppe Hat man noch RHEL 6, so muss man eventuell die Gruppen als "installiert" markieren, damit der automatische Update funktioniert: yum group mark install "gruppen_name"
yum hat eine History-Funktion. Damit kann man gezielt einzelne Transaktionen anzeigen, zurückrollen, nochmal machen oder entfernen. yum history list ==> zeigt die Liste mit den letzten 20 Transaktionen. yum history list all ==> zeigt die Liste mit allen Transaktionen. Angezeigt werden die Transaktion_ID, User, Datum, Aktion und Änderungen: Downgrade D mindestens ein Package wurde downgraded. Erase E ... entfernt. Install I ... installiert. Obsoleting O ... als obsolete geflagged. Reinstall R ... neu installiert. Update U At ... geupdated. Symbol für das Feld Änderungen: < die rpmdb database wurde vor dem Lauf geändert (nicht von yum) > die rpmdb database wurde nach dem Lauf geändert (nicht von yum) * die Transaktion konnte nicht beendet werden # yum gab einen return code über 0 zurück E es gab einen Fehler oder eine Warnung P es gibt Probleme in der rpmdb database s die skip-broken Option wurde benutzt, und Pakete übersprungen yum history info 1 ==> zeigt detaillierte Information zu Transaktion_ID 1. yum history info package-name ==> das Gleiche für den Namen des Packages. yum history rollback Transaktion_ID ==> Rollt zurück. yum history redo Transaktion_ID ==> führt die Aktion nocheinmal aus. Diese Option kennt weitere Argumente: force-reinstall und force-remove yum history rollback 16 ==> Roll-Back von Transaktion 1 bis 16.
Welche Versionen eines Packages stehen zur Auswahl: yum list --showduplicatesDer Downgrade: yum downgrade
Mit einem Plugin (yum-plugin-versionlock) kann yum einzelne Packages oder Gruppen in einer bestimmten Version locken. Diese werden dann nicht updated. yum versionlock add(geht auch mit Wildcards oder Gruppe) yum versionlock delete (geht auch mit Wildcards oder Gruppe) yum versionlock clear yum versionlock list Vorhandene yum Plugins findet man mit: yum list available yum-plug*
Da YUM auf RPM basiert, ist die Datenbank die RPM Datenbank. Das sind Files, die in /var/lib/rpm/ liegen. Sollte diese Datenbank inkonsistent sein, so muss man sie neu anlegen. Fehler äussern sich meist bei Queries, was sich leicht testen lässt: # rpm -qa > /dev/null Vorgehen: - Alte Lock Files entfernen: # lsof | grep /var/lib/rpm - Indexes der DB entfernen: # rm /var/lib/rpm/__db* - Sicherheitskopie: # tar cjvf rpmdb-$(date +%Y%m%d-%H%M).tar.bz2 /var/lib/rpm - Integrität der DB prüfen: # /usr/lib/rpm/rpmdb_verify Packages - Alte DB dumpen und neue anlegen mit diesen Daten: # mv Packages Packages.bad # /usr/lib/rpm/rpmdb_dump Packages.bad | > /usr/lib/rpm/rpmdb_load Packages - Verify sollte jetzt gehen: # /usr/lib/rpm/rpmdb_verify Packages - Indexes neu anlegen: # rpm -v --rebuilddb Logs: /var/log/yum.log
Ein RPM Archive ist ein Wrapper für ein CPIO Format. Also in ein CPIO verwandeln mit rpm2cpio: rpm2cpio mein_archive.rpm | cpio -idv
Das "apt" Kommando in sich selbst ist wieder ein Frontend für spezialisierte Kommandos wie "apt-get", "apt-cache" etc. Der Befehl "apt" ist für die direkte Administration gut geeignet, in Skripten sollte man (noch) auf die speziellen Kommandos zurückgreifen. Die Befehle auf der Ebene des OS kommen aus dem "dpkg" Package, "apt" ist also ein Satz "high level" Kommandos, die die Adminstration und den automatischen Download erleichtern.
Welche Software Packages installiert werden können, legen die konfigurierten Repositories fest. Diese Information wird im File /etc/apt/sources.list abgelegt.
Das Verhalten von APT kann konfiguriert werden im File /etc/apt/apt.conf.
apt list (listed alle installierbaren Packages in der Source) apt list --installed (listed alle installierten Packages) apt list --upgradable (listed alle update-fähigen Packages) apt list --upgradable -a (wenn es mehrere Versionen gibt) apt show "package" (zeigt Details zu diesem Package - apt-cache show) Für gezielte Informationen nutzt man dpkg direkt: dpkg -l ==> Was ist alles installiert? dpkg -l xy ==> Ist dieses Paket installiert? dpkg -L xy ==> Alle Files im installierten Paket Alle Files in einer Package: dpkg -i_ - _ .deb dpkg -S /../abc ==> Zu welchem Paket gehört ein File? dpkg -S abc ==> Zeigt alle Pakete, die "abc" mitbringen dpkg -S 'which cmd_abc' ==> Zu welchem Paket gehört ein Kommando? dpkg -S $(cmd_abc) ==> Alternative ... Die Abhängigkeiten (Dependencies) eines Pakets
apt install xtensor-dev 3dchess- (installiere xtensor, deinstalliere 3dchess) apt install xtensor-dev 3dchess+ (deinstalliere xtensor, installiere 3dchess) apt install "package" (installiert ein Package - auch apt-get install package) Software finden: apt search "package" (nach einem Paket suchen - auch apt-cache search)
Repositories ändern oder anlegen: apt edit-sources (editiert das File mit den Sources - /etc/apt/sources.list) Manuell geht das natürlich auch, hier eine Beispiel-Zeile: deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi Umstellen von Release "stretch" auf "buster": sed -i /deb/s/stretch/buster/g /etc/apt/sources.list sed -i /deb/s/stretch/buster/g /etc/apt/sources.list.d/*.
apt remove "package" (deinstalliert ein Package - auch apt-get remove package) apt purge "package" (deinstalliert ein Package mit Konfiguration - apt-get purge) apt autoremove (entfernt nicht benötigte Pakete - apt-get autoremove)
Das ist ein Prozess in zwei Stufen: Aktualisieren des Software Index: apt update (liest den Repository Index ein - auch apt-get update) Installation der Software: apt upgrade (installiert alle update-fähigen Packages - auch apt-get upgrade) Oft werden dadurch installierte Packages überflüssig: apt full-upgrade (alle Abhängigkeiten werden automatisch erledigt - apt-get dist-upgrade)
dpkg-reconfigure==> die Software wird neu konfiguriert dpkg-reconfigure -p=low ==> die Software wird komplett neu konfiguriert configure-debian ==> interaktiven Kommando dazu dpkg --audit ==> Software Datenbank prüfen - Installationszustand dpkg --configure -a ==> alle teilinstallierten Packages konfigurieren Die Datenbank liegt in /var/lib/dpkg und einer Reihe Unter-Verzeichnisse: Für jedes Package gibt es detailierte Informationen/Konfigurationen: ./info/ .conffiles ==> Konfigurationsfiles ./info/ .list ==> Inventory ./info/ .md5sums ==> Hashes der Files ./info/ .preinst (postinst, prerm, postrm, config) ==> Skripte, die vor bzw. nach der Installation oder der Deinstallation ausgeführt werden. /alternatives/ ==> Alternativen für "update-alternatives" /available ==> vorhandene Software /status ==> Status dazu
Das ganze Set in zwei Files, hier mit dem Namen "inst_sw": dpkg --get-selections '*' > inst_sw.dpkg (mit dem Argument kann man steuern, welche Status der SW berücksichtigt werden sollen. Mit "*" kommt also mit, also auch Software, die zum löschen ansteht) debconf-get-selections > inst_sw.debconf Auf einem anderen Rechner kann man dieses Set installieren: dselect update debconf-set-selections < inst_sw.debconf dpkg --set-selections < inst_sw.dpkg apt-get -u dselect-upgrade (oder dselect install)
Die "*.deb" Files sind Archive, die wiederum Tar-Archive enthalten. Man muss als mit den Kommandos "ar" und "tar" arbeiten: # ar x /meine/software/dpkg__ .deb # ls control.tar.gz data.tar.gz debian-binary # mkdir control # mkdir data # tar xvzf control.tar.gz -C control # tar xvzf data.tar.gz -C data
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL