You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1241 lines
48 KiB

##
## openpkg.spec -- OpenPKG RPM Specification
## Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
## Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
##
## 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 0.9
%define R_openpkg 20011022.0
# 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
%define V_make 3.79.1
%define V_gzip 1.3
%define V_patch 2.5.4
%define V_tar 1.13.19
%define V_bash 2.05
# package information
Name: openpkg
Summary: OpenPKG Bootstrap
URL: http://www.openpkg.org/
Vendor: OpenPKG
Packager: The OpenPKG Project
Distribution: OpenPKG [EXP]
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: rpmdev.mk
Source27: pubring.gpg
Source28: shtool
Source29: rpmx.sh
Source30: rpmx.pl
Source31: ftp://ftp.gnu.org/gnu/make/make-%{V_make}.tar.gz
Source32: ftp://alpha.gnu.org/gnu/gzip/gzip-%{V_gzip}.tar
Source33: ftp://ftp.gnu.org/gnu/patch/patch-%{V_patch}.tar.gz
Source34: rc.openpkg
Source35: ftp://ftp.gnu.org/gnu/tar/tar-%{V_tar}.tar.gz
Source36: ftp://ftp.gnu.org/gnu/bash/bash-%{V_bash}.tar.gz
Source37: bash-%{V_bash}.patch.1
Source38: bash-%{V_bash}.patch.2
Source39: dot.bashrc
Source40: dot.bash_login
Source41: dot.lsyncrc
Source42: db-%{V_db}.patch
Source43: 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 Bash distribution tree
( cd bash-%{V_bash}
${l_patch} -p0 <`SOURCE bash-%{V_bash}.patch.1`
${l_patch} -p0 <`SOURCE bash-%{V_bash}.patch.2`
)
# 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;' \
<configure >configure.n && \
mv configure.n configure
sed -e 's;@INTLLIBS@;@INTLLIBS@ @LIBMISC@;' \
<tools/Makefile.in >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 >Makefile.in.n && mv Makefile.in.n Makefile.in
sed -e 's;^\(SUBDIRS[ ]*=.*\) po$;\1;' \
<popt/Makefile.in >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 DST 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/rpm/* >/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/rpm/$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/rpm/$dst
ln $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$src \
$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$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/rpm/curl
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/curl
)
( cd bzip2-%{V_bzip2}
cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bzip2
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bzip2
)
( cd gzip-%{V_gzip}
cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/gzip
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/gzip
)
( cd patch-%{V_patch}
cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/patch
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/patch
)
( cd tar-%{V_tar}
cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/tar
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/tar
)
( cd bash-%{V_bash}
cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bash
strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bash
)
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE rpmx.sh` >$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.sh
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.sh
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE rpmx.pl` >$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.pl
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.pl
# install an own copy of shtool
cp $shtool $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/shtool
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/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/rpm/rpm
( echo "#!/bin/sh";
echo "exec %{l_prefix}/lib/rpm/rpm --rcfile %{l_prefix}/etc/rpm/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/rpm/rpmpopt-%{V_rpm}
test -d $RPM_BUILD_ROOT%{l_prefix}/etc/rpm || \
mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/rpm
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE rpmrc` \
>$RPM_BUILD_ROOT%{l_prefix}/etc/rpm/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/rpm/rpmmacros
cp `SOURCE pubring.gpg` \
$RPM_BUILD_ROOT%{l_prefix}/etc/rpm/pubring.gpg
cp `SOURCE rpmdev.mk` \
$RPM_BUILD_ROOT%{l_prefix}/etc/rpm/rpmdev.mk
%files
%defattr(-,%{l_fsusr},%{l_fsgrp})
%{l_prefix}/README
%{l_prefix}/.bashrc
%{l_prefix}/.bash_login
%dir %{l_prefix}/RPM
%dir %{l_prefix}/RPM/DST
%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/rpm
%config %{l_prefix}/etc/rpm/rpmmacros
%config %{l_prefix}/etc/rpm/rpmrc
%{l_prefix}/etc/rpm/pubring.gpg
%{l_prefix}/etc/rpm/rpmdev.mk
%dir %{l_prefix}/include
%dir %{l_prefix}/info
%dir %{l_prefix}/lib
%dir %{l_prefix}/lib/rpm
%{l_prefix}/lib/rpm/rpm
%{l_prefix}/lib/rpm/rpmb
%{l_prefix}/lib/rpm/rpmdb
%{l_prefix}/lib/rpm/rpmi
%{l_prefix}/lib/rpm/rpmk
%{l_prefix}/lib/rpm/rpmq
%{l_prefix}/lib/rpm/find-provides
%{l_prefix}/lib/rpm/find-requires
%{l_prefix}/lib/rpm/rpmpopt-%{V_rpm}
%{l_prefix}/lib/rpm/macros
%{l_prefix}/lib/rpm/rpmt
%{l_prefix}/lib/rpm/rpme
%{l_prefix}/lib/rpm/rpmu
%{l_prefix}/lib/rpm/rpmv
%{l_prefix}/lib/rpm/rpmx.sh
%{l_prefix}/lib/rpm/rpmx.pl
%{l_prefix}/lib/rpm/curl
%{l_prefix}/lib/rpm/gzip
%{l_prefix}/lib/rpm/bzip2
%{l_prefix}/lib/rpm/shtool
%{l_prefix}/lib/rpm/patch
%{l_prefix}/lib/rpm/tar
%{l_prefix}/lib/rpm/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/rpm/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/rpm/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 "# <OpenPKG prefix=$prefix pkg=openpkg>"
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 "# </OpenPKG>"
) >>/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 \"# <OpenPKG prefix=$prefix pkg=openpkg>\""
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 \"# </OpenPKG>\""
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 >/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/DST/* >/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/rpm/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 "<OpenPKG prefix=$prefix pkg=openpkg>" /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 prefix=$p pkg=openpkg>/,/<\\/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 prefix=$p pkg=openpkg>/,/<\\\\/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 >/dev/null 2>/dev/null &