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

LinuxovΘ noviny B°ezen 1998

Zφskßvßnφ informacφ z databßze RPM

Jan "Yenya" Kasprzak, 10. ·nora 1998

V p°edchozφch dφlech na╣eho serißlu jsme vid∞li, ╛e systΘm RPM udr╛uje mno╛stvφ informacφ o nainstalovan²ch balφcφch i o jednotliv²ch souborech v nich. Tyto informace pak pou╛φvß p°i dal╣φ prßci s RPM balφky - p°i jejich instalaci, ru╣enφ a povy╣ovßnφ. SystΘm RPM ale takΘ umφ tyto informace zp°φstupnit u╛ivateli pomocφ n∞kolika druh∙ dotaz∙. A o dotazech na databßzi RPM bude °eΦ v tomto dφlu.

K Φemu lze tyto dotazy pou╛φt?

Dotazovßnφ se provßdφ p°φkazem rpm -q. Uvedu zde n∞kolik p°φklad∙ situacφ, kterΘ °e╣φ dotaz do RPM databßze:

  • Na va╣em stroji je soubor /usr/include/pthread.h, ale nevφte, ze kterΘho balφku tento soubor pochßzφ.

  • Nedßvno jste si nainstaloval Secure Shell a chcete k n∞mu najφt n∞jakou dokumentaci.

  • Zφskßte software, o n∞m╛ autor tvrdφ, ╛e pot°ebuje libc verze aspo≥ 5.4.30. Chcete zjistit, jakß je vlastn∞ verze libc na va╣em systΘmu.

  • Narazili jste na sφti na RPM balφk a chcete zjistit, co obsahuje.

  • Prßv∞ jste upgradovali systΘm na libc verze 6 a chcete zjistit, kterΘ balφky na va╣em systΘmu stßle je╣t∞ pot°ebujφ star╣φ verzi libc 5.

Toto je ov╣em jen n∞kolik p°φklad∙. Nynφ podrobn∞ k jednotliv²m Φßstem dotazu. Dotaz se sklßdß ze dvou hlavnφch Φßstφ - prvnφ urΦuje mno╛inu balφk∙, o nich╛ chcete informace zjistit, druhß °φkß, jakΘ informace se o t∞chto balφcφch chcete dov∞d∞t.

╚ßst prvnφ - v²b∞r balφk∙

  • Dotaz m∙╛ete omezit na balφk urΦitΘho jmΘna. Takto nap°φklad zjistφte aktußlnφ verzi nainstalovanΘho balφku:

    $ rpm -q squid
    squid-1.NOVM.20-3
    

    $ rpm -q postgresql package postgresql is not installed

    Je vid∞t, ╛e pokud specifikujeme jen Φßst dotazu pro v²b∞r balφk∙, ale nikoli Φßst specifikujφcφ po╛adovanΘ informace, dostane se nßm odpov∞di ve form∞ jmΘna balφku, jeho verze a jeho release (odd∞l∞no pomlΦkami) a novΘho °ßdku.

  • Na druhΘ stran∞ m∙╛eme vypsat v╣echny balφky v systΘmu. K tomu slou╛φ p°epφnaΦ -a:

    $ rpm -qa|sort  
    ElectricFence-2.0.5-5
    MAKEDEV-2.3.1-1
    ...
    zlib-devel-1.0.4-2
    

  • Dßle lze dotaz omezit na balφky, kter²m pat°φ n∞jak² soubor v systΘmu pomocφ p°epφnaΦe -f soubor:

    $ rpm -qf /etc/printcap 
    setup-1.9-2
    

    Zde je nutno dßt pozor na to, ╛e RPM si v databßzi uklßdß balφky s absolutnφ cestou, a ╛e tedy dotazy mohou b²t zodpov∞zeny rozdφln∞, p°esto╛e se jednß o tent²╛ soubor:

    $ rpm -qf /etc/X11/xdm/Xaccess 
    XFree86-3.3.1-14
    $ rpm -qf /usr/lib/X11/xdm/Xaccess 
    file /usr/lib/X11/xdm/Xaccess is not owned by any package
    

  • Lze se takΘ dotazovat na RPM soubor, kter² nemusφ b²t zatφm nainstalovan². Jak vφme, v RPM souboru je p°φmo ulo╛en jeho nßzev, tak╛e jej lze zjistit i po p°ejmenovßnφ:

    $ rpm -qp trubka 
    passwd-0.50-10
    

  • Jak ji╛ bylo °eΦeno na zaΦßtku tohoto serißlu, jsou RPM balφky sdru╛ovßny do tematick²ch skupin. Chceme-li si vypsat v╣echny aplikace, kterΘ se t²kajφ prßce se zvukem, pou╛ijeme nßsledujφcφ p°φkaz:

    $ rpm -qg Applications/Sound 
    cdp-0.33-8
    maplay-1.2-6
    sox-11g-6
    timidity-0.2i-2
    

  • N∞kdy pot°ebujeme zjistit, kter² balφk poskytuje urΦitou vlastnost, kterou mohou jinΘ balφky vy╛adovat - nap°φklad chceme zjistit, kter² balφk poskytuje libc verze 6:

    $ rpm -q --whatprovides libc.so.6 
    glibc-2.0.6-9
    

  • Dußlnφm problΘmem k p°edchozφmu je zji╣t∞nφ seznamu balφk∙, kterΘ vy╛adujφ danou vlastnost - nap°φklad v ·vodu zmi≥ovan² dotaz na balφky, kterΘ je╣t∞ vy╛adujφ star╣φ verzi libc:

    $ rpm -q --whatrequires libc.so.5 
    xpdf-0.7-2
    snd-1-1
    timidity-0.2i-2
    

