Штука для тех, кто хочет видеть свою rpm-based-систему стройную, как серна ;-)
Т.е. – ни байта лишнего.
Есть наработки для Alt Linux? и FC5/6, но работают не идеально:
- показывают «верхними» (т.е. теми, от которых никто не зависит) пакеты, от которых таки кто-то зависит.
- не показывают никому не нужные пакеты.
Не очень много, но всё равно неприятно :-(
Если есть желание – приглашаю к обсуждению.
Functions
- show all rpms (faster then rpm -qa).
- show “tops” rpms – which no one other rpm depends on.
- recuring tops
- [rpm tree for graphviz]
Options
Short | Long | Description |
-r | --recuring <level> | Recursive tops (w/o level – max) |
-a | --all | List all rpms (or -r0) |
-t | --top | List top rpms (or r1+) |
-x | --exclude | Excluding rpms (in recuring tops) |
-X | | Excluding rpms (in recuring tops) – from file |
-o | --output | Output filename |
-t | --dot | Graphiz output |
-s | --summary | List w/ rpm summary |
-d | --debug | Debug |
-h | --help | Print help and exit |
-V | --version | Print version and exit |
-v | --verbose | Enable verbose mode |
Roadmap
- make python app to explore rpms
- make python variant of Rpm Optimizer?
- make C++ variant of Rpm Optimizer?
- tuning (profiling)
Done
- try bash () – very, very slow
- Packages: rpm -qa
- Provides: rpm -ql <pkg> && rpm -q --provides
- Requires: rpm -q --requires
- man graphviz – OK but need optimize object qty
Tests
Test of list all pkgs and their provides/requires
- P4–1.7/Pkgs: 1061
- python.rpm: 11.5"
- bash: 5'27.5»
- PIII-1000, pkgs: 1087
- getting all rpms via
- BDB, py: 0.15"
- rpm, py: 13.15"
- rpm, c: 1.15"
- rpm, bash: 13.56"
Output
dot -T<lang> -o <outfile> <file>
lang=ps,svg,fig
Ideas
Shortcuts
- rpm: package
- RS: Required Services – services, required by pkg (rpm -q --requires rpm | grep -v ^/ | gawk '{print $1}')
- RF: Required Files – files, required by pkg (rpm -q --requires rpm | grep ^/)
- PS: Provided Service – services, provided by pkg (rpm -q --provides rpm | gawk '{print $1}')
- PF: Provided Files – files, provided by pkg (rpm -q --provides rpm | gawk '{print $1}')
- 1, ?, +, *: multiplycity (1, 0 or 1, 1+, 0+) – qty of the service/file in 1 rpm or all rpms
?
- rpm: can B several rpms w/ the same name, but different versions.
- RS: 0|1(?)/rpm; can require own PS (loopback)
- RF: */rpm; loopback
- PS: 0|1(?)/rpm; */all (can be provided by several rpms)
- PF: 0|1(?)/rpm; */all
??
- result includes only need services and files
???
- Input:
- get all rpms,
- their RS, RF (splitting --requires by heading /)
- PS, PF
- all – in strings
- make sort|uniq
- duplicate rpms – w/ version
- Resort:
- resort all names
- make Name>ID hashes
- delete unwaned
- Output:
- char *rpm[] – array of all rpm names; == ID>Name
- char *svc[] – array of all required services names
- char *file[] – array of all required files names
- int g2r[rpms][] – array of rpm requires IDs
- int g2p[rpms][] – array of rpm provides IDs
- int g2f[rpms][] – array of rpm files IDs
- int r2g[rpms][] – array of required by rpms IDs
- int p2g[rpms][] – array of provided by rpms IDs
- int f2p[rpms][2?] – array of files to rpms IDs