Sun, 29 May 2011 16:29:06 +0200
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