| |
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 |