GNU/Linux >> Znalost Linux >  >> Linux

Práce se závislostmi balíčků na Red Hat Linuxu

Cíl

Naším cílem je zvyknout si na dostupné nástroje pro zjištění informací o závislostech balíčků na systému založeném na RPM.

Verze operačního systému a softwaru

  • Operační systém: Red Hat Enterprise Linux 7.5
  • Software: otáčky za minutu 4.11, yum 3.4.3

Požadavky

Privilegovaný přístup do systému.

Obtížnost

SNADNÉ

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 příkaz
  • $ – dané linuxové příkazy, které mají být spouštěny jako běžný neprivilegovaný uživatel

Úvod

RPM, což je zkratka pro Red Hat Package Manager, je dobře známý a vyspělý správce balíčků používaný všemi distribucemi chutí Red Hat, stejně jako SuSE. Pomocí RPM může balíčkovač definovat vztahy mezi balíčky a dokonce i s verzemi balíčků – například server Apache Tomcat potřebuje ke svému běhu vhodné prostředí Java.

Na druhou stranu, k instalaci prostředí Java nepotřebujete server Tomcat – můžete se rozhodnout spustit nějakou jinou aplikaci založenou na Javě, možná nějakou, kterou si sami napíšete a spustíte ručně, když je to potřeba. Jinými slovy, server Tomcat závisí na Javě.

RPM může systémovým administrátorům výrazně usnadnit život tím, že prezentuje tyto závislosti – a nástroje spoléhající na RPM, jako je rpm utility nebo yum může automaticky vyřešit tyto závislosti a nainstalovat všechny další balíčky potřebné pro správnou funkci nové komponenty.

Shromažďování informací

Chcete-li zjistit seznam balíčků, na kterých závisí balíček foo.bar, jednoduše spusťte:

# yum deplist foo.bar

Chcete-li najít seznam balíčků, které vyžadují (v závislosti na) balíček foo.bar:

rpm -q --whatrequires foo.bar

Skutečný příklad s obecným balíčkem:bash . Podívejme se, jaké balíčky potřebuje balíček bash:

# yum deplist bash

package: bash.x86_64 4.2.46-30.el7
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.14)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libtinfo.so.5()(64bit)
   provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
  dependency: rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-222.el7
   provider: glibc.i686 2.17-222.el7

Z pohledu balíčku bash je velmi obecný, a jak je vidět výše, závisí na několika základních balíčcích. Ale pokud bychom chtěli nainstalovat něco mnohem závislejšího, řekněme konzole Emulátor terminálu KDE na Red Hat Linuxu se správcem plochy Gnome, můžeme získat více než jednu stránku dlouhého seznamu závislostí. A pomocí konzole , případ je ještě komplikovanější, protože se spoléhá na balíčky QT a KDE, takže abyste jej mohli nainstalovat, budete muset nainstalovat celé prostředí KDE vedle Gnome (což jistě můžete udělat), abyste poskytli vše konzole potřeby.

Chcete-li získat lepší přehled o tom, jaké balíčky budou nainstalovány, zkontrolujte před zahájením instalace seznam poskytnutý yum:

# yum install konsole

Resolving Dependencies
--> Running transaction check
---> Package konsole.x86_64 0:4.10.5-4.el7 will be installed
--> Processing Dependency: konsole-part = [...]

V případě systému Red Hat s Gnome může poprvé trvat poměrně dlouho, než se vyřeší závislosti aplikace KDE, a když to skončí, yum představí jediný balíček, o který jsme požádali, s pěkně malou velikostí. . Následuje více než sto nainstalovaných balíčků pro závislosti:

[...]
--> Running transaction check
---> Package boost-system.x86_64 0:1.53.0-27.el7 will be installed
---> Package boost-thread.x86_64 0:1.53.0-27.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                Arch             Version                           Repository                    Size
==============================================================================================================================
Installing:
 konsole                                x86_64           4.10.5-4.el7                      rhel-7-server-rpms            78 k
Installing for dependencies:
 OpenEXR-libs
[...]

A v souhrnu vidíme, že instalace nakonec zabere mnohem více místa na disku, než velikost balíku, kterou potřebujeme:

[...]
Transaction Summary
==============================================================================================================================
Install  1 Package (+120 Dependent packages)

Total download size: 108 M
Installed size: 307 M

To je hodně, ale získali jsme užitečnou informaci o tom, kolik místa bude využito. To je zvláště užitečné, pokud instalujeme mnoho balíčků v jedné transakci.

Zatímco v tomto případě je transakce nehospodárná, cílem závislostí je v konečném důsledku úspora zdrojů:pokud někdo implementuje nějakou funkcionalitu do svého kódu, kterou lze zavolat do systému, další vývojář nemusí implementovat stejnou funkcionalitu. znovu, ale použijte již existující implementaci. Pro konzole například, pokud chcete nainstalovat akregator příště už bude mít systém mnoho závislostí vyřešených, jako kdepim balíček obsahující akregator také spoléhá na qt , kdelibs a podobně.

