Browse Source

- add OSSP uuid and companion uuid.sh frontend to provide new <prefix>/etc/openpkg/uuid - embed %post section from openpkg.spec into bootstrap script *.src.sh

master
parent
commit
73e85c5f44
  1. 2
      openpkg/HISTORY
  2. 1
      openpkg/README
  3. 16
      openpkg/aux.wrapbin.sh
  4. 20
      openpkg/openpkg.boot
  5. 38
      openpkg/openpkg.spec
  6. 11
      openpkg/rc.openpkg
  7. 286
      openpkg/uuid.sh

2
openpkg/HISTORY

@ -2,6 +2,8 @@
2004
====
20040120 add OSSP uuid and companion uuid.sh frontend to provide new <prefix>/etc/openpkg/uuid
20040120 embed %post section from openpkg.spec into bootstrap script *.src.sh
20040120 adjust widths in "rpm -qplv" output to allow longer owner/group
20040120 regenerate rpm.patch.* files with latest CVS 1.12.x
20040113 add %status to rc.openpkg; this prevents warnings when no package provides a status

1
openpkg/README

@ -19,6 +19,7 @@
patch-2.5.9.tar.gz ...... untouched distribution tarball of the GNU patch tool
bash-2.05b.tar.gz ....... untouched distribution tarball of the GNU bash tool
tar-1.13.25.tar.gz ...... untouched distribution tarball of the GNU tar tool
uuid-0.9.4.tar.gz ....... untouched distribution tarball of the OSSP uuid tool
curl-7.10.8.tar.gz ...... untouched distribution tarball of the cURL tool
bzip2-1.0.2.tar.gz ...... untouched distribution tarball of the BZIP2 library
zlib-1.2.1.tar.gz ....... untouched distribution tarball of the ZLIB library

16
openpkg/aux.wrapbin.sh

