From 5254aedfe57608546760bdfeec623aad2804337d Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 1 May 2014 12:29:26 -0400 Subject: [PATCH] Yum: support pkg-map in bin/install-packages Updates the yum 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: I19240e74b69859f7faf9cd80440633234a677d63 --- elements/yum/bin/install-packages | 55 ++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/elements/yum/bin/install-packages b/elements/yum/bin/install-packages index b38fe65a0..68409afd0 100755 --- a/elements/yum/bin/install-packages +++ b/elements/yum/bin/install-packages @@ -19,25 +19,47 @@ set -o pipefail EXTRA_ARGS= ACTION=install +MAP_ELEMENT= -if [ "$1" = "-u" ] ; then - yum -y update +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 " -e -- erase/remove packages" + echo " -m -- use custom element package map (Example: -m nova)" exit 0 -elif [ "$1" = "-d" ] ; then - EXTRA_ARGS="--downloadonly" - shift -elif [ "$1" = "-e" ]; then - ACTION=erase - 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) yum -y update; exit 0;; + -d) EXTRA_ARGS="--downloadonly"; shift;; + -e) ACTION="erase"; 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=$(cat /tmp/yum-blacklist 2>/dev/null || echo "") -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="$WHITELIST $i" else echo "The package $i is not available and will not be installed" @@ -47,7 +69,16 @@ if [ -n "$WHITELIST" ]; then if [ -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release ]; then rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release fi - yum -y $ACTION $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 + echo "Installing $PKGS" + yum -y $ACTION $EXTRA_ARGS $PKGS for pkg in "$@"; do if [ "$pkg" = "python-pip" ] ; then alternatives --install /usr/bin/pip pip /usr/bin/pip-python 10