1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/openpkg/aux.wrapbin.sh Tue Jan 06 23:40:39 2009 +0100 1.3 @@ -0,0 +1,252 @@ 1.4 +#!/bin/sh 1.5 +## 1.6 +## OpenPKG Binary Bootstrap Package (self-extracting shell script) 1.7 +## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/> 1.8 +## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/> 1.9 +## 1.10 +## Permission to use, copy, modify, and distribute this software for 1.11 +## any purpose with or without fee is hereby granted, provided that 1.12 +## the above copyright notice and this permission notice appear in all 1.13 +## copies. 1.14 +## 1.15 +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 1.16 +## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1.17 +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1.18 +## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR 1.19 +## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1.20 +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1.21 +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 1.22 +## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 1.23 +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 1.24 +## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 1.25 +## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 1.26 +## SUCH DAMAGE. 1.27 +## 1.28 + 1.29 +# configuration 1.30 +l_me="$0" 1.31 +o_help=no 1.32 +o_version=no 1.33 +o_tar=no 1.34 +l_prefix='@l_prefix@' 1.35 +l_musr='@MUSR@' 1.36 +l_mgrp='@MGRP@' 1.37 +l_platform="@l_platform@" 1.38 +l_release="@l_release@" 1.39 +l_version="@l_version@" 1.40 + 1.41 +# establish standard environment 1.42 +PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin" 1.43 +LC_CTYPE=C 1.44 +export LC_CTYPE 1.45 +umask 022 1.46 + 1.47 +# parse command line options 1.48 +for opt 1.49 +do 1.50 + case $opt in 1.51 + -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; 1.52 + *) arg='' ;; 1.53 + esac 1.54 + case $opt in 1.55 + -h | --help ) o_help=yes ;; 1.56 + -v | --version ) o_version=yes ;; 1.57 + -t | --tar ) o_tar=yes ;; 1.58 + --prefix=* ) l_prefix=$arg ;; 1.59 + * ) o_help=yes ;; 1.60 + esac 1.61 +done 1.62 +if [ ".$o_version" = .no -a ".$l_prefix" = . ]; then 1.63 + o_help=yes 1.64 +fi 1.65 +if [ ".$o_help" = .yes ]; then 1.66 + echo "Usage: sh $l_me" 2>&1 1.67 + echo " [--prefix=<prefix>] [-t|--tar]" 2>&1 1.68 + echo " [-h|--help] [-v|--version]" 2>&1 1.69 + exit 1 1.70 +fi 1.71 + 1.72 +# make sure all essential installation tools are available 1.73 +for tool in sed mkdir dd tar chown chgrp; do 1.74 + found=no 1.75 + case $tool in 1.76 + /* ) 1.77 + if [ -f $tool ]; then 1.78 + found=yes 1.79 + fi 1.80 + ;; 1.81 + * ) 1.82 + for p in `IFS=:; echo $PATH`; do 1.83 + if [ -f "$p/$tool" ]; then 1.84 + found=yes 1.85 + break 1.86 + fi 1.87 + done 1.88 + ;; 1.89 + esac 1.90 + if [ ".$found" = .no ]; then 1.91 + echo "$l_me:ERROR: unable to find installation tool \"$tool\"" 1>&2 1.92 + exit 1 1.93 + fi 1.94 +done 1.95 + 1.96 +# optionally extract the embedded tarball only 1.97 +if [ ".$o_tar" = .yes ]; then 1.98 + tmpdir="${TMPDIR-/tmp}/openpkg.$$" 1.99 + ( umask 077 && mkdir $tmpdir) || exit 1 1.100 + dd if=$l_me bs=8192 skip=8 2>/dev/null |\ 1.101 + ( cd $tmpdir || exit 1 1.102 + tar xf - 2>/dev/null || exit 1 1.103 + ./openpkg.bzip2 -d -c openpkg.tar.bz2 1.104 + ) || exit 1 1.105 + rm -rf $tmpdir 1.106 + exit 0 1.107 +fi 1.108 + 1.109 +# display version and copyright header 1.110 +echo "OpenPKG ${l_release} Binary Bootstrap Package, version ${l_version}" 1.111 +echo "Built for prefix ${l_prefix} on target platform ${l_platform}" 1.112 +if [ ".$o_version" = .yes ]; then 1.113 + exit 0 1.114 +fi 1.115 + 1.116 +# determine current username 1.117 +cusr=`(id -un) 2>/dev/null ||\ 1.118 + (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ 1.119 + (whoami) 2>/dev/null ||\ 1.120 + (who am i | cut "-d " -f1) 2>/dev/null ||\ 1.121 + echo ${LOGNAME-"NN"}` 1.122 + 1.123 +# running the embedded %pre script for hooking into the system environment 1.124 +echo "++ hooking OpenPKG instance into system environment" 1.125 +prefix="$l_prefix" 1.126 +susr='@SUSR@'; sgrp='@SGRP@' 1.127 +musr='@MUSR@'; mgrp='@MGRP@' 1.128 +rusr='@RUSR@'; rgrp='@RGRP@' 1.129 +nusr='@NUSR@'; ngrp='@NGRP@' 1.130 +suid='@SUID@'; sgid='@SGID@' 1.131 +muid='@MUID@'; mgid='@MGID@' 1.132 +ruid='@RUID@'; rgid='@RGID@' 1.133 +nuid='@NUID@'; ngid='@NGID@' 1.134 +set -- 1 # emulate RPM's $1 when executing scripts 1.135 +# ---- BEGIN EMBEDDED %pre SCRIPT ---- 1.136 +@PRE@ 1.137 +# ---- END EMBEDDED %pre SCRIPT ---- 1.138 + 1.139 +# make sure prefix/root directory exists 1.140 +# and has correct permissions and owner/group 1.141 +if [ ! -d $l_prefix ]; then 1.142 + # create prefix/root directory from scratch 1.143 + echo "++ creating OpenPKG instance root directory \"$l_prefix\"" 1.144 + d='' 1.145 + for c in `IFS=/; echo $l_prefix`; do 1.146 + d="$d/$c" 1.147 + if [ ! -d $d ]; then 1.148 + mkdir $d || exit 1 1.149 + chmod 755 $d || exit 1 1.150 + if [ ".$cusr" = .root ]; then 1.151 + chown $musr $d >/dev/null 2>&1 || true 1.152 + chgrp $mgrp $d >/dev/null 2>&1 || true 1.153 + fi 1.154 + fi 1.155 + done 1.156 +else 1.157 + # adjust already existing prefix/root directory 1.158 + echo "++ fixating OpenPKG instance root directory \"$l_prefix\"" 1.159 + ( cd $l_prefix || exit 1 1.160 + chmod 755 . || exit 1 1.161 + if [ ".$cusr" = .root ]; then 1.162 + chown $musr . >/dev/null 2>&1 || true 1.163 + chgrp $mgrp . >/dev/null 2>&1 || true 1.164 + fi 1.165 + ) || exit 1 1.166 +fi 1.167 + 1.168 +# extract and install binary distribution files 1.169 +echo "++ extracting OpenPKG binary distribution" 1.170 +dd if=$l_me bs=8192 skip=8 2>/dev/null |\ 1.171 + (cd $l_prefix; tar xf - 2>/dev/null) 1.172 +echo "++ installing OpenPKG binary distribution" 1.173 +( cd $l_prefix || exit 1 1.174 + ./openpkg.bzip2 -d -c openpkg.tar.bz2 | ./openpkg.tar xf - 2>/dev/null 1.175 + rm -f openpkg.tar openpkg.bzip2 openpkg.tar.bz2 >/dev/null 2>&1 || true 1.176 +) || exit 1 1.177 + 1.178 +# fixate installation files 1.179 +# (ATTENTION: order of chgrp/chown and chmod is important because of "set-UID" bits) 1.180 +echo "++ fixating OpenPKG instance filesystem hierarchy" 1.181 +( echo 'fixate () {' 1.182 + echo ' chgrp "$3" "$4"' 1.183 + echo ' chown "$2" "$4"' 1.184 + echo ' chmod "$1" "$4"' 1.185 + echo '}' 1.186 + $l_prefix/bin/openpkg --keep-privileges rpm -q openpkg \ 1.187 + --qf '[fixate %7.7{FILEMODES:octal} %{FILEUSERNAME:shescape} %{FILEGROUPNAME:shescape} ::%{FILENAMES:shescape}\n]' |\ 1.188 + grep -v '(none)' | sed 's/^fixate .../fixate /' | sed -e "s; ::\\(.\\)@l_prefix@; \\1$l_prefix;" 1.189 +) | sh 2>/dev/null || true 1.190 + 1.191 +# running the embedded %post script 1.192 +echo "++ post-processing OpenPKG bootstrap installation" 1.193 +prefix="$l_prefix" 1.194 +susr='@SUSR@'; sgrp='@SGRP@' 1.195 +musr='@MUSR@'; mgrp='@MGRP@' 1.196 +rusr='@RUSR@'; rgrp='@RGRP@' 1.197 +nusr='@NUSR@'; ngrp='@NGRP@' 1.198 +suid='@SUID@'; sgid='@SGID@' 1.199 +muid='@MUID@'; mgid='@MGID@' 1.200 +ruid='@RUID@'; rgid='@RGID@' 1.201 +nuid='@NUID@'; ngid='@NGID@' 1.202 +set -- 1 # emulate RPM's $1 when executing scripts 1.203 +# ---- BEGIN EMBEDDED %post SCRIPT ---- 1.204 +@POST@ 1.205 +# ---- END EMBEDDED %post SCRIPT ---- 1.206 + 1.207 +# display final information 1.208 +( echo "Congratulations!" 1.209 + echo "" 1.210 + echo "You have successfully installed an OpenPKG ${l_release} instance" 1.211 + echo "under prefix ${l_prefix} on target platform ${l_platform}." 1.212 + echo "" 1.213 + echo "For details about this OpenPKG instance, run any of the" 1.214 + echo "following typical OpenPKG RPM query commands:" 1.215 + echo "" 1.216 + echo " \$ ${l_prefix}/bin/openpkg rpm -qa" 1.217 + echo " \$ ${l_prefix}/bin/openpkg rpm -qi openpkg" 1.218 + echo " \$ ${l_prefix}/bin/openpkg rpm -qlv openpkg" 1.219 + echo "" 1.220 + echo "To check the integrity of the entire OpenPKG instance," 1.221 + echo "run the following OpenPKG RPM verify command:" 1.222 + echo "" 1.223 + echo " \$ ${l_prefix}/bin/openpkg rpm -Va" 1.224 + echo "" 1.225 + echo "To install software packages into this OpenPKG instance, run" 1.226 + echo "the following two OpenPKG RPM build commands for each package:" 1.227 + echo "" 1.228 + echo " \$ ${l_prefix}/bin/openpkg rpm --rebuild /path/to/foo-*.src.rpm" 1.229 + echo " \$ ${l_prefix}/bin/openpkg rpm -Uvh ${l_prefix}/RPM/PKG/foo-*.rpm" 1.230 + echo "" 1.231 + echo "To remove a software package later, just run:" 1.232 + echo "" 1.233 + echo " \$ ${l_prefix}/bin/openpkg rpm -e foo" 1.234 + echo "" 1.235 + echo "To remove the whole OpenPKG instance under prefix ${l_prefix}," 1.236 + echo "just remove every package as shown above. As you finally" 1.237 + echo "remove the package \"openpkg\", the OpenPKG instance itself" 1.238 + echo "will be unlinked from the system and removed as well." 1.239 + echo "" 1.240 + echo "Thank you for flying OpenPKG..." 1.241 + echo " Ralf S. Engelschall" 1.242 + echo " The OpenPKG Project" 1.243 + echo " openpkg@openpkg.org" 1.244 +) | $l_prefix/lib/openpkg/rpmtool msg -b -t info 1.245 + 1.246 +# die explicitly just before the shell would discover 1.247 +# that we carry mega-bytes of data with us... ;-) 1.248 +exit 0 1.249 + 1.250 +# the distribution tarball is appended in raw format directly to the 1.251 +# end of this script, just leaded by padding whitespaces which make 1.252 +# sure that the tarball data starts at the pre-defined offset of 64KB. 1.253 +# This allows us to unpack the tarball by just skipping the leading 1.254 +# 64KB (= 8192*8, see above). 1.255 +