## ## openpkg.spec -- OpenPKG RPM Specification ## Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH ## Copyright (c) 2000-2002 The OpenPKG Project ## Copyright (c) 2000-2002 Ralf S. Engelschall ## ## Permission to use, copy, modify, and distribute this software for ## any purpose with or without fee is hereby granted, provided that ## the above copyright notice and this permission notice appear in all ## copies. ## ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## # NOTICE: This RPM specification is _very_ special, because it is # used both for bootstrapping OpenPKG with its RPM and for regular # builds of RPM in order to upgrade an existing installation. For this # it has to interact correctly with the "openpkg.boot" script. See # this companion script for details, but do not touch anything here # until you are 100% sure about what you are doing. In short: This # script is allowed to use only a very restricted subset of the RPM # functionality! # BUILD REQUIREMENTS: # o any sh(1) # o any tar(1) # o any make(1) # o any cc(1) # the package version and release %define V_openpkg 20020223 %define R_openpkg 20020223 # the used software versions %define V_rpm 4.0.2 %define V_zlib 1.1.3 %define V_bzip2 1.0.1 %define V_db 3.2.9 %define V_curl 7.9.1 %define V_make 3.79.1 %define V_gzip 1.3 %define V_patch 2.5.4 %define V_tar 1.13.25 %define V_bash 2.05a # package information Name: openpkg Summary: OpenPKG Bootstrap URL: http://www.openpkg.org/ Vendor: OpenPKG Packager: The OpenPKG Project Distribution: OpenPKG [REL] Group: Bootstrapping License: GPL Version: %{V_openpkg} Release: %{R_openpkg} # list of sources Source0: README Source1: openpkg.boot Source2: ftp://ftp.rpm.org/pub/rpm/dist/rpm-%{V_rpm}.x/rpm-%{V_rpm}.tar.gz Source3: rpm-%{V_rpm}.patch.bugfix Source4: rpm-%{V_rpm}.patch.feature Source5: rpm-%{V_rpm}.patch.porting Source6: rpm-%{V_rpm}.patch.regen Source7: http://www.sleepycat.com/update/%{V_db}/db-%{V_db}.tar.gz Source8: ftp://sourceware.cygnus.com/pub/bzip2/v100/bzip2-%{V_bzip2}.tar.gz Source9: ftp://ftp.freesoftware.com/pub/infozip/zlib/zlib-%{V_zlib}.tar.gz Source10: http://curl.haxx.se/download/curl-%{V_curl}.tar.gz Source11: rpmpopt Source12: rpmrc Source13: rpmmacros Source14: root.README Source15: local.README Source16: rc Source17: rc.func Source18: rpmtool Source19: rpmtool.8 Source20: rpmtool.pod Source21: lsync Source22: lsync.8 Source23: lsync.pod Source24: wrap1.sh Source25: wrap2.sh Source26: openpkg.pgp Source27: shtool Source28: rpmx.sh Source29: rpmx.pl Source30: ftp://ftp.gnu.org/gnu/make/make-%{V_make}.tar.gz Source31: ftp://alpha.gnu.org/gnu/gzip/gzip-%{V_gzip}.tar Source32: ftp://ftp.gnu.org/gnu/patch/patch-%{V_patch}.tar.gz Source33: rc.openpkg Source34: ftp://ftp.gnu.org/gnu/tar/tar-%{V_tar}.tar.gz Source35: ftp://ftp.gnu.org/gnu/bash/bash-%{V_bash}.tar.gz Source36: dot.bashrc Source37: dot.bash_login Source38: dot.lsyncrc Source39: db-%{V_db}.patch Source40: rc.conf # build information Prefix: %{l_prefix} BuildRoot: %{l_buildroot} AutoReq: no AutoReqProv: no Provides: OpenPKG %description This is the bootstrap package for the RPM-based Unix Software Package Hierarchy OpenPKG. The RedHat Package Manager (RPM) is a sophisticated and portable package manager for Unix platforms, which supports the automated building, installation, management and deinstallation of Unix software. Originally RPM is designed and implemented for us with the RedHat Linux operating system where it manages every file on the whole system. In OpenPKG RPM is used only for managing all files in a particular filesystem hierarchy dedicated to the installation of third-party software packages provided by the OpenPKG project. Internally the OpenPKG bootstrap package is based on the following particular vendor products: RedHat RPM %{V_rpm}, Berkeley-DB %{V_db}, ZLib %{V_zlib}, GNU Bzip2 %{V_bzip2}, GNU Gzip %{V_gzip}, GNU Tar %{V_tar}, GNU Patch %{V_patch}, GNU Make %{V_make}, GNU Bash %{V_bash}, cURL %{V_curl} %prep # skip in bootstrap phase 2 (see openpkg.boot) [ ".$OPENPKG_BOOT" = .1 ] && exit 0 # switch into a temporary build area rm -rf %{name}-%{version} mkdir %{name}-%{version} cd %{name}-%{version} rm -f .buildenv touch .buildenv # provide a bootstrap alternative to %{SOURCE xxx} because else # it is not possible to upgrade a newer OpenPKG RPM with an older # OpenPKG RPM. echo >>.buildenv 'SOURCE () {' echo >>.buildenv ' if [ -f "%{_specdir}/$1" ]; then' echo >>.buildenv ' echo "%{_specdir}/$1"' echo >>.buildenv ' else' echo >>.buildenv ' echo "%{_sourcedir}/$1"' echo >>.buildenv ' fi' echo >>.buildenv '}' . ./.buildenv # determine path to shtool shtool=`SOURCE shtool` echo "shtool=$shtool" >>./.buildenv # manually make sure tar(1) is available l_tar=`sh $shtool path gtar tar`; export l_tar if [ ".$l_tar" = . ]; then echo "openpkg: prerequisite tool \`gtar' or \`tar' not found" exit 1 fi echo "l_tar=\"$l_tar\"; export l_tar" >>.buildenv # manually make sure make(1) is available l_make=`sh $shtool path gmake make`; export l_make if [ ".$l_make" = . ]; then echo "openpkg: prerequisite tool \`gmake' or \`make' not found" exit 1 fi echo "l_make=\"$l_make\"; export l_make" >>.buildenv # manually make sure cc(1) is available l_cc=`sh $shtool path gcc cc`; export l_cc if [ ".$l_cc" = . ]; then echo "openpkg: prerequisite tool \`gcc' or \`cc' not found" exit 1 fi echo "l_cc=\"$l_cc\"; export l_cc" >>.buildenv # determine user and group for installed files if [ ".%{?l_fsusr:set}" = .set ]; then fsusr="%{l_fsusr}" else fsusr=`(id -un) 2>/dev/null ||\ (whoami) 2>/dev/null ||\ (who am i | cut "-d " -f1) 2>/dev/null ||\ echo $LOGNAME` fi echo "fsusr=\"$fsusr\"; export fsusr" >>.buildenv if [ ".%{?l_fsgrp:set}" = .set ]; then fsgrp="%{l_fsgrp}" else fsgrp=`(cat /etc/passwd; ypcat passwd) 2>/dev/null |\ grep "^${fsusr}:" | head -1 | awk -F: '{ print $4; }'` fsgrp=`(cat /etc/group; ypcat group) 2>/dev/null |\ grep ":${fsgrp}:" | head -1 | awk -F: '{ print $1; }'` fi fsgid=`(cat /etc/group; ypcat group) 2>/dev/null |\ grep "^${fsgrp}:" | head -1 | awk -F: '{ print $3; }'` echo "fsgrp=\"$fsgrp\"; export fsgrp" >>.buildenv echo "fsgid=\"$fsgid\"; export fsgid" >>.buildenv # determine user and group for non-priviledged operations npusr=nobody npuid=`(cat /etc/passwd; ypcat passwd) 2>/dev/null |\ grep "^${npusr}:" | head -1 | awk -F: '{ print $3; }'` if [ ".$npuid" = . ]; then echo "Ops, your system lacks a 'nobody' user!" exit 1 fi echo "npusr=\"$npusr\"; export npusr" >>.buildenv echo "npuid=\"$npuid\"; export npuid" >>.buildenv for npgrp in nobody nogroup; do npgid=`(cat /etc/group; ypcat group) 2>/dev/null |\ grep "^${npgrp}:" | head -1 | awk -F: '{ print $3; }'` if [ ".$npgid" != . ]; then break fi done if [ ".$npgid" = . ]; then echo "Ops, your system lacks a 'nobody' or 'nogroup' group!" exit 1 fi echo "npgrp=\"$npgrp\"; export npgrp" >>.buildenv echo "npgid=\"$npgid\"; export npgid" >>.buildenv # determine installation location id if [ ".%{?l_location:set}" = .set ]; then loc="%{l_location}" else if [ ".`expr %{l_prefix} : '/[^/][^/]*$'`" != .0 ]; then loc=`echo %{l_prefix} | cut -c2-4` else loc=`echo %{l_prefix} | sed -e 's;/\(.\)[^/]*;\1;g' | cut -c1-3` fi fi echo "loc=\"$loc\"; export loc" >>.buildenv # bootstrap GNU zip tool ${l_tar} xf `SOURCE gzip-%{V_gzip}.tar` 2>/dev/null ( cd gzip-%{V_gzip} CC="${l_cc}" ./configure ${l_make} ) l_gzip="`pwd`/gzip-%{V_gzip}/gzip"; export l_gzip echo "l_gzip=\"$l_gzip\"; export l_gzip" >>.buildenv # unpack distribution tarballs ${l_gzip} -dc `SOURCE rpm-%{V_rpm}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE zlib-%{V_zlib}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE bzip2-%{V_bzip2}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE db-%{V_db}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE curl-%{V_curl}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE make-%{V_make}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE patch-%{V_patch}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE tar-%{V_tar}.tar.gz` | ${l_tar} xf - ${l_gzip} -dc `SOURCE bash-%{V_bash}.tar.gz` | ${l_tar} xf - # bootstrap GNU make tool ( cd make-%{V_make} CC="${l_cc}" ./configure --disable-nls --disable-largefile ${l_make} (mv make ..; ${l_make} clean || true; mv ../make .) ) l_make="`pwd`/make-%{V_make}/make"; export l_make echo "l_make=\"$l_make\"; export l_make" >>.buildenv # bootstrap GNU patch tool ( cd patch-%{V_patch} echo 'ac_cv_func_setmode=${ac_cv_func_setmode=no}' >config.cache false=`sh $shtool path false` echo "ac_cv_path_ed_PROGRAM=\${ac_cv_path_ed_PROGRAM=$false}" >>config.cache CC="${l_cc}" ./configure --disable-largefile ${l_make} (mv patch ..; ${l_make} clean || true; mv ../patch .) ) l_patch="`pwd`/patch-%{V_patch}/patch"; export l_patch echo "l_patch=\"$l_patch\"; export l_patch" >>.buildenv # apply OpenPKG patches to RPM distribution tree ( cd rpm-%{V_rpm} ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.bugfix` ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.feature` ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.porting` ${l_patch} -p0 <`SOURCE rpm-%{V_rpm}.patch.regen` touch aclocal.m4 configure ) # apply OpenPKG patches to DB distribution tree ( cd db-%{V_db} ${l_patch} -p0 <`SOURCE db-%{V_db}.patch` ) %build # skip in bootstrap phase 2 (see openpkg.boot) [ ".$OPENPKG_BOOT" = .1 ] && exit 0 # switch into a temporary build area cd %{name}-%{version} . ./.buildenv # build GNU bash tool ( cd bash-%{V_bash} CC="${l_cc}" ./configure \ --prefix=%{l_prefix} \ --disable-nls ${l_make} (mv bash ..; ${l_make} clean || true; mv ../bash .) ) # build GNU tar tool ( cd tar-%{V_tar} CC="${l_cc}" ./configure \ --prefix=%{l_prefix} \ --disable-nls ${l_make} (mv src/tar ..; ${l_make} clean || true; mv ../tar src/) ) # build cURL tool ( cd curl-%{V_curl} CC="${l_cc}" \ ./configure \ --without-ssl \ --disable-shared \ --disable-thread \ --disable-ipv6 ${l_make} (mv src/curl ..; ${l_make} clean || true; mv ../curl ./src) ) # build BZIP2 library ( cd bzip2-%{V_bzip2} ${l_make} CC="${l_cc}" CFLAGS="-O" libbz2.a bzip2 ) # build ZLIB library ( cd zlib-%{V_zlib} CC="${l_cc}" CFLAGS="-O" ./configure ${l_make} CC="${l_cc}" CFLAGS="-O" libz.a ) # build Berkeley-DB library ( cd db-%{V_db}/build_unix case `sh ../dist/config.guess` in *-*-osf* ) echo 'db_cv_mutex=${db_cv_mutex=UNIX/msem_init}' >config.cache ;; # avoid dependency to pthread esac CC="${l_cc}" ../dist/configure ${l_make} libdb.a ln libdb.a libdbXXX.a # workaround for Tru64 ) # build RPM # - we make sure RPM builds without NLS/gettext problems :-( # - we make sure RPM finds and uses our own BZIP2/ZLIB/DB libraries # - we speed up building by skipping the NLS/gettext data ( br=`pwd` cd rpm-%{V_rpm} sed -e 's;(aclocal --version);false;' \ -e 's;(automake --version);false;' \ -e 's;(autoconf --version);false;' \ -e 's;(autoheader --version);false;' \ -e 's;(makeinfo --version);false;' \ -e 's;/lib/rpm;/lib/openpkg;' \ configure.n && \ mv configure.n configure sed -e 's;@INTLLIBS@;@INTLLIBS@ @LIBMISC@;' \ tools/Makefile.in.n && \ mv tools/Makefile.in.n tools/Makefile.in sed -e 's;^\(SUBDIRS[ ]*=.*\) po \(.*\)$;\1 \2;' \ -e 's;^\(SUBDIRS[ ]*=.*\) tools \(.*\)$;\1 \2;' \ -e 's;^\(LIBS[ ]*=\).*;\1 @LIBS@ $(EXTRA_LIBS);' \ Makefile.in.n && mv Makefile.in.n Makefile.in sed -e 's;^\(SUBDIRS[ ]*=.*\) po$;\1;' \ popt/Makefile.in.n && \ mv popt/Makefile.in.n popt/Makefile.in ( echo 'ac_cv_path_MSGFMT=${ac_cv_path_MSGFMT=no}' echo 'ac_cv_path_GMSGFMT=${ac_cv_path_GMSGFMT=no}' ) >config.cache case `sh ./config.guess` in *-*-linux* ) nlsopt="--disable-nls" ;; * ) nlsopt="--enable-nls --with-included-gettext" ;; esac nlsopt="--disable-nls" CC="${l_cc} -DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \ CFLAGS="-DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \ CPPFLAGS="-DOPENPKG -I$br/db-%{V_db}/build_unix -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2}" \ LDFLAGS="-L$br/db-%{V_db}/build_unix -L$br/zlib-%{V_zlib} -L$br/bzip2-%{V_bzip2}" \ LIBS="-L$br/db-%{V_db}/build_unix -ldbXXX -L$br/zlib-%{V_zlib} -lz -L$br/bzip2-%{V_bzip2} -lbz2" \ sh ./configure \ --prefix=%{l_prefix} \ --disable-shared \ --disable-db1 \ --with-glob \ $nlsopt ${l_make} \ EXTRA_LIBS="-L$br/db-%{V_db}/build_unix -ldbXXX -L$br/zlib-%{V_zlib} -lz -L$br/bzip2-%{V_bzip2} -lbz2" \ ) %install # skip in bootstrap phase 2 (see openpkg.boot) [ ".$OPENPKG_BOOT" = .1 ] && exit 0 # switch into a temporary build area cd %{name}-%{version} . ./.buildenv # create installation hierarchy rm -rf $RPM_BUILD_ROOT sh $shtool mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix} for dir in bin etc include info lib libexec man sbin share var cgi web local; do test -d $RPM_BUILD_ROOT%{l_prefix}/$dir || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/$dir done for i in 1 2 3 4 5 6 7 8 9; do test -d $RPM_BUILD_ROOT%{l_prefix}/man/man$i || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/man/man$i test -d $RPM_BUILD_ROOT%{l_prefix}/man/cat$i || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/man/cat$i done for dir in PKG bin etc include info lib man sbin; do test -d $RPM_BUILD_ROOT%{l_prefix}/local/$dir || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/local/$dir done for i in 1 2 3 4 5 6 7 8 9; do test -d $RPM_BUILD_ROOT%{l_prefix}/local/man/man$i || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/local/man/man$i test -d $RPM_BUILD_ROOT%{l_prefix}/local/man/cat$i || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/local/man/cat$i done test -d $RPM_BUILD_ROOT%{l_prefix}/RPM || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM for dir in SRC PKG DB TMP; do test -d $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir done # install RPM into installation hierarchy ( cd rpm-%{V_rpm} ${l_make} DESTDIR="$RPM_BUILD_ROOT" install ) # strip RPM installation strip $RPM_BUILD_ROOT%{l_prefix}/bin/* \ $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/* >/dev/null 2>&1 || true for dir in man/ja man/pl man/ru man/sk src; do rm -rf $RPM_BUILD_ROOT%{l_prefix}/$dir done for file in rpmbuild rpmdb rpme rpmi rpmsign rpmu rpmverify rpmquery gendiff; do rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/$file done rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/* rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/* rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man3/* rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmpopt rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmrc rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/lib* rm -f $RPM_BUILD_ROOT%{l_prefix}/include/popt.h rm -rf $RPM_BUILD_ROOT%{l_prefix}/include/rpm rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/lib for file in \ u_pkg.sh vpkg-provides.sh vpkg-provides2.sh rpmdiff.cgi rpmdiff \ perl.prov perl.req mkinstalldirs magic.prov magic.req http.req \ getpo.sh get_magic.pl find-requires.perl find-req.pl find-provides.perl \ find-prov.pl find-lang.sh cpanflute convertrpmrc.sh check-prereqs \ rpmputtext rpmgettext brp-compress brp-redhat brp-sparc64-linux \ brp-strip brp-strip-shared brp-strip-comment-note rpmrc \ config.guess config.sub; do rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$file done # replace symlinks with hardlinks for entry in rpme:rpmi rpmt:rpmb rpmu:rpmi rpmv:rpmq; do eval `echo $entry | sed -e 's/^\(.*\):\(.*\)$/dst=\1; src=\2/'` rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst ln $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$src \ $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst done # install additional RPM tools (rpmtool, lsync) sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rpmtool` \ >$RPM_BUILD_ROOT%{l_prefix}/sbin/rpmtool sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE lsync` \ >$RPM_BUILD_ROOT%{l_prefix}/sbin/lsync sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE dot.lsyncrc` \ >$RPM_BUILD_ROOT%{l_prefix}/local/.lsyncrc sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rpmtool.8` \ >$RPM_BUILD_ROOT%{l_prefix}/man/man8/rpmtool.8 sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE lsync.8` \ >$RPM_BUILD_ROOT%{l_prefix}/man/man8/lsync.8 chmod a+x $RPM_BUILD_ROOT%{l_prefix}/sbin/rpmtool chmod a+x $RPM_BUILD_ROOT%{l_prefix}/sbin/lsync # install RPM extension ( cd curl-%{V_curl} cp src/curl $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl ) ( cd bzip2-%{V_bzip2} cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2 strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2 ) ( cd gzip-%{V_gzip} cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip ) ( cd patch-%{V_patch} cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch ) ( cd tar-%{V_tar} cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar ) ( cd bash-%{V_bash} cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash ) sed -e "s;@l_prefix@;%{l_prefix};g" \ <`SOURCE rpmx.sh` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh sed -e "s;@l_prefix@;%{l_prefix};g" \ <`SOURCE rpmx.pl` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl # install an own copy of shtool cp $shtool $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool # install a few README files sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE root.README` \ >$RPM_BUILD_ROOT%{l_prefix}/README sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE local.README` \ >$RPM_BUILD_ROOT%{l_prefix}/local/README # install Bash environment sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE dot.bashrc` \ >$RPM_BUILD_ROOT%{l_prefix}/.bashrc sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE dot.bash_login` \ >$RPM_BUILD_ROOT%{l_prefix}/.bash_login # install Run-Command files sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rc` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/rc chmod 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rc.conf` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.conf chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.conf sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rc.func` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.func chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.func mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rc.openpkg` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/rc.openpkg chmod 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/rc.openpkg # hard-code RPM tool for installation hierarchy # and adjust RPM configuration files mv $RPM_BUILD_ROOT%{l_prefix}/bin/rpm \ $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpm ( echo "#!/bin/sh"; echo "exec %{l_prefix}/lib/openpkg/rpm --rcfile %{l_prefix}/etc/openpkg/rpmrc \${1+\"\$@\"}" ) >$RPM_BUILD_ROOT%{l_prefix}/bin/rpm chmod 755 $RPM_BUILD_ROOT%{l_prefix}/bin/rpm cat `SOURCE rpmpopt` \ >>$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm} test -d $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg || \ mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg sed -e "s:@l_prefix@:%{l_prefix}:g" \ <`SOURCE rpmrc` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmrc sed -e "s:@l_prefix@:%{l_prefix}:g" \ -e "s:@LOC@:$loc:g" \ -e "s:@FSUSR@:$fsusr:g" \ -e "s:@FSGRP@:$fsgrp:g" \ -e "s:@NPUSR@:$npusr:g" \ -e "s:@NPUID@:$npuid:g" \ -e "s:@NPGRP@:$npgrp:g" \ -e "s:@NPGID@:$npgid:g" \ <`SOURCE rpmmacros` \ >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmmacros cp `SOURCE openpkg.pgp` \ $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/openpkg.pgp %files %defattr(-,%{l_fsusr},%{l_fsgrp}) %{l_prefix}/README %{l_prefix}/.bashrc %{l_prefix}/.bash_login %dir %{l_prefix}/RPM %dir %{l_prefix}/RPM/SRC %dir %{l_prefix}/RPM/PKG %dir %{l_prefix}/RPM/DB %dir %{l_prefix}/RPM/TMP %dir %{l_prefix}/bin %{l_prefix}/bin/rpm2cpio %{l_prefix}/bin/rpm %dir %{l_prefix}/etc %{l_prefix}/etc/rc %config %{l_prefix}/etc/rc.conf %{l_prefix}/etc/rc.func %dir %{l_prefix}/etc/rc.d %{l_prefix}/etc/rc.d/rc.openpkg %dir %{l_prefix}/etc/openpkg %config %{l_prefix}/etc/openpkg/rpmmacros %config %{l_prefix}/etc/openpkg/rpmrc %{l_prefix}/etc/openpkg/openpkg.pgp %dir %{l_prefix}/include %dir %{l_prefix}/info %dir %{l_prefix}/lib %dir %{l_prefix}/lib/openpkg %{l_prefix}/lib/openpkg/rpm %{l_prefix}/lib/openpkg/rpmb %{l_prefix}/lib/openpkg/rpmdb %{l_prefix}/lib/openpkg/rpmi %{l_prefix}/lib/openpkg/rpmk %{l_prefix}/lib/openpkg/rpmq %{l_prefix}/lib/openpkg/find-provides %{l_prefix}/lib/openpkg/find-requires %{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm} %{l_prefix}/lib/openpkg/macros %{l_prefix}/lib/openpkg/rpmt %{l_prefix}/lib/openpkg/rpme %{l_prefix}/lib/openpkg/rpmu %{l_prefix}/lib/openpkg/rpmv %{l_prefix}/lib/openpkg/rpmx.sh %{l_prefix}/lib/openpkg/rpmx.pl %{l_prefix}/lib/openpkg/curl %{l_prefix}/lib/openpkg/gzip %{l_prefix}/lib/openpkg/bzip2 %{l_prefix}/lib/openpkg/shtool %{l_prefix}/lib/openpkg/patch %{l_prefix}/lib/openpkg/tar %{l_prefix}/lib/openpkg/bash %dir %{l_prefix}/libexec %dir %{l_prefix}/man %dir %{l_prefix}/man/man1 %dir %{l_prefix}/man/man2 %dir %{l_prefix}/man/man3 %dir %{l_prefix}/man/man4 %dir %{l_prefix}/man/man5 %dir %{l_prefix}/man/man6 %dir %{l_prefix}/man/man7 %dir %{l_prefix}/man/man8 %dir %{l_prefix}/man/man9 %dir %{l_prefix}/man/cat1 %dir %{l_prefix}/man/cat2 %dir %{l_prefix}/man/cat3 %dir %{l_prefix}/man/cat4 %dir %{l_prefix}/man/cat5 %dir %{l_prefix}/man/cat6 %dir %{l_prefix}/man/cat7 %dir %{l_prefix}/man/cat8 %dir %{l_prefix}/man/cat9 %dir %{l_prefix}/cgi %dir %{l_prefix}/web %{l_prefix}/man/man8/rpm.8 %{l_prefix}/man/man8/rpm2cpio.8 %{l_prefix}/man/man8/rpmtool.8 %{l_prefix}/man/man8/lsync.8 %dir %{l_prefix}/sbin %dir %{l_prefix}/share %dir %{l_prefix}/var %{l_prefix}/sbin/rpmtool %{l_prefix}/sbin/lsync %dir %{l_prefix}/local %{l_prefix}/local/README %{l_prefix}/local/.lsyncrc %dir %{l_prefix}/local/PKG %dir %{l_prefix}/local/bin %dir %{l_prefix}/local/etc %dir %{l_prefix}/local/include %dir %{l_prefix}/local/info %dir %{l_prefix}/local/lib %dir %{l_prefix}/local/man %dir %{l_prefix}/local/man/man1 %dir %{l_prefix}/local/man/man2 %dir %{l_prefix}/local/man/man3 %dir %{l_prefix}/local/man/man4 %dir %{l_prefix}/local/man/man5 %dir %{l_prefix}/local/man/man6 %dir %{l_prefix}/local/man/man7 %dir %{l_prefix}/local/man/man8 %dir %{l_prefix}/local/man/man9 %dir %{l_prefix}/local/man/cat1 %dir %{l_prefix}/local/man/cat2 %dir %{l_prefix}/local/man/cat3 %dir %{l_prefix}/local/man/cat4 %dir %{l_prefix}/local/man/cat5 %dir %{l_prefix}/local/man/cat6 %dir %{l_prefix}/local/man/cat7 %dir %{l_prefix}/local/man/cat8 %dir %{l_prefix}/local/man/cat9 %dir %{l_prefix}/local/sbin %clean # skip in bootstrap phase 2 (see openpkg.boot) [ ".$OPENPKG_BOOT" = .1 ] && exit 0 # cleanup after building rm -rf $RPM_BUILD_ROOT rm -rf %{name}-%{version} %pre [ ".$1" != .1 ] && exit 0 # this procedure is only usable with root priviledges # (for non-root installations it is not required at all) thisuser=`(id -un) 2>/dev/null ||\ (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ (whoami) 2>/dev/null ||\ (who am i | cut "-d " -f1) 2>/dev/null ||\ echo $LOGNAME` # determine runtime details (for both inside and outside RPM!!) user="$fsusr"; [ ".$fsusr" = . ] && fsusr="%{l_fsusr}" group="$fsgrp"; [ ".$fsgrp" = . ] && fsgrp="%{l_fsgrp}" prefix="$p"; [ ".$prefix" = . ] && prefix="%{l_prefix}" prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'` name=`echo "$prefix" | sed -e 's;/;;g'` # determine platform id s=`(uname -s) 2>/dev/null` || s='Unknown' r=`(uname -r) 2>/dev/null` || r='0.0' plid="${s}/${r}" # create the hierarchy user/group exists=`(cat /etc/passwd; ypcat passwd) 2>/dev/null | grep "^$user:"` if [ ".$exists" = . ]; then if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping creation of dedicated OpenPKG user/group $ugid" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else # seek for a reasonably uid/gid pair ugid=1000 ok=0 while [ ".$ok" = .0 ]; do u_exists=`(cat /etc/passwd; ypcat passwd) 2>/dev/null | grep "^[^:]*:[^:]*:$ugid:"` g_exists=`(cat /etc/group; ypcat group) 2>/dev/null | grep "^[^:]*:[^:]*:$ugid:"` if [ ".$u_exists" = . -a ".$g_exists" = . ]; then ok=1 break fi ugid=`expr $ugid + 1` done # add entry to passwd database shell="${prefix}/lib/openpkg/bash" realname="${prefix} OpenPKG" case "$plid" in FreeBSD/* | NetBSD/* ) file=/etc/master.passwd entry="${user}:*:${ugid}:${ugid}::0:0:${realname}:${prefix}:${shell}" update="(PATH=\$PATH:/usr/sbin; pwd_mkdb -p /etc/master.passwd)" ;; Linux/* ) file=/etc/passwd entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}" update="(PATH=\$PATH:/usr/sbin; pwconv)" ;; SunOS/5.* ) file=/etc/passwd entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}" update="(PATH=\$PATH:/usr/sbin; pwconv)" ;; OSF1/V5.* ) file=/etc/passwd entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}" update="(PATH=\$PATH:/usr/sbin; mkpasswd /etc/passwd)" ;; HP-UX/* ) file=/etc/passwd entry="${user}:*:${ugid}:${ugid}:${realname}:${prefix}:${shell}" update=":" ;; esac cp $file $file.old (grep -v '^+:' $file.old; echo $entry; grep '^+:' $file.old) >$file rm -f $file.old >/dev/null 2>&1 eval $update # add entry to group database file=/etc/group entry="${user}:*:${ugid}:${user}" cp $file $file.old (grep -v '^+:' $file.old; echo $entry; grep '^+:' $file.old) >$file rm -f $file.old >/dev/null 2>&1 fi fi # add entry to /etc/shells shell="${prefix}/lib/openpkg/bash" exists=`cat /etc/shells 2>/dev/null | grep "^$shell"` if [ ".$exists" = . ]; then if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping addition of $shell to /etc/shells" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else echo "${shell}" >>/etc/shells fi fi # create the startup/shutdown transfer script if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping creation of system run-command hooks" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else case "$plid" in FreeBSD/* ) if [ ! -f /etc/rc.d/${name}.sh ]; then # make sure /etc/rc.d exists if [ ! -d /etc/rc.d ]; then mkdir /etc/rc.d fi # make sure /etc/rc.d is activated ( . /etc/defaults/rc.conf . /etc/rc.conf found=0 for p in ${local_startup-x}; do if [ ".$p" = "./etc/rc.d" ]; then found=1 break fi done if [ ".$found" = .0 ]; then cp -p /etc/rc.conf /etc/rc.conf.bak ( grep -v local_startup /etc/rc.conf.bak echo "local_startup=\"/etc/rc.d $local_startup\"" ) >/etc/rc.conf fi ) # install transfer script rm -f /etc/rc.d/${name}.sh >/dev/null 2>&1 ( echo "#!/bin/sh" echo "#" echo "# ${name}.sh -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo "esac" ) >/etc/rc.d/${name}.sh chmod 755 /etc/rc.d/${name}.sh fi ;; NetBSD/* ) if [ ! -f /etc/rc.d/${name} ]; then ( echo "#!/bin/sh" echo "#" echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "# PROVIDE: ${name}" echo "# REQUIRE: DAEMON LOGIN NETWORK SERVERS" echo "#" echo "" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo " restart ) exec ${prefix}/etc/rc all stop start ;;" echo " status ) ;;" echo "esac" ) >/etc/rc.d/${name} chmod 755 /etc/rc.d/${name} fi ;; Linux/* ) # sroot: script root directory # lroot: link root directory if [ -f /etc/debian_version ]; then sroot=/etc/init.d lroot=/etc/rc%d.d elif [ -f /etc/SuSE-release ]; then sroot=/sbin/init.d lroot=/sbin/init.d/rc%d.d elif [ -f /etc/redhat-release ]; then sroot=/etc/rc.d/init.d lroot=/etc/rc.d/rc%d.d fi if [ ! -f $sroot/${name} ]; then # install transfer script ( echo "#!/bin/sh" echo "#" echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo "esac" ) >$sroot/${name} chmod 755 $sroot/${name} # create corresponding symbolic links for i in 2 3 4 5; do ln -s $sroot/${name} `echo $lroot | sed -e "s;%d;$i;"`/S99${name} done for i in 0 1 6; do ln -s $sroot/${name} `echo $lroot | sed -e "s;%d;$i;"`/K00${name} done fi ;; SunOS/5.* ) if [ ! -f /etc/init.d/${name} ]; then # install transfer script ( echo "#!/bin/sh" echo "#" echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo "esac" ) >/etc/init.d/${name} chmod 755 /etc/init.d/${name} # create corresponding symbolic links ( cd /etc ln init.d/${name} rc3.d/S99${name} ln init.d/${name} rc0.d/K00${name} ln init.d/${name} rc1.d/K00${name} ) fi ;; OSF1/V5.* ) if [ ! -f /sbin/init.d/${name} ]; then # install transfer script ( echo "#!/bin/sh" echo "#" echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo "esac" ) >/sbin/init.d/${name} chmod 755 /sbin/init.d/${name} # create corresponding symbolic links ( cd /sbin ln -s ../init.d/${name} rc3.d/S99${name} ln -s ../init.d/${name} rc0.d/K00${name} ) fi ;; HP-UX/* ) if [ ! -f /sbin/init.d/${name} ]; then # install transfer script ( echo "#!/bin/sh" echo "#" echo "# ${name} -- startup/shutdown transfer script for ${prefix} OpenPKG hierarchy" echo "#" echo "[ ! -f ${prefix}/etc/rc ] && exit 0" echo "case \$1 in" echo " start ) exec ${prefix}/etc/rc all start ;;" echo " stop ) exec ${prefix}/etc/rc all stop ;;" echo "esac" ) >/sbin/init.d/${name} chmod 755 /sbin/init.d/${name} # create corresponding symbolic links ( cd /sbin ln -s ../init.d/${name} rc2.d/S900${name} ln -s ../init.d/${name} rc1.d/K100${name} ) fi ;; esac fi # create the cron transfer entries if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping creation of system cron hooks" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else case "$plid" in FreeBSD/* | Linux/* ) exists=`grep "$prefix/etc/rc" /etc/crontab` if [ ".$exists" = . ]; then ( echo "# " echo "# chronological tasks of ${prefix} OpenPKG hierarchy" echo "0 0 1 * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all monthly" echo "0 0 * * 0 root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all weekly" echo "0 0 * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all daily" echo "0 * * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all hourly" echo "*/15 * * * * root [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all quarterly" echo "# " ) >>/etc/crontab fi ;; SunOS/5.* | OSF1/V5.* | NetBSD/* | HP-UX/* ) exists=`crontab -l | grep "$prefix/etc/rc"` if [ ".$exists" = . ]; then EDITOR=/tmp/vipw.$$ VISUAL="$EDITOR" export EDITOR export VISUAL ( echo "#!/bin/sh" echo "( echo \"# \"" echo " echo \"# chronological tasks of ${prefix} OpenPKG hierarchy\"" echo " echo \"0 0 1 * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all monthly\"" echo " echo \"0 0 * * 0 [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all weekly\"" echo " echo \"0 0 * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all daily\"" echo " echo \"0 * * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all hourly\"" echo " echo \"0,15,30,45 * * * * [ -f ${prefix}/etc/rc ] && ${prefix}/etc/rc all quarterly\"" echo " echo \"# \"" echo ") >>\$1" ) >$EDITOR chmod a+x $EDITOR (PATH="$PATH:/usr/bin"; crontab -e) rm -f $EDITOR fi ;; esac fi %post # Finally, rebuild the RPM database with the newly installed RPM # program on upgrades. Because of RPM internal database locking we # have to play a little trick here and delay the operation until RPM # thinks this "post" script has already terminated. if [ ".$1" = .2 ]; then ( sleep 2 %{l_prefix}/bin/rpm --rebuilddb chown %{l_fsusr}:%{l_fsgrp} %{l_prefix}/RPM/DB/* || true ) /dev/null 2>/dev/null & fi %preun [ ".$1" != .0 ] && exit 0 # remove files which are not RPM controlled rm -rf %{l_prefix}/RPM/TMP/* >/dev/null 2>&1 || true rm -rf %{l_prefix}/RPM/SRC/* >/dev/null 2>&1 || true rm -rf %{l_prefix}/RPM/PKG/* >/dev/null 2>&1 || true rm -rf %{l_prefix}/RPM/DB/* >/dev/null 2>&1 || true ## ## The following code usually would be done in a %postun section. ## But because we already had to remove the database in this %preun ## section (see the 'rm' commands above) in order to make RPM happy ## inside its own removal procedure, RPM would no longer find the ## %postun script (because it's recorded in the database files). So ## we have to perform the procedure already in this %preun script. ## except for the removal of the top-level directory it does not ## matter. But the top-level directory can only be removed after ## the RPM removal procedure took place, so we play a little delay ## trick below. ## # determine current user thisuser=`(id -un) 2>/dev/null ||\ (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ (whoami) 2>/dev/null ||\ (who am i | cut "-d " -f1) 2>/dev/null ||\ echo $LOGNAME` # determine runtime details (for both inside and outside RPM!!) user="%{l_fsusr}" group="%{l_fsgrp}" prefix="%{l_prefix}" prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'` name=`echo "$prefix" | sed -e 's;/;;g'` # determine platform id s=`(uname -s) 2>/dev/null` || s='Unknown' r=`(uname -r) 2>/dev/null` || r='0.0' plid="${s}/${r}" # remove the hierarchy user/group exists=`(cat /etc/passwd; cat /etc/master.passwd; ypcat passwd) 2>/dev/null | grep "^$user:"` if [ ".$exists" != . ]; then if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping deletion of dedicated OpenPKG user/group $ugid" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else case "$plid" in FreeBSD/* | NetBSD/* ) cp /etc/master.passwd /etc/master.passwd.bak grep -v "^${user}:" /etc/master.passwd.bak >/etc/master.passwd (PATH="$PATH:/usr/sbin"; pwd_mkdb -p /etc/master.passwd) ;; Linux/* | SunOS/5.* ) cp /etc/passwd /etc/passwd.bak grep -v "^${user}:" /etc/passwd.bak >/etc/passwd (PATH="$PATH:/usr/sbin"; pwconv) ;; OSF1/V5.* ) cp /etc/passwd /etc/passwd.bak grep -v "^${user}:" /etc/passwd.bak >/etc/passwd (PATH="$PATH:/usr/sbin"; mkpasswd /etc/passwd) ;; HP-UX/* ) cp /etc/passwd /etc/passwd.bak grep -v "^${user}:" /etc/passwd.bak >/etc/passwd ;; esac cp /etc/group /etc/group.bak grep -v "^${user}:" /etc/group.bak >/etc/group fi fi # remove entry in /etc/shells shell="${prefix}/lib/openpkg/bash" exists=`cat /etc/shells 2>/dev/null | grep "^$shell"` if [ ".$exists" != . ]; then if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping deletion of $shell from /etc/shells" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else cp /etc/shells /etc/shells.bak grep -v "^${shell}" /etc/shells.bak >/etc/shells fi fi # remove the startup/shutdown transfer ripts if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping deletion of system run-command hooks" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else case "$plid" in FreeBSD/* ) rm -f /etc/rc.d/${name}.sh >/dev/null 2>&1 ;; NetBSD/* ) rm -f /etc/rc.d/${name} >/dev/null 2>&1 ;; Linux/* ) # sroot: script root directory # lroot: link root directory if [ -f /etc/debian_version ]; then sroot=/etc/init.d lroot=/etc/rc%d.d elif [ -f /etc/SuSE-release ]; then sroot=/sbin/init.d lroot=/sbin/init.d/rc%d.d elif [ -f /etc/redhat-release ]; then sroot=/etc/rc.d/init.d lroot=/etc/rc.d/rc%d.d fi rm -f ${sroot}/${name} >/dev/null 2>&1 for i in 2 3 4 5; do rm -f `echo $lroot | sed -e "s;%d;$i;"`/S99${name} >/dev/null 2>&1 done for i in 0 1 6; do rm -f `echo $lroot | sed -e "s;%d;$i;"`/K00${name} >/dev/null 2>&1 done ;; SunOS/5.* ) rm -f /etc/init.d/${name} >/dev/null 2>&1 rm -f /etc/rc3.d/S99${name} >/dev/null 2>&1 rm -f /etc/rc0.d/K00${name} >/dev/null 2>&1 rm -f /etc/rc1.d/K00${name} >/dev/null 2>&1 ;; OSF1/V5.* ) rm -f /sbin/init.d/${name} >/dev/null 2>&1 rm -f /sbin/rc3.d/S99${name} >/dev/null 2>&1 rm -f /sbin/rc0.d/K00${name} >/dev/null 2>&1 ;; HP-UX/* ) rm -f /sbin/init.d/${name} >/dev/null 2>&1 rm -f /etc/rc2.d/S900${name} >/dev/null 2>&1 rm -f /etc/rc1.d/K100${name} >/dev/null 2>&1 ;; esac fi # remove the cron transfer entries if [ ".$thisuser" != ".root" ]; then echo "openpkg:WARNING: skipping deletion of system cron hooks" 1>&2 echo "openpkg:WARNING: (would require root-priviledges)" 1>&2 else case "$plid" in FreeBSD/* | Linux/* ) exists=`grep "" /etc/crontab` if [ ".$exists" != . ]; then p=`echo $prefix | sed -e 's;/;\\\\/;g'` cp /etc/crontab /etc/crontab.bak cat /etc/crontab.bak |\ sed -e "//,/<\\/OpenPKG>/d" \ >/etc/crontab fi ;; SunOS/5.* | OSF1/V5.* | NetBSD/* | HP-UX/* ) EDITOR=/tmp/vipw.$$ VISUAL="$EDITOR" export EDITOR export VISUAL p=`echo $prefix | sed -e 's;/;\\\\\\\\/;g'` ( echo "cp \$1 \$1.old" echo "cat \$1.old | sed -e \"//,/<\\\\/OpenPKG>/d\" >\$1" echo "rm -f \$1.old" ) >$EDITOR chmod a+x $EDITOR (PATH="$PATH:/usr/bin"; crontab -e) rm -f $EDITOR ;; esac fi # delayed removal of top-level directory. ( sleep 10 rmdir %{l_prefix} >/dev/null 2>&1 || true ) /dev/null 2>/dev/null &