openpkg/uuid.sh

Sun, 29 May 2011 16:29:06 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sun, 29 May 2011 16:29:06 +0200
changeset 344
e33c1efbd60f
child 428
f880f219c566
permissions
-rw-r--r--

Update, correct, improve build configuration and packaging logic.
Update to new version of vendor software, bump copyright date, remove implicit
gcc dependency, add comments for Trolltech bug tracking, correct enforced
dynamic library linkage, and install mysterious process stub binary.

     1 #!@l_prefix@/lib/openpkg/bash
     2 ##
     3 ##  uuid -- OpenPKG UUID Update Utility
     4 ##  Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
     5 ##  Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
     6 ##
     7 ##  Permission to use, copy, modify, and distribute this software for
     8 ##  any purpose with or without fee is hereby granted, provided that
     9 ##  the above copyright notice and this permission notice appear in all
    10 ##  copies.
    11 ##
    12 ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    13 ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    14 ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    15 ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    16 ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    17 ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    18 ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    19 ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    20 ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    21 ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    22 ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    23 ##  SUCH DAMAGE.
    24 ##
    26 #   configuration
    27 prefix="@l_prefix@"
    28 musr="@l_musr@"
    29 mgrp="@l_mgrp@"
    30 prog_rpm="$prefix/libexec/openpkg/rpm"
    31 prog_shtool="$prefix/lib/openpkg/shtool"
    32 prog_miniperl="$prefix/lib/openpkg/miniperl"
    33 prog_uuid="$prefix/lib/openpkg/uuid"
    34 file_uuid="$prefix/etc/openpkg/uuid"
    36 #   minimum command line parsing
    37 opt_v=no
    38 opt_m=no
    39 while [ 1 ]; do
    40     case "$1" in
    41         -v | --verbose   ) opt_v=yes; shift ;;
    42         -m | --multicast ) opt_m=yes; shift ;;
    43         * ) break ;;
    44     esac
    45 done
    47 #   special "Nil UUID"
    48 UUID_NIL="00000000-0000-0000-0000-000000000000"
    50 #   Query Dynamic Information
    51 do_query () {
    52     #   query RPM information
    53     query=":"
    54     for var in \
    55         l_openpkg_release \
    56         l_prefix \
    57         l_susr l_suid l_sgrp l_sgid \
    58         l_musr l_muid l_mgrp l_mgid \
    59         l_rusr l_ruid l_rgrp l_rgid \
    60         l_nusr l_nuid l_ngrp l_ngid; do
    61         query="$query; `echo $var | sed -e 's;^l_;Q_;'`=\"%{$var}\""
    62     done
    63     eval `$prog_rpm --eval "$query" 2>/dev/null`
    65     #   query OS information
    66     Q_platform=`$prog_shtool platform --type=binary 2>/dev/null |\
    67         sed -e 's;^\([^-][^-]*-[^.-][^.-]*\)\..*$;\1;'`
    68     if [ ".$Q_platform" = . ]; then
    69         Q_platform="unknown"
    70     fi
    71     Q_discriminator=`$prog_uuid -v1 | $prog_uuid -d -- - | awk '/node:.*global unicast/ { printf("mac:%s", $2); }'`
    72     if [ ".$Q_discriminator" = . ]; then
    73         Q_discriminator=`$prog_miniperl -e 'if (-f "/etc/openpkg") { printf("inode:%s", (stat("/etc/openpkg"))[1]); }' 2>/dev/null`
    74         if [ ".$Q_discriminator" = . ]; then
    75             Q_discriminator=`$prog_shtool echo -e 'fqdn:%h%d' 2>/dev/null`
    76         fi
    77     fi
    78 }
    80 #  Load Configuration
    81 do_load () {
    82     #   start with reasonable defaults
    83     UUID_REGISTRY="$UUID_NIL"
    84     UUID_INSTANCE="$UUID_NIL"
    85     UUID_PLATFORM="$UUID_NIL"
    87     #   load configuration (and override defaults)
    88     if [ -r $file_uuid ]; then
    89         if [ ".$opt_v" = .yes ]; then
    90             echo "uuid: loading UUID configuration file ($file_uuid)"
    91         fi
    92         . $file_uuid
    93     fi
    95     #   remember whether something was changed
    96     changed=no
    97 }
    99 #  Save Configuration
   100 do_save () {
   101     if [ ".$changed" = .yes ]; then
   102         #   save configuration
   103         if [ ".$opt_v" = .yes ]; then
   104             echo "uuid: saving UUID configuration file ($file_uuid)"
   105         fi
   106         if [ -f $file_uuid ] && [ ! -w $file_uuid ]; then
   107             echo "uuid:ERROR: cannot write to $file_uuid" 1>&2
   108             exit 1
   109         fi
   110         ( echo "UUID_REGISTRY=\"$UUID_REGISTRY\""
   111           echo "UUID_INSTANCE=\"$UUID_INSTANCE\""
   112           echo "UUID_PLATFORM=\"$UUID_PLATFORM\""
   113         ) >$file_uuid.new || exit $?
   114         n=`egrep 'UUID_(REGISTRY|INSTANCE|PLATFORM)="[0-9a-f-]*"' \
   115            $file_uuid.new | wc -l | awk '{ print $1; }'`
   116         if [ ".$n" != .3 ]; then
   117             echo "uuid:ERROR: failed to update $file_uuid" 1>&2
   118             rm -f $file_uuid.new
   119             exit 1
   120         fi
   121         cp $file_uuid.new $file_uuid || exit $?
   122         rm -f $file_uuid.new || true
   123         chown $musr:$mgrp $file_uuid >/dev/null 2>&1 || true
   124         chmod 644 $file_uuid >/dev/null 2>&1 || true
   126         #   remember that no more changes exist
   127         changed=no
   128     fi
   129 }
   131 #  Reset UUIDs
   132 do_reset () {
   133     #   reset all UUIDs to the "Nil UUID"
   134     if [ ".$UUID_REGISTRY" != ".$UUID_NIL" ]; then
   135         UUID_REGISTRY="$UUID_NIL"
   136         changed=yes
   137     fi
   138     if [ ".$UUID_INSTANCE" != ".$UUID_NIL" ]; then
   139         UUID_INSTANCE="$UUID_NIL"
   140         changed=yes
   141     fi
   142     if [ ".$UUID_PLATFORM" != ".$UUID_NIL" ]; then
   143         UUID_PLATFORM="$UUID_NIL"
   144         changed=yes
   145     fi
   146 }
   148 #   Update UUIDs
   149 do_update () {
   150     #   update registry UUID
   151     if [ ".$UUID_REGISTRY" = ".$UUID_NIL" -o ".$UUID_REGISTRY" = . ]; then
   152         opt=""
   153         if [ ".$opt_m" = .yes ]; then
   154             opt="-m"
   155         fi
   156         if [ ".$opt_v" = .yes ]; then
   157             echo "uuid: calculating OpenPKG Registry UUID (UUID_REGISTRY):"
   158             echo "uuid: << $prog_uuid -v1 $opt"
   159         fi
   160         uuid=`$prog_uuid -v1 $opt`
   161         if [ ".$UUID_REGISTRY" != ".$uuid" -a ".$uuid" != . ]; then
   162             UUID_REGISTRY="$uuid"
   163             if [ ".$opt_v" = .yes ]; then
   164                 echo "uuid: >> $UUID_REGISTRY (NOT REPEATABLE)"
   165             fi
   166             changed=yes
   167         fi
   168     fi
   170     #   update instance UUID
   171     name="${Q_openpkg_release}"
   172     name="$name:${Q_prefix}"
   173     name="$name:${Q_susr}:${Q_suid}:${Q_sgrp}:${Q_sgid}"
   174     name="$name:${Q_musr}:${Q_muid}:${Q_mgrp}:${Q_mgid}"
   175     name="$name:${Q_rusr}:${Q_ruid}:${Q_rgrp}:${Q_rgid}"
   176     name="$name:${Q_nusr}:${Q_nuid}:${Q_ngrp}:${Q_ngid}"
   177     if [ ".$opt_v" = .yes ]; then
   178         echo "uuid: querying OpenPKG Instance OID"
   179         echo "uuid: << $prog_rpm --eval '%{l_openpkg_oid_instance}'"
   180     fi
   181     OID_NS_INSTANCE="`$prog_rpm --eval '%{l_openpkg_oid_instance}'`"
   182     if [ ".$opt_v" = .yes ]; then
   183         echo "uuid: >> $OID_NS_INSTANCE"
   184     fi
   185     if [ ".$opt_v" = .yes ]; then
   186         echo "uuid: calculating OpenPKG Instance Namespace UUID"
   187         echo "uuid: << $prog_uuid -v3 ns:OID \"$OID_NS_INSTANCE\""
   188     fi
   189     UUID_NS_INSTANCE=`$prog_uuid -v3 ns:OID "$OID_NS_INSTANCE"`
   190     if [ ".$opt_v" = .yes ]; then
   191         echo "uuid: >> $UUID_NS_INSTANCE"
   192     fi
   193     if [ ".$opt_v" = .yes ]; then
   194         echo "uuid: calculating OpenPKG Instance UUID (UUID_INSTANCE):"
   195         echo "uuid: << $prog_uuid -v3 \"$UUID_NS_INSTANCE\" \"$name\""
   196     fi
   197     uuid=`$prog_uuid -v3 "$UUID_NS_INSTANCE" "$name"`
   198     if [ ".$opt_v" = .yes ]; then
   199         echo "uuid: >> $uuid"
   200     fi
   201     if [ ".$UUID_INSTANCE" != ".$uuid" -a ".$uuid" != . ]; then
   202         UUID_INSTANCE="$uuid"
   203         changed=yes
   204     fi
   206     #   update platform UUID
   207     name="${Q_platform}"
   208     name="$name:${Q_discriminator}"
   209     if [ ".$opt_v" = .yes ]; then
   210         echo "uuid: querying OpenPKG Platform OID"
   211         echo "uuid: << $prog_rpm --eval '%{l_openpkg_oid_platform}'"
   212     fi
   213     OID_NS_PLATFORM="`$prog_rpm --eval '%{l_openpkg_oid_platform}'`"
   214     if [ ".$opt_v" = .yes ]; then
   215         echo "uuid: >> $OID_NS_PLATFORM"
   216     fi
   217     if [ ".$opt_v" = .yes ]; then
   218         echo "uuid: calculating OpenPKG Platform Namespace UUID"
   219         echo "uuid: << $prog_uuid -v3 ns:OID \"$OID_NS_PLATFORM\""
   220     fi
   221     UUID_NS_PLATFORM=`$prog_uuid -v3 ns:OID "$OID_NS_PLATFORM"`
   222     if [ ".$opt_v" = .yes ]; then
   223         echo "uuid: >> $UUID_NS_PLATFORM"
   224     fi
   225     if [ ".$opt_v" = .yes ]; then
   226         echo "uuid: calculating OpenPKG Platform UUID (UUID_PLATFORM):"
   227         echo "uuid: << $prog_uuid -v3 \"$UUID_NS_PLATFORM\" \"$name\""
   228     fi
   229     uuid=`$prog_uuid -v3 "$UUID_NS_PLATFORM" "$name"`
   230     if [ ".$opt_v" = .yes ]; then
   231         echo "uuid: >> $uuid"
   232     fi
   233     if [ ".$UUID_PLATFORM" != ".$uuid" -a ".$uuid" != . ]; then
   234         UUID_PLATFORM="$uuid"
   235         changed=yes
   236     fi
   237 }
   239 #   Info about input and resulting UUIDs
   240 do_info () {
   241     echo "OpenPKG Summary of Identification Information"
   242     echo "============================================="
   243     echo ""
   244     echo "OpenPKG Registry"
   245     time=""; clock=""; node=""
   246     eval `$prog_uuid -d "$UUID_REGISTRY" 2>/dev/null |\
   247           sed -e 's/^/X/' \
   248               -e 's/X.*time:  *\(.*\)$/time="\1";/' \
   249               -e 's/X.*clock:  *\(.*\)$/clock="\1";/' \
   250               -e 's/X.*node:  *\(.*\)$/node="\1";/' \
   251               -e 's/^X.*//'`
   252     echo "    System Time:           ${time:-unknown}"
   253     echo "    System Clock Sequence: ${clock:-unknown}"
   254     echo "    System Node Address:   ${node:-unknown}"
   255     echo "    UUID_REGISTRY:         $UUID_REGISTRY"
   256     echo ""
   257     echo "OpenPKG Instance"
   258     echo "    Release:               ${Q_openpkg_release}"
   259     echo "    Prefix:                ${Q_prefix}"
   260     echo "    Super Account:         ${Q_susr}(${Q_suid}):${Q_sgrp}(${Q_sgid})"
   261     echo "    Management Account:    ${Q_musr}(${Q_muid}):${Q_mgrp}(${Q_mgid})"
   262     echo "    Restricted Account:    ${Q_rusr}(${Q_ruid}):${Q_rgrp}(${Q_rgid})"
   263     echo "    Nonprivileged Account: ${Q_nusr}(${Q_nuid}):${Q_ngrp}(${Q_ngid})"
   264     echo "    UUID_INSTANCE:         $UUID_INSTANCE"
   265     echo ""
   266     echo "OpenPKG Platform"
   267     echo "    Platform Id:           $Q_platform"
   268     echo "    Discriminator:         $Q_discriminator"
   269     echo "    UUID_PLATFORM:         $UUID_PLATFORM"
   270     echo ""
   271     echo "(run \"$0 --verbose update\" to reproduce the UUID generation)"
   272 }
   274 #   Command Line Dispatching
   275 cmd="$1"
   276 shift
   277 case "$cmd" in
   278     reset )
   279         do_load; do_reset; do_save
   280         ;;
   281     update )
   282         do_query; do_load; do_update; do_save
   283         ;;
   284     info )
   285         do_query; do_load; do_info
   286         ;;
   287     * )
   288         echo "uuid:ERROR: invalid command \"$cmd\"" 1>&2
   289         exit 1
   290         ;;
   291 esac

mercurial