From 99ebd302b0b52df2d19da5838766381a1fa65485 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 1 May 2014 12:30:52 -0400 Subject: [PATCH] opensuse: support pkg-map in bin/install-packages Updates the opensuse element's bin/install-packages script so that if supports using pkg-map instead of map-packages for package mapping. To make use of the new change simply add the -m to allow install-packages to know which element namespace to use when installing packages. Use of the new -m option is off by default. As part of this change we also updated install-packages to use getopt for in script argument parsing. Change-Id: I56da8adf6c445c50c7642e221c6c11ba59330404 --- elements/opensuse/bin/install-packages | 54 +++++++++++++++++++++----- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/elements/opensuse/bin/install-packages b/elements/opensuse/bin/install-packages index f59d502f..6af794be 100755 --- a/elements/opensuse/bin/install-packages +++ b/elements/opensuse/bin/install-packages @@ -17,31 +17,65 @@ set -eu set -o pipefail +EXTRA_ARGS="" +MAP_ELEMENT="" + +SCRIPTNAME=$(basename $0) +function show_options () { + echo "Usage: $SCRIPTNAME [package ...]" + echo + echo "Options:" + echo " -u -- update all packages" + echo " -d -- download the packages only" + echo " -m -- use custom element package map (Example: -m nova)" + exit 0 +} + function run_zypper() { # TODO: Uncertain if this can ever block wanting input from user zypper --non-interactive --gpg-auto-import-keys "$@" } -if [ "$1" = "-u" ] ; then - run_zypper dist-upgrade - exit 0 -elif [ "$1" = "-d" ] ; then - EXTRA_ARGS="--download-only" - shift -fi +TEMP=$(getopt -o hudem: -n $SCRIPTNAME -- "$@") +if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi +eval set -- "$TEMP" + +while true ; do + case "$1" in + -u) run_zypper dist-upgrade; exit 0;; + -d) EXTRA_ARGS="--download-only"; shift;; + -m) MAP_ELEMENT=$2; shift 2;; + -h) show_options;; + --) shift; break ;; + *) echo "Error: unsupported option $1."; exit 1;; + esac +done # Packages that aren't available in the distro but requested for installation # can be ignored by adding them to the exclude list BLACKLIST=(dkms) -WHITELIST=() +WHITELIST="" for i in "$@" do - if [[ ! ${BLACKLIST[*]} =~ $i ]]; then + PKG_NAME=$i + if [ -n "$MAP_ELEMENT" ]; then + PKG_NAME=$(pkg-map --element $MAP_ELEMENT $i) + fi + if [[ ! ${BLACKLIST[*]} =~ $PKG_NAME ]]; then WHITELIST+="$i " else echo "The package $i is not available and will not be installed" fi done + if [ -n "$WHITELIST" ]; then - run_zypper install $EXTRA_ARGS $(map-packages $WHITELIST) + if [ -n "$MAP_ELEMENT" ]; then + if ! PKGS=$(pkg-map --element $MAP_ELEMENT $WHITELIST); then + echo "bin/pkg-map error. $PKGS" + exit 1 + fi + else + PKGS=$(map-packages $WHITELIST) + fi + run_zypper install $EXTRA_ARGS $PKGS fi