openpkg.spec 48 KB

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