diff -r 71503088f51b -r f880f219c566 openpkg/etc.wrapsrc.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/openpkg/etc.wrapsrc.sh Tue Jul 31 12:23:42 2012 +0200 @@ -0,0 +1,157 @@ +#!/bin/sh +#![OpenPKG] +## +## OpenPKG Source Bootstrap Package (self-extracting shell script) +## Copyright (c) 2000-2012 OpenPKG GmbH +## +## This software is property of the OpenPKG GmbH, DE MUC HRB 160208. +## All rights reserved. Licenses which grant limited permission to use, +## copy, modify and distribute this software are available from the +## OpenPKG GmbH. +## +## 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. +## + +# configuration +l_me="$0" +o_help=no +o_version=no +o_tar=no +l_prefix='/openpkg' +l_dir='@l_dir@' +l_release="@l_release@" +l_version="@l_version@" + +# establish standard environment +PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin" +LC_CTYPE=C +export LC_CTYPE +umask 022 + +# pre-parse command line options +for opt +do + case $opt in + -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; + *) arg='' ;; + esac + case $opt in + -h | --help ) o_help=yes ;; + -v | --version ) o_version=yes ;; + -t | --tar ) o_tar=yes ;; + --prefix=* ) l_prefix=$arg ;; + esac +done +if [ ".$o_help" = .yes ]; then + echo "Usage: sh $l_me" 2>&1 + echo " [--prefix=] [--tag=]" 2>&1 + echo " [--stack=] [--unprivileged]" 2>&1 + echo " [--user=] [--group=]" 2>&1 + echo " [--{s,m,r,n}usr=] [--{s,m,r,n}grp=]" 2>&1 + echo " [--{s,m,r,n}uid=] [--{s,m,r,n}gid=]" 2>&1 + echo " [--use_tar=] [--use_make=] [--use_cc=]" 2>&1 + echo " [--use_ar=] [--use_ld=] [--use_as=] [--use_strip=]" 2>&1 + echo " [-t|--tar] [-h|--help] [-v|--version]" 2>&1 + exit 1 +fi + +# make sure all essential unpacking tools are available +# (the build tools are checked later from within openpkg.spec) +for tool in /bin/sh mkdir cat tar rm chown chgrp sed dd; do + found=no + case $tool in + /* ) + if [ -f $tool ]; then + found=yes + fi + ;; + * ) + for p in `IFS=:; echo $PATH`; do + if [ -f "$p/$tool" ]; then + found=yes + break + fi + done + ;; + esac + if [ ".$found" = .no ]; then + echo "$l_me:ERROR: unable to find bootstrap tool \"$tool\"" 1>&2 + exit 1 + fi +done + +# optionally extract the embedded tarball only +if [ ".$o_tar" = .yes ]; then + dd if=$l_me bs=8192 skip=8 2>/dev/null + exit 0 +fi + +# display version and copyright header +echo "OpenPKG ${l_release} Source Bootstrap Package, version ${l_version}" +if [ ".$o_version" = .yes ]; then + exit 0 +fi +echo "Building for prefix ${l_prefix} on current platform" + +# determine current user/group +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` +cgid=`(id -g $cusr) 2>/dev/null ||\ + ((getent passwd "${cusr}"; grep "^${cusr}:" /etc/passwd; ypmatch "${cusr}" passwd; nismatch "${cusr}" passwd; nidump passwd . | grep "^${cusr}:") 2>/dev/null |\ + sed -e 'q' | awk -F: '{ print $4; }')` +cgrp=`(id -gn $cusr) 2>/dev/null ||\ + ((getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:${cgid}:" |\ + sed -e 'q' | awk -F: '{ print $1; }')` +if [ ".$cgrp" = . ]; then + cgrp="$cusr" +fi + +# extract the source distribution files +echo "++ extracting OpenPKG source distribution" +rm -rf $l_dir >/dev/null 2>&1 +mkdir $l_dir || exit 1 +dd if=$l_me bs=8192 skip=8 2>/dev/null | (cd $l_dir; tar xf - 2>/dev/null) +if [ ".$cusr" = .root ]; then + ( cd $l_dir || exit 1 + chown -R -h $cusr . >/dev/null 2>&1 || true + chgrp -R -h $cgrp . >/dev/null 2>&1 || true + ) || exit 1 +fi +if [ ! -f $l_dir/openpkg.boot ]; then + echo "$l_me:ERROR: failed to unpack into directory \"$l_dir\"" 1>&2 + exit 1 +fi + +# perform bootstrap procedure +echo "++ building OpenPKG binary distribution" +( cd $l_dir || exit 1 + sh ./openpkg.boot ${1+"$@"} || exit 1 +) || exit 1 + +# cleanup +rm -rf $l_dir >/dev/null 2>&1 + +# die explicitly just before the shell would discover +# that we carry mega-bytes of data with us... +exit 0 + +# the distribution tarball is appended in raw format directly to the +# end of this script, just leaded by padding whitespaces which make +# sure that the tarball data starts at the pre-defined offset of 64KB. +# This allows us to unpack the tarball by just skipping the leading +# 64KB (= 8192*8, see above). +