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