OpenPKG Quick Reference (DEVELOPMENT) ===================================== Unpacking And Patching Sources ============================== Synopsis -------- %setup[] [options] -q # quiet unpacking operation -n # set name of directory -c # create directory (and change to it) before unpacking -D # do not delete directory before unpacking sources -T # do not perform default archive unpacking of %{SOURCE} -b # also unpack %{SOURCE} before changing to directory (usually combined with -T, -D) -a # also unpack %{SOURCE} after changing to directory (usually combined with -T, -D, -c) %patch[] [options] [ ...] -P # do not perform default apply of %{PATCH} -p <#> # strip <#> leading slashes and directories from patch filenames -b # set the backup file extension to instead of ".orig" -E # remove empty output files -R # apply patch as it would be reversed # also apply %{PATCH} Visualization ------------- Input: %setup[] # default for is 0 Output: rm -rf - # changed by -n , omitted by -D mkdir - # changed by -n , added by -c (else omitted) cd - # changed by -n , added by -c (else omitted) gunzip <%{SOURCE} | tar xvf - # omitted by -T, "xvf" replaced with "xf" by -q gunzip <%{SOURCE} | tar xvf - # added by -b , "xvf" replaced with "xf" by -q cd - # changed by -n gunzip <%{SOURCE} | tar xvf - # added by -a , "xvf" replaced with "xf" by -q Platform Identification ======================= FreeBSD Linux Solaris platform class %{l_platform -c} ix86-4.4bsd ix86-lsb1.2 sparc-svr4 platform product %{l_platform -p} ix86-freebsd4.8 ix86-redhat9 sparc64-solaris9 platform technology %{l_platform -t} i686-freebsd4.8 i585-linux2.4 sun4u-sunos5.9 Sections And Commands ===================== --rebuild => -Uvh, -bb, --clean, --rmsource (undocumented), --rmspec (undocumented) %description %prep %build %install %check (for rpmlint things) %files %clean %pre %post %preun %postun %trigger %triggerin %triggerun %triggerpostun %verifyscript (for custom -V checks) %package (not allowed in OpenPKG) %changelog (not allowed in OpenPKG) action only this action up to this action ------------------------ -------------------- ----------------- execute %prep -bp --short-circuit -bp execute %build -bc --short-circuit -bc execute %install -bi --short-circuit -bi execute %check N.A. N.A. execute %files -bl N.A. roll binary RPM package -bb --short-circuit N.A. execute %clean N.A. -bb roll source RPM package -bs -ba Script Execution ---------------- section install erase upgrade reinstall ------- ------- ------- ------- --------- %pre 1 - 2 2 %post 1 - 2 2 %preun - 0 1 - %postun - 0 1 - ("reinstall" is the case where one uses the --force option to rpm (-i or -U) to install the same version of the package that already is in the system. "-" means that the scriptlet will not be run in this phase) The order in which scripts are executed on a single package install: new-%pre $1=1 for new version of package being installed ... (all new files are installed and override old versions) new-%post $1=1 for new version of package being installed The order in which scripts are executed on a single package upgrade: new-%pre $1=2 for new version of package being installed ... (all new files are installed and override old versions) new-%post $1=2 for new version of package being installed old-%preun $1=1 for old version of package being removed ... (all old files are removed which are not part of the new package) old-%postun $1=1 for old version of package being removed The order in which scripts are executed on a single package erase: old-%preun $1=0 for old version of package being removed ... (all old files are removed which are not part of the new package) old-%postun $1=0 for old version of package being removed Package Variants ---------------- o Naming Convention - primary/intended package is named "foo" - secondary/alternative/compatibility/etc packages are named "fooN" where "N" is the compressed version string not longer than 2 or 3 digits. - examples: perl/perl56, gcc/gcc2/gcc33, mysql/mysql4, tomcat/tomcat4 o Alternative Packages - for using automatically handled package alternatives - packages conflict by default, because are true alternatives - intention is that packages are fully equal and compatible, any can be used, any is chosen - multiple existing packages is final solution and will remain in near future - multiple packages are of different products (only) Original Package: | Name: foo | Provides: FOO Alternative Packages: | Name: fooN | Provides: FOO | %install | ln -s $RPM_BUILD_ROOT%{l_prefix}/bin/fooN $RPM_BUILD_ROOT%{l_prefix}/bin/foo Examples: MTA, JDK, JRE, MOTIF, KSH, X11 o Faked Packages - for using manually enforced package alternatives - packages do not conflict by default, but on enforcement - intention is that packages are not fully compatible, only one particular should be used, others can be enfored - multiple existing packages is temporary solution and will certainly change in near future - multiple packages are of different versions of same product (only) Original Package: | Name: foo Faked Packages: | Name: fooN | %options with_foo no | %if "%{with_foo}" == "yes" | Provides: foo = %{version}-%{release} | %endif | %install | %if "%{with_foo}" == "yes" | ln -s $RPM_BUILD_ROOT%{l_prefix}/bin/fooN $RPM_BUILD_ROOT%{l_prefix}/bin/foo | %endif Examples: perl, gcc, mysql, gd, tomcat