╚ßst druhß - v²b∞r informacφ

V p°edchozφ Φßsti jsme vid∞li, ╛e implicitn∞ se vypisuje jmΘno balφku, jeho verze a release. M∙╛eme ale zji╣╗ovat takΘ mno╛stvφ jin²ch informacφ. Nejprve si ukß╛eme n∞kterΘ p°epφnaΦe pro podrobn∞j╣φ v²pis, a v zßv∞ru popφ╣eme konstrukci jakkoli obecnΘho v²pisu informacφ.

  • P°epφnaΦem -i zφskßme v²pis souhrnn²ch informacφ o danΘm balφku. P°edpoklßdejme nap°φklad, ╛e nßm n∞kdo dal n∞jak² RPM soubor, a my o n∞m chceme zjistit podrobnosti (viz v²pis Informace o RPM balφku).

 $ rpm -qpi soubor.rpm 
 Name        : squid                     Distribution: (none)
 Version     : 1.NOVM.20                 Vendor: (none)
 Release     : 3                         Build Date: Sun Feb  1 00:50:11 1998
 Install date: Sun Feb  1 09:19:37 1998  Build Host: gloin
 Group       : Networking/Daemons        Source RPM: squid-1.NOVM.20-3.src.rpm
 Size        : 693576
 Packager    : Jan "Yenya" Kasprzak <kas@fi.muni.cz>
 URL         : http://squid.nlanr.net/
 Summary     : Squid Internet Object Cache
 Description :
 Squid is a caching proxy for www/ftp/gopher
 Please read the documentation-Files!!

V²pis 15: Informace o RPM balφku

    V²pis obsahuje mno╛stvφ informacφ. Lze z n∞j nap°φklad zjistit, ╛e n∞kte°φ lidΘ dokß╛φ v ned∞li v jednu hodinu v noci vyrßb∞t RPM balφky :-). Myslφm, ╛e v²╣e uveden² v²pis nepot°ebuje podrobn∞j╣φ komentß° k jednotliv²m polo╛kßm.

  • P°epφnaΦ -l - seznam soubor∙ v balφku:

    $ rpm -ql ncftp 
    /etc/X11/wmconfig/ncftp
    /usr/bin/ncftp
    /usr/man/man1/ncftp.1
    

  • V p°edchozφ Φßsti tohoto serißlu jsme vid∞li, ╛e RPM m∙╛e d∞lat rozdφly mezi jednotliv²mi soubory v balφku. Rozeznßvß soubory b∞╛nΘ, konfiguraΦnφ a dokumentaci. P°φslu╣n² typ souboru m∙╛eme zji╣╗ovat - seznam konfiguraΦnφch soubor∙ p°es p°epφnaΦ -c a seznam dokumentace pomocφ -d. Nap°φklad seznam dokumentace k programu /bin/bash m∙╛eme zφskat takto:

    $ rpm -qdf /bin/bash 
    /usr/doc/bash-1.14.7
    /usr/doc/bash-1.14.7/NEWS
    /usr/doc/bash-1.14.7/README
    /usr/doc/bash-1.14.7/RELEASE
    /usr/info/bash.info.gz
    /usr/man/man1/bash.1
    /usr/man/man1/sh.1
    

    Jak p°epφnaΦ -l, tak p°epφnaΦe -c a -d mohou o souborech vypsat detailnφ informace pomocφ klφΦe -v.

  • Zφskßnφ stavu jednotliv²ch soubor∙. Ka╛d² soubor danΘho balφku m∙╛e b²t v jednom ze Φty° stav∙:

    • normal: soubor je nainstalovßn v systΘmu.
    • replaced: soubor byl p°epsßn souborem z jinΘho RPM balφku pou╛itφm --replacefiles (resp. --force).
    • not installed: balφk byl nainstalovßn, ale tento soubor ne (nap°φklad p°i pou╛itφ parametru --excludedocs).
    • net shared: soubor se nachßzφ na svazku, kter² byl v /etc/rpmrc oznaΦen jako sφ╗ov². Takov²to soubor nenφ spravovßn RPM databßzφ (resp. je spravovßn RPM databßzφ na sφ╗ovΘm serveru).
    P°φslu╣n² stav ke ka╛dΘmu souboru lze zjistit pomocφ p°epφnaΦe -s.

  • Informace o tom, jakΘ vlastnosti dan² balφk poskytuje do systΘmu. Balφk nap°φklad m∙╛e obsahovat sdφlenΘ knihovny a podobn∞:

    $ rpm -q --provides db  
    libdb.so.2
    

  • Naopak m∙╛eme zjistit informaci o tom, kterΘ vlastnosti (vΦetn∞ verzφ) dan² balφk vy╛aduje ke sprßvnΘmu b∞hu:

    $ rpm -q --requires glint 
    /usr/bin/python  
    /bin/sh  
    tkinter  
    pythonlib >= 1.12
    python >= 1.4
    

  • Lze vypsat i pre/post-install a pre/post-uninstall skripty, kterΘ k balφku pat°φ. Dosßhneme toho volbou --scripts.