@ -168,6 +168,22 @@ echo "++ fixating OpenPKG instance filesystem hierarchy"
grep -v '(none)' | sed 's/^fixate .../fixate /' | sed -e "s; ::\\(.\\)@l_prefix@; \\1$l_prefix;"
) | sh 2>/dev/null || true
# running the embedded %post script
echo "++ post-processing OpenPKG bootstrap installation"
prefix="$l_prefix"
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@'
set -- 1 # emulate RPM's $1 when executing scripts
# ---- BEGIN EMBEDDED %post SCRIPT ----
@POST@
# ---- END EMBEDDED %post SCRIPT ----
# display final information
( echo "Congratulations!"
echo ""

20
openpkg/openpkg.boot

@ -538,7 +538,7 @@ echo "++ creating bootstrap binary shell script"
files=`cat $spec |\
sed -e '1,/%files/d' -e '/%clean/,$d' |\
grep -v '^ *$' | grep -v '%defattr' |\
sed -e 's;%config(noreplace) *;;' -e 's;%config *;;' \
sed -e 's;%config(noreplace) *;;' -e 's;%config *;;' -e 's;%ghost *;;' \
-e 's;%dir *;;' -e 's;%{l_prefix}/;;' -e 's;^ *;;' -e "s;%{V_rpm};${V_rpm};"`
db_files=""
for db_file in \
@ -580,8 +580,17 @@ cat $spec |\
-e 's;%{![?]l_\([^:}]*\):\([^}]*\)};${\1-\2};g' \
-e 's;%{[?]l_\([^:}]*\)};${\1+""};g' \
-e 's;%{![?]l_\([^:}]*\)};${\1-""};g' \
-e 's;%{l_\([^}]*\)};${\1};g' >>$script \
-e 's;%{l_\([^}]*\)};${\1};g' \
>$tmpdir/rpm.pre
cat $spec |\
sed -e "/^%post$/,/^%/ p" -e 'd' |\
sed -e '/^%/d' -e 's/^ //' |\
sed -e 's;%{[?]l_\([^:}]*\):\([^}]*\)};${\1+\2};g' \
-e 's;%{![?]l_\([^:}]*\):\([^}]*\)};${\1-\2};g' \
-e 's;%{[?]l_\([^:}]*\)};${\1+""};g' \
-e 's;%{![?]l_\([^:}]*\)};${\1-""};g' \
-e 's;%{l_\([^}]*\)};${\1};g' \
>$tmpdir/rpm.post
sed <`SOURCE aux.wrapbin.sh` \
-e "s;@SUSR@;$susr;" -e "s;@SGRP@;$sgrp;" \
-e "s;@MUSR@;$musr;" -e "s;@MGRP@;$mgrp;" \
@ -595,8 +604,9 @@ sed <`SOURCE aux.wrapbin.sh` \
-e "s;@l_platform@;$l_platform;" \
-e "s;@l_release@;$l_release;" \
-e "s;@l_version@;$l_version;" \
-e "/^@PRE@/r $tmpdir/rpm.pre" |\
sed -e '/^@PRE@/d' >$tmpdir/openpkg.boot.tmp
-e "/^@PRE@/r $tmpdir/rpm.pre" \
-e "/^@POST@/r $tmpdir/rpm.post" |\
sed -e '/^@PRE@/d' -e '/^@POST@/d' >$tmpdir/openpkg.boot.tmp
echo . | awk '{
for (i = 0; i < 8192; i++) {
printf(" ");
@ -616,7 +626,7 @@ echo "++ cleaning up"
cp `SOURCE rpmtool` $tmpdir/rpmtool
rm -rf $RPM_BUILD_ROOT
rm -rf $tmpdir/$name-$version
rm -f $tmpdir/rpm $tmpdir/rpm.[123] $tmpdir/.popt $tmpdir/rpm.pre
rm -f $tmpdir/rpm $tmpdir/rpm.[123] $tmpdir/.popt $tmpdir/rpm.pre $tmpdir/rpm.post
rm -f $prolog
# final hint about results

38
openpkg/openpkg.spec

@ -52,6 +52,7 @@
%define V_patch 2.5.9
%define V_tar 1.13.25
%define V_bash 2.05b
%define V_uuid 0.9.4
# package information
Name: openpkg
@ -122,6 +123,8 @@ Source52: rpm-config.sh
Source53: rpm-config.pod
Source54: rpm-config.8
Source55: rpmdb
Source56: ftp://ftp.ossp.org/pkg/lib/uuid/uuid-%{V_uuid}.tar.gz
Source57: uuid.sh
# build information
Prefix: %{l_prefix}
@ -148,7 +151,7 @@ Provides: openpkg = 1.3.1-1.3.1
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},
BeeCrypt %{V_beecrypt}
OSSP uuid %{V_uuid}, BeeCrypt %{V_beecrypt}
%prep
# skip in bootstrap phase 2 (see openpkg.boot)
@ -374,6 +377,7 @@ Provides: openpkg = 1.3.1-1.3.1
${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
@ -520,6 +524,17 @@ Provides: openpkg = 1.3.1-1.3.1
# display verbosity header
set +x; VERBOSE "BUILD: Build cURL (URL Fetching Tool)"
# 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 $?
# build cURL tool
( cd curl-%{V_curl}
( echo 'ac_cv_header_openssl_engine_h=no'
@ -810,6 +825,15 @@ Provides: openpkg = 1.3.1-1.3.1
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}/lib/openpkg/uuid.sh
chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/uuid.sh
sed -e "s;@l_prefix@;%{l_prefix};g" \
-e "s;@l_musr@;%{l_musr};g" \
-e "s;@l_mgrp@;%{l_mgrp};g" \
@ -892,6 +916,10 @@ Provides: openpkg = 1.3.1-1.3.1
>$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` \
@ -943,6 +971,7 @@ Provides: openpkg = 1.3.1-1.3.1
%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
@ -991,6 +1020,8 @@ Provides: openpkg = 1.3.1-1.3.1
%{l_prefix}/lib/openpkg/bzip2
%{l_prefix}/lib/openpkg/config.guess
%{l_prefix}/lib/openpkg/config.sub
%{l_prefix}/lib/openpkg/uuid
%{l_prefix}/lib/openpkg/uuid.sh
%{l_prefix}/lib/openpkg/curl
%{l_prefix}/lib/openpkg/file
%{l_prefix}/lib/openpkg/gzip
@ -1678,6 +1709,9 @@ Provides: openpkg = 1.3.1-1.3.1
fi
%post
# update or initially create OpenPKG UUID configuration
%{l_prefix}/lib/openpkg/uuid.sh 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
@ -1693,7 +1727,7 @@ Provides: openpkg = 1.3.1-1.3.1
%{l_prefix}/lib/openpkg/rpmdb --quiet --fixate
# check RPM database for upgrade requirements
if [ ".$V_rpm_old" != ".$V_rpm_new" ]; then
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

11
openpkg/rc.openpkg

@ -16,6 +16,17 @@
echo "openpkg_usable=\"$openpkg_usable\""
echo "openpkg_active=\"$openpkg_active\""
%info -o
@l_prefix@/lib/openpkg/uuid.sh info
%start
rcService openpkg enable yes || exit 0
@l_prefix@/lib/openpkg/uuid.sh update >/dev/null 2>&1 || true
%daily
rcService openpkg enable yes || exit 0
@l_prefix@/lib/openpkg/uuid.sh update >/dev/null 2>&1 || true
%env -p0
rcService openpkg enable yes || exit 0

286
openpkg/uuid.sh

@ -0,0 +1,286 @@
#!@l_prefix@/lib/openpkg/bash
##
## uuid -- OpenPKG UUID Update Utility
## Copyright (c) 2004 The OpenPKG Project <http://www.openpkg.org/>
## Copyright (c) 2004 Ralf S. Engelschall <rse@engelschall.com>
## Copyright (c) 2004 Cable & Wireless <http://www.cw.com/>
##
## Permission to use, copy, modify, and distribute this software for
## any purpose with or without fee is hereby granted, provided that
## the above copyright notice and this permission notice appear in all
## copies.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
# configuration
prefix="@l_prefix@"
musr="@l_musr@"
mgrp="@l_mgrp@"
prog_rpm="$prefix/bin/rpm"
prog_shtool="$prefix/lib/openpkg/shtool"
prog_uuid="$prefix/lib/openpkg/uuid"
file_uuid="$prefix/etc/openpkg/uuid"
# minimum command line parsing
opt_v=no
opt_m=no
while [ 1 ]; do
case "$1" in
-v | --verbose ) opt_v=yes; shift ;;
-m | --multicast ) opt_m=yes; shift ;;
* ) break ;;
esac
done
# Prepare Static Information
do_prepare () {
# official OpenPKG OID
OID_OPKG="1.3.6.1.4.1.18749.4.1"
# special UUIDs for OpenPKG OID-based namespaces
UUID_NS_INSTANCE=`$prog_uuid -v3 ns:OID "$OID_OPKG.1"`
UUID_NS_PLATFORM=`$prog_uuid -v3 ns:OID "$OID_OPKG.2"`
# special "Nil UUID"
UUID_NIL="00000000-0000-0000-0000-000000000000"
}
# Query Dynamic Information
do_query () {
# query RPM information
query=":"
for var in \
l_openpkg_release \
l_prefix \
l_susr l_suid l_sgrp l_sgid \
l_musr l_muid l_mgrp l_mgid \
l_rusr l_ruid l_rgrp l_rgid \
l_nusr l_nuid l_ngrp l_ngid; do
query="$query; `echo $var | sed -e 's;^l_;Q_;'`=\"%{$var}\""
done
eval `$prog_rpm --eval "$query" 2>/dev/null`
# query OS information
Q_platform=`$prog_shtool platform --type=binary 2>/dev/null`
if [ ".$Q_platform" = . ]; then
Q_platform="unknown"
fi
Q_hostname=`$prog_shtool echo -e '%h%d' 2>/dev/null`
if [ ".$Q_hostname" = . ]; then
Q_hostname="unknown"
fi
Q_ipaddr=""
ifconfig=`$prog_shtool path -p "/sbin:/usr/sbin:/bin:/usr/bin:$PATH" ifconfig`
if [ ".$ifconfig" != . ]; then
ips=`$ifconfig -a 2>&1 | grep 'inet' | \
sed -e 's;inet6;inet;g' \
-e 's;inet addr:;inet ;' \
-e 's;^;X;' \
-e 's;^X.*inet *\([^ ][^ ]*\).*$;\1;' \
-e 's;^X.*;;' | \
sort`
for ip in $ips; do
if [ ".$Q_ipaddr" = . ]; then
Q_ipaddr="$ip"
else
Q_ipaddr="$Q_ipaddr,$ip"
fi
done
fi
if [ ".$Q_ipaddr" = . ]; then
Q_ipaddr="unknown"
fi
}
# Load Configuration
do_load () {
# start with reasonable defaults
UUID_REGISTRY="$UUID_NIL"
UUID_INSTANCE="$UUID_NIL"
UUID_PLATFORM="$UUID_NIL"
# load configuration (and override defaults)
if [ -r $file_uuid ]; then
if [ ".$opt_v" = .yes ]; then
echo "$0: loading UUID configuration file ($file_uuid)"
fi
. $file_uuid
fi
# remember whether something was changed
changed=no
}
# Save Configuration
do_save () {
if [ ".$changed" = .yes ]; then
# save configuration
if [ ".$opt_v" = .yes ]; then
echo "$0: saving UUID configuration file ($file_uuid)"
fi
if [ -f $file_uuid ] && [ ! -w $file_uuid ]; then
echo "$0:ERROR: cannot write to $file_uuid" 1>&2
exit 1
fi
( echo "UUID_REGISTRY=\"$UUID_REGISTRY\""
echo "UUID_INSTANCE=\"$UUID_INSTANCE\""
echo "UUID_PLATFORM=\"$UUID_PLATFORM\""
) >$file_uuid.new || exit $?
n=`egrep 'UUID_(REGISTRY|INSTANCE|PLATFORM)="[0-9a-f-]*"' \
$file_uuid.new | wc -l | awk '{ print $1; }'`
if [ ".$n" != .3 ]; then
echo "$0:ERROR: failed to update $file_uuid" 1>&2
rm -f $file_uuid.new
exit 1
fi
cp $file_uuid.new $file_uuid || exit $?
rm -f $file_uuid.new || true
chown $musr:$mgrp $file_uuid >/dev/null 2>&1 || true
chmod 644 $file_uuid >/dev/null 2>&1 || true
# remember that no more changes exist
changed=no
fi
}
# Reset UUIDs
do_reset () {
# reset all UUIDs to the "Nil UUID"
if [ ".$UUID_REGISTRY" != ".$UUID_NIL" ]; then
UUID_REGISTRY="$UUID_NIL"
changed=yes
fi
if [ ".$UUID_INSTANCE" != ".$UUID_NIL" ]; then
UUID_INSTANCE="$UUID_NIL"
changed=yes
fi
if [ ".$UUID_PLATFORM" != ".$UUID_NIL" ]; then
UUID_PLATFORM="$UUID_NIL"
changed=yes
fi
}
# Update UUIDs
do_update () {
# update registry UUID
if [ ".$UUID_REGISTRY" = ".$UUID_NIL" ]; then
opt=""
if [ ".$opt_m" = .yes ]; then
opt="-m"
fi
if [ ".$opt_v" = .yes ]; then
echo "$0: calculating OpenPKG Registry UUID (UUID_REGISTRY):"
echo "$0: << $prog_uuid -v1 $opt"
fi
UUID_REGISTRY=`$prog_uuid -v1 $opt`
if [ ".$opt_v" = .yes ]; then
echo "$0: >> $UUID_REGISTRY (NOT REPEATABLE)"
fi
changed=yes
fi
# update instance UUID
name="${Q_openpkg_release}"
name="$name:${Q_prefix}"
name="$name:${Q_susr}:${Q_suid}:${Q_sgrp}:${Q_sgid}"
name="$name:${Q_musr}:${Q_muid}:${Q_mgrp}:${Q_mgid}"
name="$name:${Q_rusr}:${Q_ruid}:${Q_rgrp}:${Q_rgid}"
name="$name:${Q_nusr}:${Q_nuid}:${Q_ngrp}:${Q_ngid}"
if [ ".$opt_v" = .yes ]; then
echo "$0: calculating OpenPKG Instance UUID (UUID_INSTANCE):"
echo "$0: << $prog_uuid -v3 \"$UUID_NS_INSTANCE\" \"$name\""
fi
uuid=`$prog_uuid -v3 "$UUID_NS_INSTANCE" "$name"`
if [ ".$opt_v" = .yes ]; then
echo "$0: >> $uuid"
fi
if [ ".$UUID_INSTANCE" != ".$uuid" ]; then
UUID_INSTANCE="$uuid"
changed=yes
fi
# update platform UUID
name="${Q_platform}"
name="$name:${Q_hostname}"
name="$name:${Q_ipaddr}"
if [ ".$opt_v" = .yes ]; then
echo "$0: calculating OpenPKG Platform UUID (UUID_PLATFORM):"
echo "$0: << $prog_uuid -v3 \"$UUID_NS_PLATFORM\" \"$name\""
fi
uuid=`$prog_uuid -v3 "$UUID_NS_PLATFORM" "$name"`
if [ ".$opt_v" = .yes ]; then
echo "$0: >> $uuid"
fi
if [ ".$UUID_PLATFORM" != ".$uuid" ]; then
UUID_PLATFORM="$uuid"
changed=yes
fi
}
# Info about input and resulting UUIDs
do_info () {
echo "OpenPKG Summary of Identification Information"
echo "============================================="
echo ""
echo "OpenPKG Registry"
time=""; clock=""; node=""
eval `$prog_uuid -d "$UUID_REGISTRY" 2>/dev/null |\
sed -e 's/^/X/' \
-e 's/X.*time: *\(.*\)$/time="\1";/' \
-e 's/X.*clock: *\(.*\)$/clock="\1";/' \
-e 's/X.*node: *\(.*\)$/node="\1";/' \
-e 's/^X.*//'`
echo " System Time: ${time:-unknown}"
echo " System Clock Sequence: ${clock:-unknown}"
echo " System Node Address: ${node:-unknown}"
echo " UUID_REGISTRY: $UUID_REGISTRY"
echo ""
echo "OpenPKG Instance"
echo " Release: ${Q_openpkg_release}"
echo " Prefix: ${Q_prefix}"
echo " Super Account: ${Q_susr}(${Q_suid}):${Q_sgrp}(${Q_sgid})"
echo " Management Account: ${Q_musr}(${Q_muid}):${Q_mgrp}(${Q_mgid})"
echo " Restricted Account: ${Q_rusr}(${Q_ruid}):${Q_rgrp}(${Q_rgid})"
echo " Nonprivileged Account: ${Q_nusr}(${Q_nuid}):${Q_ngrp}(${Q_ngid})"
echo " UUID_INSTANCE: $UUID_INSTANCE"
echo ""
echo "OpenPKG Platform"
echo " Platform Id: $Q_platform"
echo " Host Name: $Q_hostname"
n=1
for ip in `echo "$Q_ipaddr" | sed -e 's;,; ;g'`; do
echo . | awk '{ printf(" Host IP Address %-6s %s\n", num, ip); }' num="#$n" ip="$ip"
n=`expr $n + 1`
done
echo " UUID_PLATFORM: $UUID_PLATFORM"
echo ""
echo "(run \"$0 --verbose update\" to reproduce the UUID generation)"
}
# Command Line Dispatching
cmd="$1"
shift
case "$cmd" in
reset )
do_prepare; do_load; do_reset; do_save
;;
update )
do_prepare; do_query; do_load; do_update; do_save
;;
info )
do_prepare; do_query; do_load; do_info
;;
esac
Loading…
Cancel
Save