Rušení balíků v systému RPM |
Jan "Yenya" Kasprzak, 10. února 1998 |
Čas od času se ukáže, že v systému určitý software už nepotřebujete, a že byste ho chtěli smazat, odinstalovat. V systému RPM je mazání
balíku jednoduché - stačí k tomu příkaz rpm -e <balík>:
# rpm -e xbill
#
Jak vlastně rušení balíků probíhá? RPM nejprve zkontroluje, jestli se
případným smazáním balíku neporuší závislosti (například smazáním
knihovny libc by přestaly fungovat všechny programy, které jsou
proti ní dynamicky linkovány). Je-li vše v pořádku, spustí se pre-uninstall skript tak, jak je uveden v příslušném balíku. Dále
systém projde všechny soubory patřící k balíku a smaže je (pokud
nejsou ovšem zároveň součástí jiného balíku). S konfiguračními soubory
je zacházeno zvlášť opatrně: byl-li konfigurační soubor od instalace
balíku změněn, RPM jej nesmaže, ale přejmenuje tak, že souboru přidá
koncovku .rpmsave.
Co dále rpm -e umí?
Samozřejmě jako u většiny ostatních variant můžeme získat podrobnější
výstup použitím přepínače -v, resp. -vv. Dále je možné
přepínačem --nodeps vypnout kontrolu závislostí mezi balíky (pak
se ale nesmíme divit, když něco nebude fungovat). Přepínač
--test provede test odinstalování balíku - zkontroluje
dependence a zjistí, které soubory by smazal (přepínačem -vv lze
tyto informace i zobrazit.
Upgradování RPM balíků
Upgradování je proces podobný instalaci balíku. Rozdíl je v tom, že se
zároveň smažou případné starší verze téhož balíku. V podstatě tedy
není důvod k instalování balíku pomocí rpm -i - použijeme-li
místo toho upgrade, provede se správná činnost i v případě, že jde
vlastně o instalaci.
Vlastní instalaci balíků pomocí rpm -i použijeme víceméně jen
tehdy, když chceme balík nainstalovat bez toho, abychom zároveň
smazali případné další nainstalované verze téhož balíku. Pokud
například chceme takto mít v systému dvě verze libc, můžeme obě
nainstalovat pomocí rpm -i. V případě, že takto instalované
balíky neobsahují společné soubory, je instalace bezkonfliktní
a naprosto v pořádku. V naprosté většině případů ale pro instalaci
balíku stačí upgradovací příkaz, rpm -U. V knize Maximum
RPM (Maximální otáčky) o tom píší:
Maybe the "-U" should stand for "Uh, do the right thing"...
-U by pravděpodobně mělo znamenat "Uh, udělej to správně"...
Edward C. Bailey, Maximum RPM
|
Proč vlastně upgradovat?
Mohlo by se zdát, že upgrade je v podstatě odinstalování starého a nainstalování nového balíku. A že tedy jedinou výhodou rpm -U
oproti rpm -e; rpm -i je to, že ušetříme jeden příkaz. Není
tomu tak. Oproti předchozím dvěma příkazům se rpm -U chová
trochu jinak. První rozdíl je v zacházení s konfiguračními soubory a druhý rozdíl je v tom, že pre/post-install a pre/post-uninstall skripty umí poznat, kdy jde o upgrade balíku a kdy
jde o jeho první instalaci, resp. smazání poslední instance
balíku. Každý takový skript dostává jako svůj první parametr číslo,
které udává počet existujících instancí daného balíku v systému. Takto
může například post-uninstall skript programu squid
zjistit, že probíhá definitivní zrušení tohoto balíku a smazat z /etc/passwd uživatele squid. Naopak post-instalační script může
vědět, že při upgradu na rozdíl od instalace se nemá snažit
inicializovat databázi squidu v adresáři /var/cache.
Podrobnější popis si zaslouží zacházení rpm -U s konfiguračními
soubory. Jak víme, RPM si uchovává o každém souboru (nejen
konfiguračním) jeho MD5 kontrolní součet. Nyní se v systému mohou
vyskytnout ke každému konfiguračnímu souboru tři MD5 součty: první
patří původnímu balíku tak, jak je v RPM databázi, druhý patří
souboru, který je právě na disku a třetí patří konfiguračnímu souboru
v nově instalovaném RPM balíku. Pravidla pro zacházení s konfiguračními soubory jsou tato:
- Je-li MD5 součet souboru na disku totožný se součtem původního
nebo nově instalovaného souboru, RPM smaže konfigurační soubor
a nahradí jej novým (ano, i v případě, že soubor na disku má
stejný MD5 součet jako v novém balíku - toto je kvůli
případným změněným přístupovým právům případně kvůli pevným
linkům na konfigurační soubor).
- Je-li MD5 součet konfiguračního souboru ve starém a novém balíku
stejný, ale na disku má soubor jiný MD5 součet, je na disku
ponechán konfigurační soubor tak, jak je. Logika tohoto
přístupu je zřejmá: Od poslední verze se pravděpodobně
neměnila syntaxe konfiguračního souboru, takže je možno
zachovat lokální změny.
- Pokud se MD5 součty všech tří zmiňovaných instancí daného
souboru navzájem liší, nainstaluje rpm -U konfigurační
soubor z nového balíku a původní konfigurační soubor uloží do souboru s příponou .rpmsave. Dále RPM vypíše varovné
hlášení:
warning: /etc/squid/squid.conf saved as
/etc/squid/squid.conf.rpmsave
Vysvětlení je opět jednoduché: V novém balíku je jiný
konfigurační soubor než ve starém. Je tedy pravděpodobné, že
se změnila syntaxe konfiguračního souboru, a že tedy nový
konfigurační soubor by měl být nainstalován. Na druhou stranu
uživatel původní soubor změnil a jeho změny by neměly být
ztraceny. Proto se tedy uloží původní konfigurační soubor pod
jiným jménem. Pokud provádíme upgrade celého systému RedHat,
je možné si podobná varovná hlášení přečíst po skončení
upgradu v souboru /tmp/upgrade.log.
V novějších verzích RPM může autor balíku specifikovat, že
nechce přepsat původní verze konfiguračních souborů. RPM pak
nechává původní konfigurační soubor beze změny a nový uloží s příponou .rpmnew.
- Poslední nezřejmou možností je, že se ve starší verzi balíku
daný konfigurační soubor vůbec nevyskytuje, ale na disku se
nachází a má jiný MD5 součet než tento soubor v novém
balíku. V tomto případě by RPM také nemělo ztratit potenciálně
důležitý obsah konfiguračního souboru. Na druhé straně by mělo
být vidět, že jde o konfigurační soubor "podezřelého"
původu, bez předchozího výskytu v RPM databázi. Původní
konfigurační soubor se tedy přejmenuje na soubor s koncovkou
.rpmorig.
Co se týče přepínačů, které rpm -U akceptuje, jsou v podstatě
stejné, jako u instalace (rpm -i). Navíc je zde přepínač --oldpackage, který slouží k downgradování balíků (instalaci starší
verze než je stávající). Tento přepínač jistě využijete, pokud budete
zkoušet používat některé alfa a beta verze softwaru a pak se budete
chtít vrátit ke stabilní starší verzi. Do přepínače --force je
oproti instalaci balíku zahrnuta i funkce volby --oldpackage.
To je k upgradování RPM balíků vše. V příští části tohoto seriálu bude
řeč o získávání informací z databáze RPM.
|