orm@doc-tcpip.org

Erstellt: Januar 2012 - Letzte Modifikation: Februar 2021

[ Main | Local ]


Tools zum Management von Software Paketen


RPM - RedHat Paket Manager

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.

DPKG - Debian Package

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).

YUM - Yellowdog Updater Modified

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 - Advanced Packaging Tool

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.

RPM und YUM in der Praxis

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.

Installieren mit yum und rpm

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

Entfernen mit yum und rpm

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 

Updaten mit yum und rpm

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.

Information zur Software abfragen

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)

Installierte Software validieren

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

Ein Repository definieren mit yum

yum repolist all ==> zeigt alle konfigurierten Repositories

Diese Repos kann man an- und ausschalten:
yum-config-manager --enable  
yum-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

Installation / Update eines neuen Kernels mit yum

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).

Installation / Entfernen einer Gruppe von Packages mit yum

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"

History Funktion von yum

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.

Downgrade von Packages mit yum

Welche Versionen eines Packages stehen zur Auswahl:
yum list --showduplicates 

Der Downgrade:
yum downgrade 

Packages vom Update ausnehmen

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*

RPM Datenbank neuanlegen, Logging

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 auspacken (ohne es zu installieren)


Ein RPM Archive ist ein Wrapper für ein CPIO Format. Also in ein CPIO 
verwandeln mit rpm2cpio:

  rpm2cpio mein_archive.rpm | cpio -idv

DPKG und APT im praktischen Umgang

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.

Information zur Software abfragen

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

Installieren mit apt

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)

Ein Repository definieren mit apt

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/*.

Entfernen mit apt

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)

Updaten mit apt

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)

APT/DBKP Datenbank, Software validieren und konfigurieren

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

Software Katalog und Konfiguration auf ein anderes System übertragen

 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)

Ein DPKG Archive auspacken (ohne es zu installieren)

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


[ Main | Local ]

[ 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
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )