RPM je rekurzivní zkratka pro RPM Package Manager:je to výchozí správce balíčků na nízké úrovni v některých z nejznámějších a nejpoužívanějších distribucí Linuxu, jako je Fedora, Red Hat Enterprise Linux, CentOS, OpenSUSE a jejich deriváty. Software, jak můžete očekávat, je bezplatný a open source; při vyvolání pomocí -q
tato možnost může být použita k dotazování balíčků k získání specifických informací, jako jsou závislosti, doporučení, soubory atd. V tomto tutoriálu se naučíme, jak takové dotazy provádět.
V tomto tutoriálu se to naučíte :
- Jak spustit otáčky za minutu v režimu dotazu
- Jak získat obecné informace o balíčku
- Jak číst protokol změn balíčku
- Jak vypsat seznam souborů poskytovaných balíčkem
- Jak vypsat seznam skriptů používaných balíčkem
- Jak vytvořit seznam závislostí a doporučení balíčku
- Jak vypsat seznam balíčků vykreslených jako zastaralé pomocí rpm
Použité softwarové požadavky a konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Distribuce, které používají správce balíčků rpm |
Software | Správce balíčků rpm |
Jiné | Žádné |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo command$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Vyvolání otáček za minutu v režimu dotazu
Správce balíčků rpm lze použít k úpravě stavu systému, protože jej lze použít k instalaci, aktualizaci a odstranění balíčků (při vyvolání pomocí -i
, -U
a e
options), nebo může běžet v režimu „dotaz“ bez potřeby administrátorských práv, když je spuštěn pomocí -q
volba, což je zkrácená verze --query
.
Pokud je již balíček v našem systému nainstalován, vše, co musíme udělat, je uvést jej jménem; pokud tomu tak není a chceme se dotázat staženého .rpm
musíme například použít -p
(--package
) a zadejte cestu k souboru jako argument. Podívejme se na několik praktických příkladů, jak získat informace o balíčku.
Získání obecných informací o balíčku
Jednou ze základních věcí, kterou můžeme chtít udělat při jednání s balíčkem rpm, je zobrazení obecných informací o něm. Ke splnění tohoto úkolu nám nezbývá než použít -i
(nebo --info
) možnost při vyvolání rpm v režimu dotazu. Pro tento příklad budeme pracovat s balíčkem „gimp“, který je již v systému nainstalován. V tomto případě bychom spustili:
$ rpm -qi gimp
Ihned po vyvolání příkazu obdržíme výstup podobný následujícímu, který obsahuje informace, jako je popis softwaru, jeho verze, architektura, datum instalace, velikost atd.:
Name : gimp Epoch : 2 Version : 2.10.24 Release : 1.fc34 Architecture: x86_64 Install Date: Mon 21 Jun 2021 11:26:33 AM CEST Group : Unspecified Size : 109267268 License : GPLv3+ and GPLv3 Signature : RSA/SHA256, Sat 03 Apr 2021 02:00:02 AM CEST, Key ID 1161ae6945719a39 Source RPM : gimp-2.10.24-1.fc34.src.rpm Build Date : Sat 03 Apr 2021 01:13:55 AM CEST Build Host : buildhw-x86-11.iad2.fedoraproject.org Packager : Fedora Project Vendor : Fedora Project URL : http://www.gimp.org/ Bug URL : https://bugz.fedoraproject.org/gimp Summary : GNU Image Manipulation Program Description : GIMP (GNU Image Manipulation Program) is a powerful image composition and editing program, which can be extremely useful for creating logos and other graphics for web pages. GIMP has many of the tools and filters you would expect to find in similar commercial offerings, and some interesting extras as well. GIMP provides a large image manipulation toolbox, including channel operations and layers, effects, sub-pixel imaging and anti-aliasing, and conversions, all with multi-level undo.
Čtení protokolu změn balíčku
Jak víme, changelog je protokol, ve kterém jsou hlášeny a chronologicky seřazeny všechny změny provedené v projektu. Pokud chceme číst changelog balíčku rpm, musíme vyvolat správce balíčků rpm v režimu dotazu a použít --changelog
volba. Podívejme se na příklad:
$ rpm -q --changelog gimp
Zde je (zkrácený) výstup výše uvedeného příkazu na nejnovější verzi Fedory (34):
[...] Thu Jan 09 2020 Josef Ridky <[email protected]> - 2:2.10.14-3 - Demodularizing of gimp (#1772469) * Mon Nov 18 2019 Kalev Lember <[email protected]> - 2:2.10.14-2 - Rebuild for libmypaint 1.4.0 * Mon Nov 04 2019 Kalev Lember <[email protected]> - 2:2.10.14-1 - Update to 2.10.14 * Tue Aug 20 2019 Josef Ridky <[email protected]> - 2:2.10.12-3 - Fix default configuration for font folders (#1706653) * Wed Jul 31 2019 Josef Ridky <[email protected]> - 2:2.10.12-2 - Fix issue with reading SVG files (#1715882) * Thu Jul 25 2019 Fedora Release Engineering <[email protected]> - 2:2.10.12-1.1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild * Thu Jun 13 2019 Kalev Lember <[email protected]> - 2:2.10.12-1 - Update to 2.10.12 * Thu Apr 11 2019 Richard Shaw <[email protected]> - 2:2.10.10-2 - Rebuild for OpenEXR 2.3.0. * Mon Apr 08 2019 Josef Ridky <[email protected]> - 2:2.10.10-1 - New upstream release 2.10.10 (#1697119)
Výpis všech souborů poskytovaných balíčkem
Když nainstalujeme balíček do našeho systému, řada souborů se zkopíruje na vhodná místa, jak to zamýšlel jeho správce. Pokud chceme vypsat soubory poskytované balíčkem, který je již nainstalovaný v našem systému, můžeme vyvolat
správce balíčků rpm v režimu dotazu s -l
volba (zkratka pro --list
):
$ rpm -ql gimp
Jak jsme již řekli, pokud chceme dotaz na balíček před nainstalujeme, místo toho musíme přidat -p
a zadejte cestu k balíčku jako argument:
$ rpm -qlp /path/to/package.rpm
Výše uvedený příkaz vytvoří následující výsledek:
/etc/gimp /etc/gimp/2.0 /etc/gimp/2.0/controllerrc /etc/gimp/2.0/gimprc /etc/gimp/2.0/gtkrc /etc/gimp/2.0/menurc /etc/gimp/2.0/sessionrc /etc/gimp/2.0/templaterc /etc/gimp/2.0/toolrc /etc/gimp/2.0/unitrc /usr/bin/gimp /usr/bin/gimp-2.10 /usr/bin/gimp-console /usr/bin/gimp-console-2.10 /usr/bin/gimp-test-clipboard-2.0 [...]
Výpis skriptů používaných balíčkem
Některé .rpm
balíčky používají řadu skriptů nebo „scriptletů“, které se spouštějí jako součást procesu instalace nebo odstranění. Pokud se na ně chceme podívat, můžeme to udělat vyvoláním rpm v režimu dotazu pomocí --scripts
možnost. V zájmu tohoto příkladu prověříme skripty obsažené v systemd balíček:
$ rpm -q --scripts systemd
Níže můžeme vidět (zkrácený) výstup výše uvedeného příkazu při spuštění na Fedoře 34. Jak můžete vidět, před samotnými skripty si můžeme všimnout, že je také hlášen kontext, ve kterém jsou použity (např. „preinstall“ nebo „postinstall “):
preinstall scriptlet (using /bin/sh): getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || : getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || : getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || : getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || : getent group input &>/dev/null || groupadd -r input &>/dev/null || : getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || : getent group render &>/dev/null || groupadd -r render &>/dev/null || : getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || : [...]
Další podobnou možností je --triggers
který se používá k zobrazení spouštěcích skriptů obsažené v balení. Co jsou spouštěcí skripty? Jsou to v podstatě skripty, které se spouštějí (spouštějí), když se stav jiného balíčku
změní:
$ rpm -q --triggers systemd
Pomocí výše uvedeného příkazu můžeme vizualizovat spouštěcí skripty obsažené v systemd balíček:
triggerun scriptlet (using /bin/sh) -- systemd < 246.1-1 # This is for upgrades from previous versions before systemd-resolved became the default. systemctl --no-reload preset systemd-resolved.service &>/dev/null || : if systemctl -q is-enabled systemd-resolved.service &>/dev/null; then systemctl -q is-enabled NetworkManager.service 2>/dev/null && \ ! test -L /etc/resolv.conf 2>/dev/null && \ ! mountpoint /etc/resolv.conf &>/dev/null && \ grep -q 'Generated by NetworkManager' /etc/resolv.conf 2>/dev/null && \ echo -e '/etc/resolv.conf was generated by NetworkManager.\nRemoving it to let systemd-resolved manage this file.' && \ mv -v /etc/resolv.conf /etc/resolv.conf.orig-with-nm && \ ln -sv ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 2>/dev/null || : systemctl start systemd-resolved.service &>/dev/null || : fi triggerpostun scriptlet (using /bin/sh) -- systemd < 247.3-2 # This is for upgrades from previous versions before oomd-defaults is available. # We use %triggerpostun here because rpm doesn't allow a second %triggerun with # a different package version. systemctl --no-reload preset systemd-oomd.service &>/dev/null || :
Výpis závislostí a doporučení balíčku
Dalším běžným úkolem, který můžeme chtít provést, je najít závislosti balíčku rpm. Možnost, která nám umožní úkol splnit, je -R
(zkratka pro --requires
). Pro kontrolu závislostí balíčku „gimp“ bychom například spustili následující příkaz:
$ rpm -qR gimp
Jakmile příkaz spustíme, na obrazovce se zobrazí seznam softwarových závislostí:
/usr/bin/python2 babl(x86-64) >= 0.1.78 config(gimp) = 2:2.10.24-1.fc34 fontconfig >= 2.12.4 freetype >= 2.1.7 gegl04(x86-64) >= 0.4.30 gimp-libs(x86-64) = 2:2.10.24-1.fc34 glib2 >= 2.56.2 gtk2 >= 2.24.32 hicolor-icon-theme [...]
Pokud místo -R
používáme možnost --recommends
můžeme získat seznam softwaru, který není nezbytně nutný pro dotazovaný balíček, ale je jím doporučen:
$ rpm -q --recommends gimp
Výpis balíčků vykreslených jako zastaralé pomocí rpm
Stejným způsobem jako ve výše uvedených příkladech můžeme vidět, které balíčky jsou vykresleny jako zastaralé balíkem, na který se ptáme. Jediné, co musíme udělat, je použít --obsoletes
možnost:
$ rpm -q --obsoletes gimp
Zde je výstup příkazu v příkladu:
gimp < 2:2.10.24-1.fc34 gimp-help-browser < 2:2.10.24-1.fc34 gimp-unstable < 2:2.10
Závěry
Rpm je velmi výkonný správce balíčků:v tomto tutoriálu jsme viděli, jak jej spustit v režimu „dotazu“. Viděli jsme, jak získat obecné informace o balíčku, jako je jeho verze a architektura, jak číst protokol změn balíčku, jak vypsat všechny soubory, které bude balíček nainstalován, jak se podívat na „scriptlety“, které se používají jako součást správy balíků a jak získat seznam závislostí balíků a doporučení.