|
1 #!@l_prefix@/lib/openpkg/bash |
|
2 ## |
|
3 ## register -- OpenPKG Registry Command-Line Client |
|
4 ## Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/> |
|
5 ## |
|
6 ## This software is property of the OpenPKG GmbH, DE MUC HRB 160208. |
|
7 ## All rights reserved. Licenses which grant limited permission to use, |
|
8 ## copy, modify and distribute this software are available from the |
|
9 ## OpenPKG GmbH. |
|
10 ## |
|
11 ## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED |
|
12 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
13 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
14 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
|
15 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
16 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
17 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
18 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
19 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
20 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
21 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
22 ## SUCH DAMAGE. |
|
23 ## |
|
24 |
|
25 ## |
|
26 ## configuration |
|
27 ## |
|
28 |
|
29 # program name, version and date |
|
30 progname="register" |
|
31 progvers="1.1.3" |
|
32 progdate="24-Aug-2007" |
|
33 |
|
34 # determine path to OpenPKG instance |
|
35 PREFIX="@l_prefix@" |
|
36 if [ ".${OPENPKG_PREFIX}" != . ]; then |
|
37 PREFIX="${OPENPKG_PREFIX}" |
|
38 fi |
|
39 |
|
40 # determine rpm |
|
41 rpm="$PREFIX/libexec/openpkg/rpm" |
|
42 [ -x "$PREFIX/lib/openpkg/rpm" ] && rpm="$PREFIX/lib/openpkg/rpm" |
|
43 |
|
44 # http post |
|
45 curl="$PREFIX/lib/openpkg/curl" |
|
46 useragent="openpkg-$progname/$progvers" |
|
47 |
|
48 error() |
|
49 { |
|
50 echo "$progname:ERROR: $@" 1>&2 |
|
51 exit 1 |
|
52 } |
|
53 |
|
54 [ ".$PREFIX" = . ] && error "empty PREFIX not allowed" |
|
55 |
|
56 ## |
|
57 ## read configuration unless already done during option parsing |
|
58 ## |
|
59 sanitycheck() |
|
60 { |
|
61 if [ ".$1" != . -a -r "$1" ]; then |
|
62 cat <"$1" | awk ' |
|
63 BEGIN { rc=0 } |
|
64 !/^([A-Z][A-Z0-9_]+[A-Z0-9]="[^"]*")? *(#.*)?$/ { rc=1 } |
|
65 END { exit rc }' && return 0 |
|
66 fi |
|
67 return 1 |
|
68 } |
|
69 |
|
70 readconf() |
|
71 { |
|
72 [ ".$REGISTRY_CONF" = . ] && return |
|
73 if [ -r "$REGISTRY_CONF" ]; then |
|
74 sanitycheck "$REGISTRY_CONF" && . "$REGISTRY_CONF" |
|
75 fi |
|
76 } |
|
77 |
|
78 readuuid() |
|
79 { |
|
80 [ ".$REGISTRY_UUID" = . ] && return |
|
81 if [ -r "$REGISTRY_UUID" ]; then |
|
82 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID" |
|
83 fi |
|
84 } |
|
85 |
|
86 readutil() |
|
87 { |
|
88 [ ".$REGISTRY_UTIL" = . ] && return |
|
89 if [ -r "$REGISTRY_UTIL" ]; then |
|
90 sanitycheck "$REGISTRY_UTIL" && . "$REGISTRY_UTIL" |
|
91 fi |
|
92 } |
|
93 |
|
94 ## |
|
95 ## command line option parsing |
|
96 ## |
|
97 |
|
98 # default parameters |
|
99 FQDN=`$PREFIX/lib/openpkg/shtool echo -e '%h%d'` |
|
100 |
|
101 # primary operations |
|
102 op="automatic" |
|
103 |
|
104 # standard options |
|
105 REGISTRY_AUTO="http://openpkg.org/go/autoregister" |
|
106 REGISTRY_MODE="post" |
|
107 REGISTRY_ARGS="http://registry.openpkg.org/register" |
|
108 REGISTRY_USER="" |
|
109 REGISTRY_LINK="" |
|
110 REGISTRY_DESC="openpkg://${FQDN}${PREFIX}" |
|
111 |
|
112 # advanced options |
|
113 # we are called from rpm URL rewrite wrapper, |
|
114 # so defer PLAT and OREL lookup to avoid rpm loop |
|
115 REGISTRY_PLAT="" |
|
116 REGISTRY_OREL="" |
|
117 REGISTRY_UUID="$PREFIX/etc/openpkg/uuid" |
|
118 REGISTRY_CONF="$PREFIX/etc/openpkg/register.conf" |
|
119 REGISTRY_PREP="$PREFIX/etc/openpkg/register.prep" |
|
120 REGISTRY_TRAN="$PREFIX/etc/openpkg/register.tran" |
|
121 REGISTRY_UTIL="$PREFIX/etc/openpkg/register.util" |
|
122 |
|
123 # amount of data being posted |
|
124 REGISTRY_DATA="request,package,provides" |
|
125 |
|
126 # read baseline config early and allow options to override contents |
|
127 readconf |
|
128 |
|
129 # debug options |
|
130 verbose="no" |
|
131 help="no" |
|
132 |
|
133 # iterate over argument line |
|
134 declare -a a |
|
135 declare -i i=0 |
|
136 while [ $# -gt 0 ]; do |
|
137 opt=$1 |
|
138 case $opt in |
|
139 -*=*) arg=`echo "${opt}" | sed 's/^[-_a-zA-Z0-9]*=//'` |
|
140 opt=`echo "${opt}" | sed 's/=.*//'` |
|
141 ;; |
|
142 *) arg='' ;; |
|
143 esac |
|
144 case $opt in |
|
145 # primary operations |
|
146 -P|--preparation ) op="preparation" ;; |
|
147 -T|--transaction ) op="transaction" ;; |
|
148 -U|--utilization ) op="utilization" ;; |
|
149 -C|--convenience ) op="convenience" ;; |
|
150 -I|--interaction ) op="interaction" ;; |
|
151 |
|
152 # additional features |
|
153 -S|--printstatus ) op="printstatus" ;; |
|
154 -R|--rewriteurls ) op="rewriteurls" ;; |
|
155 |
|
156 # standard options |
|
157 -m|--mode ) |
|
158 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
159 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
160 REGISTRY_MODE="$arg" |
|
161 ;; |
|
162 -a|--args ) |
|
163 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
164 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
165 REGISTRY_ARGS="$arg" |
|
166 ;; |
|
167 -u|--user ) |
|
168 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
169 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
170 REGISTRY_USER="$arg" |
|
171 ;; |
|
172 -l|--link ) |
|
173 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
174 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
175 REGISTRY_LINK="$arg" |
|
176 ;; |
|
177 -d|--desc ) |
|
178 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
179 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
180 REGISTRY_DESC="$arg" |
|
181 ;; |
|
182 |
|
183 # advanced options |
|
184 --plat ) |
|
185 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
186 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
187 REGISTRY_PLAT="$arg" |
|
188 ;; |
|
189 --orel ) |
|
190 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
191 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
192 REGISTRY_VERS="$arg" |
|
193 ;; |
|
194 --uuid ) |
|
195 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
196 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
197 REGISTRY_UUID="$arg" |
|
198 ;; |
|
199 --conf ) |
|
200 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
201 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
202 REGISTRY_CONF="$arg"; readconf |
|
203 ;; |
|
204 --prep ) |
|
205 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
206 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
207 REGISTRY_PREP="$arg" |
|
208 ;; |
|
209 --tran ) |
|
210 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
211 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
212 REGISTRY_TRAN="$arg" |
|
213 ;; |
|
214 --util ) |
|
215 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
216 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
217 REGISTRY_UTIL="$arg" |
|
218 ;; |
|
219 --data ) |
|
220 if [ ".$arg" = . ]; then shift; arg="$1"; fi |
|
221 if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi |
|
222 REGISTRY_DATA="$arg" |
|
223 ;; |
|
224 |
|
225 # debug options |
|
226 -v|--verbose ) verbose="yes" ;; |
|
227 -h|--help ) help="Usage" ;; |
|
228 -* ) help="Invalid option \`$opt'"; break ;; |
|
229 |
|
230 # optional arguments |
|
231 * ) a[$i]="$opt" |
|
232 i=i+1 |
|
233 ;; |
|
234 esac |
|
235 shift |
|
236 done |
|
237 set -- "${a[@]}" |
|
238 unset i a |
|
239 |
|
240 # advanced options, lookup PLAT and OREL default for all modes |
|
241 # but those called from rpm URL rewrite mapper |
|
242 if [ $op != "printstatus" -a $op != "rewriteurls" ]; then |
|
243 [ ".$REGISTRY_PLAT" = . ] && REGISTRY_PLAT="`$rpm --db-private --eval '%{l_platform -p}'`" |
|
244 [ ".$REGISTRY_OREL" = . ] && REGISTRY_OREL="`$rpm --db-private --eval '%{l_openpkg_release}'`" |
|
245 fi |
|
246 |
|
247 # display error or usage message |
|
248 if [ ".$help" != .no ]; then |
|
249 if [ ".$help" != ".Usage" ]; then |
|
250 echo "$progname:ERROR: $help" 1>&2 |
|
251 fi |
|
252 echo "Usage: $progname [-u|--user=<user>] [-l|--link=<token>] [-d|--desc=<text>]" |
|
253 echo " [-m|--mode=fake|post|wipe] [-a|--args=<args>]" |
|
254 echo " [--plat=<text>] [--orel=<text>] [--uuid=<file>]" |
|
255 echo " [--conf=<file>] [--prep=<file>] [--tran=<file>] [--util=<file>] [--data=<tag>[,<tag>...]]" |
|
256 echo " [-P|--preparation] [-T|--transaction] [-U|--utilization]" |
|
257 echo " [-C|--convenience] [-I|--interaction]" |
|
258 echo " [-v|--verbose] [-h|--help]" |
|
259 echo "Usage: $progname -S|--printstatus" |
|
260 echo "Usage: $progname -R|--rewriteurls [[url]...]]" |
|
261 if [ ".$help" != ".Usage" ]; then |
|
262 exit 1 |
|
263 else |
|
264 exit 0 |
|
265 fi |
|
266 fi |
|
267 |
|
268 ## |
|
269 ## Primary operation Preparation |
|
270 ## |
|
271 preparation() |
|
272 { |
|
273 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
274 if [ ".$REGISTRY_PREP" != . ]; then |
|
275 if [ -f $REGISTRY_PREP ]; then |
|
276 cat </dev/null >$REGISTRY_PREP |
|
277 fi |
|
278 fi |
|
279 return |
|
280 fi |
|
281 |
|
282 [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER" |
|
283 [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC" |
|
284 [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT" |
|
285 [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL" |
|
286 [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID" |
|
287 [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP" |
|
288 |
|
289 if [ -r "$REGISTRY_UUID" ]; then |
|
290 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID" |
|
291 fi |
|
292 [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY" |
|
293 [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE" |
|
294 [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM" |
|
295 |
|
296 # amount of data being posted |
|
297 Q='"'; I=" "; N=$'\n'; D="" |
|
298 |
|
299 echo "$REGISTRY_DATA" | grep request >/dev/null |
|
300 if [ $? = 0 ]; then |
|
301 D="${D}<?xml version=${Q}1.0${Q} encoding=${Q}iso-8859-1${Q} standalone=${Q}no${Q}?>${N}" |
|
302 D="${D}<!DOCTYPE registry${N}" |
|
303 D="${D} PUBLIC ${Q}-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN${Q}${N}" |
|
304 D="${D} ${Q}http://registry.openpkg.org/registry.dtd${Q} []>${N}" |
|
305 D="${D}<registry>${N}" |
|
306 D="${D}${I}<request id=${Q}$UUID_REGISTRY${Q}${N}" |
|
307 D="${D}${I}${I}registry_user=${Q}$REGISTRY_USER${Q}${N}" |
|
308 [ ".$REGISTRY_LINK" != . ] && \ |
|
309 D="${D}${I}${I}registry_link=${Q}$REGISTRY_LINK${Q}${N}" # optional |
|
310 D="${D}${I}${I}registry_desc=${Q}$REGISTRY_DESC${Q}${N}" |
|
311 D="${D}${I}${I}registry_plat=${Q}$REGISTRY_PLAT${Q}${N}" |
|
312 D="${D}${I}${I}registry_orel=${Q}$REGISTRY_OREL${Q}${N}" |
|
313 D="${D}${I}${I}uuid_registry=${Q}$UUID_REGISTRY${Q}${N}" |
|
314 D="${D}${I}${I}uuid_instance=${Q}$UUID_INSTANCE${Q}${N}" |
|
315 D="${D}${I}${I}uuid_platform=${Q}$UUID_PLATFORM${Q}${N}" |
|
316 |
|
317 echo "$REGISTRY_DATA" | grep package >/dev/null |
|
318 if [ $? = 0 ]; then |
|
319 D="${D}${I}>${N}" |
|
320 F="" |
|
321 F="${F}${I}${I}<package id=${Q}%{PKGID}${Q} name=${Q}%{NAME}${Q} version=${Q}%{VERSION}${Q} release=${Q}%{RELEASE}${Q}" |
|
322 echo "$REGISTRY_DATA" | grep provides >/dev/null |
|
323 if [ $? = 0 ]; then |
|
324 F="${F}>\n" |
|
325 F="${F}[${I}${I}${I}<provides name=${Q}%{PROVIDENAME}${Q} flag=${Q}%{PROVIDEFLAGS:depflags}${Q} version=${Q}%{PROVIDEVERSION}${Q}/>\n]" |
|
326 F="${F}${I}${I}</package>\n" |
|
327 else |
|
328 F="${F}/>\n" |
|
329 fi |
|
330 D="${D}`$rpm --db-private --qf \"${F}\" -qa | sed '/<package id="(none)"/,/<\/package>/d'`${N}" |
|
331 D="${D} </request>${N}" |
|
332 else |
|
333 D="${D}${I}/>${N}" |
|
334 fi |
|
335 D="${D}</registry>${N}" |
|
336 fi |
|
337 echo "$D" | tee $REGISTRY_PREP |
|
338 } |
|
339 |
|
340 ## |
|
341 ## Primary operation Transaction |
|
342 ## |
|
343 transaction() |
|
344 { |
|
345 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
346 if [ ".$REGISTRY_TRAN" != . ]; then |
|
347 if [ -f $REGISTRY_TRAN ]; then |
|
348 cat </dev/null >$REGISTRY_TRAN |
|
349 fi |
|
350 fi |
|
351 return |
|
352 fi |
|
353 |
|
354 [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE" |
|
355 [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS" |
|
356 [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN" |
|
357 |
|
358 if [ ".$REGISTRY_MODE" = .fake ]; then |
|
359 request=`awk ' |
|
360 BEGIN { registry=0 } |
|
361 /<registry>/ { registry=1 } |
|
362 /<request / { if (registry) { print $0 } } |
|
363 /<\/registry>/ { registry=0 }' | \ |
|
364 sed -e 's;^.*<request id=";;' -e 's;"$;;'` |
|
365 if [ ".$request" = . ]; then error "no request seen on stdin"; fi |
|
366 ( |
|
367 echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>" |
|
368 echo "<!DOCTYPE registry" |
|
369 echo " PUBLIC \"-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN\"" |
|
370 echo " \"http://registry.openpkg.org/registry.dtd\" []>" |
|
371 echo "<registry>" |
|
372 echo " <response id=\"$request\" done=\"yes\">fake</response>" |
|
373 echo "</registry>" |
|
374 ) | tee $REGISTRY_TRAN |
|
375 fi |
|
376 |
|
377 if [ ".$REGISTRY_MODE" = .post ]; then |
|
378 O="" |
|
379 if [ $verbose = no ]; then O="$O --silent"; fi |
|
380 $curl \ |
|
381 $O \ |
|
382 --user-agent "$useragent" \ |
|
383 --connect-timeout 15 \ |
|
384 --max-time 120 \ |
|
385 --form 'page=dropxml' \ |
|
386 --form 'data=<-' \ |
|
387 --form 'submit=DROPXML' \ |
|
388 $REGISTRY_ARGS \ |
|
389 | tee $REGISTRY_TRAN |
|
390 fi |
|
391 } |
|
392 |
|
393 ## |
|
394 ## Primary operation Utilization |
|
395 ## |
|
396 utilization() |
|
397 { |
|
398 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
399 if [ ".$REGISTRY_UTIL" != . ]; then |
|
400 if [ -f $REGISTRY_UTIL ]; then |
|
401 cat </dev/null >$REGISTRY_UTIL |
|
402 fi |
|
403 fi |
|
404 return |
|
405 fi |
|
406 |
|
407 [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL" |
|
408 |
|
409 response=`awk ' |
|
410 BEGIN { registry=0 } |
|
411 /<registry>/ { registry=1 } |
|
412 /<response / { if (registry) { print $0 } } |
|
413 /<\/registry>/ { registry=0 }' | \ |
|
414 sed -e 's;^.*<response id=";;' -e 's;" done="; ;' -e 's;">; ;' -e 's;</response>.*$;;'` |
|
415 if [ ".$response" = . ]; then error "no response seen on stdin"; fi |
|
416 |
|
417 REGISTRY_DBID=`echo $response | awk '/./ { print $1 }'` |
|
418 REGISTRY_DONE=`echo $response | awk '/./ { print $2 }'` |
|
419 REGISTRY_RESP=`echo $response | sed -e 's;^[^ ][^ ]* [^ ][^ ]* ;;'` |
|
420 |
|
421 [ ".$REGISTRY_DBID" = . ] && error "missing information REGISTRY_DBID" |
|
422 [ ".$REGISTRY_DONE" = . ] && error "missing information REGISTRY_DONE" |
|
423 [ ".$REGISTRY_RESP" = . ] && error "missing information REGISTRY_RESP" |
|
424 |
|
425 ( |
|
426 echo "REGISTRY_DBID=\"$REGISTRY_DBID\"" |
|
427 echo "REGISTRY_DONE=\"$REGISTRY_DONE\"" |
|
428 echo "REGISTRY_RESP=\"$REGISTRY_RESP\"" |
|
429 ) | tee $REGISTRY_UTIL |
|
430 } |
|
431 |
|
432 ## |
|
433 ## Automatic registration data retrieval |
|
434 ## |
|
435 autoregdata() |
|
436 { |
|
437 if [ ".$REGISTRY_AUTO" != . ]; then |
|
438 O="" |
|
439 if [ $verbose = no ]; then O="$O --silent"; fi |
|
440 response=`$curl \ |
|
441 $O -L \ |
|
442 --user-agent "$useragent" \ |
|
443 --connect-timeout 8 \ |
|
444 --max-time 16 \ |
|
445 $REGISTRY_AUTO \ |
|
446 | awk ' |
|
447 BEGIN { registry=0 } |
|
448 /<registry>/ { registry=1 } |
|
449 /<autoregister / { if (registry) { print $0 } } |
|
450 /<\/registry>/ { registry=0 }' \ |
|
451 | sed -e 's;^.*<autoregister *;;' -e 's;>[^>]*</autoregister>.*$;;' \ |
|
452 -e 's;\([^=]*\)="\([^"]*\)" *;\1="\2"\\ |
|
453 ;g' \ |
|
454 | awk -F= '/=/ { print "REGISTRY_"toupper($1)"="$2"" }'` |
|
455 if [ $verbose = yes ]; then echo "autoregdata from $REGISTRY_AUTO"; echo "$response"; fi |
|
456 eval "$response" |
|
457 fi |
|
458 } |
|
459 |
|
460 ## |
|
461 ## Primary operation Convenience |
|
462 ## |
|
463 convenience() |
|
464 { |
|
465 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
466 utilization |
|
467 transaction |
|
468 preparation |
|
469 return |
|
470 fi |
|
471 |
|
472 preparation | transaction | utilization |
|
473 |
|
474 readutil || error "problem reading util" |
|
475 if [ ".$REGISTRY_DONE" = .yes ]; then |
|
476 echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee "$REGISTRY_CONF" || return |
|
477 ( |
|
478 echo "REGISTRY_USER=\"$REGISTRY_USER\"" |
|
479 echo "REGISTRY_LINK=\"$REGISTRY_LINK\"" |
|
480 echo "REGISTRY_DESC=\"$REGISTRY_DESC\"" |
|
481 echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\"" |
|
482 echo "REGISTRY_OREL=\"$REGISTRY_OREL\"" |
|
483 echo "REGISTRY_UUID=\"$REGISTRY_UUID\"" |
|
484 echo "REGISTRY_PREP=\"$REGISTRY_PREP\"" |
|
485 echo "REGISTRY_MODE=\"$REGISTRY_MODE\"" |
|
486 echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\"" |
|
487 echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\"" |
|
488 echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\"" |
|
489 ) | tee -a "$REGISTRY_CONF" |
|
490 fi |
|
491 } |
|
492 |
|
493 ## |
|
494 ## Primary operation Interaction |
|
495 ## |
|
496 interaction() |
|
497 { |
|
498 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
499 if [ ".$REGISTRY_CONF" != . ]; then |
|
500 if [ -f $REGISTRY_CONF ]; then |
|
501 cat </dev/null >$REGISTRY_CONF |
|
502 fi |
|
503 fi |
|
504 return |
|
505 fi |
|
506 |
|
507 echo "OpenPKG Registry Client ($useragent)" |
|
508 echo "" |
|
509 echo "Interactive step-by-step registration procedure." |
|
510 echo "You can abort at any time by just pressing CTRL-C." |
|
511 echo "" |
|
512 echo "Registration is a three step process:" |
|
513 echo "1. Preparation = create a configuration file and locally prepare a registration request" |
|
514 echo "2. Transaction = run a transaction to submit the request to the registry" |
|
515 echo "3. Utilization = memorize the response to activate local URL rewriting" |
|
516 echo "" |
|
517 echo "A (*) marks an optional field where the empty string \"\" is allowed." |
|
518 echo "Just press RETURN to continue and/or keep a default setting." |
|
519 |
|
520 echo "" |
|
521 echo "==== Step 1/3: Preparation ====" |
|
522 echo "Attempting to write to the configuration file \"$REGISTRY_CONF\"" |
|
523 echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee -a "$REGISTRY_CONF" 2>/dev/null \ |
|
524 || error "Configuration file not writable. Get more permissions and try again" |
|
525 |
|
526 read -p "[REGISTRY_USER=\"$REGISTRY_USER\"] username? "; [ ".$REPLY" != . ] && REGISTRY_USER="$REPLY" |
|
527 read -p "[REGISTRY_DESC=\"$REGISTRY_DESC\"] description (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY" |
|
528 read -p "[REGISTRY_PLAT=\"$REGISTRY_PLAT\"] platform (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY" |
|
529 read -p "[REGISTRY_OREL=\"$REGISTRY_OREL\"] release (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY" |
|
530 read -p "[REGISTRY_UUID=\"$REGISTRY_UUID\"] uuid file to read? "; [ ".$REPLY" != . ] && REGISTRY_UUID="$REPLY" |
|
531 read -p "[REGISTRY_DATA=\"$REGISTRY_DATA\"] data to prepare? "; [ ".$REPLY" != . ] && REGISTRY_DATA="$REPLY" |
|
532 read -p "[REGISTRY_PREP=\"$REGISTRY_PREP\"] prep dump file? "; [ ".$REPLY" != . ] && REGISTRY_PREP="$REPLY" |
|
533 |
|
534 [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER" |
|
535 [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC" |
|
536 [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT" |
|
537 [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL" |
|
538 [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID" |
|
539 [ ".$REGISTRY_DATA" = . ] && error "missing information REGISTRY_DATA" |
|
540 [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP" |
|
541 |
|
542 if [ -r "$REGISTRY_UUID" ]; then |
|
543 sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID" |
|
544 fi |
|
545 [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY" |
|
546 [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE" |
|
547 [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM" |
|
548 |
|
549 echo "Appending to configuration file \"$REGISTRY_CONF\"" |
|
550 ( |
|
551 echo "REGISTRY_USER=\"$REGISTRY_USER\"" |
|
552 echo "REGISTRY_LINK=\"$REGISTRY_LINK\"" |
|
553 echo "REGISTRY_DESC=\"$REGISTRY_DESC\"" |
|
554 echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\"" |
|
555 echo "REGISTRY_OREL=\"$REGISTRY_OREL\"" |
|
556 echo "REGISTRY_UUID=\"$REGISTRY_UUID\"" |
|
557 echo "REGISTRY_PREP=\"$REGISTRY_PREP\"" |
|
558 ) | tee -a "$REGISTRY_CONF" |
|
559 |
|
560 preparation |
|
561 |
|
562 echo "" |
|
563 echo "==== Step 2/3: Transaction ====" |
|
564 read -p "[REGISTRY_MODE=\"$REGISTRY_MODE\"] mode (post or fake)? "; [ ".$REPLY" != . ] && REGISTRY_MODE="$REPLY" |
|
565 read -p "[REGISTRY_ARGS=\"$REGISTRY_ARGS\"] args? "; [ ".$REPLY" != . ] && REGISTRY_ARGS="$REPLY" |
|
566 read -p "[REGISTRY_TRAN=\"$REGISTRY_TRAN\"] tran dump file? "; [ ".$REPLY" != . ] && REGISTRY_TRAN="$REPLY" |
|
567 |
|
568 [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE" |
|
569 [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS" |
|
570 [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN" |
|
571 |
|
572 echo "Appending to configuration file \"$REGISTRY_CONF\"" |
|
573 ( |
|
574 echo "REGISTRY_MODE=\"$REGISTRY_MODE\"" |
|
575 echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\"" |
|
576 echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\"" |
|
577 ) | tee -a "$REGISTRY_CONF" |
|
578 |
|
579 transaction <$REGISTRY_PREP |
|
580 |
|
581 echo "" |
|
582 echo "==== Step 3/3: Utilization ====" |
|
583 read -p "[REGISTRY_UTIL=\"$REGISTRY_UTIL\"] util dump file? "; [ ".$REPLY" != . ] && REGISTRY_UTIL="$REPLY" |
|
584 |
|
585 [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL" |
|
586 |
|
587 echo "Appending to configuration file \"$REGISTRY_CONF\"" |
|
588 ( |
|
589 echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\"" |
|
590 ) | tee -a "$REGISTRY_CONF" |
|
591 |
|
592 utilization <$REGISTRY_TRAN |
|
593 } |
|
594 |
|
595 ## |
|
596 ## Additional feature printstatus |
|
597 ## |
|
598 printstatus() |
|
599 { |
|
600 rc=0 |
|
601 readconf || error "problem reading conf" |
|
602 readuuid || error "problem reading uuid" |
|
603 readutil || error "problem reading util" |
|
604 if [ ".$REGISTRY_DONE" = .yes ]; then |
|
605 cat "$REGISTRY_UTIL" |
|
606 return 0 |
|
607 fi |
|
608 return 1 |
|
609 } |
|
610 |
|
611 ## |
|
612 ## Additional feature rewriteurls |
|
613 ## |
|
614 rewriteurls() |
|
615 { |
|
616 readconf && readuuid && readutil || return $? |
|
617 if [ ".$REGISTRY_DONE" = .yes ]; then |
|
618 # URL rewriting |
|
619 while [ ".$1" != . ]; do |
|
620 printf '%s\n' "$1" | \ |
|
621 sed -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.com\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \ |
|
622 -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.org\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \ |
|
623 -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.net\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" |
|
624 shift |
|
625 done |
|
626 return 0 |
|
627 else |
|
628 # stealth mode |
|
629 return 1 |
|
630 fi |
|
631 } |
|
632 |
|
633 ## |
|
634 ## check whether important configuration data is missing |
|
635 ## |
|
636 checkmissing() |
|
637 { |
|
638 missing="" |
|
639 [ ".$REGISTRY_USER" = . ] && missing="$missing REGISTRY_USER" |
|
640 [ ".$REGISTRY_DESC" = . ] && missing="$missing REGISTRY_DESC" |
|
641 [ ".$REGISTRY_PLAT" = . ] && missing="$missing REGISTRY_PLAT" |
|
642 [ ".$REGISTRY_OREL" = . ] && missing="$missing REGISTRY_OREL" |
|
643 [ ".$REGISTRY_UUID" = . ] && missing="$missing REGISTRY_UUID" |
|
644 [ ".$REGISTRY_PREP" = . ] && missing="$missing REGISTRY_PREP" |
|
645 [ ".$REGISTRY_MODE" = . ] && missing="$missing REGISTRY_MODE" |
|
646 [ ".$REGISTRY_ARGS" = . ] && missing="$missing REGISTRY_ARGS" |
|
647 [ ".$REGISTRY_TRAN" = . ] && missing="$missing REGISTRY_TRAN" |
|
648 [ ".$REGISTRY_UTIL" = . ] && missing="$missing REGISTRY_UTIL" |
|
649 } |
|
650 |
|
651 ## |
|
652 ## automatically pick interaction or convenience |
|
653 ## |
|
654 automatic() |
|
655 { |
|
656 if [ ".$REGISTRY_MODE" = .wipe ]; then |
|
657 convenience |
|
658 interaction |
|
659 return |
|
660 fi |
|
661 |
|
662 checkmissing |
|
663 if [ ".$missing" != . ]; then |
|
664 autoregdata |
|
665 fi |
|
666 |
|
667 checkmissing |
|
668 if [ ".$missing" = . ]; then |
|
669 convenience |
|
670 else |
|
671 tty -s || return |
|
672 echo "missing $missing" |
|
673 interaction |
|
674 fi |
|
675 } |
|
676 |
|
677 ## |
|
678 ## primary operation switch |
|
679 ## |
|
680 eval $op "\"$@\"" |
|
681 exit $? |
|
682 |
|
683 ## |
|
684 ## MANUAL PAGE |
|
685 ## |
|
686 |