diff -r 71503088f51b -r f880f219c566 openpkg/register.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openpkg/register.sh Tue Jul 31 12:23:42 2012 +0200
@@ -0,0 +1,686 @@
+#!@l_prefix@/lib/openpkg/bash
+##
+## register -- OpenPKG Registry Command-Line Client
+## Copyright (c) 2000-2012 OpenPKG GmbH
+##
+## This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
+## All rights reserved. Licenses which grant limited permission to use,
+## copy, modify and distribute this software are available from the
+## OpenPKG GmbH.
+##
+## 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
+##
+
+# program name, version and date
+progname="register"
+progvers="1.1.3"
+progdate="24-Aug-2007"
+
+# determine path to OpenPKG instance
+PREFIX="@l_prefix@"
+if [ ".${OPENPKG_PREFIX}" != . ]; then
+ PREFIX="${OPENPKG_PREFIX}"
+fi
+
+# determine rpm
+rpm="$PREFIX/libexec/openpkg/rpm"
+[ -x "$PREFIX/lib/openpkg/rpm" ] && rpm="$PREFIX/lib/openpkg/rpm"
+
+# http post
+curl="$PREFIX/lib/openpkg/curl"
+useragent="openpkg-$progname/$progvers"
+
+error()
+{
+ echo "$progname:ERROR: $@" 1>&2
+ exit 1
+}
+
+[ ".$PREFIX" = . ] && error "empty PREFIX not allowed"
+
+##
+## read configuration unless already done during option parsing
+##
+sanitycheck()
+{
+ if [ ".$1" != . -a -r "$1" ]; then
+ cat <"$1" | awk '
+ BEGIN { rc=0 }
+ !/^([A-Z][A-Z0-9_]+[A-Z0-9]="[^"]*")? *(#.*)?$/ { rc=1 }
+ END { exit rc }' && return 0
+ fi
+ return 1
+}
+
+readconf()
+{
+ [ ".$REGISTRY_CONF" = . ] && return
+ if [ -r "$REGISTRY_CONF" ]; then
+ sanitycheck "$REGISTRY_CONF" && . "$REGISTRY_CONF"
+ fi
+}
+
+readuuid()
+{
+ [ ".$REGISTRY_UUID" = . ] && return
+ if [ -r "$REGISTRY_UUID" ]; then
+ sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
+ fi
+}
+
+readutil()
+{
+ [ ".$REGISTRY_UTIL" = . ] && return
+ if [ -r "$REGISTRY_UTIL" ]; then
+ sanitycheck "$REGISTRY_UTIL" && . "$REGISTRY_UTIL"
+ fi
+}
+
+##
+## command line option parsing
+##
+
+# default parameters
+FQDN=`$PREFIX/lib/openpkg/shtool echo -e '%h%d'`
+
+# primary operations
+op="automatic"
+
+# standard options
+REGISTRY_AUTO="http://openpkg.org/go/autoregister"
+REGISTRY_MODE="post"
+REGISTRY_ARGS="http://registry.openpkg.org/register"
+REGISTRY_USER=""
+REGISTRY_LINK=""
+REGISTRY_DESC="openpkg://${FQDN}${PREFIX}"
+
+# advanced options
+# we are called from rpm URL rewrite wrapper,
+# so defer PLAT and OREL lookup to avoid rpm loop
+REGISTRY_PLAT=""
+REGISTRY_OREL=""
+REGISTRY_UUID="$PREFIX/etc/openpkg/uuid"
+REGISTRY_CONF="$PREFIX/etc/openpkg/register.conf"
+REGISTRY_PREP="$PREFIX/etc/openpkg/register.prep"
+REGISTRY_TRAN="$PREFIX/etc/openpkg/register.tran"
+REGISTRY_UTIL="$PREFIX/etc/openpkg/register.util"
+
+# amount of data being posted
+REGISTRY_DATA="request,package,provides"
+
+# read baseline config early and allow options to override contents
+readconf
+
+# debug options
+verbose="no"
+help="no"
+
+# iterate over argument line
+declare -a a
+declare -i i=0
+while [ $# -gt 0 ]; do
+ opt=$1
+ case $opt in
+ -*=*) arg=`echo "${opt}" | sed 's/^[-_a-zA-Z0-9]*=//'`
+ opt=`echo "${opt}" | sed 's/=.*//'`
+ ;;
+ *) arg='' ;;
+ esac
+ case $opt in
+ # primary operations
+ -P|--preparation ) op="preparation" ;;
+ -T|--transaction ) op="transaction" ;;
+ -U|--utilization ) op="utilization" ;;
+ -C|--convenience ) op="convenience" ;;
+ -I|--interaction ) op="interaction" ;;
+
+ # additional features
+ -S|--printstatus ) op="printstatus" ;;
+ -R|--rewriteurls ) op="rewriteurls" ;;
+
+ # standard options
+ -m|--mode )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_MODE="$arg"
+ ;;
+ -a|--args )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_ARGS="$arg"
+ ;;
+ -u|--user )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_USER="$arg"
+ ;;
+ -l|--link )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_LINK="$arg"
+ ;;
+ -d|--desc )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_DESC="$arg"
+ ;;
+
+ # advanced options
+ --plat )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_PLAT="$arg"
+ ;;
+ --orel )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_VERS="$arg"
+ ;;
+ --uuid )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_UUID="$arg"
+ ;;
+ --conf )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_CONF="$arg"; readconf
+ ;;
+ --prep )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_PREP="$arg"
+ ;;
+ --tran )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_TRAN="$arg"
+ ;;
+ --util )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_UTIL="$arg"
+ ;;
+ --data )
+ if [ ".$arg" = . ]; then shift; arg="$1"; fi
+ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi
+ REGISTRY_DATA="$arg"
+ ;;
+
+ # debug options
+ -v|--verbose ) verbose="yes" ;;
+ -h|--help ) help="Usage" ;;
+ -* ) help="Invalid option \`$opt'"; break ;;
+
+ # optional arguments
+ * ) a[$i]="$opt"
+ i=i+1
+ ;;
+ esac
+ shift
+done
+set -- "${a[@]}"
+unset i a
+
+# advanced options, lookup PLAT and OREL default for all modes
+# but those called from rpm URL rewrite mapper
+if [ $op != "printstatus" -a $op != "rewriteurls" ]; then
+ [ ".$REGISTRY_PLAT" = . ] && REGISTRY_PLAT="`$rpm --db-private --eval '%{l_platform -p}'`"
+ [ ".$REGISTRY_OREL" = . ] && REGISTRY_OREL="`$rpm --db-private --eval '%{l_openpkg_release}'`"
+fi
+
+# display error or usage message
+if [ ".$help" != .no ]; then
+ if [ ".$help" != ".Usage" ]; then
+ echo "$progname:ERROR: $help" 1>&2
+ fi
+ echo "Usage: $progname [-u|--user=] [-l|--link=] [-d|--desc=]"
+ echo " [-m|--mode=fake|post|wipe] [-a|--args=]"
+ echo " [--plat=] [--orel=] [--uuid=]"
+ echo " [--conf=] [--prep=] [--tran=] [--util=] [--data=[,...]]"
+ echo " [-P|--preparation] [-T|--transaction] [-U|--utilization]"
+ echo " [-C|--convenience] [-I|--interaction]"
+ echo " [-v|--verbose] [-h|--help]"
+ echo "Usage: $progname -S|--printstatus"
+ echo "Usage: $progname -R|--rewriteurls [[url]...]]"
+ if [ ".$help" != ".Usage" ]; then
+ exit 1
+ else
+ exit 0
+ fi
+fi
+
+##
+## Primary operation Preparation
+##
+preparation()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ if [ ".$REGISTRY_PREP" != . ]; then
+ if [ -f $REGISTRY_PREP ]; then
+ cat $REGISTRY_PREP
+ fi
+ fi
+ return
+ fi
+
+ [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER"
+ [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC"
+ [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT"
+ [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL"
+ [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID"
+ [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP"
+
+ if [ -r "$REGISTRY_UUID" ]; then
+ sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
+ fi
+ [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY"
+ [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE"
+ [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM"
+
+ # amount of data being posted
+ Q='"'; I=" "; N=$'\n'; D=""
+
+ echo "$REGISTRY_DATA" | grep request >/dev/null
+ if [ $? = 0 ]; then
+ D="${D}${N}"
+ D="${D}${N}"
+ D="${D}${N}"
+ D="${D}${I}/dev/null
+ if [ $? = 0 ]; then
+ D="${D}${I}>${N}"
+ F=""
+ F="${F}${I}${I}/dev/null
+ if [ $? = 0 ]; then
+ F="${F}>\n"
+ F="${F}[${I}${I}${I}\n]"
+ F="${F}${I}${I}\n"
+ else
+ F="${F}/>\n"
+ fi
+ D="${D}`$rpm --db-private --qf \"${F}\" -qa | sed '//d'`${N}"
+ D="${D} ${N}"
+ else
+ D="${D}${I}/>${N}"
+ fi
+ D="${D}${N}"
+ fi
+ echo "$D" | tee $REGISTRY_PREP
+}
+
+##
+## Primary operation Transaction
+##
+transaction()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ if [ ".$REGISTRY_TRAN" != . ]; then
+ if [ -f $REGISTRY_TRAN ]; then
+ cat $REGISTRY_TRAN
+ fi
+ fi
+ return
+ fi
+
+ [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE"
+ [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS"
+ [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN"
+
+ if [ ".$REGISTRY_MODE" = .fake ]; then
+ request=`awk '
+ BEGIN { registry=0 }
+ // { registry=1 }
+ // { registry=0 }' | \
+ sed -e 's;^.*"
+ echo ""
+ echo ""
+ echo " fake"
+ echo ""
+ ) | tee $REGISTRY_TRAN
+ fi
+
+ if [ ".$REGISTRY_MODE" = .post ]; then
+ O=""
+ if [ $verbose = no ]; then O="$O --silent"; fi
+ $curl \
+ $O \
+ --user-agent "$useragent" \
+ --connect-timeout 15 \
+ --max-time 120 \
+ --form 'page=dropxml' \
+ --form 'data=<-' \
+ --form 'submit=DROPXML' \
+ $REGISTRY_ARGS \
+ | tee $REGISTRY_TRAN
+ fi
+}
+
+##
+## Primary operation Utilization
+##
+utilization()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ if [ ".$REGISTRY_UTIL" != . ]; then
+ if [ -f $REGISTRY_UTIL ]; then
+ cat $REGISTRY_UTIL
+ fi
+ fi
+ return
+ fi
+
+ [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL"
+
+ response=`awk '
+ BEGIN { registry=0 }
+ // { registry=1 }
+ // { registry=0 }' | \
+ sed -e 's;^.*; ;' -e 's;.*$;;'`
+ if [ ".$response" = . ]; then error "no response seen on stdin"; fi
+
+ REGISTRY_DBID=`echo $response | awk '/./ { print $1 }'`
+ REGISTRY_DONE=`echo $response | awk '/./ { print $2 }'`
+ REGISTRY_RESP=`echo $response | sed -e 's;^[^ ][^ ]* [^ ][^ ]* ;;'`
+
+ [ ".$REGISTRY_DBID" = . ] && error "missing information REGISTRY_DBID"
+ [ ".$REGISTRY_DONE" = . ] && error "missing information REGISTRY_DONE"
+ [ ".$REGISTRY_RESP" = . ] && error "missing information REGISTRY_RESP"
+
+ (
+ echo "REGISTRY_DBID=\"$REGISTRY_DBID\""
+ echo "REGISTRY_DONE=\"$REGISTRY_DONE\""
+ echo "REGISTRY_RESP=\"$REGISTRY_RESP\""
+ ) | tee $REGISTRY_UTIL
+}
+
+##
+## Automatic registration data retrieval
+##
+autoregdata()
+{
+ if [ ".$REGISTRY_AUTO" != . ]; then
+ O=""
+ if [ $verbose = no ]; then O="$O --silent"; fi
+ response=`$curl \
+ $O -L \
+ --user-agent "$useragent" \
+ --connect-timeout 8 \
+ --max-time 16 \
+ $REGISTRY_AUTO \
+ | awk '
+ BEGIN { registry=0 }
+ // { registry=1 }
+ // { registry=0 }' \
+ | sed -e 's;^.*[^>]*.*$;;' \
+ -e 's;\([^=]*\)="\([^"]*\)" *;\1="\2"\\
+;g' \
+ | awk -F= '/=/ { print "REGISTRY_"toupper($1)"="$2"" }'`
+ if [ $verbose = yes ]; then echo "autoregdata from $REGISTRY_AUTO"; echo "$response"; fi
+ eval "$response"
+ fi
+}
+
+##
+## Primary operation Convenience
+##
+convenience()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ utilization
+ transaction
+ preparation
+ return
+ fi
+
+ preparation | transaction | utilization
+
+ readutil || error "problem reading util"
+ if [ ".$REGISTRY_DONE" = .yes ]; then
+ echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee "$REGISTRY_CONF" || return
+ (
+ echo "REGISTRY_USER=\"$REGISTRY_USER\""
+ echo "REGISTRY_LINK=\"$REGISTRY_LINK\""
+ echo "REGISTRY_DESC=\"$REGISTRY_DESC\""
+ echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\""
+ echo "REGISTRY_OREL=\"$REGISTRY_OREL\""
+ echo "REGISTRY_UUID=\"$REGISTRY_UUID\""
+ echo "REGISTRY_PREP=\"$REGISTRY_PREP\""
+ echo "REGISTRY_MODE=\"$REGISTRY_MODE\""
+ echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\""
+ echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\""
+ echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\""
+ ) | tee -a "$REGISTRY_CONF"
+ fi
+}
+
+##
+## Primary operation Interaction
+##
+interaction()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ if [ ".$REGISTRY_CONF" != . ]; then
+ if [ -f $REGISTRY_CONF ]; then
+ cat $REGISTRY_CONF
+ fi
+ fi
+ return
+ fi
+
+ echo "OpenPKG Registry Client ($useragent)"
+ echo ""
+ echo "Interactive step-by-step registration procedure."
+ echo "You can abort at any time by just pressing CTRL-C."
+ echo ""
+ echo "Registration is a three step process:"
+ echo "1. Preparation = create a configuration file and locally prepare a registration request"
+ echo "2. Transaction = run a transaction to submit the request to the registry"
+ echo "3. Utilization = memorize the response to activate local URL rewriting"
+ echo ""
+ echo "A (*) marks an optional field where the empty string \"\" is allowed."
+ echo "Just press RETURN to continue and/or keep a default setting."
+
+ echo ""
+ echo "==== Step 1/3: Preparation ===="
+ echo "Attempting to write to the configuration file \"$REGISTRY_CONF\""
+ echo "#`TZ= date '+%Y-%m-%d %H:%M:%S'` UTC" | tee -a "$REGISTRY_CONF" 2>/dev/null \
+ || error "Configuration file not writable. Get more permissions and try again"
+
+ read -p "[REGISTRY_USER=\"$REGISTRY_USER\"] username? "; [ ".$REPLY" != . ] && REGISTRY_USER="$REPLY"
+ read -p "[REGISTRY_DESC=\"$REGISTRY_DESC\"] description (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
+ read -p "[REGISTRY_PLAT=\"$REGISTRY_PLAT\"] platform (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
+ read -p "[REGISTRY_OREL=\"$REGISTRY_OREL\"] release (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY"
+ read -p "[REGISTRY_UUID=\"$REGISTRY_UUID\"] uuid file to read? "; [ ".$REPLY" != . ] && REGISTRY_UUID="$REPLY"
+ read -p "[REGISTRY_DATA=\"$REGISTRY_DATA\"] data to prepare? "; [ ".$REPLY" != . ] && REGISTRY_DATA="$REPLY"
+ read -p "[REGISTRY_PREP=\"$REGISTRY_PREP\"] prep dump file? "; [ ".$REPLY" != . ] && REGISTRY_PREP="$REPLY"
+
+ [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER"
+ [ ".$REGISTRY_DESC" = . ] && error "missing information REGISTRY_DESC"
+ [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT"
+ [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_OREL"
+ [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID"
+ [ ".$REGISTRY_DATA" = . ] && error "missing information REGISTRY_DATA"
+ [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP"
+
+ if [ -r "$REGISTRY_UUID" ]; then
+ sanitycheck "$REGISTRY_UUID" && . "$REGISTRY_UUID"
+ fi
+ [ ".$UUID_REGISTRY" = . ] && error "missing information UUID_REGISTRY"
+ [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE"
+ [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM"
+
+ echo "Appending to configuration file \"$REGISTRY_CONF\""
+ (
+ echo "REGISTRY_USER=\"$REGISTRY_USER\""
+ echo "REGISTRY_LINK=\"$REGISTRY_LINK\""
+ echo "REGISTRY_DESC=\"$REGISTRY_DESC\""
+ echo "REGISTRY_PLAT=\"$REGISTRY_PLAT\""
+ echo "REGISTRY_OREL=\"$REGISTRY_OREL\""
+ echo "REGISTRY_UUID=\"$REGISTRY_UUID\""
+ echo "REGISTRY_PREP=\"$REGISTRY_PREP\""
+ ) | tee -a "$REGISTRY_CONF"
+
+ preparation
+
+ echo ""
+ echo "==== Step 2/3: Transaction ===="
+ read -p "[REGISTRY_MODE=\"$REGISTRY_MODE\"] mode (post or fake)? "; [ ".$REPLY" != . ] && REGISTRY_MODE="$REPLY"
+ read -p "[REGISTRY_ARGS=\"$REGISTRY_ARGS\"] args? "; [ ".$REPLY" != . ] && REGISTRY_ARGS="$REPLY"
+ read -p "[REGISTRY_TRAN=\"$REGISTRY_TRAN\"] tran dump file? "; [ ".$REPLY" != . ] && REGISTRY_TRAN="$REPLY"
+
+ [ ".$REGISTRY_MODE" = . ] && error "missing information REGISTRY_MODE"
+ [ ".$REGISTRY_ARGS" = . ] && error "missing information REGISTRY_ARGS"
+ [ ".$REGISTRY_TRAN" = . ] && error "missing information REGISTRY_TRAN"
+
+ echo "Appending to configuration file \"$REGISTRY_CONF\""
+ (
+ echo "REGISTRY_MODE=\"$REGISTRY_MODE\""
+ echo "REGISTRY_ARGS=\"$REGISTRY_ARGS\""
+ echo "REGISTRY_TRAN=\"$REGISTRY_TRAN\""
+ ) | tee -a "$REGISTRY_CONF"
+
+ transaction <$REGISTRY_PREP
+
+ echo ""
+ echo "==== Step 3/3: Utilization ===="
+ read -p "[REGISTRY_UTIL=\"$REGISTRY_UTIL\"] util dump file? "; [ ".$REPLY" != . ] && REGISTRY_UTIL="$REPLY"
+
+ [ ".$REGISTRY_UTIL" = . ] && error "missing information REGISTRY_UTIL"
+
+ echo "Appending to configuration file \"$REGISTRY_CONF\""
+ (
+ echo "REGISTRY_UTIL=\"$REGISTRY_UTIL\""
+ ) | tee -a "$REGISTRY_CONF"
+
+ utilization <$REGISTRY_TRAN
+}
+
+##
+## Additional feature printstatus
+##
+printstatus()
+{
+ rc=0
+ readconf || error "problem reading conf"
+ readuuid || error "problem reading uuid"
+ readutil || error "problem reading util"
+ if [ ".$REGISTRY_DONE" = .yes ]; then
+ cat "$REGISTRY_UTIL"
+ return 0
+ fi
+ return 1
+}
+
+##
+## Additional feature rewriteurls
+##
+rewriteurls()
+{
+ readconf && readuuid && readutil || return $?
+ if [ ".$REGISTRY_DONE" = .yes ]; then
+ # URL rewriting
+ while [ ".$1" != . ]; do
+ printf '%s\n' "$1" | \
+ sed -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.com\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \
+ -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.org\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;" \
+ -e "s;^\([^:/]*\)://\([^:/]*\.openpkg\.net\)/;\1://$UUID_REGISTRY:$UUID_INSTANCE.$UUID_PLATFORM@\2/;"
+ shift
+ done
+ return 0
+ else
+ # stealth mode
+ return 1
+ fi
+}
+
+##
+## check whether important configuration data is missing
+##
+checkmissing()
+{
+ missing=""
+ [ ".$REGISTRY_USER" = . ] && missing="$missing REGISTRY_USER"
+ [ ".$REGISTRY_DESC" = . ] && missing="$missing REGISTRY_DESC"
+ [ ".$REGISTRY_PLAT" = . ] && missing="$missing REGISTRY_PLAT"
+ [ ".$REGISTRY_OREL" = . ] && missing="$missing REGISTRY_OREL"
+ [ ".$REGISTRY_UUID" = . ] && missing="$missing REGISTRY_UUID"
+ [ ".$REGISTRY_PREP" = . ] && missing="$missing REGISTRY_PREP"
+ [ ".$REGISTRY_MODE" = . ] && missing="$missing REGISTRY_MODE"
+ [ ".$REGISTRY_ARGS" = . ] && missing="$missing REGISTRY_ARGS"
+ [ ".$REGISTRY_TRAN" = . ] && missing="$missing REGISTRY_TRAN"
+ [ ".$REGISTRY_UTIL" = . ] && missing="$missing REGISTRY_UTIL"
+}
+
+##
+## automatically pick interaction or convenience
+##
+automatic()
+{
+ if [ ".$REGISTRY_MODE" = .wipe ]; then
+ convenience
+ interaction
+ return
+ fi
+
+ checkmissing
+ if [ ".$missing" != . ]; then
+ autoregdata
+ fi
+
+ checkmissing
+ if [ ".$missing" = . ]; then
+ convenience
+ else
+ tty -s || return
+ echo "missing $missing"
+ interaction
+ fi
+}
+
+##
+## primary operation switch
+##
+eval $op "\"$@\""
+exit $?
+
+##
+## MANUAL PAGE
+##
+