Konstrukce obecn²ch dotaz∙

V²╣e uvedenΘ p°φklady popisovaly urΦitΘ specißlnφ typy dotaz∙. RPM ale umo╛≥uje vypisovat odpov∞di v ·pln∞ obecnΘ form∞. Nebudeme zde podßvat vyΦerpßvajφcφ v²pis, jen v krßtkosti a na n∞kolika p°φkladech vysv∞tlφme logiku tohoto systΘmu.

Zßkladem obecnΘho dotazu je volba --queryformat °et∞zec. Tento °et∞zec je vypsßn pro ka╛d² dotazovan² balφk s tφm, ╛e n∞kterΘ zvlß╣tnφ konstrukce se nahradφ p°φslu╣n²mi informacemi o RPM balφku. Je to trochu podobnΘ nahrazovßnφ °et∞zc∙ s procenty v knihovnφ funkci printf(3). RPM podporuje substituci zp∞tnΘho lomφtka podobn∞ jako printf(3), tak╛e je nap°φklad mo╛nΘ psßt nßsledujφcφ konstrukce:

$ rpm -qa --queryformat 'Ahoj, babi!\n' 

Tento p°φkaz vypφ╣e jmenovan² °et∞zec tolikrßt, kolik je v systΘmu nainstalovan²ch balφk∙.

PokraΦujme v p°φkladech. Nßsledujφcφ p°φkaz ukazuje implicitnφ formßt v²pisu odpov∞di a jeho v²stup je stejn², jako kdy╛ Φßst --queryformat neuvedeme:

$ rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' squid 

Z p°φkladu je vid∞t, ╛e RPM nahrazuje konstrukci %{atribut} obsahem danΘho atributu z databßze. Nebudu zde rozebφrat v╣echny dostupnΘ atributy, jen uvedu, ╛e pomocφ nßsledujφcφho p°φkazu zφskßme seznam v╣ech atribut∙ platn²ch v danΘ verzi RPM:

$ rpm --querytags |sort 
ARCH
ARCHIVESIZE
...
VERSION
XPM

N∞kterΘ atributy jsou v databßzi uklßdßny ve form∞ Φφsla, ale u╛ivatel by mohl chtφt toto Φφslo zobrazit n∞jak jinak. Nap°φklad datum se uklßdß jako poΦet sekund od 1. ledna 1970, ale textov² v²pis je Φiteln∞j╣φ. V²pisu v jinΘm formßtu dosßhneme nap°φklad takto:

$ rpm -q --queryformat '%{INSTALLTIME:date}\n' bash 
Sat Jan 31 17:53:00 1998

Krom∞ formßtovacφho °et∞zce :date pro v²pis Φasu existujφ je╣t∞ tyto:

  • :perms - v²pis p°φstupov²ch prßv.
  • :deflags - v²pis zßvislostφ mezi balφky.
  • :fflags - konverze Φφsla na c, d nebo mezeru podle toho, jestli jde o konfiguraΦnφ, dokumentaΦnφ nebo b∞╛n² soubor.

Dßle lze jednotlivΘ polo╛ky zarovnßvat a vypisovat na urΦit² poΦet znak∙ podobn∞ jako v printf(3):

$ rpm -q --queryformat '%4{RELEASE}\n' squid 
   5

N∞kterΘ polo╛ky v databßzi lze vyhodnotit vφcekrßt pro jeden balφk (nap°φklad %{FILENAMES} - jmΘna soubor∙ v balφku). M∙╛eme proto chtφt nap°φklad jeden °ßdek pro ka╛d² soubor v balφku. Nebudu se pou╣t∞t do syntaktick²ch podrobnostφ, jen uvedu p°φklad:

$ rpm -q --queryformat '%{NAME} obsahuje \
soubory:\n[%{FILENAMES} (%{FILESIZES} bytes)\n]' bash 
bash obsahuje soubory:
/bin/bash (301580 bytes)
/bin/sh (4 bytes)
...
/usr/man/man1/sh.1 (6 bytes)

To je k dotaz∙m do RPM databßze v╣echno. P°φ╣t∞ se budeme v∞novat kontrole integrity balφk∙ a dal╣φm vlastnostem. *


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