##
## openpkg.spec -- OpenPKG RPM Specification
## Copyright (c) 2000-2004 The OpenPKG Project
## Copyright (c) 2000-2004 Ralf S. Engelschall
## Copyright (c) 2000-2004 Cable & Wireless
##
## 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/release
%define V_openpkg 20040702
# the used software versions
%define V_rpm 4.2.1
%define V_zlib 1.2.1
%define V_bzip2 1.0.2
%define V_beecrypt 3.1.0
%define V_curl 7.12.0
%define V_make 3.80
%define V_gzip 1.3.5
%define V_patch 2.5.9
%define V_tar 1.14
%define V_bash 2.05b
%define V_uuid 1.0.0
# package information
Name: openpkg
Summary: OpenPKG Bootstrap
URL: http://www.openpkg.org/
Vendor: OpenPKG
Packager: The OpenPKG Project
Distribution: OpenPKG
Class: CORE
Group: Bootstrapping
License: GPL
Version: %{V_openpkg}
Release: %{V_openpkg}
# list of sources
Source0: ftp://ftp.openpkg.org/sources/CPY/openpkg/rpm-%{V_rpm}.tar.gz
Source1: ftp://ftp.ossp.org/pkg/lib/uuid/uuid-%{V_uuid}.tar.gz
Source2: ftp://alpha.gnu.org/gnu/gzip/gzip-%{V_gzip}.tar
Source3: ftp://alpha.gnu.org/gnu/patch/patch-%{V_patch}.tar.gz
Source4: ftp://ftp.gnu.org/gnu/tar/tar-%{V_tar}.tar.gz
Source5: ftp://ftp.gnu.org/gnu/bash/bash-%{V_bash}.tar.gz
Source6: ftp://ftp.gnu.org/gnu/config/config.guess
Source7: ftp://ftp.gnu.org/gnu/config/config.sub
Source8: ftp://ftp.gnu.org/gnu/make/make-%{V_make}.tar.gz
Source9: ftp://sources.redhat.com/pub/bzip2/v102/bzip2-%{V_bzip2}.tar.gz
Source10: http://curl.haxx.se/download/curl-%{V_curl}.tar.gz
Source11: http://osdn.dl.sourceforge.net/beecrypt/beecrypt-%{V_beecrypt}.tar.gz
Source12: http://www.gzip.org/zlib/zlib-%{V_zlib}.tar.gz
Source13: HISTORY
Source14: README
Source15: aux.prereq.sh
Source16: aux.usrgrp.sh
Source17: aux.wrapbin.sh
Source18: aux.wrapsrc.sh
Source19: bash.patch
Source20: beecrypt.patch
Source21: dot.bash_login
Source22: dot.bashrc
Source23: dot.lsyncrc
Source24: local.README
Source25: lsync
Source26: lsync.8
Source27: lsync.pod
Source28: make.patch
Source29: install.sh
Source30: man.sh
Source31: openpkg.1
Source32: openpkg.boot
Source33: openpkg.pgp
Source34: openpkg.pod
Source35: openpkg.sh
Source36: pod2man.sh
Source37: rc
Source38: rc.8
Source39: rc.conf
Source40: rc.func
Source41: rc.openpkg
Source42: rc.pod
Source43: root.README
Source44: rpm-config.8
Source45: rpm-config.pod
Source46: rpm-config.sh
Source47: rpm.patch.bugfix
Source48: rpm.patch.feature
Source49: rpm.patch.porting
Source50: rpm.patch.regen
Source51: rpmdb
Source52: rpmmacros
Source53: rpmpopt
Source54: rpmrc
Source55: rpmtool
Source56: rpmtool.8
Source57: rpmtool.pod
Source58: shtool
Source59: tar.patch
Source60: uuid.8
Source61: uuid.pod
Source62: uuid.sh
# build information
Prefix: %{l_prefix}
BuildRoot: %{l_buildroot}
AutoReq: no
AutoReqProv: no
Provides: OpenPKG
Provides: openpkg = 2.0.3-2.0.3
%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}, 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},
OSSP uuid %{V_uuid}, BeeCrypt %{V_beecrypt}
%track
prog openpkg:bash = {
version = %{V_bash}
url = ftp://ftp.gnu.org/gnu/bash/
regex = bash-(__VER__)\.tar\.gz
}
prog openpkg:bzip2 = {
version = %{V_bzip2}
url = ftp://sources.redhat.com/pub/bzip2/
regex = v(\d+)
url = ftp://sources.redhat.com/pub/bzip2/v__NEWVER__/
regex = bzip2-(__VER__)\.tar\.gz
}
prog openpkg:curl = {
version = %{V_curl}
url = http://curl.haxx.se/download/
regex = curl-(__VER__)\.tar\.gz
}
prog openpkg:gzip = {
version = %{V_gzip}
url = ftp://alpha.gnu.org/gnu/gzip/
regex = gzip-(__VER__)\.tar(\.gz)?
}
prog openpkg:make = {
version = %{V_make}
url = ftp://ftp.gnu.org/gnu/make/
regex = make-(__VER__)\.tar\.gz
}
prog openpkg:patch = {
disabled
comment = "rse: directory missing after GNU.org security issues"
version = %{V_patch}
url = ftp://alpha.gnu.org/gnu/patch/
regex = patch-(__VER__)\.tar\.gz
}
prog openpkg:rpm = {
disabled
comment = "rse: we have a .src.rpm extracted .tar.gz, because there is still no tarball for 4.2.1"
version = %{V_rpm}
url = ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.2.x/
regex = rpm-(4\.2\.\d+)\.tar\.gz
}
prog openpkg:tar = {
version = %{V_tar}
url = ftp://alpha.gnu.org/gnu/tar/
regex = tar-(__VER__)\.tar\.gz
}
prog openpkg:zlib = {
version = %{V_zlib}
url = http://www.gzip.org/zlib/
regex = zlib-(__VER__)\.tar\.gz
}
prog openpkg:uuid = {
version = %{V_uuid}
url = ftp://ftp.ossp.org/pkg/lib/uuid/
regex = uuid-(__VER__)\.tar\.gz
}
%prep
# skip in bootstrap phase 2 (see openpkg.boot)
[ ".$OPENPKG_BOOT" = .1 ] && exit 0
# switch into a temporary build area
rm -rf openpkg-%{version}
mkdir openpkg-%{version}
cd openpkg-%{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 '}'
echo >>.buildenv 'VERBOSE () {'
echo >>.buildenv ' if [ -f "%{_specdir}/rpmtool" ]; then'
echo >>.buildenv ' echo "$*" | sh %{_specdir}/rpmtool msg'
echo >>.buildenv ' else'
echo >>.buildenv ' echo "$*" | sh %{_sourcedir}/rpmtool msg'
echo >>.buildenv ' fi'
echo >>.buildenv '}'
. ./.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Determine Build Tool Paths"; set -x
# determine path to shtool
shtool=`SOURCE shtool`
echo "shtool=$shtool" >>./.buildenv
# manually make sure tar(1) is available
l_tar=""; [ ".%{?l_tar:set}" = .set ] && l_tar="%{l_tar}"; export l_tar
if [ ".$l_tar" = . ]; then
l_tar=`sh $shtool path gtar tar`
if [ ".$l_tar" = . ]; then
echo "openpkg: prerequisite tool \`gtar' or \`tar' not found"
exit 1
fi
fi
echo "l_tar=\"$l_tar\"; export l_tar" >>.buildenv
# manually make sure make(1) is available
l_make=""; [ ".%{?l_make:set}" = .set ] && l_make="%{l_make}"; export l_make
if [ ".$l_make" = . ]; then
l_make=`sh $shtool path gmake make`
if [ ".$l_make" = . ]; then
echo "openpkg: prerequisite tool \`gmake' or \`make' not found"
exit 1
fi
fi
echo "l_make=\"$l_make\"; export l_make" >>.buildenv
# manually make sure cc(1) is available
l_cc=""; [ ".%{?l_cc:set}" = .set ] && l_cc="%{l_cc}"; export l_cc
if [ ".$l_cc" = . ]; then
l_cc=`sh $shtool path gcc cc`
if [ ".$l_cc" = . ]; then
echo "openpkg: prerequisite tool \`gcc' or \`cc' not found"
exit 1
fi
fi
echo "l_cc=\"$l_cc\"; export l_cc" >>.buildenv
# manually make sure ar(1) is available
l_ar=""; [ ".%{?l_ar:set}" = .set ] && l_ar="%{l_ar}"; export l_ar
if [ ".$l_ar" = . ]; then
l_ar=`sh $shtool path ar`
if [ ".$l_ar" = . ]; then
echo "openpkg: prerequisite tool \`ar' not found"
exit 1
fi
fi
# manually make sure ld(1) is available
l_ld=""; [ ".%{?l_ld:set}" = .set ] && l_ld="%{l_ld}"; export l_ld
if [ ".$l_ld" = . ]; then
l_ld=`sh $shtool path ld`
if [ ".$l_ld" = . ]; then
echo "openpkg: prerequisite tool \`ld' not found"
exit 1
fi
fi
# determine path to aux.usrgrp.sh script
usrgrp=`SOURCE aux.usrgrp.sh`
echo "usrgrp=$usrgrp" >>./.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Determine OpenPKG User/Group Name/Id Pairs"; set -x
# determine user/group name/id pairs
# - bootstrapping: %{l_[smrn]{usr,grp}} is set via sed(1)
# - upgrading new: %{l_[smrn]{usr,grp}} is set via rpmmacros
# - upgrading old: %{l_[smrn]{usr,grp}} is not set at all
susr=""; [ ".%{?l_susr:set}" = .set ] && susr="%{l_susr}"
sgrp=""; [ ".%{?l_sgrp:set}" = .set ] && sgrp="%{l_sgrp}"
musr=""; [ ".%{?l_musr:set}" = .set ] && musr="%{l_musr}"
mgrp=""; [ ".%{?l_mgrp:set}" = .set ] && mgrp="%{l_mgrp}"
rusr=""; [ ".%{?l_rusr:set}" = .set ] && rusr="%{l_rusr}"
rgrp=""; [ ".%{?l_rgrp:set}" = .set ] && rgrp="%{l_rgrp}"
nusr=""; [ ".%{?l_nusr:set}" = .set ] && nusr="%{l_nusr}"
ngrp=""; [ ".%{?l_ngrp:set}" = .set ] && ngrp="%{l_ngrp}"
# corresponding ids
suid=""; [ ".%{?l_suid:set}" = .set ] && suid="%{l_suid}"
sgid=""; [ ".%{?l_sgid:set}" = .set ] && sgid="%{l_sgid}"
muid=""; [ ".%{?l_muid:set}" = .set ] && muid="%{l_muid}"
mgid=""; [ ".%{?l_mgid:set}" = .set ] && mgid="%{l_mgid}"
ruid=""; [ ".%{?l_ruid:set}" = .set ] && ruid="%{l_ruid}"
rgid=""; [ ".%{?l_rgid:set}" = .set ] && rgid="%{l_rgid}"
nuid=""; [ ".%{?l_nuid:set}" = .set ] && nuid="%{l_nuid}"
ngid=""; [ ".%{?l_ngid:set}" = .set ] && ngid="%{l_ngid}"
# compat:
usr=""; [ ".%{?l_fsusr:set}" = .set ] && usr="%{l_fsusr}"
grp=""; [ ".%{?l_fsgrp:set}" = .set ] && grp="%{l_fsgrp}"
eval `sh $usrgrp \
--usr="$usr" --grp="$grp" \
--susr="$susr" --sgrp="$sgrp" \
--musr="$musr" --mgrp="$mgrp" \
--rusr="$rusr" --rgrp="$rgrp" \
--nusr="$nusr" --ngrp="$ngrp" \
--suid="$suid" --sgid="$sgid" \
--muid="$muid" --mgid="$mgid" \
--ruid="$ruid" --rgid="$rgid" \
--nuid="$nuid" --ngid="$ngid"`
echo "susr=\"$susr\"; export susr" >>.buildenv
echo "sgrp=\"$sgrp\"; export sgrp" >>.buildenv
echo "musr=\"$musr\"; export musr" >>.buildenv
echo "mgrp=\"$mgrp\"; export mgrp" >>.buildenv
echo "rusr=\"$rusr\"; export rusr" >>.buildenv
echo "rgrp=\"$rgrp\"; export rgrp" >>.buildenv
echo "nusr=\"$nusr\"; export nusr" >>.buildenv
echo "ngrp=\"$ngrp\"; export ngrp" >>.buildenv
echo "suid=\"$suid\"; export suid" >>.buildenv
echo "sgid=\"$sgid\"; export sgid" >>.buildenv
echo "muid=\"$muid\"; export muid" >>.buildenv
echo "mgid=\"$mgid\"; export mgid" >>.buildenv
echo "ruid=\"$ruid\"; export ruid" >>.buildenv
echo "rgid=\"$rgid\"; export rgid" >>.buildenv
echo "nuid=\"$nuid\"; export nuid" >>.buildenv
echo "ngid=\"$ngid\"; export ngid" >>.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Determine OpenPKG Instance Environment"; set -x
# determine installation location id
if [ ".%{?l_tag_fmt:set}" = .set ]; then
tag="%{l_tag_fmt}"
else
tag=""
fi
echo "tag=\"$tag\"; export tag" >>.buildenv
# determine platform id
s=`(uname -s) 2>/dev/null` || s='Unknown'
r=`(uname -r) 2>/dev/null` || r='0.0'
plid="${s}/${r}"
# determine platform-specific build environment
case $plid in
FreeBSD/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
NetBSD/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
Linux/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
SunOS/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin" ;;
UnixWare/*) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin" ;;
Darwin/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
OSF1/V5.* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
HP-UX/* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
* ) l_build_path="/bin:/sbin:/usr/bin:/usr/sbin" ;;
esac
case $plid in
FreeBSD/* ) l_build_ldlp="/usr/lib" ;;
NetBSD/* ) l_build_ldlp="/usr/lib" ;;
Linux/* ) l_build_ldlp="/lib:/usr/lib" ;;
SunOS/* ) l_build_ldlp="/usr/lib:/usr/ccs/lib" ;;
UnixWare/*) l_build_ldlp="/usr/lib:/usr/ccs/lib" ;;
Darwin/* ) l_build_ldlp="/usr/lib" ;;
OSF1/V5.* ) l_build_ldlp="/usr/lib" ;;
HP-UX/* ) l_build_ldlp="/usr/lib" ;;
* ) l_build_ldlp="/usr/lib" ;;
esac
case $plid in
* ) l_build_ulim=":" ;;
esac
echo "l_build_path=\"$l_build_path\"; export l_build_path" >>.buildenv
echo "l_build_ldlp=\"$l_build_ldlp\"; export l_build_ldlp" >>.buildenv
echo "l_build_ulim=\"$l_build_ulim\"; export l_build_ulim" >>.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Build GNU gzip (Compression Tool)"; set -x
# bootstrap GNU zip tool
${l_tar} xf `SOURCE gzip-%{V_gzip}.tar` 2>/dev/null || true
( cd gzip-%{V_gzip}
echo "ac_cv_prog_cc_g=no" >config.cache
CC="${l_cc}" \
./configure \
--cache-file=./config.cache
${l_make}
( mv gzip ..; ${l_make} clean || true; mv ../gzip . ) || exit $?
) || exit $?
l_gzip="`pwd`/gzip-%{V_gzip}/gzip"; export l_gzip
echo "l_gzip=\"$l_gzip\"; export l_gzip" >>.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Unpack Distribution Tarballs"; set -x
# unpack distribution tarballs
${l_gzip} -dc `SOURCE rpm-%{V_rpm}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE zlib-%{V_zlib}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE bzip2-%{V_bzip2}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE curl-%{V_curl}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE make-%{V_make}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE patch-%{V_patch}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE tar-%{V_tar}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE bash-%{V_bash}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE uuid-%{V_uuid}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
${l_gzip} -dc `SOURCE beecrypt-%{V_beecrypt}.tar.gz` | ${l_tar} xf - 2>/dev/null || true
# update config.guess/config.sub
for dir in rpm-%{V_rpm} rpm-%{V_rpm}/popt beecrypt-%{V_beecrypt} \
curl-%{V_curl} make-%{V_make} patch-%{V_patch} tar-%{V_tar} \
bash-%{V_bash}/support; do
chmod u+w $dir/config.guess $dir/config.sub >/dev/null 2>&1 || true
cp `SOURCE config.guess` $dir/
cp `SOURCE config.sub` $dir/
done
# display verbosity header
set +x; VERBOSE "PREPARATION: Build GNU patch (Source Patching Tool)"; set -x
# bootstrap GNU patch tool
( cd patch-%{V_patch}
( echo 'ac_cv_func_setmode=${ac_cv_func_setmode=no}'
echo 'ac_cv_prog_cc_g=no'
false=`sh $shtool path false`
echo "ac_cv_path_ed_PROGRAM=\${ac_cv_path_ed_PROGRAM=$false}"
) >config.cache
CC="${l_cc}" \
./configure \
--cache-file=./config.cache \
--disable-largefile
${l_make}
( mv patch ..; ${l_make} clean || true; mv ../patch . ) || exit $?
) || exit $?
l_patch="`pwd`/patch-%{V_patch}/patch"; export l_patch
echo "l_patch=\"$l_patch\"; export l_patch" >>.buildenv
# display verbosity header
set +x; VERBOSE "PREPARATION: Apply OpenPKG Patches to Distibutions"; set -x
# apply OpenPKG patches to distribution trees
( cd rpm-%{V_rpm}
sed -e "s;@l_prefix@;%{l_prefix};g" <`SOURCE rpm.patch.bugfix` | ${l_patch} -p0
sed -e "s;@l_prefix@;%{l_prefix};g" <`SOURCE rpm.patch.feature` | ${l_patch} -p0
sed -e "s;@l_prefix@;%{l_prefix};g" <`SOURCE rpm.patch.porting` | ${l_patch} -p0
sed -e "s;@l_prefix@;%{l_prefix};g" <`SOURCE rpm.patch.regen` | ${l_patch} -p0
rm -rf db/docs # just reduce disk size of source tree
) || exit $?
( cd make-%{V_make}
${l_patch} -p0 <`SOURCE make.patch`
) || exit $?
( cd bash-%{V_bash}
${l_patch} -p0 <`SOURCE bash.patch`
) || exit $?
( cd tar-%{V_tar}
${l_patch} -p0 <`SOURCE tar.patch`
) || exit $?
( cd beecrypt-%{V_beecrypt}
${l_patch} -p0 <`SOURCE beecrypt.patch`
sh $shtool subst \
-e 's;^[ ][ ]*#;#;' \
aes.c base64.c blowfish.c entropy.c fips186.c fips186.h md5.c \
md5.h mp.c mtprng.c mtprng.h sha1.c sha1.h sha256.c sha256.h timestamp.c
) || exit $?
# display verbosity header
set +x; VERBOSE "PREPARATION: Build GNU make (Build Tool)"; set -x
# 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 . ) || exit $?
) || exit $?
l_make="`pwd`/make-%{V_make}/make"; export l_make
echo "l_make=\"$l_make\"; export l_make" >>.buildenv
%build
# skip in bootstrap phase 2 (see openpkg.boot)
[ ".$OPENPKG_BOOT" = .1 ] && exit 0
# switch into a temporary build area
cd openpkg-%{version}
. ./.buildenv
# display verbosity header
set +x; VERBOSE "BUILD: Build GNU bash (Bourne-Again Shell)"; set -x
# build GNU bash tool
( cd bash-%{V_bash}
( # force disabled wide-character support
echo "ac_cv_header_wchar_h=no"
echo "ac_cv_header_wctype_h=no"
echo "ac_cv_func_mbsrtowcs=no"
# force disabled internationalization support
echo "ac_cv_header_libintl_h=no"
echo "ac_cv_func_gettext=no"
echo "ac_cv_func_textdomain=no"
echo "ac_cv_func_bindtextdomain=no"
echo "ac_cv_lib_intl_bindtextdomain=no"
# disable building with debug symbols
echo "ac_cv_prog_cc_g=no"
) >config.cache
CC="${l_cc}"
./configure \
--cache-file=./config.cache \
--prefix=%{l_prefix} \
--without-curses \
--without-gnu-malloc \
--disable-nls
${l_make} || exit $?
( mv bash ..; ${l_make} clean || true; mv ../bash . ) || exit $?
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build GNU tar (Archiving Tool)"; set -x
# build GNU tar tool
( cd tar-%{V_tar}
( echo 'am_cv_func_iconv=no'
echo 'am_cv_lib_iconv=no'
echo 'ac_cv_lib_iconv_iconv=no'
echo 'ac_cv_header_iconv_h=no'
echo 'ac_cv_type_iconv_t=no'
) >config.cache
sh $shtool subst \
-e 's;^rm conftest\.sed;rm -f conftest.sed;' \
configure
CC="${l_cc}" \
../bash-%{V_bash}/bash \
./configure \
--cache-file=./config.cache \
--prefix=%{l_prefix} \
--disable-nls
${l_make} || exit $?
( mv src/tar ..; ${l_make} clean || true; mv ../tar src/ ) || exit $?
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build GNU bzip2 (Compression Library)"; set -x
# build BZIP2 library
( cd bzip2-%{V_bzip2}
${l_make} CC="${l_cc}" CFLAGS="-O" libbz2.a bzip2 || exit $?
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build Zlib (Compression Library)"; set -x
# build ZLIB library
( cd zlib-%{V_zlib}
CC="${l_cc}" CFLAGS="-O" ./configure
${l_make} CC="${l_cc}" libz.a || exit $? # intentionally do not pass CFLAGS here
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build OSSP uuid (UUID Generation Tool)"; set -x
# build OSSP uuid tool
( cd uuid-%{V_uuid}
CC="${l_cc}" \
CFLAGS="-O" \
./configure \
--prefix=%{l_prefix} \
--disable-shared
${l_make} || exit $?
( mv uuid ..; ${l_make} clean || true; mv ../uuid . ) || exit $?
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build cURL (URL Fetching Tool)"; set -x
# build cURL tool
( cd curl-%{V_curl}
%{l_prefix}/lib/openpkg/shtool subst \
-e '/LINENO: error: C\+\+ preprocessor/{N;N;N;N;s/.*/:/;}' \
configure
( echo 'ac_cv_header_openssl_engine_h=no'
echo 'lt_cv_prog_compiler_c_o_F77=no'
echo 'lt_cv_sys_max_cmd_len=100'
) >config.cache
CC="${l_cc}" \
CFLAGS="-I`pwd`/../zlib-%{V_zlib}" \
CPPFLAGS="-I`pwd`/../zlib-%{V_zlib}" \
LDFLAGS="-L`pwd`/../zlib-%{V_zlib}" \
./configure \
--cache-file=./config.cache \
--without-ssl \
--disable-shared \
--disable-thread \
--disable-ipv6 \
--with-zlib=`pwd`/../zlib-%{V_zlib}
${l_make} || exit $?
( mv src/curl ..; ${l_make} clean || true; mv ../curl ./src ) || exit $?
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build BeeCrypt (Cryptography Library)"; set -x
# build BeeCrypt library
( cd beecrypt-%{V_beecrypt}
( echo 'ac_cv_have_dev_dsp=no'
echo 'ac_cv_have_dev_audio=no'
echo 'ac_cv_func_gettimeofday=yes'
) >config.cache
CC="${l_cc}" \
CFLAGS="-O" \
./configure \
--cache-file=./config.cache \
--prefix=%{l_prefix} \
--disable-threads \
--disable-shared \
--with-cpu=none \
--with-arch=none
${l_make} || exit $?
cp .libs/libbeecrypt.a .
) || exit $?
# display verbosity header
set +x; VERBOSE "BUILD: Build RPM (RedHat Package Manager)"; set -x
# build RPM
( br=`pwd`
cd rpm-%{V_rpm}
# remove object files accidentally distributed with the RPM tarball
rm -f db/build_unix/*.o
rm -f db/build_unix/*.lo
# remove embedded zlib (we are linking with an external one)
rm -rf zlib
# kill Linux-based preconfigured DB header, to allow the Makefiles to
# symlink to it the header that is configured for the current system.
rm -f rpmdb/db.h
# make sure we do not trigger Autoconf/Automake tools
touch configure
touch config.h.in
# disable running of any Autoconf/Automake tools
ACLOCAL=true
AUTOCONF=true
AUTOMAKE=true
AUTOHEADER=true
MAKEINFO=true
AMTAR=true
export ACLOCAL AUTOMAKE AUTOHEADER MAKEINFO AMTAR
# cheat GNU Autoconf
( echo 'ac_cv_path_MSGFMT=:'
echo 'ac_cv_path_GMSGFMT=:'
echo 'ac_cv_path_XGETTEXT=:'
echo 'ac_cv_path_MSGMERGE=:'
echo "ac_cv_path_MKDIR='%{l_prefix}/lib/openpkg/shtool mkdir -f -p -m 755'"
echo "ac_cv_path___MKDIR='%{l_prefix}/lib/openpkg/shtool mkdir -f -p -m 755'"
echo "ac_cv_path___PYTHON=true"
echo "ac_cv_path___DOXYGEN=true"
echo "acl_cv_rpath=no"
echo "ac_cv_header_getopt_h=no"
) >config.cache
# provide platform identification
os_name=`(uname -s) 2>/dev/null` || os_name='Unknown'
os_name=`echo "${os_name}" |\
sed -e 's;[^a-zA-Z0-9];;g' |\
tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
# set build tool flags
CC="${l_cc}"
CPPFLAGS="-DOPENPKG -DOPENPKG_${os_name} -I$br/zlib-%{V_zlib} -I$br/bzip2-%{V_bzip2} -I$br/beecrypt-%{V_beecrypt}"
CFLAGS="$CPPFLAGS"
LDFLAGS="-L$br/zlib-%{V_zlib} -L$br/bzip2-%{V_bzip2} -L$br/beecrypt-%{V_beecrypt}"
LIBS="$LDFLAGS -lz -lbz2 -lbeecrypt"
export CC CPPFLAGS CFLAGS LDFLAGS LIBS
# configure the package
sh ./configure \
--cache-file=./config.cache \
--prefix=%{l_prefix} \
--with-db \
--with-glob \
--without-python \
--without-apidocs \
--disable-shared \
--disable-rpath \
--disable-nls
# build the package
${l_make}
) || exit $?
%install
# skip in bootstrap phase 2 (see openpkg.boot)
[ ".$OPENPKG_BOOT" = .1 ] && exit 0
# switch into a temporary build area
cd openpkg-%{version}
. ./.buildenv
# display verbosity header
set +x; VERBOSE "INSTALL: Create Installation Filesystem Hierarchy"; set -x
# 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 pub 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
mkdir $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg
mkdir $RPM_BUILD_ROOT%{l_prefix}/include/openpkg
# display verbosity header
set +x; VERBOSE "INSTALL: Installation of RPM"; set -x
# install RPM into installation hierarchy
( cd rpm-%{V_rpm}
${l_make} DESTDIR="$RPM_BUILD_ROOT" install
) || exit $?
# display verbosity header
set +x; VERBOSE "INSTALL: Stripping Down Installation"; set -x
# 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 >/dev/null 2>&1 || true
done
for file in rpme rpmi rpmsign rpmu rpmverify rpmquery gendiff; do
rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/$file >/dev/null 2>&1 || true
done
rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/* >/dev/null 2>&1 || true
rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/* >/dev/null 2>&1 || true
rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man3/* >/dev/null 2>&1 || true
rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmpopt >/dev/null 2>&1 || true
rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpmrc >/dev/null 2>&1 || true
rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/lib*.la >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/lib >/dev/null 2>&1 || true
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-provides find-requires \
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 check-files; do
rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$file >/dev/null 2>&1 || true
done
# display verbosity header
set +x; VERBOSE "INSTALL: Install Additional Files"; set -x
# add additional development files
cp rpm-%{V_rpm}/misc/glob.h $RPM_BUILD_ROOT%{l_prefix}/include/rpm/
cp zlib-%{V_zlib}/zlib.h $RPM_BUILD_ROOT%{l_prefix}/include/rpm/
cp zlib-%{V_zlib}/libz.a $RPM_BUILD_ROOT%{l_prefix}/lib/librpmz.a
cp bzip2-%{V_bzip2}/bzlib.h $RPM_BUILD_ROOT%{l_prefix}/include/rpm/
cp bzip2-%{V_bzip2}/libbz2.a $RPM_BUILD_ROOT%{l_prefix}/lib/librpmbz2.a
cp beecrypt-%{V_beecrypt}/beecrypt.h $RPM_BUILD_ROOT%{l_prefix}/include/rpm/
cp beecrypt-%{V_beecrypt}/libbeecrypt.a $RPM_BUILD_ROOT%{l_prefix}/lib/librpmbeecrypt.a
# display verbosity header
set +x; VERBOSE "INSTALL: Post-Adjust Installation"; set -x
# post-adjust RPM installation (namespace-clean POPT inclusion)
mv $RPM_BUILD_ROOT%{l_prefix}/lib/libpopt.a \
$RPM_BUILD_ROOT%{l_prefix}/lib/librpmpopt.a
mv $RPM_BUILD_ROOT%{l_prefix}/include/popt.h \
$RPM_BUILD_ROOT%{l_prefix}/include/rpm/popt.h
# move C API into custom locations
mv $RPM_BUILD_ROOT%{l_prefix}/include/rpm \
$RPM_BUILD_ROOT%{l_prefix}/include/openpkg/rpm
mv $RPM_BUILD_ROOT%{l_prefix}/lib/librpm* \
$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/
# 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
rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/rpmbuild
ln $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmb \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpmbuild
mv $RPM_BUILD_ROOT%{l_prefix}/man/man8/rpmbuild.8 \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpmbuild.8
# display verbosity header
set +x; VERBOSE "INSTALL: Install Additional Tools"; set -x
# install lsync tool
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE lsync` \
>$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/lsync
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/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 lsync.8` \
>$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/lsync.8
# install rpm-config tool
( l_prefix="%{l_prefix}"
l_cc="%{l_cc}"
l_cflags=""
l_cppflags="-DOPENPKG -I${l_prefix}/include/openpkg/rpm -I${l_prefix}/include/openpkg"
l_ldflags="-L${l_prefix}/lib/openpkg"
l_libs="-lrpmbuild -lrpm -lrpmio -lrpmdb -lrpmpopt -lrpmbeecrypt -lrpmbz2 -lrpmz"
sed -e "s:@l_prefix@:%{l_prefix}:g" \
-e "s:@l_cc@:$l_cc:g" \
-e "s:@l_cflags@:$l_cflags:g" \
-e "s:@l_cppflags@:$l_cppflags:g" \
-e "s:@l_ldflags@:$l_ldflags:g" \
-e "s:@l_libs@:$l_libs:g" \
-e "s:@l_version@:%{V_rpm}:g" \
<`SOURCE rpm-config.sh` \
>$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm-config
) || exit $?
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm-config
sed -e "s:RPM_VERSION:%{V_rpm}:g" \
<`SOURCE rpm-config.8` \
>$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm-config.8
# move rpm2cpio tool to custom location
mv $RPM_BUILD_ROOT%{l_prefix}/bin/rpm2cpio \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm2cpio
mv $RPM_BUILD_ROOT%{l_prefix}/man/man8/rpm2cpio.8 \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm2cpio.8
# move rpm tool to custom location
mv $RPM_BUILD_ROOT%{l_prefix}/bin/rpm \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm
mv $RPM_BUILD_ROOT%{l_prefix}/man/man8/rpm.8 \
$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rpm.8
# install RPM extension
( cd rpm-%{V_rpm}
cp file/file $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/file
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/file
) || exit $?
( cd curl-%{V_curl}
cp src/curl $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
) || exit $?
( cd bzip2-%{V_bzip2}
cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
) || exit $?
( cd gzip-%{V_gzip}
cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
) || exit $?
( cd patch-%{V_patch}
cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
) || exit $?
( cd tar-%{V_tar}
cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
) || exit $?
( cd bash-%{V_bash}
cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
) || exit $?
( cd uuid-%{V_uuid}
cp uuid $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/uuid
strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/uuid
) || exit $?
sed -e "s;@l_prefix@;%{l_prefix};g" \
-e "s;@l_musr@;%{l_musr};g" \
-e "s;@l_mgrp@;%{l_mgrp};g" \
<`SOURCE uuid.sh` >$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/uuid
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/uuid
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE uuid.8` >$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/uuid.8
sed -e "s;@l_prefix@;%{l_prefix};g" \
-e "s;@l_musr@;%{l_musr};g" \
-e "s;@l_mgrp@;%{l_mgrp};g" \
<`SOURCE rpmdb` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmdb
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmdb
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE rpmtool` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmtool
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmtool
# install OpenPKG tool chain execution frontend
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE openpkg.sh` >$RPM_BUILD_ROOT%{l_prefix}/bin/openpkg
chmod 755 $RPM_BUILD_ROOT%{l_prefix}/bin/openpkg
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE openpkg.1` \
>$RPM_BUILD_ROOT%{l_prefix}/man/man1/openpkg.1
# install more OpenPKG tool chain commands
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE install.sh` >$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/install
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/install
sed -e "s;@l_prefix@;%{l_prefix};g" \
<`SOURCE man.sh` >$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/man
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/man
# 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
# display verbosity header
set +x; VERBOSE "INSTALL: Install Configuration Files"; set -x
# 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" \
-e "s:@l_susr@:%{l_susr}:g" \
-e "s:@l_musr@:%{l_musr}: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
( echo "#!/bin/sh"
echo "exec %{l_prefix}/etc/rc \${1+\"\$@\"}"
) >$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rc
chmod 755 $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rc
ln $RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rc \
$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rc
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE rc.8` \
>$RPM_BUILD_ROOT%{l_prefix}/libexec/openpkg/rc.8
# create configuration directory
test -d $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg || \
mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg
# install platform identification file
sh `SOURCE shtool` platform -n -L -S "" -C "+" -F "%-any-%" \
>$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/platform
chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/platform
# install UUID configuration file (ghost)
touch $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/uuid
chmod 644 $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/uuid
# install overriding RPM configuration files
sed -e "s:@l_prefix@:%{l_prefix}:g" \
<`SOURCE rpmpopt` \
>>$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmpopt
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:@l_prefix_static@:%{l_prefix}:g" \
-e "s;@l_build_path@;$l_build_path;g" \
-e "s;@l_build_ldlp@;$l_build_ldlp;g" \
-e "s;@l_build_ulim@;$l_build_ulim;g" \
-e "s:@TAG@:$tag:g" \
-e "s:@SUSR@:$susr:g" \
-e "s:@SGRP@:$sgrp:g" \
-e "s:@MUSR@:$musr:g" \
-e "s:@MGRP@:$mgrp:g" \
-e "s:@RUSR@:$rusr:g" \
-e "s:@RGRP@:$rgrp:g" \
-e "s:@NUSR@:$nusr:g" \
-e "s:@NGRP@:$ngrp:g" \
<`SOURCE rpmmacros` \
>$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmmacros
cp `SOURCE openpkg.pgp` \
$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/openpkg.pgp
# display verbosity header
set +x; VERBOSE "INSTALL: Done. Thank you for flying OpenPKG..."; set -x
%files
%defattr(-,%{?l_musr}%{!?l_musr:%{l_fsusr}},%{?l_mgrp}%{!?l_mgrp:%{l_fsgrp}})
%{l_prefix}/README
%config(noreplace) %{l_prefix}/.bashrc
%config(noreplace) %{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}/cgi
%dir %{l_prefix}/bin
%{l_prefix}/bin/openpkg
%dir %{l_prefix}/etc
%{l_prefix}/etc/rc
%config(noreplace) %{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
%ghost %{l_prefix}/etc/openpkg/uuid
%config %{l_prefix}/etc/openpkg/platform
%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}/include/openpkg
%dir %{l_prefix}/include/openpkg/rpm
%{l_prefix}/include/openpkg/rpm/argv.h
%{l_prefix}/include/openpkg/rpm/beecrypt.h
%{l_prefix}/include/openpkg/rpm/bzlib.h
%{l_prefix}/include/openpkg/rpm/db.h
%{l_prefix}/include/openpkg/rpm/fts.h
%{l_prefix}/include/openpkg/rpm/glob.h
%{l_prefix}/include/openpkg/rpm/hdrinline.h
%{l_prefix}/include/openpkg/rpm/header.h
%{l_prefix}/include/openpkg/rpm/misc.h
%{l_prefix}/include/openpkg/rpm/popt.h
%{l_prefix}/include/openpkg/rpm/rpmal.h
%{l_prefix}/include/openpkg/rpm/rpmbuild.h
%{l_prefix}/include/openpkg/rpm/rpmcli.h
%{l_prefix}/include/openpkg/rpm/rpmdb.h
%{l_prefix}/include/openpkg/rpm/rpmds.h
%{l_prefix}/include/openpkg/rpm/rpmerr.h
%{l_prefix}/include/openpkg/rpm/rpmfc.h
%{l_prefix}/include/openpkg/rpm/rpmfi.h
%{l_prefix}/include/openpkg/rpm/rpmfile.h
%{l_prefix}/include/openpkg/rpm/rpmhash.h
%{l_prefix}/include/openpkg/rpm/rpmio.h
%{l_prefix}/include/openpkg/rpm/rpmlib.h
%{l_prefix}/include/openpkg/rpm/rpmlog.h
%{l_prefix}/include/openpkg/rpm/rpmmacro.h
%{l_prefix}/include/openpkg/rpm/rpmmessages.h
%{l_prefix}/include/openpkg/rpm/rpmpgp.h
%{l_prefix}/include/openpkg/rpm/rpmps.h
%{l_prefix}/include/openpkg/rpm/rpmspec.h
%{l_prefix}/include/openpkg/rpm/rpmsw.h
%{l_prefix}/include/openpkg/rpm/rpmte.h
%{l_prefix}/include/openpkg/rpm/rpmts.h
%{l_prefix}/include/openpkg/rpm/rpmurl.h
%{l_prefix}/include/openpkg/rpm/stringbuf.h
%{l_prefix}/include/openpkg/rpm/ugid.h
%{l_prefix}/include/openpkg/rpm/zlib.h
%dir %{l_prefix}/info
%dir %{l_prefix}/lib
%dir %{l_prefix}/lib/openpkg
%{l_prefix}/lib/openpkg/bash
%{l_prefix}/lib/openpkg/bzip2
%{l_prefix}/lib/openpkg/uuid
%{l_prefix}/lib/openpkg/curl
%{l_prefix}/lib/openpkg/file
%{l_prefix}/lib/openpkg/gzip
%{l_prefix}/lib/openpkg/macros
%{l_prefix}/lib/openpkg/magic
%{l_prefix}/lib/openpkg/magic.mgc
%{l_prefix}/lib/openpkg/magic.mime
%{l_prefix}/lib/openpkg/magic.mime.mgc
%{l_prefix}/lib/openpkg/patch
%{l_prefix}/lib/openpkg/rc
%{l_prefix}/lib/openpkg/rpmb
%{l_prefix}/lib/openpkg/rpmd
%{l_prefix}/lib/openpkg/rpmdb
%{l_prefix}/lib/openpkg/rpmdb_dump
%{l_prefix}/lib/openpkg/rpmdb_load
%{l_prefix}/lib/openpkg/rpmdb_verify
%{l_prefix}/lib/openpkg/rpme
%{l_prefix}/lib/openpkg/rpmi
%{l_prefix}/lib/openpkg/rpmk
%{l_prefix}/lib/openpkg/rpmpopt
%{l_prefix}/lib/openpkg/rpmq
%{l_prefix}/lib/openpkg/rpmt
%{l_prefix}/lib/openpkg/rpmtool
%{l_prefix}/lib/openpkg/rpmu
%{l_prefix}/lib/openpkg/rpmv
%{l_prefix}/lib/openpkg/shtool
%{l_prefix}/lib/openpkg/tar
%{l_prefix}/lib/openpkg/librpm.a
%{l_prefix}/lib/openpkg/librpmbeecrypt.a
%{l_prefix}/lib/openpkg/librpmbuild.a
%{l_prefix}/lib/openpkg/librpmbz2.a
%{l_prefix}/lib/openpkg/librpmdb.a
%{l_prefix}/lib/openpkg/librpmio.a
%{l_prefix}/lib/openpkg/librpmpopt.a
%{l_prefix}/lib/openpkg/librpmz.a
%dir %{l_prefix}/libexec
%dir %{l_prefix}/libexec/openpkg
%{l_prefix}/libexec/openpkg/uuid
%{l_prefix}/libexec/openpkg/uuid.8
%{l_prefix}/libexec/openpkg/man
%{l_prefix}/libexec/openpkg/install
%{l_prefix}/libexec/openpkg/lsync
%{l_prefix}/libexec/openpkg/lsync.8
%{l_prefix}/libexec/openpkg/rc
%{l_prefix}/libexec/openpkg/rc.8
%{l_prefix}/libexec/openpkg/rpm-config
%{l_prefix}/libexec/openpkg/rpm-config.8
%{l_prefix}/libexec/openpkg/rpm2cpio
%{l_prefix}/libexec/openpkg/rpm2cpio.8
%{l_prefix}/libexec/openpkg/rpmbuild
%{l_prefix}/libexec/openpkg/rpmbuild.8
%{l_prefix}/libexec/openpkg/rpm
%{l_prefix}/libexec/openpkg/rpm.8
%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
%{l_prefix}/man/man1/openpkg.1
%dir %{l_prefix}/sbin
%dir %{l_prefix}/pub
%dir %{l_prefix}/share
%dir %{l_prefix}/var
%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
%pre
# always performed for upgrades and because it doesn't harm!
# [ ".$1" != .1 ] && exit 0
# this procedure is only usable with root privileges
# (for non-root installations it is not required at all)
cusr=`(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!!)
# - bootstrapping: $xxx is set from aux.wrapbin.sh
# - upgrading new: %{l_[smrn]{usr,grp}} is set via rpmmacros
# - upgrading old: %{l_[smrn]{usr,grp}} is not set at all
[ ".$susr" = . ] && susr="%{?l_susr}%{!?l_susr:root}"
[ ".$sgrp" = . ] && sgrp="%{?l_sgrp}%{!?l_sgrp:wheel}"
[ ".$musr" = . ] && musr="%{?l_musr}%{!?l_musr:%{l_fsusr}}"
[ ".$mgrp" = . ] && mgrp="%{?l_mgrp}%{!?l_mgrp:%{l_fsgrp}}"
[ ".$rusr" = . ] && rusr="%{?l_rusr}%{!?l_rusr:%{l_fsusr}-r}"
[ ".$rgrp" = . ] && rgrp="%{?l_rgrp}%{!?l_rgrp:%{l_fsgrp}-r}"
[ ".$nusr" = . ] && nusr="%{?l_nusr}%{!?l_nusr:%{l_fsusr}-n}"
[ ".$ngrp" = . ] && ngrp="%{?l_ngrp}%{!?l_ngrp:%{l_fsgrp}-n}"
[ ".$suid" = . ] && suid="%{?l_suid}"
[ ".$sgid" = . ] && sgid="%{?l_sgid}"
[ ".$muid" = . ] && muid="%{?l_muid}"
[ ".$mgid" = . ] && mgid="%{?l_mgid}"
[ ".$ruid" = . ] && ruid="%{?l_ruid}"
[ ".$rgid" = . ] && rgid="%{?l_rgid}"
[ ".$nuid" = . ] && nuid="%{?l_nuid}"
[ ".$ngid" = . ] && ngid="%{?l_ngid}"
# if any of these optional params are not used we won't have a
# corresponding macro either, so make use of one conditionally
[ ".$suid" = . ] && [ ".%{?l_suid:set}" = .set ] && suid="%{?l_suid}"
[ ".$sgid" = . ] && [ ".%{?l_sgid:set}" = .set ] && sgid="%{?l_sgid}"
[ ".$muid" = . ] && [ ".%{?l_muid:set}" = .set ] && muid="%{?l_muid}"
[ ".$mgid" = . ] && [ ".%{?l_mgid:set}" = .set ] && mgid="%{?l_mgid}"
[ ".$ruid" = . ] && [ ".%{?l_ruid:set}" = .set ] && ruid="%{?l_ruid}"
[ ".$rgid" = . ] && [ ".%{?l_rgid:set}" = .set ] && rgid="%{?l_rgid}"
[ ".$nuid" = . ] && [ ".%{?l_nuid:set}" = .set ] && nuid="%{?l_nuid}"
[ ".$ngid" = . ] && [ ".%{?l_ngid:set}" = .set ] && ngid="%{?l_ngid}"
# determine prefix
[ ".$prefix" = . ] && prefix="%{l_prefix}"
prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'`
# register the OpenPKG instance in /etc/openpkg
registry="/etc/openpkg"
exists=`cat $registry 2>/dev/null | egrep "^ *${prefix} *\$"`
if [ ".$exists" = . ]; then
( umask 022
echo "${prefix}" >>$registry
) 2>/dev/null || true
fi
# determine user/group ids
for class in s m r n; do
eval "xusr=\"\$${class}usr\""
eval "xgrp=\"\$${class}grp\""
eval "xuid=\"\$${class}uid\""
eval "xgid=\"\$${class}gid\""
if [ ".$xuid" = . ]; then
xuid=`(getent passwd; cat /etc/passwd; ypcat passwd; nidump passwd .) 2>/dev/null |\
grep "^${xusr}:" | awk -F: '{ print $3; }'`
if [ ".$xuid" = . ]; then
# seek for a reasonably uid/gid pair
xuid=1000
ok=0
while [ ".$ok" = .0 ]; do
eval "u_exists=\$u_exists_$xuid"
if [ ".$u_exists" = . ]; then
u_exists=`(getent passwd; cat /etc/passwd; ypcat passwd; nidump passwd .) 2>/dev/null | grep "^[^:]*:[^:]*:$xuid:"`
fi
eval "g_exists=\$g_exists_$xuid"
if [ ".$g_exists" = . ]; then
g_exists=`(getent group; cat /etc/group; ypcat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:$xuid:"`
fi
if [ ".$u_exists" = . -a ".$g_exists" = . ]; then
ok=1
break
fi
xuid=`expr $xuid + 1`
done
eval "u_exists_$xuid=yes"
eval "g_exists_$xuid=yes"
fi
fi
if [ ".$xgid" = . ]; then
xgid=`(getent group; cat /etc/group; ypcat group; nidump group .) 2>/dev/null |\
grep "^${xgrp}:" | awk -F: '{ print $3; }'`
if [ ".$xgid" = . ]; then
xgid="$xuid"
fi
fi
eval "${class}uid=\"$xuid\""
eval "${class}gid=\"$xgid\""
done
# determine platform id
s=`(uname -s) 2>/dev/null` || s='Unknown'
r=`(uname -r) 2>/dev/null` || r='0.0'
plid="${s}/${r}"
# add entry to /etc/shells
shell="${prefix}/lib/openpkg/bash"
if [ -f /etc/shells ]; then
exists=`cat /etc/shells 2>/dev/null | grep "^$shell"`
if [ ".$exists" = . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping addition of $shell to /etc/shells" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
echo "${shell}" >>/etc/shells
fi
fi
fi
# create the hierarchy user/group
for req in "superuser:${susr}:${suid}:${sgrp}:${sgid}" \
"management:${musr}:${muid}:${mgrp}:${mgid}" \
"restricted:${rusr}:${ruid}:${rgrp}:${rgid}" \
"non-privileged:${nusr}:${nuid}:${ngrp}:${ngid}"; do
# split request into class/usr/uid/grp/gid
OIFS="$IFS"; IFS=":"; set -- $req; IFS="$OIFS"
class="$1"; usr="$2"; uid="$3"; grp="$4"; gid="$5"
# check whether user already exists
exists=`(getent passwd; cat /etc/passwd; ypcat passwd; nidump passwd .) 2>/dev/null | grep "^$usr:"`
if [ ".$exists" = . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping creation of OpenPKG $class user $usr" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
# add entry to passwd database
realname="${prefix} OpenPKG ($class)"
case "$plid" in
FreeBSD/* | NetBSD/* )
file=/etc/master.passwd
entry="${usr}:*:${uid}:${gid}::0:0:${realname}:${prefix}:${shell}"
update="(PATH=\$PATH:/usr/sbin; pwd_mkdb -p /etc/master.passwd)"
;;
Linux/* )
file=/etc/passwd
entry="${usr}:*:${uid}:${gid}:${realname}:${prefix}:${shell}"
update="(PATH=\$PATH:/usr/sbin; pwconv)"
;;
SunOS/5.* | UnixWare/* )
file=/etc/passwd
entry="${usr}:*:${uid}:${gid}:${realname}:${prefix}:${shell}"
update="(PATH=\$PATH:/usr/sbin; pwconv)"
;;
OSF1/V5.* )
file=/etc/passwd
entry="${usr}:*:${uid}:${gid}:${realname}:${prefix}:${shell}"
update="(PATH=\$PATH:/usr/sbin; mkpasswd /etc/passwd)"
;;
HP-UX/* )
file=/etc/passwd
entry="${usr}:*:${uid}:${gid}:${realname}:${prefix}:${shell}"
update=":"
;;
Darwin/* )
# intentionally do nothing here
;;
esac
case "$plid" in
Darwin/* )
niutil -create . "/users/${usr}"
niutil -createprop . "/users/${usr}" passwd "*"
niutil -createprop . "/users/${usr}" uid "${uid}"
niutil -createprop . "/users/${usr}" gid "${gid}"
niutil -createprop . "/users/${usr}" realname "${realname}"
niutil -createprop . "/users/${usr}" home "${prefix}"
niutil -createprop . "/users/${usr}" shell "${shell}"
;;
* )
cp $file $file.bak && \
(grep -v '^+:' $file.bak; echo $entry; grep '^+:' $file.bak) >$file
rm -f $file.bak >/dev/null 2>&1
eval $update
[ $? -ne 0 ] && exit $?
;;
esac
fi
fi
# check whether group already exists
exists=`(getent group; cat /etc/group; ypcat group; nidump group .) 2>/dev/null | grep "^$grp:"`
if [ ".$exists" = . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping creation of OpenPKG $class group $grp" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
case "$plid" in
Darwin/* )
niutil -create . "/groups/${grp}"
niutil -createprop . "/groups/${grp}" gid "${gid}"
niutil -createprop . "/groups/${grp}" users "${usr}"
;;
* )
# add entry to group database
file=/etc/group
entry="${grp}:*:${gid}:${usr}"
cp $file $file.bak && \
(grep -v '^+:' $file.bak; echo $entry; grep '^+:' $file.bak) >$file
rm -f $file.bak >/dev/null 2>&1
;;
esac
fi
fi
done
# create the startup/shutdown transfer script
name=`echo "$prefix" | sed -e 's;/;;g'`
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping creation of system run-command hooks" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 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
rm -f /etc/rc.conf.bak >/dev/null 2>&1
fi
) || exit $?
# 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 OpenPKG ${prefix} hierarchy"
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 "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 OpenPKG ${prefix} 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/* )
if [ -f /etc/gentoo-release ]; then
if [ ! -f /etc/init.d/openpkg-${name} ]; then
# install transfer script
( echo "#!/sbin/runscript"
echo "##"
echo "## openpkg-${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
echo "##"
echo ""
echo "depend() {"
echo " need net"
echo "}"
echo ""
echo "checkconfig() {"
echo " [ -f ${prefix}/etc/rc ] || return 1"
echo " case $1 in"
echo " start ) exec ${prefix}/etc/rc all start ;;"
echo " stop ) exec ${prefix}/etc/rc all stop ;;"
echo " esac"
echo "}"
echo ""
echo "start() {"
echo " checkconfig || return 1"
echo " ebegin "Starting OpenPKG ${prefix} hierarchy""
echo " exec ${prefix}/etc/rc all start"
echo " eend 0"
echo "}"
echo ""
echo "stop() {"
echo " checkconfig || return 1"
echo " ebegin "Stopping OpenPKG ${prefix} hierarchy""
echo " exec ${prefix}/etc/rc all stop"
echo " eend 0"
echo "}"
) >/etc/init.d/openpkg-${name}
chmod 755 /etc/init.d/openpkg-${name}
/sbin/rc-update add openpkg-${name} default
fi
else
# 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/redhat-release -o -f /etc/mandrake-release ]; then
sroot=/etc/rc.d/init.d
lroot=/etc/rc.d/rc%d.d
elif [ -f /etc/SuSE-release ]; then
sroot=/etc/init.d
lroot=/etc/init.d/rc%d.d
else
echo "WARNING: you are not running one of the supported standard" 1>&2
echo "WARNING: Linux platforms (Debian, RedHat, Mandrake, SuSE, Gentoo)." 1>&2
echo "WARNING: Guessing the location of the system init scripts!" 1>&2
sroot=""
lroot=""
for sr in /etc/rc.d/init.d /etc/init.d /sbin/init.d; do
if [ -d $sr ]; then
sroot="$sr"
break
fi
done
for lr in /etc/rc.d/rc2.d /etc/rc2.d /sbin/init.d/rc2.d; do
if [ -d $lr ]; then
lroot="`echo $lr | sed -e 's;2;%d;'`"
break
fi
done
if [ ".$sroot" = . -o ".$lroot" = . ]; then
echo "ERROR: Failed to guess the location of the system init scripts!" 1>&2
exit 1
fi
fi
if [ ! -f $sroot/${name} ]; then
# install transfer script
( echo "#!/bin/sh"
echo "##"
echo "## ${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
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 "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
fi
;;
SunOS/5.* )
if [ ! -f /etc/init.d/${name} ]; then
# install transfer script
( echo "#!/bin/sh"
echo "##"
echo "## ${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
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 "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}
) || exit $?
fi
;;
UnixWare/* )
if [ ! -f /etc/init.d/${name} ]; then
# install transfer script
( echo "#!/bin/sh"
echo "##"
echo "## ${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
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 "esac"
) >/etc/init.d/${name}
chmod 755 /etc/init.d/${name}
# create corresponding symbolic links
( cd /etc
ln init.d/${name} rc2.d/S99${name}
ln init.d/${name} rc0.d/K00${name}
ln init.d/${name} rc1.d/K00${name}
) || exit $?
fi
;;
OSF1/V5.* )
if [ ! -f /sbin/init.d/${name} ]; then
# install transfer script
( echo "#!/bin/sh"
echo "##"
echo "## ${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
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 "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}
) || exit $?
fi
;;
HP-UX/* )
if [ ! -f /sbin/init.d/${name} ]; then
# install transfer script
( echo "#!/bin/sh"
echo "##"
echo "## ${name} -- startup/shutdown transfer script for OpenPKG ${prefix} hierarchy"
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 "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}
) || exit $?
fi
;;
Darwin/* )
darwin_rc_dir="/System/Library/StartupItems/${name}"
if [ ! -d ${darwin_rc_dir} ]; then
mkdir ${darwin_rc_dir}
fi
# make sure hierarchy is activated in /etc/hostconfig
# FIXME: cs: simple and bad code here without any detection of existing entries
echo "OPENPKG_${name}=-YES-" >>/etc/hostconfig
# install transfer script
if [ ! -f ${darwin_rc_dir}/${name} ]; then
rm -f ${darwin_rc_dir}/${name} >/dev/null 2>&1
( echo "#!/bin/sh"
echo "##"
echo "## ${darwin_rc_dir}/${name}"
echo "## -- startup transfer script for OpenPKG ${prefix} hierarchy"
echo "##"
echo ""
echo "[ ! -f ${prefix}/etc/rc ] && exit 0"
echo ""
echo ". /etc/rc.common"
echo ""
echo "if [ \"\${OPENPKG_${name}:=-NO-}\" = \"-YES-\" ]; then"
echo " ConsoleMessage \"OpenPKG ${prefix} hierarchy\""
echo " ${prefix}/etc/rc all start"
echo "fi"
) >${darwin_rc_dir}/${name}
chmod 755 ${darwin_rc_dir}/${name}
fi
# install startup parameter list
if [ ! -f ${darwin_rc_dir}/StartupParameters.plist ]; then
rm -f ${darwin_rc_dir}/StartupParameters.plist >/dev/null 2>&1
( echo "{"
echo " Description = \"OpenPKG ${prefix} hierarchy\";"
echo " Provides = (\"OpenPKG ${prefix}\");"
echo " Requires = (\"Disks\", \"Network Configuration\", \"Resolver\");"
echo " Uses = (\"Cron\");"
echo " OrderPreference = \"Last\";"
echo " Messages ="
echo " {"
echo " start = \"Starting OpenPKG ${prefix} hierarchy\";"
echo " stop = \"Stopping OpenPKG ${prefix} hierarchy\";"
echo " };"
echo "}"
) >${darwin_rc_dir}/StartupParameters.plist
chmod 644 ${darwin_rc_dir}/StartupParameters.plist
fi
;;
esac
fi
# create the cron transfer entries
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping creation of system cron hooks" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
case "$plid" in
FreeBSD/* | Linux/* | Darwin/* )
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/* | UnixWare/* )
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 ) || exit $?
rm -f $EDITOR
fi
;;
esac
fi
# remember what OpenPKG RPM version was installed, so we can
# correctly upgrade the RPM database in the %post section (see below).
if [ -d ${prefix}/RPM/DB ]; then
if [ -x "${prefix}/bin/openpkg" -a -x "${prefix}/libexec/openpkg/rpm" ]; then
# OpenPKG 2.0
rpm="${prefix}/bin/openpkg rpm"
else
# OpenPKG 1.x
rpm="${prefix}/bin/rpm"
fi
rm -f ${prefix}/RPM/DB/.version >/dev/null 2>&1 || true
$rpm --version |\
sed -e 's;^;X;' \
-e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$;\1;' \
-e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;' \
-e 's;^X.*$;4.0;' \
>${prefix}/RPM/DB/.version
fi
%post
# update or initially create OpenPKG UUID configuration
%{l_prefix}/bin/openpkg uuid update >/dev/null 2>&1 || true
# determine new and old OpenPKG RPM version
V_rpm_new="%{V_rpm}"
if [ -f %{l_prefix}/RPM/DB/.version ]; then
V_rpm_old="`cat %{l_prefix}/RPM/DB/.version`"
rm -f %{l_prefix}/RPM/DB/.version >/dev/null 2>&1 || true
else
V_rpm_old="4.0"
fi
# make sure all RPM database files are present and that their
# attributes are correct, etc. This is not a database rebuild
# operation, so this is fully harmless and can be done always.
%{l_prefix}/lib/openpkg/rpmdb --quiet --fixate
# check RPM database for upgrade requirements
if [ ".$1" = .2 -a ".$V_rpm_old" != ".$V_rpm_new" ]; then
# RPM 4.0/4.1 does not allow concurrent database access, so we
# cannot upgrade the database immediately from here (because
# we are still running within the execution context of the
# old RPM which in turn has the database locked) and instead
# have to just drop a note to the administrator about database
# upgrading. RPM 4.2 in general allows concurrent database
# access, but the whole stuff is too risky here, too.
( echo "You are upgrading the OpenPKG bootstrap from a previous"
echo "RPM $V_rpm_old based version to this RPM $V_rpm_new based"
echo "version. The RPM database in %{l_prefix}/RPM/DB/ can still"
echo "be used, but it is strongly recommended to upgrade it as"
echo "soon as possible to the latest Berkeley-DB format files by"
echo "executing the command:"
echo " \$ %{l_prefix}/bin/openpkg rpm --db-rebuild"
echo "In case of problems with the RPM database you can always"
echo "execute the command:"
echo " \$ %{l_prefix}/bin/openpkg rpm --db-cleanup"
) | %{l_prefix}/lib/openpkg/rpmtool msg -b -t warn
fi
# FIXME: Evil hack to workaround build problems under Debian
# (at least 3.1) (and similar platforms) where a Debian
# install-info(8) exists which is both API and functionally
# incompatible to the de-facto standardized install-info(8)
# command from GNU Texinfo. ATTENTION: THIS SHOULD BE REPLACED
# ASAP WITH A MORE GENERIC BUILD COMMAND OVERRIDE SOLUTION!
case "`cat %{l_prefix}/etc/openpkg/platform`" in
*-*-debian* )
if [ ! -d %{l_prefix}/lib/openpkg/override ]; then
mkdir %{l_prefix}/lib/openpkg/override >/dev/null 2>&1 || true
fi
if [ ! -f %{l_prefix}/lib/openpkg/override/install-info ]; then
( echo "#!/bin/sh"
echo "echo 'OpenPKG: NOTICE: install-info(8) command execution overridden'"
echo "exit 0"
) >%{l_prefix}/lib/openpkg/override/install-info
chmod 775 %{l_prefix}/lib/openpkg/override/install-info
fi
;;
esac
%preun
[ ".$1" != .0 ] && exit 0
# remove files which are not RPM controlled
rm -rf %{l_prefix}/RPM/TMP/* %{l_prefix}/RPM/TMP/.[a-z]* >/dev/null 2>&1 || true
rm -rf %{l_prefix}/RPM/SRC/* %{l_prefix}/RPM/SRC/.[a-z]* >/dev/null 2>&1 || true
rm -rf %{l_prefix}/RPM/PKG/* %{l_prefix}/RPM/PKG/.[a-z]* >/dev/null 2>&1 || true
rm -rf %{l_prefix}/RPM/DB/* %{l_prefix}/RPM/DB/.[a-z]* >/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
cusr=`(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_musr}"
group="%{l_mgrp}"
prefix="%{l_prefix}"
prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'`
# determine platform id
s=`(uname -s) 2>/dev/null` || s='Unknown'
r=`(uname -r) 2>/dev/null` || r='0.0'
plid="${s}/${r}"
# unregister the OpenPKG instance in /etc/openpkg
registry="/etc/openpkg"
exists=`cat $registry 2>/dev/null | egrep "^ *${prefix} *\$"`
if [ ".$exists" != . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping unregistering of $prefix in $registry" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
cp $registry $registry.bak && \
egrep -v "^ *${prefix} *\$" $registry.bak >$registry
rm -f $registry.bak >/dev/null 2>&1
if [ ".`cat $registry`" = . ]; then
rm -f $registry >/dev/null 2>&1
fi
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 [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping deletion of $shell from /etc/shells" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
cp /etc/shells /etc/shells.bak && \
grep -v "^${shell}" /etc/shells.bak >/etc/shells
rm -f /etc/shells.bak >/dev/null 2>&1
fi
fi
# remove the hierarchy user/group
for req in "super-user:%{l_susr}:%{l_suid}:%{l_sgrp}:%{l_sgid}" \
"management:%{l_musr}:%{l_muid}:%{l_mgrp}:%{l_mgid}" \
"restricted:%{l_rusr}:%{l_ruid}:%{l_rgrp}:%{l_rgid}" \
"non-privileged:%{l_nusr}:%{l_nuid}:%{l_ngrp}:%{l_ngid}"; do
# split request into class/usr/uid/grp/gid
OIFS="$IFS"; IFS=":"; set -- $req; IFS="$OIFS"
class="$1"; usr="$2"; uid="$3"; grp="$4"; gid="$5"
# check whether user already exists
exists=`(getent passwd; cat /etc/passwd; ypcat passwd; nidump passwd .) 2>/dev/null | grep "^$usr:"`
if [ ".$exists" != . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping deletion of OpenPKG $class user $usr" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
elif [ ".$usr" = ".root" ]; then
echo "openpkg:WARNING: skipping deletion of OpenPKG $class user $usr" 1>&2
echo "openpkg:WARNING: (would remove system standard user)" 1>&2
else
case "$plid" in
FreeBSD/* | NetBSD/* )
cp /etc/master.passwd /etc/master.passwd.bak && \
grep -v "^${usr}:" /etc/master.passwd.bak >/etc/master.passwd
( PATH="$PATH:/usr/sbin"; pwd_mkdb -p /etc/master.passwd ) || exit $?
rm -f /etc/master.passwd.bak >/dev/null 2>&1
;;
Linux/* | SunOS/5.* | UnixWare/* )
cp /etc/passwd /etc/passwd.bak && \
grep -v "^${usr}:" /etc/passwd.bak >/etc/passwd
( PATH="$PATH:/usr/sbin"; pwconv ) || exit $?
rm -f /etc/passwd.bak >/dev/null 2>&1
;;
OSF1/V5.* )
cp /etc/passwd /etc/passwd.bak && \
grep -v "^${usr}:" /etc/passwd.bak >/etc/passwd
( PATH="$PATH:/usr/sbin"; mkpasswd /etc/passwd ) || exit $?
rm -f /etc/passwd.bak >/dev/null 2>&1
;;
HP-UX/* )
cp /etc/passwd /etc/passwd.bak && \
grep -v "^${usr}:" /etc/passwd.bak >/etc/passwd
rm -f /etc/passwd.bak >/dev/null 2>&1
;;
Darwin/* )
niutil -destroy . "/users/${usr}"
;;
esac
fi
fi
# check whether group already exists
exists=`(getent group; cat /etc/group; ypcat group; nidump group .) 2>/dev/null | grep "^$grp:"`
if [ ".$exists" != . ]; then
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping deletion of OpenPKG $class group $grp" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
elif [ ".$usr" = ".root" ] || [ ".$grp" = ".root" ] || [ ".$grp" = ".wheel" ]; then
echo "openpkg:WARNING: skipping deletion of OpenPKG $class group $grp" 1>&2
echo "openpkg:WARNING: (would remove system standard group)" 1>&2
else
case "$plid" in
Darwin/* )
niutil -destroy . "/groups/${grp}"
;;
* )
cp /etc/group /etc/group.bak && \
grep -v "^${grp}:" /etc/group.bak >/etc/group
rm -f /etc/group.bak >/dev/null 2>&1
;;
esac
fi
fi
done
# remove the startup/shutdown transfer scripts
name=`echo "$prefix" | sed -e 's;/;;g'`
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping deletion of system run-command hooks" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 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/* )
if [ -f /etc/gentoo-release ]; then
/sbin/rc-update del openpkg-${name} >/dev/null 2>&1
rm -f /etc/init.d/openpkg-${name} >/dev/null 2>&1
else
# 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/redhat-release -o -f /etc/mandrake-release ]; then
sroot=/etc/rc.d/init.d
lroot=/etc/rc.d/rc%d.d
elif [ -f /etc/SuSE-release ]; then
sroot=/etc/init.d
lroot=/etc/init.d/rc%d.d
else
echo "WARNING: you are not running one of the supported standard" 1>&2
echo "WARNING: Linux platforms (Debian, RedHat, Mandrake, SuSE, Gentoo)." 1>&2
echo "WARNING: Guessing the location of the system init scripts!" 1>&2
sroot=""
lroot=""
for sr in /etc/rc.d/init.d /etc/init.d /sbin/init.d; do
if [ -d $sr ]; then
sroot="$sr"
break
fi
done
for lr in /etc/rc.d/rc2.d /etc/rc2.d /sbin/init.d/rc2.d; do
if [ -d $lr ]; then
lroot="`echo $lr | sed -e 's;2;%d;'`"
break
fi
done
if [ ".$sroot" = . -o ".$lroot" = . ]; then
echo "ERROR: Failed to guess the location of the system init scripts!" 1>&2
exit 1
fi
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
fi
;;
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
;;
UnixWare/* )
rm -f /etc/init.d/${name} >/dev/null 2>&1
rm -f /etc/rc2.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
;;
Darwin/* )
cp /etc/hostconfig /etc/hostconfig.bak && \
grep -v "^OPENPKG_${name}=" /etc/hostconfig.bak >/etc/hostconfig
rm -f /etc/hostconfig.bak >/dev/null 2>&1
rm -rf /System/Library/StartupItems/${name} >/dev/null 2>&1
;;
esac
fi
# remove the cron transfer entries
if [ ".$cusr" != ".root" ]; then
echo "openpkg:WARNING: skipping deletion of system cron hooks" 1>&2
echo "openpkg:WARNING: (would require root-privileges)" 1>&2
else
case "$plid" in
FreeBSD/* | Linux/* | Darwin/* )
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
rm -f /etc/crontab.bak >/dev/null 2>&1
fi
;;
SunOS/5.* | OSF1/V5.* | NetBSD/* | HP-UX/* | UnixWare/* )
EDITOR=/tmp/vipw.$$
VISUAL="$EDITOR"
export EDITOR
export VISUAL
p=`echo $prefix | sed -e 's;/;\\\\\\\\/;g'`
( echo "cp \$1 \$1.bak"
echo "cat \$1.bak | sed -e \"//,/<\\\\/OpenPKG>/d\" >\$1"
echo "rm -f \$1.bak"
) >$EDITOR
chmod a+x $EDITOR
( PATH="$PATH:/usr/bin"; crontab -e ) || exit $?
rm -f $EDITOR
;;
esac
fi
# delayed removal of top-level directory.
( sleep 2
rm -rf %{l_prefix}/RPM/DB/* %{l_prefix}/RPM/DB/.[a-z]* >/dev/null 2>&1 || true
rmdir %{l_prefix}/RPM/DB >/dev/null 2>&1 || true
rmdir %{l_prefix}/RPM >/dev/null 2>&1 || true
rmdir %{l_prefix} >/dev/null 2>&1 || true
) /dev/null 2>/dev/null &