No edit summary |
|||
Line 93: | Line 93: | ||
* continue with '''ms #5''' | * continue with '''ms #5''' | ||
= | = Oneliners = | ||
A couple of one-liners you do not want to execute unless you have a shower to take or a cup of coffee to make ;-) | |||
== Find required packages using a spec file (given a sub-package) == | == Find required packages using a spec file (given a sub-package) == |
Revision as of 22:26, 26 January 2009
The Goal
For appliance operating systems rebuilding RPMs with modified capabilities and dependencies is mandatory.
The idea is to rebuild SRPMs on the fly, and modify them just before dispatching a mock or koji build for said SRPMs, so that the resulting binary RPM only links against libfoo.so but not libbar.so.
This allows for truely optimized binaries to be installed on the consumer side, but primarily allows for true appliance .rom based operating systems.
Brief Overview
A brief, general overview of the process of emerging a SRPM into a modified binary RPM being installed on the actual system.
The user types:
# yum emerge foo
The process continues with:
- downloading the SRPM for package foo,
- rebuilding the foo SRPM with modified Requires:, BuildRequires, Provides, and possibly modified Obsoletes: RPM headers.
- The rebuilding and modifying uses a "global" make options repository (either flat file MYSQL=0|1 or whatever)
- The resulting binary RPM is then installed.
Things to worry about
Things to worry about include, and are not limited to:
- kernel .config files
- sub-packages
- requires (strip)
- buildrequires (strip)
- configure opts
- patches++ (secondary target)
The end-result should be a proper, closed RPMDB with no missing dependencies or false provides, while runtime has modified binary versions of the packages installed.
Milestones in pursuing this endeavour
Milestone #1
First, write a yum plugin that does the following:
- Upon a command such as:
# yum emerge foo
perform the following actions:- Download foo's SRPM
- Rebuild the foo SRPM
- Install the new binary foo RPM
Milestone #2
- yum emerge foo
- rebuild foo in mock
- install foo
Milestone #3
- yum emerge foo
- rebuild foo --without-bar
- strip requires
- strip buildrequires
- rebuild srpm
- build in mock
- install foo
- rebuild foo --without-bar
Milestone #4
- yum emerge foo
- download srpm
- install srpm
- edit spec to include Patchx: header and %PatchX macro
- rebuild foo (like ms #3)
- install foo
Milestone #5
- yum emerge foo
- download srpm
- install srpm
- edit foo
- rebuild (like ms#4)
- use new binary rpm to resolve immediate deps
- for dep in deps: (first search relevant srpm,misc.unique())
- download srpm
- edit rebuild
- for dep in deps: ...
Milestone #6
- yum emerge foo where foo has subpackages
- handle them somehow ...
Milestone #7
- dispatch build of srpm to koji,
- download resulting binary rpms
- continue with ms #5
Oneliners
A couple of one-liners you do not want to execute unless you have a shower to take or a cup of coffee to make ;-)
Find required packages using a spec file (given a sub-package)
This is an example to find the packages required by the wireshark package (which has the wireshark-gnome as a sub-package) directly (e.g. non-recursive dependencies)
rpmquery --specfile --qf="%{NAME}\n" wireshark.spec | grep -E "^wireshark$" | xargs -n 1 -I{} repoquery --requires --qf="%{NAME}\n" "{}" | xargs -n 1 -I{} repoquery --whatprovides --qf="%{NAME}\n" "{}" | sort | uniq