openpkg.spec 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230
  1. ##
  2. ## openpkg.spec -- OpenPKG RPM Specification
  3. ## Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
  4. ## Copyright (c) 2000-2001 The OpenPKG Project <http://www.openpkg.org/>
  5. ## Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
  6. ##
  7. ## Permission to use, copy, modify, and distribute this software for
  8. ## any purpose with or without fee is hereby granted, provided that
  9. ## the above copyright notice and this permission notice appear in all
  10. ## copies.
  11. ##
  12. ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  13. ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  14. ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  15. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  16. ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  17. ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  18. ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  19. ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  20. ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  21. ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  22. ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  23. ## SUCH DAMAGE.
  24. ##
  25. # NOTICE: This RPM specification is _very_ special, because it is
  26. # used both for bootstrapping OpenPKG with its RPM and for regular
  27. # builds of RPM in order to upgrade an existing installation. For this
  28. # it has to interact correctly with the "openpkg.boot" script. See
  29. # this companion script for details, but do not touch anything here
  30. # until you are 100% sure about what you are doing. In short: This
  31. # script is allowed to use only a very restricted subset of the RPM
  32. # functionality!
  33. # BUILD REQUIREMENTS:
  34. # o any sh(1)
  35. # o any tar(1)
  36. # o any make(1)
  37. # o any cc(1)
  38. # the package version and release
  39. %define V_openpkg 20011227
  40. %define R_openpkg 20011227
  41. # the used software versions
  42. %define V_rpm 4.0.2
  43. %define V_zlib 1.1.3
  44. %define V_bzip2 1.0.1
  45. %define V_db 3.2.9
  46. %define V_curl 7.9.1
  47. %define V_make 3.79.1
  48. %define V_gzip 1.3
  49. %define V_patch 2.5.4
  50. %define V_tar 1.13.25
  51. %define V_bash 2.05a
  52. # package information
  53. Name: openpkg
  54. Summary: OpenPKG Bootstrap
  55. URL: http://www.openpkg.org/
  56. Vendor: OpenPKG
  57. Packager: The OpenPKG Project
  58. Distribution: OpenPKG [REL]
  59. Group: Bootstrapping
  60. License: GPL
  61. Version: %{V_openpkg}
  62. Release: %{R_openpkg}
  63. # list of sources
  64. Source0: README
  65. Source1: openpkg.boot
  66. Source2: ftp://ftp.rpm.org/pub/rpm/dist/rpm-%{V_rpm}.x/rpm-%{V_rpm}.tar.gz
  67. Source3: rpm-%{V_rpm}.patch.bugfix
  68. Source4: rpm-%{V_rpm}.patch.feature
  69. Source5: rpm-%{V_rpm}.patch.porting
  70. Source6: rpm-%{V_rpm}.patch.regen
  71. Source7: http://www.sleepycat.com/update/%{V_db}/db-%{V_db}.tar.gz
  72. Source8: ftp://sourceware.cygnus.com/pub/bzip2/v100/bzip2-%{V_bzip2}.tar.gz
  73. Source9: ftp://ftp.freesoftware.com/pub/infozip/zlib/zlib-%{V_zlib}.tar.gz
  74. Source10: http://curl.haxx.se/download/curl-%{V_curl}.tar.gz
  75. Source11: rpmpopt
  76. Source12: rpmrc
  77. Source13: rpmmacros
  78. Source14: root.README
  79. Source15: local.README
  80. Source16: rc
  81. Source17: rc.func
  82. Source18: rpmtool
  83. Source19: rpmtool.8
  84. Source20: rpmtool.pod
  85. Source21: lsync
  86. Source22: lsync.8
  87. Source23: lsync.pod
  88. Source24: wrap1.sh
  89. Source25: wrap2.sh
  90. Source26: openpkg.pgp
  91. Source27: shtool
  92. Source28: rpmx.sh
  93. Source29: rpmx.pl
  94. Source30: ftp://ftp.gnu.org/gnu/make/make-%{V_make}.tar.gz
  95. Source31: ftp://alpha.gnu.org/gnu/gzip/gzip-%{V_gzip}.tar
  96. Source32: ftp://ftp.gnu.org/gnu/patch/patch-%{V_patch}.tar.gz
  97. Source33: rc.openpkg
  98. Source34: ftp://ftp.gnu.org/gnu/tar/tar-%{V_tar}.tar.gz
  99. Source35: ftp://ftp.gnu.org/gnu/bash/bash-%{V_bash}.tar.gz
  100. Source36: dot.bashrc
  101. Source37: dot.bash_login
  102. Source38: dot.lsyncrc
  103. Source39: db-%{V_db}.patch
  104. Source40: rc.conf
  105. # build information
  106. Prefix: %{l_prefix}
  107. BuildRoot: %{l_buildroot}
  108. AutoReq: no
  109. AutoReqProv: no
  110. Provides: OpenPKG
  111. %description
  112. This is the bootstrap package for the RPM-based Unix Software
  113. Package Hierarchy OpenPKG. The RedHat Package Manager (RPM) is a
  114. sophisticated and portable package manager for Unix platforms,
  115. which supports the automated building, installation, management and
  116. deinstallation of Unix software. Originally RPM is designed and
  117. implemented for us with the RedHat Linux operating system where
  118. it manages every file on the whole system. In OpenPKG RPM is used
  119. only for managing all files in a particular filesystem hierarchy
  120. dedicated to the installation of third-party software packages
  121. provided by the OpenPKG project.
  122. Internally the OpenPKG bootstrap package is based on the
  123. following particular vendor products:
  124. RedHat RPM %{V_rpm}, Berkeley-DB %{V_db}, ZLib %{V_zlib},
  125. GNU Bzip2 %{V_bzip2}, GNU Gzip %{V_gzip}, GNU Tar %{V_tar},
  126. GNU Patch %{V_patch}, GNU Make %{V_make}, GNU Bash %{V_bash},
  127. cURL %{V_curl}
  128. %prep
  129. # skip in bootstrap phase 2 (see openpkg.boot)
  130. [ ".$OPENPKG_BOOT" = .1 ] && exit 0
  131. # switch into a temporary build area
  132. rm -rf %{name}-%{version}
  133. mkdir %{name}-%{version}
  134. cd %{name}-%{version}
  135. rm -f .buildenv
  136. touch .buildenv
  137. # provide a bootstrap alternative to %{SOURCE xxx} because else
  138. # it is not possible to upgrade a newer OpenPKG RPM with an older
  139. # OpenPKG RPM.
  140. echo >>.buildenv 'SOURCE () {'
  141. echo >>.buildenv ' if [ -f "%{_specdir}/$1" ]; then'
  142. echo >>.buildenv ' echo "%{_specdir}/$1"'
  143. echo >>.buildenv ' else'
  144. echo >>.buildenv ' echo "%{_sourcedir}/$1"'
  145. echo >>.buildenv ' fi'
  146. echo >>.buildenv '}'
  147. . ./.buildenv
  148. # determine path to shtool
  149. shtool=`SOURCE shtool`
  150. echo "shtool=$shtool" >>./.buildenv
  151. # manually make sure tar(1) is available
  152. l_tar=`sh $shtool path gtar tar`; export l_tar
  153. if [ ".$l_tar" = . ]; then
  154. echo "openpkg: prerequisite tool \`gtar' or \`tar' not found"
  155. exit 1
  156. fi
  157. echo "l_tar=\"$l_tar\"; export l_tar" >>.buildenv
  158. # manually make sure make(1) is available
  159. l_make=`sh $shtool path gmake make`; export l_make
  160. if [ ".$l_make" = . ]; then
  161. echo "openpkg: prerequisite tool \`gmake' or \`make' not found"
  162. exit 1
  163. fi
  164. echo "l_make=\"$l_make\"; export l_make" >>.buildenv
  165. # manually make sure cc(1) is available
  166. l_cc=`sh $shtool path gcc cc`; export l_cc
  167. if [ ".$l_cc" = . ]; then
  168. echo "openpkg: prerequisite tool \`gcc' or \`cc' not found"
  169. exit 1
  170. fi
  171. echo "l_cc=\"$l_cc\"; export l_cc" >>.buildenv
  172. # determine user and group for installed files
  173. if [ ".%{?l_fsusr:set}" = .set ]; then
  174. fsusr="%{l_fsusr}"
  175. else
  176. fsusr=`(id -un) 2>/dev/null ||\
  177. (whoami) 2>/dev/null ||\
  178. (who am i | cut "-d " -f1) 2>/dev/null ||\
  179. echo $LOGNAME`
  180. fi
  181. echo "fsusr=\"$fsusr\"; export fsusr" >>.buildenv
  182. if [ ".%{?l_fsgrp:set}" = .set ]; then
  183. fsgrp="%{l_fsgrp}"
  184. else
  185. fsgrp=`(cat /etc/passwd; ypcat passwd) 2>/dev/null |\
  186. grep "^${fsusr}:" | head -1 | awk -F: '{ print $4; }'`
  187. fsgrp=`(cat /etc/group; ypcat group) 2>/dev/null |\
  188. grep ":${fsgrp}:" | head -1 | awk -F: '{ print $1; }'`
  189. fi
  190. fsgid=`(cat /etc/group; ypcat group) 2>/dev/null |\
  191. grep "^${fsgrp}:" | head -1 | awk -F: '{ print $3; }'`
  192. echo "fsgrp=\"$fsgrp\"; export fsgrp" >>.buildenv
  193. echo "fsgid=\"$fsgid\"; export fsgid" >>.buildenv
  194. # determine user and group for non-priviledged operations
  195. npusr=nobody
  196. npuid=`(cat /etc/passwd; ypcat passwd) 2>/dev/null |\
  197. grep "^${npusr}:" | head -1 | awk -F: '{ print $3; }'`
  198. if [ ".$npuid" = . ]; then
  199. echo "Ops, your system lacks a 'nobody' user!"
  200. exit 1
  201. fi
  202. echo "npusr=\"$npusr\"; export npusr" >>.buildenv
  203. echo "npuid=\"$npuid\"; export npuid" >>.buildenv
  204. for npgrp in nobody nogroup; do
  205. npgid=`(cat /etc/group; ypcat group) 2>/dev/null |\
  206. grep "^${npgrp}:" | head -1 | awk -F: '{ print $3; }'`
  207. if [ ".$npgid" != . ]; then
  208. break
  209. fi
  210. done
  211. if [ ".$npgid" = . ]; then
  212. echo "Ops, your system lacks a 'nobody' or 'nogroup' group!"
  213. exit 1
  214. fi
  215. echo "npgrp=\"$npgrp\"; export npgrp" >>.buildenv
  216. echo "npgid=\"$npgid\"; export npgid" >>.buildenv
  217. # determine installation location id
  218. if [ ".%{?l_location:set}" = .set ]; then
  219. loc="%{l_location}"
  220. else
  221. if [ ".`expr %{l_prefix} : '/[^/][^/]*$'`" != .0 ]; then
  222. loc=`echo %{l_prefix} | cut -c2-4`
  223. else
  224. loc=`echo %{l_prefix} | sed -e 's;/\(.\)[^/]*;\1;g' | cut -c1-3`
  225. fi
  226. fi
  227. echo "loc=\"$loc\"; export loc" >>.buildenv
  228. # bootstrap GNU zip tool
  229. ${l_tar} xf `SOURCE gzip-%{V_gzip}.tar` 2>/dev/null
  230. ( cd gzip-%{V_gzip}
  231. CC="${l_cc}" ./configure
  232. ${l_make}
  233. )
  234. l_gzip="`pwd`/gzip-%{V_gzip}/gzip"; export l_gzip
  235. echo "l_gzip=\"$l_gzip\"; export l_gzip" >>.buildenv
  236. # unpack distribution tarballs
  237. ${l_gzip} -dc `SOURCE rpm-%{V_rpm}.tar.gz` | ${l_tar} xf -
  238. ${l_gzip} -dc `SOURCE zlib-%{V_zlib}.tar.gz` | ${l_tar} xf -
  239. ${l_gzip} -dc `SOURCE bzip2-%{V_bzip2}.tar.gz` | ${l_tar} xf -
  240. ${l_gzip} -dc `SOURCE db-%{V_db}.tar.gz` | ${l_tar} xf -
  241. ${l_gzip} -dc `SOURCE curl-%{V_curl}.tar.gz` | ${l_tar} xf -
  242. ${l_gzip} -dc `SOURCE make-%{V_make}.tar.gz` | ${l_tar} xf -
  243. ${l_gzip} -dc `SOURCE patch-%{V_patch}.tar.gz` | ${l_tar} xf -
  244. ${l_gzip} -dc `SOURCE tar-%{V_tar}.tar.gz` | ${l_tar} xf -
  245. ${l_gzip} -dc `SOURCE bash-%{V_bash}.tar.gz` | ${l_tar} xf -
  246. # bootstrap GNU make tool
  247. ( cd make-%{V_make}
  248. CC="${l_cc}" ./configure --disable-nls --disable-largefile
  249. ${l_make}
  250. (mv make ..; ${l_make} clean || true; mv ../make .)
  251. )
  252. l_make="`pwd`/make-%{V_make}/make"; export l_make
  253. echo "l_make=\"$l_make\"; export l_make" >>.buildenv
  254. # bootstrap GNU patch tool
  255. ( cd patch-%{V_patch}
  256. echo 'ac_cv_func_setmode=${ac_cv_func_setmode=no}' >config.cache
  257. false=`sh $shtool path false`
  258. echo "ac_cv_path_ed_PROGRAM=\${ac_cv_path_ed_PROGRAM=$false}" >>config.cache
  259. CC="${l_cc}" ./configure --disable-largefile
  260. ${l_make}
  261. (mv patch ..; ${l_make} clean || true; mv ../patch .)
  262. )
  263. l_patch="`pwd`/patch-%{V_patch}/patch"; export l_patch
  264. echo "l_patch=\"$l_patch\"; export l_patch" >>.buildenv
  265. # apply OpenPKG patches to RPM distribution tree
  266. ( cd rpm-%{V_rpm}
  267. ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.bugfix`
  268. ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.feature`
  269. ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.porting`
  270. ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.regen`
  271. touch aclocal.m4 configure
  272. )
  273. # apply OpenPKG patches to DB distribution tree
  274. ( cd db-%{V_db}
  275. ${l_patch} -p0 <`SOURCE db-%{V_db}.patch`
  276. )
  277. %build
  278. # skip in bootstrap phase 2 (see openpkg.boot)
  279. [ ".$OPENPKG_BOOT" = .1 ] && exit 0
  280. # switch into a temporary build area
  281. cd %{name}-%{version}
  282. . ./.buildenv
  283. # build GNU bash tool
  284. ( cd bash-%{V_bash}
  285. CC="${l_cc}"
  286. ./configure \
  287. --prefix=%{l_prefix} \
  288. --disable-nls
  289. ${l_make}
  290. (mv bash ..; ${l_make} clean || true; mv ../bash .)
  291. )
  292. # build GNU tar tool
  293. ( cd tar-%{V_tar}
  294. CC="${l_cc}"
  295. ./configure \
  296. --prefix=%{l_prefix} \
  297. --disable-nls
  298. ${l_make}
  299. (mv src/tar ..; ${l_make} clean || true; mv ../tar src/)
  300. )
  301. # build cURL tool
  302. ( cd curl-%{V_curl}
  303. CC="${l_cc}" \
  304. ./configure \
  305. --without-ssl \
  306. --disable-shared \
  307. --disable-thread \
  308. --disable-ipv6
  309. ${l_make}
  310. (mv src/curl ..; ${l_make} clean || true; mv ../curl ./src)
  311. )
  312. # build BZIP2 library
  313. ( cd bzip2-%{V_bzip2}
  314. ${l_make} CC="${l_cc}" CFLAGS="-O" libbz2.a bzip2
  315. )
  316. # build ZLIB library
  317. ( cd zlib-%{V_zlib}
  318. CC="${l_cc}" CFLAGS="-O" ./configure
  319. ${l_make} CC="${l_cc}" CFLAGS="-O" libz.a
  320. )
  321. # build Berkeley-DB library
  322. ( cd db-%{V_db}/build_unix
  323. case `sh ../dist/config.guess` in
  324. *-*-osf* ) echo 'db_cv_mutex=${db_cv_mutex=UNIX/msem_init}' >config.cache ;; # avoid dependency to pthread
  325. esac
  326. CC="${l_cc}" ../dist/configure
  327. ${l_make} libdb.a
  328. ln libdb.a libdbXXX.a # workaround for Tru64
  329. )
  330. # build RPM
  331. # - we make sure RPM builds without NLS/gettext problems :-(
  332. # - we make sure RPM finds and uses our own BZIP2/ZLIB/DB libraries
  333. # - we speed up building by skipping the NLS/gettext data
  334. ( br=`pwd`
  335. cd rpm-%{V_rpm}
  336. sed -e 's;(aclocal --version);false;' \
  337. -e 's;(automake --version);false;' \
  338. -e 's;(autoconf --version);false;' \
  339. -e 's;(autoheader --version);false;' \
  340. -e 's;(makeinfo --version);false;' \
  341. -e 's;/lib/rpm;/lib/openpkg;' \
  342. <configure >configure.n && \
  343. mv configure.n configure
  344. sed -e 's;@INTLLIBS@;@INTLLIBS@ @LIBMISC@;' \
  345. <tools/Makefile.in >tools/Makefile.in.n && \
  346. mv tools/Makefile.in.n tools/Makefile.in
  347. sed -e 's;^\(SUBDIRS[ ]*=.*\) po \(.*\)$;\1 \2;' \
  348. -e 's;^\(SUBDIRS[ ]*=.*\) tools \(.*\)$;\1 \2;' \
  349. -e 's;^\(LIBS[ ]*=\).*;\1 @LIBS@ $(EXTRA_LIBS);' \
  350. <Makefile.in >Makefile.in.n && mv Makefile.in.n Makefile.in
  351. sed -e 's;^\(SUBDIRS[ ]*=.*\) po$;\1;' \
  352. <popt/Makefile.in >popt/Makefile.in.n && \
  353. mv popt/Makefile.in.n popt/Makefile.in
  354. ( echo 'ac_cv_path_MSGFMT=${ac_cv_path_MSGFMT=no}'
  355. echo 'ac_cv_path_GMSGFMT=${ac_cv_path_GMSGFMT=no}'
  356. ) >config.cache
  357. case `sh ./config.guess` in
  358. *-*-linux* ) nlsopt="--disable-nls" ;;
  359. * ) nlsopt="--enable-nls --with-included-gettext" ;;
  360. esac
  361. nlsopt="--disable-nls"
  362. CC="${l_cc} -DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \
  363. CFLAGS="-DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \
  364. CPPFLAGS="-DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \
  365. LDFLAGS="-L$br/db-%{V_db}/build_unix -L$br/zlib-%{V_zlib} -L$br/bzip2-%{V_bzip2}" \
  366. LIBS="-L$br/db-%{V_db}/build_unix -ldbXXX -L$br/zlib-%{V_zlib} -lz -L$br/bzip2-%{V_bzip2} -lbz2" \
  367. sh ./configure \
  368. --prefix=%{l_prefix} \
  369. --disable-shared \
  370. --disable-db1 \
  371. --with-glob \
  372. $nlsopt
  373. ${l_make} \
  374. EXTRA_LIBS="-L$br/db-%{V_db}/build_unix -ldbXXX -L$br/zlib-%{V_zlib} -lz -L$br/bzip2-%{V_bzip2} -lbz2" \
  375. )
  376. %install
  377. # skip in bootstrap phase 2 (see openpkg.boot)
  378. [ ".$OPENPKG_BOOT" = .1 ] && exit 0
  379. # switch into a temporary build area
  380. cd %{name}-%{version}
  381. . ./.buildenv
  382. # create installation hierarchy
  383. rm -rf $RPM_BUILD_ROOT
  384. sh $shtool mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}
  385. for dir in bin etc include info lib libexec man sbin share var cgi web local; do
  386. test -d $RPM_BUILD_ROOT%{l_prefix}/$dir || \
  387. mkdir $RPM_BUILD_ROOT%{l_prefix}/$dir
  388. done
  389. for i in 1 2 3 4 5 6 7 8 9; do
  390. test -d $RPM_BUILD_ROOT%{l_prefix}/man/man$i || \
  391. mkdir $RPM_BUILD_ROOT%{l_prefix}/man/man$i
  392. test -d $RPM_BUILD_ROOT%{l_prefix}/man/cat$i || \
  393. mkdir $RPM_BUILD_ROOT%{l_prefix}/man/cat$i
  394. done
  395. for dir in PKG bin etc include info lib man sbin; do
  396. test -d $RPM_BUILD_ROOT%{l_prefix}/local/$dir || \
  397. mkdir $RPM_BUILD_ROOT%{l_prefix}/local/$dir
  398. done
  399. for i in 1 2 3 4 5 6 7 8 9; do
  400. test -d $RPM_BUILD_ROOT%{l_prefix}/local/man/man$i || \
  401. mkdir $RPM_BUILD_ROOT%{l_prefix}/local/man/man$i
  402. test -d $RPM_BUILD_ROOT%{l_prefix}/local/man/cat$i || \
  403. mkdir $RPM_BUILD_ROOT%{l_prefix}/local/man/cat$i
  404. done
  405. test -d $RPM_BUILD_ROOT%{l_prefix}/RPM || \
  406. mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM
  407. for dir in SRC PKG DB TMP; do
  408. test -d $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir || \
  409. mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir
  410. done
  411. # install RPM into installation hierarchy
  412. ( cd rpm-%{V_rpm}
  413. ${l_make} DESTDIR="$RPM_BUILD_ROOT" install
  414. )
  415. # strip RPM installation
  416. strip $RPM_BUILD_ROOT%{l_prefix}/bin/* \
  417. $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/* >/dev/null 2>&1 || true
  418. for dir in man/ja man/pl man/ru man/sk src; do
  419. rm -rf $RPM_BUILD_ROOT%{l_prefix}/$dir
  420. done
  421. for file in rpmbuild rpmdb rpme rpmi rpmsign rpmu rpmverify rpmquery gendiff; do
  422. rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/$file
  423. done
  424. rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/*
  425. rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/*
  426. rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man3/*
  427. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmpopt
  428. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmrc
  429. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/lib*
  430. rm -f $RPM_BUILD_ROOT%{l_prefix}/include/popt.h
  431. rm -rf $RPM_BUILD_ROOT%{l_prefix}/include/rpm
  432. rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/lib
  433. for file in \
  434. u_pkg.sh vpkg-provides.sh vpkg-provides2.sh rpmdiff.cgi rpmdiff \
  435. perl.prov perl.req mkinstalldirs magic.prov magic.req http.req \
  436. getpo.sh get_magic.pl find-requires.perl find-req.pl find-provides.perl \
  437. find-prov.pl find-lang.sh cpanflute convertrpmrc.sh check-prereqs \
  438. rpmputtext rpmgettext brp-compress brp-redhat brp-sparc64-linux \
  439. brp-strip brp-strip-shared brp-strip-comment-note rpmrc \
  440. config.guess config.sub; do
  441. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$file
  442. done
  443. # replace symlinks with hardlinks
  444. for entry in rpme:rpmi rpmt:rpmb rpmu:rpmi rpmv:rpmq; do
  445. eval `echo $entry | sed -e 's/^\(.*\):\(.*\)$/dst=\1; src=\2/'`
  446. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst
  447. ln $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$src \
  448. $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst
  449. done
  450. # install additional RPM tools (rpmtool, lsync)
  451. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  452. <`SOURCE rpmtool` \
  453. >$RPM_BUILD_ROOT%{l_prefix}/sbin/rpmtool
  454. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  455. <`SOURCE lsync` \
  456. >$RPM_BUILD_ROOT%{l_prefix}/sbin/lsync
  457. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  458. <`SOURCE dot.lsyncrc` \
  459. >$RPM_BUILD_ROOT%{l_prefix}/local/.lsyncrc
  460. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  461. <`SOURCE rpmtool.8` \
  462. >$RPM_BUILD_ROOT%{l_prefix}/man/man8/rpmtool.8
  463. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  464. <`SOURCE lsync.8` \
  465. >$RPM_BUILD_ROOT%{l_prefix}/man/man8/lsync.8
  466. chmod a+x $RPM_BUILD_ROOT%{l_prefix}/sbin/rpmtool
  467. chmod a+x $RPM_BUILD_ROOT%{l_prefix}/sbin/lsync
  468. # install RPM extension
  469. ( cd curl-%{V_curl}
  470. cp src/curl $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
  471. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
  472. )
  473. ( cd bzip2-%{V_bzip2}
  474. cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
  475. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
  476. )
  477. ( cd gzip-%{V_gzip}
  478. cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
  479. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
  480. )
  481. ( cd patch-%{V_patch}
  482. cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
  483. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
  484. )
  485. ( cd tar-%{V_tar}
  486. cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
  487. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
  488. )
  489. ( cd bash-%{V_bash}
  490. cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
  491. strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
  492. )
  493. sed -e "s;@l_prefix@;%{l_prefix};g" \
  494. <`SOURCE rpmx.sh` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh
  495. chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh
  496. sed -e "s;@l_prefix@;%{l_prefix};g" \
  497. <`SOURCE rpmx.pl` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl
  498. chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl
  499. # install an own copy of shtool
  500. cp $shtool $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool
  501. chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool
  502. # install a few README files
  503. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  504. <`SOURCE root.README` \
  505. >$RPM_BUILD_ROOT%{l_prefix}/README
  506. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  507. <`SOURCE local.README` \
  508. >$RPM_BUILD_ROOT%{l_prefix}/local/README
  509. # install Bash environment
  510. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  511. <`SOURCE dot.bashrc` \
  512. >$RPM_BUILD_ROOT%{l_prefix}/.bashrc
  513. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  514. <`SOURCE dot.bash_login` \
  515. >$RPM_BUILD_ROOT%{l_prefix}/.bash_login
  516. # install Run-Command files
  517. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  518. <`SOURCE rc` \
  519. >$RPM_BUILD_ROOT%{l_prefix}/etc/rc
  520. chmod 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc
  521. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  522. <`SOURCE rc.conf` \
  523. >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.conf
  524. chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.conf
  525. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  526. <`SOURCE rc.func` \
  527. >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.func
  528. chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.func
  529. mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
  530. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  531. <`SOURCE rc.openpkg` \
  532. >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/rc.openpkg
  533. chmod 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/rc.openpkg
  534. # hard-code RPM tool for installation hierarchy
  535. # and adjust RPM configuration files
  536. mv $RPM_BUILD_ROOT%{l_prefix}/bin/rpm \
  537. $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpm
  538. ( echo "#!/bin/sh";
  539. echo "exec %{l_prefix}/lib/openpkg/rpm --rcfile %{l_prefix}/etc/openpkg/rpmrc \${1+\"\$@\"}"
  540. ) >$RPM_BUILD_ROOT%{l_prefix}/bin/rpm
  541. chmod 755 $RPM_BUILD_ROOT%{l_prefix}/bin/rpm
  542. cat `SOURCE rpmpopt` \
  543. >>$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm}
  544. test -d $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg || \
  545. mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg
  546. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  547. <`SOURCE rpmrc` \
  548. >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmrc
  549. sed -e "s:@l_prefix@:%{l_prefix}:g" \
  550. -e "s:@LOC@:$loc:g" \
  551. -e "s:@FSUSR@:$fsusr:g" \
  552. -e "s:@FSGRP@:$fsgrp:g" \
  553. -e "s:@NPUSR@:$npusr:g" \
  554. -e "s:@NPUID@:$npuid:g" \
  555. -e "s:@NPGRP@:$npgrp:g" \
  556. -e "s:@NPGID@:$npgid:g" \
  557. <`SOURCE rpmmacros` \
  558. >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmmacros
  559. cp `SOURCE openpkg.pgp` \
  560. $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/openpkg.pgp
  561. %files
  562. %defattr(-,%{l_fsusr},%{l_fsgrp})
  563. %{l_prefix}/README
  564. %{l_prefix}/.bashrc
  565. %{l_prefix}/.bash_login
  566. %dir %{l_prefix}/RPM
  567. %dir %{l_prefix}/RPM/SRC
  568. %dir %{l_prefix}/RPM/PKG
  569. %dir %{l_prefix}/RPM/DB
  570. %dir %{l_prefix}/RPM/TMP
  571. %dir %{l_prefix}/bin
  572. %{l_prefix}/bin/rpm2cpio
  573. %{l_prefix}/bin/rpm
  574. %dir %{l_prefix}/etc
  575. %{l_prefix}/etc/rc
  576. %config %{l_prefix}/etc/rc.conf
  577. %{l_prefix}/etc/rc.func
  578. %dir %{l_prefix}/etc/rc.d
  579. %{l_prefix}/etc/rc.d/rc.openpkg
  580. %dir %{l_prefix}/etc/openpkg
  581. %config %{l_prefix}/etc/openpkg/rpmmacros
  582. %config %{l_prefix}/etc/openpkg/rpmrc
  583. %{l_prefix}/etc/openpkg/openpkg.pgp
  584. %dir %{l_prefix}/include
  585. %dir %{l_prefix}/info
  586. %dir %{l_prefix}/lib
  587. %dir %{l_prefix}/lib/openpkg
  588. %{l_prefix}/lib/openpkg/rpm
  589. %{l_prefix}/lib/openpkg/rpmb
  590. %{l_prefix}/lib/openpkg/rpmdb
  591. %{l_prefix}/lib/openpkg/rpmi
  592. %{l_prefix}/lib/openpkg/rpmk
  593. %{l_prefix}/lib/openpkg/rpmq
  594. %{l_prefix}/lib/openpkg/find-provides
  595. %{l_prefix}/lib/openpkg/find-requires
  596. %{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm}
  597. %{l_prefix}/lib/openpkg/macros
  598. %{l_prefix}/lib/openpkg/rpmt
  599. %{l_prefix}/lib/openpkg/rpme
  600. %{l_prefix}/lib/openpkg/rpmu
  601. %{l_prefix}/lib/openpkg/rpmv
  602. %{l_prefix}/lib/openpkg/rpmx.sh
  603. %{l_prefix}/lib/openpkg/rpmx.pl
  604. %{l_prefix}/lib/openpkg/curl
  605. %{l_prefix}/lib/openpkg/gzip
  606. %{l_prefix}/lib/openpkg/bzip2
  607. %{l_prefix}/lib/openpkg/shtool
  608. %{l_prefix}/lib/openpkg/patch
  609. %{l_prefix}/lib/openpkg/tar
  610. %{l_prefix}/lib/openpkg/bash
  611. %dir %{l_prefix}/libexec
  612. %dir %{l_prefix}/man
  613. %dir %{l_prefix}/man/man1
  614. %dir %{l_prefix}/man/man2
  615. %dir %{l_prefix}/man/man3
  616. %dir %{l_prefix}/man/man4
  617. %dir %{l_prefix}/man/man5
  618. %dir %{l_prefix}/man/man6
  619. %dir %{l_prefix}/man/man7
  620. %dir %{l_prefix}/man/man8
  621. %dir %{l_prefix}/man/man9
  622. %dir %{l_prefix}/man/cat1
  623. %dir %{l_prefix}/man/cat2
  624. %dir %{l_prefix}/man/cat3
  625. %dir %{l_prefix}/man/cat4
  626. %dir %{l_prefix}/man/cat5
  627. %dir %{l_prefix}/man/cat6
  628. %dir %{l_prefix}/man/cat7
  629. %dir %{l_prefix}/man/cat8
  630. %dir %{l_prefix}/man/cat9
  631. %dir %{l_prefix}/cgi
  632. %dir %{l_prefix}/web
  633. %{l_prefix}/man/man8/rpm.8
  634. %{l_prefix}/man/man8/rpm2cpio.8
  635. %{l_prefix}/man/man8/rpmtool.8
  636. %{l_prefix}/man/man8/lsync.8
  637. %dir %{l_prefix}/sbin
  638. %dir %{l_prefix}/share
  639. %dir %{l_prefix}/var
  640. %{l_prefix}/sbin/rpmtool
  641. %{l_prefix}/sbin/lsync
  642. %dir %{l_prefix}/local
  643. %{l_prefix}/local/README
  644. %{l_prefix}/local/.lsyncrc
  645. %dir %{l_prefix}/local/PKG
  646. %dir %{l_prefix}/local/bin
  647. %dir %{l_prefix}/local/etc
  648. %dir %{l_prefix}/local/include
  649. %dir %{l_prefix}/local/info
  650. %dir %{l_prefix}/local/lib
  651. %dir %{l_prefix}/local/man
  652. %dir %{l_prefix}/local/man/man1
  653. %dir %{l_prefix}/local/man/man2
  654. %dir %{l_prefix}/local/man/man3
  655. %dir %{l_prefix}/local/man/man4
  656. %dir %{l_prefix}/local/man/man5
  657. %dir %{l_prefix}/local/man/man6
  658. %dir %{l_prefix}/local/man/man7
  659. %dir %{l_prefix}/local/man/man8
  660. %dir %{l_prefix}/local/man/man9
  661. %dir %{l_prefix}/local/man/cat1
  662. %dir %{l_prefix}/local/man/cat2
  663. %dir %{l_prefix}/local/man/cat3
  664. %dir %{l_prefix}/local/man/cat4
  665. %dir %{l_prefix}/local/man/cat5
  666. %dir %{l_prefix}/local/man/cat6
  667. %dir %{l_prefix}/local/man/cat7
  668. %dir %{l_prefix}/local/man/cat8
  669. %dir %{l_prefix}/local/man/cat9
  670. %dir %{l_prefix}/local/sbin
  671. %clean
  672. # skip in bootstrap phase 2 (see openpkg.boot)
  673. [ ".$OPENPKG_BOOT" = .1 ] && exit 0
  674. # cleanup after building
  675. rm -rf $RPM_BUILD_ROOT
  676. rm -rf %{name}-%{version}
  677. %pre
  678. [ ".$1" != .1 ] && exit 0
  679. # this procedure is only usable with root priviledges
  680. # (for non-root installations it is not required at all)
  681. thisuser=`(id -un) 2>/dev/null ||\
  682. (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\
  683. (whoami) 2>/dev/null ||\
  684. (who am i | cut "-d " -f1) 2>/dev/null ||\
  685. echo $LOGNAME`
  686. # determine runtime details (for both inside and outside RPM!!)
  687. user="$fsusr"; [ ".$fsusr" = . ] && fsusr="%{l_fsusr}"
  688. group="$fsgrp"; [ ".$fsgrp" = . ] && fsgrp="%{l_fsgrp}"
  689. prefix="$p"; [ ".$prefix" = . ] && prefix="%{l_prefix}"
  690. prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'`
  691. name=`echo "$prefix" | sed -e 's;/;;g'`
  692. # determine platform id
  693. s=`(uname -s) 2>/dev/null` || s='Unknown'
  694. r=`(uname -r) 2>/dev/null` || r='0.0'
  695. plid="${s}/${r}"
  696. # create the hierarchy user/group
  697. exists=`(cat /etc/passwd; ypcat passwd) 2>/dev/null | grep "^$user:"`
  698. if [ ".$exists" = . ]; then
  699. if [ ".$thisuser" != ".root" ]; then
  700. echo "openpkg:WARNING: skipping creation of dedicated OpenPKG user/group $ugid" 1>&2
  701. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  702. else
  703. # seek for a reasonably uid/gid pair
  704. ugid=1000
  705. ok=0
  706. while [ ".$ok" = .0 ]; do
  707. u_exists=`(cat /etc/passwd; ypcat passwd) 2>/dev/null | grep "^[^:]*:[^:]*:$ugid:"`
  708. g_exists=`(cat /etc/group; ypcat group) 2>/dev/null | grep "^[^:]*:[^:]*:$ugid:"`
  709. if [ ".$u_exists" = . -a ".$g_exists" = . ]; then
  710. ok=1
  711. break
  712. fi
  713. ugid=`expr $ugid + 1`
  714. done
  715. # add entry to passwd database
  716. shell="${prefix}/lib/openpkg/bash"
  717. realname="${prefix} OpenPKG"
  718. case "$plid" in
  719. FreeBSD/* | NetBSD/* )
  720. file=/etc/master.passwd
  721. entry="${user}:*:${ugid}:${ugid}::0:0:${realname}:${prefix}:${shell}"
  722. update="(PATH=\$PATH:/usr/sbin; pwd_mkdb -p /etc/master.passwd)"
  723. ;;
  724. Linux/* )
  725. file=/etc/passwd
  726. entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}"
  727. update="(PATH=\$PATH:/usr/sbin; pwconv)"
  728. ;;
  729. SunOS/5.* )
  730. file=/etc/passwd
  731. entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}"
  732. update="(PATH=\$PATH:/usr/sbin; pwconv)"
  733. ;;
  734. OSF1/V5.* )
  735. file=/etc/passwd
  736. entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}"
  737. update="(PATH=\$PATH:/usr/sbin; mkpasswd /etc/passwd)"
  738. ;;
  739. HP-UX/* )
  740. file=/etc/passwd
  741. entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}"
  742. update=":"
  743. ;;
  744. esac
  745. cp $file $file.old
  746. (grep -v '^+:' $file.old; echo $entry; grep '^+:' $file.old) >$file
  747. rm -f $file.old >/dev/null 2>&1
  748. eval $update
  749. # add entry to group database
  750. file=/etc/group
  751. entry="${user}:*:${ugid}:${user}"
  752. cp $file $file.old
  753. (grep -v '^+:' $file.old; echo $entry; grep '^+:' $file.old) >$file
  754. rm -f $file.old >/dev/null 2>&1
  755. fi
  756. fi
  757. # add entry to /etc/shells
  758. shell="${prefix}/lib/openpkg/bash"
  759. exists=`cat /etc/shells 2>/dev/null | grep "^$shell"`
  760. if [ ".$exists" = . ]; then
  761. if [ ".$thisuser" != ".root" ]; then
  762. echo "openpkg:WARNING: skipping addition of $shell to /etc/shells" 1>&2
  763. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  764. else
  765. echo "${shell}" >>/etc/shells
  766. fi
  767. fi
  768. # create the startup/shutdown transfer script
  769. if [ ".$thisuser" != ".root" ]; then
  770. echo "openpkg:WARNING: skipping creation of system run-command hooks" 1>&2
  771. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  772. else
  773. case "$plid" in
  774. FreeBSD/* )
  775. if [ ! -f /etc/rc.d/${name}.sh ]; then
  776. # make sure /etc/rc.d exists
  777. if [ ! -d /etc/rc.d ]; then
  778. mkdir /etc/rc.d
  779. fi
  780. # make sure /etc/rc.d is activated
  781. ( . /etc/defaults/rc.conf
  782. . /etc/rc.conf
  783. found=0
  784. for p in ${local_startup-x}; do
  785. if [ ".$p" = "./etc/rc.d" ]; then
  786. found=1
  787. break
  788. fi
  789. done
  790. if [ ".$found" = .0 ]; then
  791. cp -p /etc/rc.conf /etc/rc.conf.bak
  792. (
  793. grep -v local_startup /etc/rc.conf.bak
  794. echo "local_startup=\"/etc/rc.d $local_startup\""
  795. ) >/etc/rc.conf
  796. fi
  797. )
  798. # install transfer script
  799. rm -f /etc/rc.d/${name}.sh >/dev/null 2>&1
  800. ( echo "#!/bin/sh"
  801. echo "#"
  802. echo "# ${name}.sh -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  803. echo "#"
  804. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  805. echo "case \$1 in"
  806. echo " start ) exec ${prefix}/etc/rc all start ;;"
  807. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  808. echo "esac"
  809. ) >/etc/rc.d/${name}.sh
  810. chmod 755 /etc/rc.d/${name}.sh
  811. fi
  812. ;;
  813. NetBSD/* )
  814. if [ ! -f /etc/rc.d/${name} ]; then
  815. ( echo "#!/bin/sh"
  816. echo "#"
  817. echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  818. echo "#"
  819. echo "# PROVIDE: ${name}"
  820. echo "# REQUIRE: DAEMON LOGIN NETWORK SERVERS"
  821. echo "#"
  822. echo ""
  823. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  824. echo "case \$1 in"
  825. echo " start ) exec ${prefix}/etc/rc all start ;;"
  826. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  827. echo " restart ) exec ${prefix}/etc/rc all stop start ;;"
  828. echo " status ) ;;"
  829. echo "esac"
  830. ) >/etc/rc.d/${name}
  831. chmod 755 /etc/rc.d/${name}
  832. fi
  833. ;;
  834. Linux/* )
  835. # sroot: script root directory
  836. # lroot: link root directory
  837. if [ -f /etc/debian_version ]; then
  838. sroot=/etc/init.d
  839. lroot=/etc/rc%d.d
  840. elif [ -f /etc/SuSE-release ]; then
  841. sroot=/sbin/init.d
  842. lroot=/sbin/init.d/rc%d.d
  843. elif [ -f /etc/redhat-release ]; then
  844. sroot=/etc/rc.d/init.d
  845. lroot=/etc/rc.d/rc%d.d
  846. fi
  847. if [ ! -f $sroot/${name} ]; then
  848. # install transfer script
  849. ( echo "#!/bin/sh"
  850. echo "#"
  851. echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  852. echo "#"
  853. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  854. echo "case \$1 in"
  855. echo " start ) exec ${prefix}/etc/rc all start ;;"
  856. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  857. echo "esac"
  858. ) >$sroot/${name}
  859. chmod 755 $sroot/${name}
  860. # create corresponding symbolic links
  861. for i in 2 3 4 5; do
  862. ln -s $sroot/${name} `echo $lroot | sed -e "s;%d;$i;"`/S99${name}
  863. done
  864. for i in 0 1 6; do
  865. ln -s $sroot/${name} `echo $lroot | sed -e "s;%d;$i;"`/K00${name}
  866. done
  867. fi
  868. ;;
  869. SunOS/5.* )
  870. if [ ! -f /etc/init.d/${name} ]; then
  871. # install transfer script
  872. ( echo "#!/bin/sh"
  873. echo "#"
  874. echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  875. echo "#"
  876. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  877. echo "case \$1 in"
  878. echo " start ) exec ${prefix}/etc/rc all start ;;"
  879. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  880. echo "esac"
  881. ) >/etc/init.d/${name}
  882. chmod 755 /etc/init.d/${name}
  883. # create corresponding symbolic links
  884. ( cd /etc
  885. ln init.d/${name} rc3.d/S99${name}
  886. ln init.d/${name} rc0.d/K00${name}
  887. ln init.d/${name} rc1.d/K00${name}
  888. )
  889. fi
  890. ;;
  891. OSF1/V5.* )
  892. if [ ! -f /sbin/init.d/${name} ]; then
  893. # install transfer script
  894. ( echo "#!/bin/sh"
  895. echo "#"
  896. echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  897. echo "#"
  898. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  899. echo "case \$1 in"
  900. echo " start ) exec ${prefix}/etc/rc all start ;;"
  901. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  902. echo "esac"
  903. ) >/sbin/init.d/${name}
  904. chmod 755 /sbin/init.d/${name}
  905. # create corresponding symbolic links
  906. ( cd /sbin
  907. ln -s ../init.d/${name} rc3.d/S99${name}
  908. ln -s ../init.d/${name} rc0.d/K00${name}
  909. )
  910. fi
  911. ;;
  912. HP-UX/* )
  913. if [ ! -f /sbin/init.d/${name} ]; then
  914. # install transfer script
  915. ( echo "#!/bin/sh"
  916. echo "#"
  917. echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy"
  918. echo "#"
  919. echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
  920. echo "case \$1 in"
  921. echo " start ) exec ${prefix}/etc/rc all start ;;"
  922. echo " stop ) exec ${prefix}/etc/rc all stop ;;"
  923. echo "esac"
  924. ) >/sbin/init.d/${name}
  925. chmod 755 /sbin/init.d/${name}
  926. # create corresponding symbolic links
  927. ( cd /sbin
  928. ln -s ../init.d/${name} rc2.d/S900${name}
  929. ln -s ../init.d/${name} rc1.d/K100${name}
  930. )
  931. fi
  932. ;;
  933. esac
  934. fi
  935. # create the cron transfer entries
  936. if [ ".$thisuser" != ".root" ]; then
  937. echo "openpkg:WARNING: skipping creation of system cron hooks" 1>&2
  938. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  939. else
  940. case "$plid" in
  941. FreeBSD/* | Linux/* )
  942. exists=`grep "$prefix/etc/rc" /etc/crontab`
  943. if [ ".$exists" = . ]; then
  944. ( echo "# <OpenPKG prefix=$prefix pkg=openpkg>"
  945. echo "# chronological tasks of ${prefix} OpenPKG hierarchy"
  946. echo "0 0 1 * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all monthly"
  947. echo "0 0 * * 0 root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all weekly"
  948. echo "0 0 * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all daily"
  949. echo "0 * * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all hourly"
  950. echo "*/15 * * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all quarterly"
  951. echo "# </OpenPKG>"
  952. ) >>/etc/crontab
  953. fi
  954. ;;
  955. SunOS/5.* | OSF1/V5.* | NetBSD/* | HP-UX/* )
  956. exists=`crontab -l | grep "$prefix/etc/rc"`
  957. if [ ".$exists" = . ]; then
  958. EDITOR=/tmp/vipw.$$
  959. VISUAL="$EDITOR"
  960. export EDITOR
  961. export VISUAL
  962. ( echo "#!/bin/sh"
  963. echo "( echo \"# <OpenPKG prefix=$prefix pkg=openpkg>\""
  964. echo " echo \"# chronological tasks of ${prefix} OpenPKG hierarchy\""
  965. echo " echo \"0 0 1 * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all monthly\""
  966. echo " echo \"0 0 * * 0 [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all weekly\""
  967. echo " echo \"0 0 * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all daily\""
  968. echo " echo \"0 * * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all hourly\""
  969. echo " echo \"0,15,30,45 * * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all quarterly\""
  970. echo " echo \"# </OpenPKG>\""
  971. echo ") >>\$1"
  972. ) >$EDITOR
  973. chmod a+x $EDITOR
  974. (PATH="$PATH:/usr/bin"; crontab -e)
  975. rm -f $EDITOR
  976. fi
  977. ;;
  978. esac
  979. fi
  980. %post
  981. # Finally, rebuild the RPM database with the newly installed RPM
  982. # program on upgrades. Because of RPM internal database locking we
  983. # have to play a little trick here and delay the operation until RPM
  984. # thinks this "post" script has already terminated.
  985. if [ ".$1" = .2 ]; then
  986. ( sleep 2
  987. %{l_prefix}/bin/rpm --rebuilddb
  988. chown %{l_fsusr}:%{l_fsgrp} %{l_prefix}/RPM/DB/* || true
  989. ) </dev/null >/dev/null 2>/dev/null &
  990. fi
  991. %preun
  992. [ ".$1" != .0 ] && exit 0
  993. # remove files which are not RPM controlled
  994. rm -rf %{l_prefix}/RPM/TMP/* >/dev/null 2>&1 || true
  995. rm -rf %{l_prefix}/RPM/SRC/* >/dev/null 2>&1 || true
  996. rm -rf %{l_prefix}/RPM/PKG/* >/dev/null 2>&1 || true
  997. rm -rf %{l_prefix}/RPM/DB/* >/dev/null 2>&1 || true
  998. ##
  999. ## The following code usually would be done in a %postun section.
  1000. ## But because we already had to remove the database in this %preun
  1001. ## section (see the 'rm' commands above) in order to make RPM happy
  1002. ## inside its own removal procedure, RPM would no longer find the
  1003. ## %postun script (because it's recorded in the database files). So
  1004. ## we have to perform the procedure already in this %preun script.
  1005. ## except for the removal of the top-level directory it does not
  1006. ## matter. But the top-level directory can only be removed after
  1007. ## the RPM removal procedure took place, so we play a little delay
  1008. ## trick below.
  1009. ##
  1010. # determine current user
  1011. thisuser=`(id -un) 2>/dev/null ||\
  1012. (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\
  1013. (whoami) 2>/dev/null ||\
  1014. (who am i | cut "-d " -f1) 2>/dev/null ||\
  1015. echo $LOGNAME`
  1016. # determine runtime details (for both inside and outside RPM!!)
  1017. user="%{l_fsusr}"
  1018. group="%{l_fsgrp}"
  1019. prefix="%{l_prefix}"
  1020. prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'`
  1021. name=`echo "$prefix" | sed -e 's;/;;g'`
  1022. # determine platform id
  1023. s=`(uname -s) 2>/dev/null` || s='Unknown'
  1024. r=`(uname -r) 2>/dev/null` || r='0.0'
  1025. plid="${s}/${r}"
  1026. # remove the hierarchy user/group
  1027. exists=`(cat /etc/passwd; cat /etc/master.passwd; ypcat passwd) 2>/dev/null | grep "^$user:"`
  1028. if [ ".$exists" != . ]; then
  1029. if [ ".$thisuser" != ".root" ]; then
  1030. echo "openpkg:WARNING: skipping deletion of dedicated OpenPKG user/group $ugid" 1>&2
  1031. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  1032. else
  1033. case "$plid" in
  1034. FreeBSD/* | NetBSD/* )
  1035. cp /etc/master.passwd /etc/master.passwd.bak
  1036. grep -v "^${user}:" /etc/master.passwd.bak >/etc/master.passwd
  1037. (PATH="$PATH:/usr/sbin"; pwd_mkdb -p /etc/master.passwd)
  1038. ;;
  1039. Linux/* | SunOS/5.* )
  1040. cp /etc/passwd /etc/passwd.bak
  1041. grep -v "^${user}:" /etc/passwd.bak >/etc/passwd
  1042. (PATH="$PATH:/usr/sbin"; pwconv)
  1043. ;;
  1044. OSF1/V5.* )
  1045. cp /etc/passwd /etc/passwd.bak
  1046. grep -v "^${user}:" /etc/passwd.bak >/etc/passwd
  1047. (PATH="$PATH:/usr/sbin"; mkpasswd /etc/passwd)
  1048. ;;
  1049. HP-UX/* )
  1050. cp /etc/passwd /etc/passwd.bak
  1051. grep -v "^${user}:" /etc/passwd.bak >/etc/passwd
  1052. ;;
  1053. esac
  1054. cp /etc/group /etc/group.bak
  1055. grep -v "^${user}:" /etc/group.bak >/etc/group
  1056. fi
  1057. fi
  1058. # remove entry in /etc/shells
  1059. shell="${prefix}/lib/openpkg/bash"
  1060. exists=`cat /etc/shells 2>/dev/null | grep "^$shell"`
  1061. if [ ".$exists" != . ]; then
  1062. if [ ".$thisuser" != ".root" ]; then
  1063. echo "openpkg:WARNING: skipping deletion of $shell from /etc/shells" 1>&2
  1064. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  1065. else
  1066. cp /etc/shells /etc/shells.bak
  1067. grep -v "^${shell}" /etc/shells.bak >/etc/shells
  1068. fi
  1069. fi
  1070. # remove the startup/shutdown transfer ripts
  1071. if [ ".$thisuser" != ".root" ]; then
  1072. echo "openpkg:WARNING: skipping deletion of system run-command hooks" 1>&2
  1073. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  1074. else
  1075. case "$plid" in
  1076. FreeBSD/* )
  1077. rm -f /etc/rc.d/${name}.sh >/dev/null 2>&1
  1078. ;;
  1079. NetBSD/* )
  1080. rm -f /etc/rc.d/${name} >/dev/null 2>&1
  1081. ;;
  1082. Linux/* )
  1083. # sroot: script root directory
  1084. # lroot: link root directory
  1085. if [ -f /etc/debian_version ]; then
  1086. sroot=/etc/init.d
  1087. lroot=/etc/rc%d.d
  1088. elif [ -f /etc/SuSE-release ]; then
  1089. sroot=/sbin/init.d
  1090. lroot=/sbin/init.d/rc%d.d
  1091. elif [ -f /etc/redhat-release ]; then
  1092. sroot=/etc/rc.d/init.d
  1093. lroot=/etc/rc.d/rc%d.d
  1094. fi
  1095. rm -f ${sroot}/${name} >/dev/null 2>&1
  1096. for i in 2 3 4 5; do
  1097. rm -f `echo $lroot | sed -e "s;%d;$i;"`/S99${name} >/dev/null 2>&1
  1098. done
  1099. for i in 0 1 6; do
  1100. rm -f `echo $lroot | sed -e "s;%d;$i;"`/K00${name} >/dev/null 2>&1
  1101. done
  1102. ;;
  1103. SunOS/5.* )
  1104. rm -f /etc/init.d/${name} >/dev/null 2>&1
  1105. rm -f /etc/rc3.d/S99${name} >/dev/null 2>&1
  1106. rm -f /etc/rc0.d/K00${name} >/dev/null 2>&1
  1107. rm -f /etc/rc1.d/K00${name} >/dev/null 2>&1
  1108. ;;
  1109. OSF1/V5.* )
  1110. rm -f /sbin/init.d/${name} >/dev/null 2>&1
  1111. rm -f /sbin/rc3.d/S99${name} >/dev/null 2>&1
  1112. rm -f /sbin/rc0.d/K00${name} >/dev/null 2>&1
  1113. ;;
  1114. HP-UX/* )
  1115. rm -f /sbin/init.d/${name} >/dev/null 2>&1
  1116. rm -f /etc/rc2.d/S900${name} >/dev/null 2>&1
  1117. rm -f /etc/rc1.d/K100${name} >/dev/null 2>&1
  1118. ;;
  1119. esac
  1120. fi
  1121. # remove the cron transfer entries
  1122. if [ ".$thisuser" != ".root" ]; then
  1123. echo "openpkg:WARNING: skipping deletion of system cron hooks" 1>&2
  1124. echo "openpkg:WARNING: (would require root-priviledges)" 1>&2
  1125. else
  1126. case "$plid" in
  1127. FreeBSD/* | Linux/* )
  1128. exists=`grep "<OpenPKG prefix=$prefix pkg=openpkg>" /etc/crontab`
  1129. if [ ".$exists" != . ]; then
  1130. p=`echo $prefix | sed -e 's;/;\\\\/;g'`
  1131. cp /etc/crontab /etc/crontab.bak
  1132. cat /etc/crontab.bak |\
  1133. sed -e "/<OpenPKG prefix=$p pkg=openpkg>/,/<\\/OpenPKG>/d" \
  1134. >/etc/crontab
  1135. fi
  1136. ;;
  1137. SunOS/5.* | OSF1/V5.* | NetBSD/* | HP-UX/* )
  1138. EDITOR=/tmp/vipw.$$
  1139. VISUAL="$EDITOR"
  1140. export EDITOR
  1141. export VISUAL
  1142. p=`echo $prefix | sed -e 's;/;\\\\\\\\/;g'`
  1143. ( echo "cp \$1 \$1.old"
  1144. echo "cat \$1.old | sed -e \"/<OpenPKG prefix=$p pkg=openpkg>/,/<\\\\/OpenPKG>/d\" >\$1"
  1145. echo "rm -f \$1.old"
  1146. ) >$EDITOR
  1147. chmod a+x $EDITOR
  1148. (PATH="$PATH:/usr/bin"; crontab -e)
  1149. rm -f $EDITOR
  1150. ;;
  1151. esac
  1152. fi
  1153. # delayed removal of top-level directory.
  1154. ( sleep 10
  1155. rmdir %{l_prefix} >/dev/null 2>&1 || true
  1156. ) </dev/null >/dev/null 2>/dev/null &