Můžeme použít rpm pomůcka the získat informace obráceně:uveďme seznam nainstalovaných balíčků, které vyžadují bash balíček:

# rpm -q --whatrequires bash
dracut-033-535.el7.x86_64
initscripts-9.49.41-1.el7.x86_64
autofs-5.0.7-83.el7.x86_64
lvm2-2.02.177-4.el7.x86_64
rsyslog-8.24.0-16.el7.x86_64

Čištění nepotřebných balíčků

Pokud budeme naše systémy aktualizovat a změníme nebo rozšíříme jejich role, nevyhnutelně se objeví „nevyžádané“ balíčky. V balíkovém smyslu znamená nevyžádané balíčky již nepotřebné a/nebo zastaralé balíčky. Abychom následovali výše uvedený příklad, již nepotřebujeme akregator , protože jsme přesunuli „službu“ zpracování RSS do hypotetického centrálního koncentrátoru RSS v rámci našeho systému, takže po migraci našich kanálů na centrální místo odinstalujeme místní aplikaci pro zpracování RSS. To neodstraní všechny balíčky KDE, protože na nich může záviset mnoho dalších balíčků. Ale pokud ne, jsou tyto balíčky nevyžádané a spotřebovávají zdroje, včetně delší doby aktualizace, jako yum ve výchozím nastavení slepě aktualizuje vše, pro co najde nové balíčky/errata.

Utrácení prostředků na upgrade několika nepotřebných balíčků na notebooku se širokopásmovým připojením a SSD se nemusí zdát jako problém, ale představte si datové centrum se stovkami nebo tisíci počítačů a získáte obrázek. Obecně je dobré udržovat všechny systémy jednoduché a správa zdrojů je pouze jedním bodem. Čím je systém složitější, tím je náchylnější k chybám. Více komponent znamená více možných chyb.

Abychom získali přehled o nepotřebných balíčcích nainstalovaných v systému, můžeme použít yum a package-cleanup stejným způsobem jako na CentOS nebo jinou funkci yum, autoremove :

yum autoremove

Balíčky, které tyto nástroje označí jako nepotřebné, nejsou totožné.

Při použití kteréhokoli z těchto nástrojů se doporučuje znovu zkontrolovat, co yum se chystá před čištěním produkčních systémů odstranit a případně otestovat, k čemu čištění dojde na testovacích strojích s identickým obsahem balení.

Tyto nástroje jsou skutečně chytré, ale ne vševědoucí:například v databázi rpm nebude žádný záznam o vlastní PHP aplikaci běžící nad webovým serverem, který volá cups vytisknout příchozí objednávky na tiskárně připojené k serveru. To znamená, že může být záznam, pokud je aplikace zabalena se správnými závislostmi a správně nainstalována pomocí rpm nebo yum – ale to vyžaduje úsilí a všechny služby musí být zabaleny stejným způsobem, pokud se chcete cítit bezpečně s automatickým čištěním založeným na yum.

Řešení problémů se závislostmi

Zejména ve velkých prostředích mohou při instalaci nebo upgradu systémů nastat problémy se závislostí.

Níže uvedený snímek obrazovky ukazuje jednoduchý problém:

Řešení závislostí pomocí rpm

Na výše uvedené obrazovce terminálu se pokusíme nainstalovat nrpe klient potřeboval monitorovat mnoho aspektů systému pomocí Nagios. Stáhli jsme klienta pro distribuci, ale oba rpm a yum selže se stejnou chybou:nrpe balíček vyžaduje (v závislosti na) nagios-common balík. V tomto příkladu můžeme získat potřebný balíček ze stejného zdroje a při instalaci obou z nich rpm obslužný program vidí, že závislost, na které jsme dříve selhali, bude uspokojena do konce transakce a nainstaluje oba balíčky a tiše se s úspěchem ukončí.

Závěr

Yum a rpm jsou základní nástroje při práci s distribucemi pomocí správce balíčků RPM. Díky znalosti sady nástrojů je mnohem jednodušší a obvykle bezpečnější řešit úlohy instalace, upgradu a úpravy v softwarovém prostředí daného systému.


Linux
  1. Správa balíků Linux pomocí apt

  2. Jak vypsat seznam závislostí balíčku v Linuxu

  3. Upgradovat Zsh na Red Hat 5 X86_64?

  1. Práce s rourami na příkazovém řádku Linuxu

  2. Zaregistrujte si Red Hat Enterprise Linux a připojte předplatné s Ansible

  3. Konfigurace IPv6 adresy v Red Hat Enterprise Linux 7 a 8

  1. Správa linuxových balíčků s dnf

  2. Jak zrcadlit úložiště v Linuxu

  3. Co je Red Hat Linux?