Mon, 28 Jan 2013 17:37:18 +0100
Correct socket error reporting improvement with IPv6 portable code,
after helpful recommendation by Saúl Ibarra Corretgé on OSips devlist.
michael@13 | 1 | #!/bin/sh |
michael@13 | 2 | ## |
michael@13 | 3 | ## openpkg.boot -- OpenPKG bootstrap procedure (look Ma, without hands ;) |
michael@428 | 4 | ## Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/> |
michael@13 | 5 | ## |
michael@428 | 6 | ## This software is property of the OpenPKG GmbH, DE MUC HRB 160208. |
michael@428 | 7 | ## All rights reserved. Licenses which grant limited permission to use, |
michael@428 | 8 | ## copy, modify and distribute this software are available from the |
michael@428 | 9 | ## OpenPKG GmbH. |
michael@13 | 10 | ## |
michael@428 | 11 | ## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED |
michael@13 | 12 | ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
michael@13 | 13 | ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
michael@13 | 14 | ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
michael@13 | 15 | ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
michael@13 | 16 | ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
michael@13 | 17 | ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
michael@13 | 18 | ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
michael@13 | 19 | ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
michael@13 | 20 | ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
michael@13 | 21 | ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
michael@13 | 22 | ## SUCH DAMAGE. |
michael@13 | 23 | ## |
michael@13 | 24 | |
michael@13 | 25 | # This is a very tricky procedure for building the OpenPKG bootstrap |
michael@13 | 26 | # package via the RPM specification openpkg.spec, but without |
michael@13 | 27 | # requiring that OpenPKG's RPM already exists. For this the |
michael@13 | 28 | # openpkg.spec file is manually executed here in order to build |
michael@13 | 29 | # OpenPKG RPM the first time (that is, we emulate a sufficient |
michael@13 | 30 | # subset of the RPM functionality), followed by a second round over |
michael@13 | 31 | # openpkg.spec with the real (and then existing) OpenPKG RPM tool. |
michael@13 | 32 | # Also keep in mind that lots of tricks are played here in order to |
michael@13 | 33 | # perform all the steps without having to touch the real installation |
michael@13 | 34 | # location. That is the whole procedure can (and should) be performed |
michael@447 | 35 | # by a nonprivileged user and no access to the real installation |
michael@13 | 36 | # location filesystem location. |
michael@13 | 37 | |
michael@13 | 38 | me="openpkg.boot" |
michael@13 | 39 | |
michael@13 | 40 | ## |
michael@13 | 41 | ## command line handling |
michael@13 | 42 | ## |
michael@13 | 43 | |
michael@13 | 44 | # command line parameters (defaults) |
michael@13 | 45 | help=0 |
michael@13 | 46 | verbose='' |
michael@13 | 47 | prefix='' |
michael@13 | 48 | tag='' |
michael@428 | 49 | stack='' |
michael@428 | 50 | unprivileged=no |
michael@13 | 51 | usr=''; grp='' |
michael@13 | 52 | susr=''; sgrp='' |
michael@13 | 53 | musr=''; mgrp='' |
michael@13 | 54 | rusr=''; rgrp='' |
michael@13 | 55 | nusr=''; ngrp='' |
michael@13 | 56 | suid=''; sgid='' |
michael@13 | 57 | muid=''; mgid='' |
michael@13 | 58 | ruid=''; rgid='' |
michael@13 | 59 | nuid=''; ngid='' |
michael@13 | 60 | use_tar=''; use_make=''; use_cc=''; use_ar=''; use_ld=''; use_as=''; use_strip='' |
michael@13 | 61 | bs=0 |
michael@13 | 62 | |
michael@13 | 63 | # parse command line options |
michael@13 | 64 | for opt |
michael@13 | 65 | do |
michael@13 | 66 | case $opt in |
michael@13 | 67 | -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; |
michael@13 | 68 | *) arg='' ;; |
michael@13 | 69 | esac |
michael@13 | 70 | case $opt in |
michael@13 | 71 | -h | --help ) help=1 ;; |
michael@13 | 72 | -v | --verbose ) verbose=v ;; |
michael@13 | 73 | --prefix=* ) prefix=$arg ;; |
michael@13 | 74 | --tag=* ) tag=$arg ;; |
michael@428 | 75 | --stack=* ) stack=$arg ;; |
michael@428 | 76 | --unprivileged ) unprivileged=yes ;; |
michael@13 | 77 | --usr=* | --user=* ) usr=$arg ;; |
michael@13 | 78 | --grp=* | --group=* ) grp=$arg ;; |
michael@13 | 79 | --susr=* ) susr=$arg ;; |
michael@13 | 80 | --sgrp=* ) sgrp=$arg ;; |
michael@13 | 81 | --musr=* ) musr=$arg ;; |
michael@13 | 82 | --mgrp=* ) mgrp=$arg ;; |
michael@13 | 83 | --rusr=* ) rusr=$arg ;; |
michael@13 | 84 | --rgrp=* ) rgrp=$arg ;; |
michael@13 | 85 | --nusr=* ) nusr=$arg ;; |
michael@13 | 86 | --ngrp=* ) ngrp=$arg ;; |
michael@13 | 87 | --suid=* ) suid=$arg ;; |
michael@13 | 88 | --sgid=* ) sgid=$arg ;; |
michael@13 | 89 | --muid=* ) muid=$arg ;; |
michael@13 | 90 | --mgid=* ) mgid=$arg ;; |
michael@13 | 91 | --ruid=* ) ruid=$arg ;; |
michael@13 | 92 | --rgid=* ) rgid=$arg ;; |
michael@13 | 93 | --nuid=* ) nuid=$arg ;; |
michael@13 | 94 | --ngid=* ) ngid=$arg ;; |
michael@13 | 95 | --use_tar=* ) use_tar=$arg ;; |
michael@13 | 96 | --use_make=* ) use_make=$arg ;; |
michael@13 | 97 | --use_cc=* ) use_cc=$arg ;; |
michael@13 | 98 | --use_ar=* ) use_ar=$arg ;; |
michael@13 | 99 | --use_ld=* ) use_ld=$arg ;; |
michael@13 | 100 | --use_as=* ) use_as=$arg ;; |
michael@13 | 101 | --use_strip=* ) use_strip=$arg ;; |
michael@13 | 102 | -bs | -s ) bs=1 ;; |
michael@13 | 103 | * ) help=1 ;; |
michael@13 | 104 | esac |
michael@13 | 105 | done |
michael@13 | 106 | if [ ".$bs" = .0 -a ".$prefix" = . ]; then |
michael@13 | 107 | help=1 |
michael@13 | 108 | fi |
michael@13 | 109 | if [ ".$help" = .1 ]; then |
michael@13 | 110 | echo "Usage: sh $me" 2>&1 |
michael@13 | 111 | echo " [--prefix=<prefix>] [--tag=<str>]" 2>&1 |
michael@428 | 112 | echo " [--stack=<name-or-url>] [--unprivileged]" 2>&1 |
michael@13 | 113 | echo " [--user=<usr>] [--group=<grp>]" 2>&1 |
michael@13 | 114 | echo " [--{s,m,r,n}usr=<usr>] [--{s,m,r,n}grp=<grp>]" 2>&1 |
michael@13 | 115 | echo " [--{s,m,r,n}uid=<uid>] [--{s,m,r,n}gid=<gid>]" 2>&1 |
michael@13 | 116 | echo " [--use_tar=<tar>] [--use_make=<make>] [--use_cc=<cc>]" 2>&1 |
michael@13 | 117 | echo " [--use_ar=<ar>] [--use_ld=<ld>] [--use_as=<as>] [--use_strip=<strip>]" 2>&1 |
michael@13 | 118 | echo " [-t|--tar] [-h|--help] [-v|--version]" 2>&1 |
michael@13 | 119 | exit 1 |
michael@13 | 120 | fi |
michael@13 | 121 | |
michael@428 | 122 | # special support for environments with only a single |
michael@428 | 123 | # fully unprivileged user account (the current user) |
michael@428 | 124 | if [ ".$unprivileged" = .yes ]; then |
michael@428 | 125 | # determine current user/group |
michael@428 | 126 | cusr=`(id -un) 2>/dev/null ||\ |
michael@428 | 127 | (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ |
michael@428 | 128 | (whoami) 2>/dev/null ||\ |
michael@428 | 129 | (who am i | cut "-d " -f1) 2>/dev/null ||\ |
michael@428 | 130 | echo $LOGNAME` |
michael@428 | 131 | cgid=`(id -g $cusr) 2>/dev/null ||\ |
michael@428 | 132 | ((getent passwd "${cusr}"; grep "^${cusr}:" /etc/passwd; ypmatch "${cusr}" passwd; nismatch "${cusr}" passwd; nidump passwd . | grep "^${cusr}:") 2>/dev/null |\ |
michael@428 | 133 | sed -n -e '1p' | awk -F: '{ print $4; }')` |
michael@428 | 134 | cgrp=`(id -gn $cusr) 2>/dev/null ||\ |
michael@428 | 135 | ((getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:${cgid}:" |\ |
michael@428 | 136 | sed -n -e '1p' | awk -F: '{ print $1; }')` |
michael@428 | 137 | [ ".$cgrp" = . ] && cgrp="$cusr" |
michael@428 | 138 | |
michael@428 | 139 | # set all other user/group variants to current user/group |
michael@428 | 140 | for who in s m r n; do |
michael@428 | 141 | for what in usr grp; do |
michael@428 | 142 | eval "${who}${what}=\"\$c${what}\"" |
michael@428 | 143 | done |
michael@428 | 144 | done |
michael@428 | 145 | fi |
michael@428 | 146 | |
michael@13 | 147 | # determine missing parameters |
michael@428 | 148 | eval `sh etc.usrgrp.sh \ |
michael@13 | 149 | --usr="$usr" --grp="$grp" \ |
michael@13 | 150 | --susr="$susr" --sgrp="$sgrp" \ |
michael@13 | 151 | --musr="$musr" --mgrp="$mgrp" \ |
michael@13 | 152 | --rusr="$rusr" --rgrp="$rgrp" \ |
michael@13 | 153 | --nusr="$nusr" --ngrp="$ngrp" \ |
michael@13 | 154 | --suid="$suid" --sgid="$sgid" \ |
michael@13 | 155 | --muid="$muid" --mgid="$mgid" \ |
michael@13 | 156 | --ruid="$ruid" --rgid="$rgid" \ |
michael@13 | 157 | --nuid="$nuid" --ngid="$ngid"` |
michael@13 | 158 | |
michael@13 | 159 | # canonicalize prefix |
michael@13 | 160 | prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'` |
michael@13 | 161 | |
michael@13 | 162 | # provide default package tag |
michael@13 | 163 | if [ ".$tag" = . ]; then |
michael@13 | 164 | tag="<loc>" |
michael@13 | 165 | fi |
michael@13 | 166 | |
michael@13 | 167 | ## |
michael@13 | 168 | ## determine package information |
michael@13 | 169 | ## |
michael@13 | 170 | |
michael@13 | 171 | name="openpkg" |
michael@13 | 172 | spec="$name.spec" |
michael@428 | 173 | version=`grep '^Version:' $spec | sed -e 'q' | awk '{ printf("%s", $2); }'` |
michael@428 | 174 | release=`grep '^Release:' $spec | sed -e 'q' | awk '{ printf("%s", $2); }'` |
michael@13 | 175 | |
michael@13 | 176 | ## |
michael@13 | 177 | ## display headline |
michael@13 | 178 | ## |
michael@13 | 179 | |
michael@13 | 180 | sh ./shtool echo -e "%BOpenPKG Bootstrap Procedure%b" |
michael@13 | 181 | echo "++ bootstrap version: $version-$release" |
michael@13 | 182 | echo "++ user/group pairs: $susr/$sgrp $musr/$mgrp $rusr/$rgrp $nusr/$ngrp" |
michael@13 | 183 | |
michael@13 | 184 | ## |
michael@13 | 185 | ## optionally roll just a bootstrap source package |
michael@13 | 186 | ## |
michael@13 | 187 | |
michael@13 | 188 | if [ ".$bs" = .1 ]; then |
michael@13 | 189 | srcdir=. |
michael@428 | 190 | if [ -d ../dst ]; then |
michael@428 | 191 | dstdir=../dst |
michael@428 | 192 | elif [ -d ../../dst/openpkg ]; then |
michael@13 | 193 | dstdir=../../dst/openpkg |
michael@13 | 194 | else |
michael@13 | 195 | dstdir=. |
michael@13 | 196 | fi |
michael@13 | 197 | tmpdir="/tmp/$me.$$.d" |
michael@428 | 198 | if [ -d ../pkg ]; then |
michael@428 | 199 | pkgdir=../pkg |
michael@428 | 200 | elif [ -d ../../pkg/openpkg ]; then |
michael@428 | 201 | pkgdir=../../pkg/openpkg |
michael@13 | 202 | else |
michael@13 | 203 | pkgdir=.. |
michael@13 | 204 | fi |
michael@13 | 205 | echo "** rolling source bootstrap package:" |
michael@13 | 206 | echo " $pkgdir/$name-$version-$release.src.sh" |
michael@13 | 207 | rm -rf $tmpdir |
michael@13 | 208 | mkdir $tmpdir |
michael@13 | 209 | ( echo "dstdir=$dstdir" |
michael@13 | 210 | echo "srcdir=$srcdir" |
michael@13 | 211 | echo "tmpdir=$tmpdir" |
michael@13 | 212 | grep '^%define' $spec | sed -e 's:^%define *\([^ ]*\) *\(.*\):\1="\2":' |
michael@13 | 213 | grep '^Source' $spec | sed -e 's;^Source[0-9]*: *;;' -e 's;^.*/;$dstdir/;' \ |
michael@13 | 214 | -e 's;^\([^/]*\)$;$srcdir/\1;' -e 's;%;$;g' \ |
michael@13 | 215 | -e 's;^\(.*\)$;cp \1 $tmpdir/;' |
michael@13 | 216 | echo "cp -p $spec $tmpdir/" |
michael@13 | 217 | ) >$tmpdir/.sh |
michael@13 | 218 | sh $tmpdir/.sh |
michael@13 | 219 | rm -f $tmpdir/.sh |
michael@13 | 220 | l_version="$release" |
michael@13 | 221 | l_release=`sh ./release.sh -r "${l_version}" -F "%t"` |
michael@428 | 222 | sed <$srcdir/etc.wrapsrc.sh >$tmpdir/openpkg.boot.tmp \ |
michael@13 | 223 | -e "s;@l_dir@;$name-$version-$release.src;" \ |
michael@13 | 224 | -e "s;@l_release@;$l_release;" \ |
michael@13 | 225 | -e "s;@l_version@;$l_version;" |
michael@13 | 226 | echo . | awk '{ |
michael@450 | 227 | for (i = 0; i < 8192*2; i++) { |
michael@13 | 228 | printf(" "); |
michael@13 | 229 | } |
michael@13 | 230 | }' >>$tmpdir/openpkg.boot.tmp |
michael@450 | 231 | dd if=$tmpdir/openpkg.boot.tmp bs=8192 count=10 \ |
michael@13 | 232 | of=$pkgdir/$name-$version-$release.src.sh 2>/dev/null |
michael@13 | 233 | rm -f $tmpdir/openpkg.boot.tmp |
michael@13 | 234 | (cd $tmpdir && tar cf - *) >>$pkgdir/$name-$version-$release.src.sh |
michael@13 | 235 | rm -rf $tmpdir |
michael@13 | 236 | exit 0 |
michael@13 | 237 | fi |
michael@13 | 238 | |
michael@13 | 239 | ## |
michael@13 | 240 | ## determine distribution directory |
michael@13 | 241 | ## |
michael@13 | 242 | |
michael@13 | 243 | V_rpm=`grep V_rpm $spec | sed -e 'q' | awk '{ printf("%s", $3); }'` |
michael@428 | 244 | if [ -d ../dst ]; then |
michael@428 | 245 | distdir="`cd ../dst; pwd`" |
michael@428 | 246 | elif [ -d ../../dst/openpkg ]; then |
michael@428 | 247 | distdir="`cd ../../dst/openpkg; pwd`" |
michael@13 | 248 | else |
michael@13 | 249 | distdir="`pwd`" |
michael@13 | 250 | fi |
michael@13 | 251 | echo "++ distribution directory: $distdir" |
michael@13 | 252 | |
michael@13 | 253 | ## |
michael@13 | 254 | ## perform prerequisite checks |
michael@13 | 255 | ## |
michael@13 | 256 | |
michael@428 | 257 | sh ./etc.prereq.sh source || exit $? |
michael@13 | 258 | |
michael@13 | 259 | ## |
michael@447 | 260 | ## find reasonable runtime paths and tools |
michael@13 | 261 | ## |
michael@13 | 262 | |
michael@13 | 263 | # find reasonable temporary directory |
michael@428 | 264 | if [ -d ../tmp ]; then |
michael@428 | 265 | tmpdir="`cd ../tmp; pwd`" |
michael@428 | 266 | else |
michael@428 | 267 | tmpdir="${TMPDIR-/tmp}" |
michael@428 | 268 | fi |
michael@13 | 269 | |
michael@13 | 270 | # find reasonable safe program path |
michael@13 | 271 | test ".$PATH" = . && PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin" |
michael@13 | 272 | for dir in /usr/ccs/bin /usr/xpg4/bin; do |
michael@13 | 273 | test -d $dir && PATH="$PATH:$dir" |
michael@13 | 274 | done |
michael@13 | 275 | export PATH |
michael@13 | 276 | |
michael@13 | 277 | # make environment at least partly sane |
michael@13 | 278 | umask 022 |
michael@13 | 279 | unset ls rm mv cp sed grep awk >/dev/null 2>&1 || true |
michael@13 | 280 | |
michael@13 | 281 | ## |
michael@13 | 282 | ## execute the spec file manually by emulating |
michael@13 | 283 | ## the behaviour of the OpenPKG RPM tool. |
michael@13 | 284 | ## |
michael@13 | 285 | |
michael@13 | 286 | # create script prolog |
michael@13 | 287 | prolog="$tmpdir/openpkg.boot.prolog.sh" |
michael@13 | 288 | cp /dev/null $prolog |
michael@13 | 289 | ( |
michael@13 | 290 | echo "_specdir=`pwd`" |
michael@13 | 291 | echo "_sourcedir=$distdir" |
michael@13 | 292 | echo "_tmppath=$tmpdir" |
michael@13 | 293 | echo "_builddir=$tmpdir" |
michael@13 | 294 | echo "l_prefix=$prefix" |
michael@13 | 295 | echo "l_tag_fmt=\"$tag\"" |
michael@428 | 296 | echo "l_stack=$stack" |
michael@428 | 297 | echo "l_buildroot=$tmpdir/$name-$version-$release-buildroot" |
michael@13 | 298 | echo "l_susr=$susr" |
michael@13 | 299 | echo "l_sgrp=$sgrp" |
michael@13 | 300 | echo "l_musr=$musr" |
michael@13 | 301 | echo "l_mgrp=$mgrp" |
michael@13 | 302 | echo "l_rusr=$rusr" |
michael@13 | 303 | echo "l_rgrp=$rgrp" |
michael@13 | 304 | echo "l_nusr=$nusr" |
michael@13 | 305 | echo "l_ngrp=$ngrp" |
michael@13 | 306 | echo "l_suid=$suid" |
michael@13 | 307 | echo "l_sgid=$sgid" |
michael@13 | 308 | echo "l_muid=$muid" |
michael@13 | 309 | echo "l_mgid=$mgid" |
michael@13 | 310 | echo "l_ruid=$ruid" |
michael@13 | 311 | echo "l_rgid=$rgid" |
michael@13 | 312 | echo "l_nuid=$nuid" |
michael@13 | 313 | echo "l_ngid=$ngid" |
michael@428 | 314 | echo "l_unprivileged=$unprivileged" |
michael@13 | 315 | echo "use_tar=$use_tar" |
michael@13 | 316 | echo "use_make=$use_make" |
michael@13 | 317 | echo "use_cc=$use_cc" |
michael@13 | 318 | echo "use_ar=$use_ar" |
michael@13 | 319 | echo "use_ld=$use_ld" |
michael@13 | 320 | echo "use_as=$use_as" |
michael@13 | 321 | echo "use_strip=$use_strip" |
michael@13 | 322 | grep '%define' $spec | \ |
michael@13 | 323 | sed \ |
michael@13 | 324 | -e 's:^%define *\([^ ]*\) *\(.*\):\1="\2":' |
michael@13 | 325 | grep "^[A-Za-z0-9]*: *" $spec | \ |
michael@13 | 326 | sed \ |
michael@13 | 327 | -e 's;^\([A-Za-z0-9]*\): *\(.*\)$;\1="\2";' \ |
michael@13 | 328 | -e 's;^A;a;' -e 's;^B;b;' -e 's;^C;c;' -e 's;^D;d;' -e 's;^E;e;' \ |
michael@13 | 329 | -e 's;^F;f;' -e 's;^G;g;' -e 's;^H;h;' -e 's;^I;i;' -e 's;^J;j;' \ |
michael@13 | 330 | -e 's;^K;k;' -e 's;^L;l;' -e 's;^M;m;' -e 's;^N;n;' -e 's;^O;o;' \ |
michael@13 | 331 | -e 's;^P;p;' -e 's;^Q;q;' -e 's;^R;r;' -e 's;^S;s;' -e 's;^T;t;' \ |
michael@13 | 332 | -e 's;^U;u;' -e 's;^V;v;' -e 's;^W;w;' -e 's;^X;x;' -e 's;^Y;y;' \ |
michael@13 | 333 | -e 's;^Z;z;' -e 's;^buildRoot;buildroot;' |
michael@13 | 334 | echo "RPM_BUILD_ROOT=\"%{buildroot}\"" |
michael@13 | 335 | echo "RPM_BUILD_DIR=\"%{_builddir}\"" |
michael@13 | 336 | echo "RPM_SOURCE_DIR=\"$distdir\"" |
michael@13 | 337 | echo "export RPM_BUILD_ROOT" |
michael@13 | 338 | echo "export RPM_BUILD_DIR" |
michael@13 | 339 | echo "export RPM_SOURCE_DIR" |
michael@13 | 340 | echo "set -x" |
michael@13 | 341 | echo "umask 022" |
michael@13 | 342 | echo "cd \$RPM_BUILD_DIR" |
michael@13 | 343 | ) | sed -e 's;%{\([^}]*\)};${\1};g' >$prolog |
michael@13 | 344 | |
michael@13 | 345 | # install package via RPM spec file by faking a |
michael@447 | 346 | # sufficiently enough RPM runtime environment |
michael@13 | 347 | runscript () { |
michael@13 | 348 | step=$1 |
michael@13 | 349 | script="$tmpdir/openpkg.boot.$step.sh" |
michael@13 | 350 | echo ". $prolog" >$script |
michael@13 | 351 | sed -e "/^%$step/,/^%/ p" -e 'd' <$spec | \ |
michael@13 | 352 | sed -e '/^%/d' | \ |
michael@13 | 353 | sed -e 's;%{SOURCE \([^ ]*\.tar[^ ]*\)};${RPM_DIST_DIR}/\1;g' \ |
michael@13 | 354 | -e 's;%{SOURCE \([^ ]*\)};${RPM_SOURCE_DIR}/\1;g' | \ |
michael@13 | 355 | sed -e 's;%{[?]\([^:}]*\):\([^}]*\)};${\1+\2};g' \ |
michael@13 | 356 | -e 's;%{![?]\([^:}]*\):\([^}]*\)};${\1-\2};g' \ |
michael@13 | 357 | -e 's;%{[?]\([^:}]*\)};${\1+""};g' \ |
michael@13 | 358 | -e 's;%{![?]\([^:}]*\)};${\1-""};g' \ |
michael@13 | 359 | -e 's;%{\([^}]*\)};${\1};g' >>$script |
michael@13 | 360 | echo "++ executing(%$step): sh $script" |
michael@13 | 361 | sh $script |
michael@13 | 362 | if [ $? -ne 0 ]; then |
michael@13 | 363 | rm -f $script |
michael@447 | 364 | echo "$0:ERROR: script returned nonnull value" |
michael@13 | 365 | exit 1 |
michael@13 | 366 | fi |
michael@13 | 367 | rm -f $script |
michael@13 | 368 | } |
michael@13 | 369 | runscript prep |
michael@13 | 370 | runscript build |
michael@13 | 371 | runscript install |
michael@13 | 372 | |
michael@13 | 373 | ## |
michael@13 | 374 | ## adjust build environment so that the installed |
michael@428 | 375 | ## "rpm" is actually usable, although it still resides in |
michael@13 | 376 | ## the temporary location instead of the real location. |
michael@13 | 377 | ## |
michael@13 | 378 | |
michael@13 | 379 | # suck in prolog in order to get variables from the spec file |
michael@13 | 380 | cwd=`pwd` |
michael@13 | 381 | . $prolog |
michael@13 | 382 | cd $cwd |
michael@13 | 383 | |
michael@13 | 384 | # suck in buildenv script in order to get musr/mgrp |
michael@13 | 385 | . $tmpdir/openpkg-*/.buildenv |
michael@13 | 386 | |
michael@13 | 387 | # create a custom "rpm" command |
michael@428 | 388 | # (and direct it to an adjusted macro set) |
michael@13 | 389 | echo "++ creating custom RPM command" |
michael@13 | 390 | rm -f $tmpdir/rpm >/dev/null 2>&1 |
michael@13 | 391 | rmdir $tmpdir/rpm >/dev/null 2>&1 |
michael@13 | 392 | if [ -d "$tmpdir/rpm" ]; then |
michael@13 | 393 | echo "$0:ERROR: directory $tmpdir/rpm exists, cannot create file with same name" |
michael@13 | 394 | exit 1 |
michael@13 | 395 | fi |
michael@13 | 396 | if [ -f "$tmpdir/rpm" ]; then |
michael@13 | 397 | echo "$0:ERROR: file $tmpdir/rpm exists, cannot override" |
michael@13 | 398 | exit 1 |
michael@13 | 399 | fi |
michael@13 | 400 | ( echo "#!/bin/sh" |
michael@13 | 401 | echo "exec $RPM_BUILD_ROOT$prefix/lib/openpkg/rpm \\" |
michael@428 | 402 | echo " --macros \"$tmpdir/rpm.1:$tmpdir/rpm.2:$tmpdir/rpm.3\" \\" |
michael@428 | 403 | echo " --rpmpopt \"$tmpdir/rpm.4:$tmpdir/rpm.5\" \\" |
michael@428 | 404 | echo " --rpmlua \"$tmpdir/rpm.6\" \\" |
michael@13 | 405 | echo " \"\$@\"" |
michael@13 | 406 | ) >$tmpdir/rpm |
michael@13 | 407 | chmod a+x $tmpdir/rpm |
michael@13 | 408 | |
michael@13 | 409 | # use an adjusted vendor macro set |
michael@428 | 410 | rm -f $tmpdir/rpm.1 >/dev/null 2>&1 |
michael@428 | 411 | sed <$RPM_BUILD_ROOT$prefix/lib/openpkg/rpmmacros >$tmpdir/rpm.1 \ |
michael@13 | 412 | -e "s;$prefix;$RPM_BUILD_ROOT$prefix;g" |
michael@13 | 413 | |
michael@13 | 414 | # override the vendor macro set |
michael@428 | 415 | rm -f $tmpdir/rpm.2 >/dev/null 2>&1 |
michael@428 | 416 | sed <`SOURCE rpmmacros` >$tmpdir/rpm.2 \ |
michael@13 | 417 | -e "s;@SUSR@;$susr;" \ |
michael@13 | 418 | -e "s;@SGRP@;$sgrp;" \ |
michael@13 | 419 | -e "s;@MUSR@;$musr;" \ |
michael@13 | 420 | -e "s;@MGRP@;$mgrp;" \ |
michael@13 | 421 | -e "s;@RUSR@;$rusr;" \ |
michael@13 | 422 | -e "s;@RGRP@;$rgrp;" \ |
michael@13 | 423 | -e "s;@NUSR@;$nusr;" \ |
michael@13 | 424 | -e "s;@NGRP@;$ngrp;" \ |
michael@13 | 425 | -e "s;@TAG@;$tag;" \ |
michael@428 | 426 | -e "s;@l_unprivileged@;$unprivileged;" \ |
michael@13 | 427 | -e "s;\\(%{l_prefix}/lib/openpkg/rpmtool\\);%{l_bash} \\1;g" \ |
michael@13 | 428 | -e "s;@l_prefix_static@;$prefix;g" \ |
michael@13 | 429 | -e "s;@l_prefix@;$RPM_BUILD_ROOT$prefix;g" \ |
michael@428 | 430 | -e "s;^%l_prefix\\([^_]\\);%l_prefix_INTERNAL\\1;g" \ |
michael@13 | 431 | -e "s;%{l_prefix};%{l_prefix_INTERNAL};g" \ |
michael@13 | 432 | -e "s;^\\(%_specdir *\\).*;\\1 `pwd`;" \ |
michael@13 | 433 | -e "s;^\\(%_sourcedir *\\).*;\\1 $distdir;" \ |
michael@13 | 434 | -e "s;^\\(%_builddir *\\).*;\\1 $tmpdir;" \ |
michael@13 | 435 | -e "s;^\\(%_tmppath *\\).*;\\1 $tmpdir;" \ |
michael@13 | 436 | -e "s;^\\(%_buildshell *\\).*;\\1 env -i OPENPKG_BOOT=1 %{l_build_shell_cmd} %{l_build_shell_opt};" \ |
michael@13 | 437 | -e "s;@l_build_path@;/bin:/sbin:/usr/bin:/usr/sbin;g" \ |
michael@13 | 438 | -e "s;@l_build_ldlp@;/usr/lib;g" \ |
michael@13 | 439 | -e "s;@l_build_ulim@;:;g" |
michael@13 | 440 | |
michael@428 | 441 | # provide some special overrides |
michael@428 | 442 | rm -f $tmpdir/rpm.3 >/dev/null 2>&1 |
michael@428 | 443 | ( echo "%l_prefix $prefix" |
michael@428 | 444 | echo "%l_rpm $tmpdir/rpm" |
michael@428 | 445 | echo "%__spec_install_pre %{nil}" |
michael@428 | 446 | echo "%__spec_clean_body %{nil}" |
michael@428 | 447 | echo "%__platform $RPM_BUILD_ROOT$prefix/etc/openpkg/platform" |
michael@428 | 448 | echo "%_integrity_spec_cfg $RPM_BUILD_ROOT$prefix/etc/openpkg/license.d/BOOT" |
michael@428 | 449 | echo "%_integrity_proc_lua $RPM_BUILD_ROOT$prefix/lib/openpkg/license.lua" |
michael@428 | 450 | echo "%_integrity_pkey_pgp $RPM_BUILD_ROOT$prefix/etc/openpkg/openpkg.com.pgp" |
michael@428 | 451 | ) >$tmpdir/rpm.3 |
michael@13 | 452 | |
michael@428 | 453 | # use an adjusted vendor POPT config |
michael@428 | 454 | rm -f $tmpdir/rpm.4 >/dev/null 2>&1 |
michael@428 | 455 | sed <$RPM_BUILD_ROOT$prefix/lib/openpkg/rpmpopt >$tmpdir/rpm.4 \ |
michael@428 | 456 | -e "s;$prefix;$RPM_BUILD_ROOT$prefix;g" |
michael@428 | 457 | |
michael@428 | 458 | # override the vendor POPT config |
michael@428 | 459 | rm -f $tmpdir/rpm.5 >/dev/null 2>&1 |
michael@428 | 460 | sed <$RPM_BUILD_ROOT$prefix/etc/openpkg/rpmpopt >$tmpdir/rpm.5 \ |
michael@428 | 461 | -e "s;@l_prefix@;$RPM_BUILD_ROOT$prefix;g" |
michael@428 | 462 | |
michael@428 | 463 | # use an adjusted vendor RPM Lua script |
michael@428 | 464 | rm -f $tmpdir/rpm.6 >/dev/null 2>&1 |
michael@428 | 465 | sed <$RPM_BUILD_ROOT$prefix/etc/openpkg/rpmlua >$tmpdir/rpm.6 \ |
michael@428 | 466 | -e "s;@l_prefix@;$RPM_BUILD_ROOT$prefix;g" |
michael@13 | 467 | |
michael@13 | 468 | ## |
michael@13 | 469 | ## now initialize the RPM database under the temporary install location |
michael@13 | 470 | ## |
michael@13 | 471 | |
michael@13 | 472 | echo "++ initializing RPM database" |
michael@13 | 473 | $RPM_BUILD_ROOT$prefix/lib/openpkg/bash \ |
michael@13 | 474 | $RPM_BUILD_ROOT$prefix/lib/openpkg/rpmdb \ |
michael@13 | 475 | --prefix=$RPM_BUILD_ROOT$prefix \ |
michael@13 | 476 | --dbpath=$RPM_BUILD_ROOT$prefix/RPM/DB \ |
michael@13 | 477 | --rpm=$tmpdir/rpm \ |
michael@13 | 478 | --build --quiet |
michael@13 | 479 | |
michael@13 | 480 | ## |
michael@447 | 481 | ## now turn over and reiterate over the RPM spec, but this time |
michael@13 | 482 | ## with the real RPM tool. |
michael@13 | 483 | ## |
michael@13 | 484 | |
michael@447 | 485 | echo "++ reiterating over RPM specification procedures" |
michael@13 | 486 | $tmpdir/rpm -bb $spec |
michael@13 | 487 | |
michael@13 | 488 | ## |
michael@13 | 489 | ## and finally overwrite the installation again, but this time by |
michael@13 | 490 | ## installing officially through the "rpm" tool. This way we achieve |
michael@13 | 491 | ## that RPM is remembered as an RPM package in its own database. We |
michael@13 | 492 | ## just have to make sure the package is relocated while installing. |
michael@13 | 493 | ## For this we could use --prefix=$RPM_BUILD_ROOT$prefix, but this |
michael@13 | 494 | ## would create an incorrect filelist for "rpm" in the database. |
michael@13 | 495 | ## Instead we use the --justdb option which means "rpm" behaves as it |
michael@13 | 496 | ## would install into the real location, but does not actually install |
michael@447 | 497 | ## anything. But as a side effect, the database is now correct. |
michael@13 | 498 | ## |
michael@13 | 499 | |
michael@13 | 500 | echo "++ overwriting RPM installation by installing via RPM itself" |
michael@428 | 501 | $tmpdir/rpm --install --justdb --replacepkgs --replacefiles --oldpackage --noscripts --notriggers --ignoresize \ |
michael@13 | 502 | $RPM_BUILD_ROOT$prefix/RPM/PKG/openpkg-*.rpm |
michael@13 | 503 | |
michael@13 | 504 | ## Puhhhh!!! what a tricky bootstrapping procedure. But now we are |
michael@13 | 505 | ## mostly finished. All we finally have to do is to roll a bootstrap |
michael@13 | 506 | ## tarball in addition to the binary RPM and save the stuff in a |
michael@13 | 507 | ## permanent location. |
michael@13 | 508 | |
michael@13 | 509 | v="$version-$release" |
michael@13 | 510 | t="`$tmpdir/rpm --eval '%{l_platform -p}-%{l_tag}'`" |
michael@13 | 511 | |
michael@13 | 512 | # find a reasonable destination directory for packages |
michael@428 | 513 | if [ -d ../pkg ]; then |
michael@428 | 514 | pkgdir=../pkg |
michael@428 | 515 | elif [ -d ../../pkg/openpkg ]; then |
michael@428 | 516 | pkgdir=../../pkg/openpkg |
michael@13 | 517 | else |
michael@428 | 518 | pkgdir=.. |
michael@13 | 519 | fi |
michael@13 | 520 | |
michael@447 | 521 | # create Source RPM file |
michael@13 | 522 | echo "++ creating bootstrap source RPM file" |
michael@428 | 523 | $tmpdir/rpm -bs --nodeps --define "_srcrpmdir $pkgdir" $spec |
michael@13 | 524 | |
michael@447 | 525 | # create Binary RPM file |
michael@428 | 526 | # (notice that there might be a discrepancy in the platform |
michael@428 | 527 | # identification, so we have to copy the source via wildcard) |
michael@13 | 528 | echo "++ creating bootstrap binary RPM file" |
michael@428 | 529 | cp $RPM_BUILD_ROOT$prefix/RPM/PKG/openpkg-*.rpm $pkgdir/openpkg-$v.$t.rpm |
michael@428 | 530 | rm -f $RPM_BUILD_ROOT$prefix/RPM/PKG/openpkg-*.rpm |
michael@13 | 531 | |
michael@447 | 532 | # create binary bootstrap file |
michael@13 | 533 | echo "++ creating bootstrap binary shell script" |
michael@13 | 534 | files=`cat $spec |\ |
michael@13 | 535 | sed -e '1,/%files/d' -e '/%clean/,$d' |\ |
michael@13 | 536 | grep -v '^ *$' | grep -v '%defattr' |\ |
michael@13 | 537 | sed -e 's;%config(noreplace) *;;' -e 's;%config *;;' -e 's;%ghost *;;' -e 's;%attr([^)]*) *;;' \ |
michael@13 | 538 | -e 's;%dir *;;' -e 's;%{l_prefix}/;;' -e 's;^ *;;' -e "s;%{V_rpm};${V_rpm};"` |
michael@428 | 539 | rm -f $RPM_BUILD_ROOT$prefix/RPM/DB/__db.[0-9]* |
michael@13 | 540 | db_files="" |
michael@13 | 541 | for db_file in \ |
michael@13 | 542 | `$RPM_BUILD_ROOT$prefix/lib/openpkg/bash \ |
michael@13 | 543 | $RPM_BUILD_ROOT$prefix/lib/openpkg/rpmdb \ |
michael@13 | 544 | --prefix=$RPM_BUILD_ROOT$prefix \ |
michael@13 | 545 | --dbpath=$RPM_BUILD_ROOT$prefix/RPM/DB \ |
michael@428 | 546 | --rpm=$tmpdir/rpm \ |
michael@428 | 547 | --list --quiet` VERSION; do |
michael@13 | 548 | db_files="$db_files RPM/DB/$db_file" |
michael@13 | 549 | done |
michael@13 | 550 | chmod 644 $RPM_BUILD_ROOT$prefix/RPM/DB/* |
michael@13 | 551 | files="$files $db_files" |
michael@13 | 552 | ( cd $RPM_BUILD_ROOT$prefix |
michael@13 | 553 | $RPM_BUILD_ROOT$prefix/lib/openpkg/tar --no-recursion -cf - $files |
michael@13 | 554 | ) | $RPM_BUILD_ROOT$prefix/lib/openpkg/bzip2 -9 \ |
michael@13 | 555 | >$RPM_BUILD_ROOT$prefix/openpkg.tar.bz2 |
michael@13 | 556 | cp -p $RPM_BUILD_ROOT$prefix/lib/openpkg/tar \ |
michael@13 | 557 | $RPM_BUILD_ROOT$prefix/openpkg.tar |
michael@13 | 558 | cp -p $RPM_BUILD_ROOT$prefix/lib/openpkg/bzip2 \ |
michael@13 | 559 | $RPM_BUILD_ROOT$prefix/openpkg.bzip2 |
michael@13 | 560 | l_platform=`$tmpdir/rpm --eval '%{l_platform -p}'` |
michael@13 | 561 | l_version=`$tmpdir/rpm -q --qf '%{version}' openpkg` |
michael@13 | 562 | release_sh=`SOURCE release.sh` |
michael@13 | 563 | l_release=`sh $release_sh -r "$l_version" -F "%t"` |
michael@13 | 564 | cat $spec |\ |
michael@13 | 565 | sed -e "/^%pre$/,/^%/ p" -e 'd' |\ |
michael@13 | 566 | sed -e '/^%/d' -e 's/^ //' |\ |
michael@13 | 567 | sed -e 's;%{[?]l_\([^:}]*\):\([^}]*\)};${\1+\2};g' \ |
michael@13 | 568 | -e 's;%{![?]l_\([^:}]*\):\([^}]*\)};${\1-\2};g' \ |
michael@13 | 569 | -e 's;%{[?]l_\([^:}]*\)};${\1+""};g' \ |
michael@13 | 570 | -e 's;%{![?]l_\([^:}]*\)};${\1-""};g' \ |
michael@13 | 571 | -e 's;%{l_\([^}]*\)};${\1};g' \ |
michael@13 | 572 | >$tmpdir/rpm.pre |
michael@13 | 573 | cat $spec |\ |
michael@13 | 574 | sed -e "/^%post$/,/^%/ p" -e 'd' |\ |
michael@13 | 575 | sed -e '/^%/d' -e 's/^ //' |\ |
michael@13 | 576 | sed -e 's;%{[?]l_\([^:}]*\):\([^}]*\)};${\1+\2};g' \ |
michael@13 | 577 | -e 's;%{![?]l_\([^:}]*\):\([^}]*\)};${\1-\2};g' \ |
michael@13 | 578 | -e 's;%{[?]l_\([^:}]*\)};${\1+""};g' \ |
michael@13 | 579 | -e 's;%{![?]l_\([^:}]*\)};${\1-""};g' \ |
michael@13 | 580 | -e 's;%{l_\([^}]*\)};${\1};g' \ |
michael@13 | 581 | >$tmpdir/rpm.post |
michael@428 | 582 | sed <`SOURCE etc.wrapbin.sh` \ |
michael@13 | 583 | -e "s;@SUSR@;$susr;" -e "s;@SGRP@;$sgrp;" \ |
michael@13 | 584 | -e "s;@MUSR@;$musr;" -e "s;@MGRP@;$mgrp;" \ |
michael@13 | 585 | -e "s;@RUSR@;$rusr;" -e "s;@RGRP@;$rgrp;" \ |
michael@13 | 586 | -e "s;@NUSR@;$nusr;" -e "s;@NGRP@;$ngrp;" \ |
michael@13 | 587 | -e "s;@SUID@;$suid;" -e "s;@SGID@;$sgid;" \ |
michael@13 | 588 | -e "s;@MUID@;$muid;" -e "s;@MGID@;$mgid;" \ |
michael@13 | 589 | -e "s;@RUID@;$ruid;" -e "s;@RGID@;$rgid;" \ |
michael@13 | 590 | -e "s;@NUID@;$nuid;" -e "s;@NGID@;$ngid;" \ |
michael@13 | 591 | -e "s;@l_prefix@;$prefix;" \ |
michael@13 | 592 | -e "s;@l_platform@;$l_platform;" \ |
michael@13 | 593 | -e "s;@l_release@;$l_release;" \ |
michael@13 | 594 | -e "s;@l_version@;$l_version;" \ |
michael@428 | 595 | -e "s;@l_unprivileged@;$unprivileged;" \ |
michael@13 | 596 | -e "/^@PRE@/r $tmpdir/rpm.pre" \ |
michael@13 | 597 | -e "/^@POST@/r $tmpdir/rpm.post" |\ |
michael@13 | 598 | sed -e '/^@PRE@/d' -e '/^@POST@/d' >$tmpdir/openpkg.boot.tmp |
michael@13 | 599 | echo . | awk '{ |
michael@450 | 600 | for (i = 0; i < 8192*2; i++) { |
michael@13 | 601 | printf(" "); |
michael@13 | 602 | } |
michael@13 | 603 | }' >>$tmpdir/openpkg.boot.tmp |
michael@428 | 604 | rm -f $pkgdir/openpkg-$v.$t.sh |
michael@450 | 605 | dd if=$tmpdir/openpkg.boot.tmp bs=8192 count=10 \ |
michael@428 | 606 | of=$pkgdir/openpkg-$v.$t.sh 2>/dev/null |
michael@13 | 607 | rm -f $tmpdir/openpkg.boot.tmp |
michael@13 | 608 | ( cd $RPM_BUILD_ROOT$prefix |
michael@13 | 609 | $RPM_BUILD_ROOT$prefix/lib/openpkg/tar --no-recursion -cf - \ |
michael@13 | 610 | openpkg.tar openpkg.bzip2 openpkg.tar.bz2 |
michael@428 | 611 | ) >>$pkgdir/openpkg-$v.$t.sh |
michael@13 | 612 | |
michael@13 | 613 | # cleanup |
michael@13 | 614 | echo "++ cleaning up" |
michael@13 | 615 | cp `SOURCE rpmtool` $tmpdir/rpmtool |
michael@13 | 616 | rm -rf $RPM_BUILD_ROOT |
michael@13 | 617 | rm -rf $tmpdir/$name-$version |
michael@428 | 618 | rm -f $tmpdir/rpm $tmpdir/rpm.[123456] $tmpdir/rpm.pre $tmpdir/rpm.post |
michael@13 | 619 | rm -f $prolog |
michael@13 | 620 | |
michael@13 | 621 | # final hint about results |
michael@428 | 622 | echo "++ resulting OpenPKG Framework bootstrap package files:" |
michael@428 | 623 | (cd $pkgdir; ls -l openpkg-$v.$t.sh openpkg-$v.$t.rpm openpkg-$v.src.rpm) |
michael@13 | 624 | set +x |
michael@428 | 625 | ( echo "You have successfully built the OpenPKG Framework from scratch" |
michael@13 | 626 | echo "for prefix $prefix on target platform $l_platform. The input" |
michael@428 | 627 | echo "was the OpenPKG Framework Source Bootstrap Package in file:" |
michael@13 | 628 | echo "" |
michael@13 | 629 | echo " openpkg-$v.src.sh" |
michael@13 | 630 | echo "" |
michael@13 | 631 | echo "The results are the following three files:" |
michael@13 | 632 | echo "" |
michael@13 | 633 | echo " openpkg-$v.src.rpm" |
michael@13 | 634 | echo " openpkg-$v.$t.rpm" |
michael@13 | 635 | echo " openpkg-$v.$t.sh" |
michael@13 | 636 | echo "" |
michael@428 | 637 | echo "The first result file is the OpenPKG Framework Source RPM Package," |
michael@428 | 638 | echo "containing just the same contents than the OpenPKG Framework Source" |
michael@428 | 639 | echo "Bootstrap Package, but now in RPM format. Optionally use this after" |
michael@428 | 640 | echo "the installation of the OpenPKG Framework Binary Bootstrap Package" |
michael@13 | 641 | echo "if you want to rebuild from source again (but then with RPM" |
michael@13 | 642 | echo "available)." |
michael@13 | 643 | echo "" |
michael@428 | 644 | echo "The second result file is the OpenPKG Framework Binary RPM Package," |
michael@13 | 645 | echo "containing the installation files in RPM format for the OpenPKG" |
michael@13 | 646 | echo "instance $prefix. Optionally use this after the installation of" |
michael@428 | 647 | echo "the OpenPKG Framework Binary Bootstrap Package if you want (usually" |
michael@428 | 648 | echo "for fixing something) to reinstall (but then with RPM available)." |
michael@13 | 649 | echo "" |
michael@428 | 650 | echo "The third result file is the OpenPKG Framework Binary Bootstrap" |
michael@428 | 651 | echo "Package, containing the installation files as a self-extracting" |
michael@428 | 652 | echo "shell script for the OpenPKG instance $prefix. Use this in YOUR" |
michael@428 | 653 | echo "NEXT STEP to initially create the OpenPKG instance from scratch." |
michael@13 | 654 | echo "Hence, proceed now by running the following command:" |
michael@13 | 655 | echo "" |
michael@13 | 656 | cusr=`(id -un) 2>/dev/null ||\ |
michael@13 | 657 | (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ |
michael@13 | 658 | (whoami) 2>/dev/null ||\ |
michael@13 | 659 | (who am i | cut "-d " -f1) 2>/dev/null ||\ |
michael@13 | 660 | echo $LOGNAME` |
michael@13 | 661 | if [ ".$musr.$rusr.$nusr" = ".$cusr.$cusr.$cusr" -o ".$cusr" = ".root" ]; then |
michael@13 | 662 | echo " \$ sh openpkg-$v.$t.sh" |
michael@13 | 663 | else |
michael@13 | 664 | echo " \$ su root -c \"sh openpkg-$v.$t.sh\"" |
michael@13 | 665 | fi |
michael@13 | 666 | ) | sh $tmpdir/rpmtool msg -b -t info |
michael@13 | 667 | rm -f $tmpdir/rpmtool |
michael@13 | 668 |