- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah -

LinuxovΘ noviny ┌nor 1998

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


- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah -