diff --git a/elements/redhat-common/pre-install.d/15-remove-grub b/elements/redhat-common/pre-install.d/15-remove-grub index 81c58912..21ab6815 100755 --- a/elements/redhat-common/pre-install.d/15-remove-grub +++ b/elements/redhat-common/pre-install.d/15-remove-grub @@ -5,35 +5,17 @@ fi set -eu set -o pipefail -GRUBNAME=$(which grub-install) || echo "trying grub2-install" -if [ -z "$GRUBNAME" ]; then - GRUBNAME=$(which grub2-install) -fi -if [ -z "$GRUBNAME" ] || [ $($GRUBNAME --version | grep -c "0.97") -ne 0 ]; then - echo "No GRUB2 found. No need to remove" +# grub2 isn't available on rhel6/centos6; they are setup to use +# extlinux. skip this +# you would think we could match on $DISTRO or something else; but +# we can't because the rhel/centos elements are a bit mixed up; +# centos-minimal for example sets distro to "centos". so the best +# check is just for the original "grub-install" script +if [ -f /sbin/grub-install ]; then exit 0 -else -# Must manually remove grub2 here, otherwise the download below does not work. - yum remove -y grub2 fi -# Remove all old versions of grub2 from the yum cache and then ensure the -# latest version is in the cache. -basearch=$(cat /etc/yum/vars/basearch) -find /tmp/yum/$basearch -regex ".*/grub2-[0-9].*\.rpm" -exec rm -f {} + -install-packages -d grub2 - -# Copy grub2 rpm out of mounted yum cache for install during finalise -mkdir -p /tmp/grub -cp $(find /tmp/yum/$basearch -regex ".*/grub2-[0-9].*\.rpm") /tmp/grub +# download the latest grub2 package and setup the install script which +# will be called later by vm/finalise.d/51-bootloader +install-packages -d /tmp/grub grub2 echo "rpm -i /tmp/grub/*.rpm" > /tmp/grub/install - -#GRUB_CFG=/boot/grub2/grub.cfg - -#[ -f "$GRUB_CFG" ] - -# Update the config to have the search UUID of the image being built. -# When partition staging is moved to a separate stage, this will need to happen -# there. This generates a non-UUID config, which is irrelevant for booting with -# hypervisor kernel + ramdisk, and fixed up by 51-grub for vm images. -#GRUB_DISABLE_LINUX_UUID=true grub2-mkconfig -o $GRUB_CFG diff --git a/elements/yum/bin/install-packages b/elements/yum/bin/install-packages index 25c77aef..90b28f86 100755 --- a/elements/yum/bin/install-packages +++ b/elements/yum/bin/install-packages @@ -33,27 +33,37 @@ function show_options () { echo echo "Options:" echo " -u -- update all packages" - echo " -d -- download the packages only" + echo " -d dir -- download the packages to directory" echo " -e -- erase/remove packages" - echo " -m -- use custom element package map (Example: -m nova)" + echo " -m map -- use custom element package map (Example: -m nova)" exit 0 } -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;; +while getopts "hud:em:" opt; do + case "$opt" in + u) + ${YUM} -y update; + exit 0 + ;; + d) + ACTION="download" + DOWNLOAD_PATH=$OPTARG + ;; + e) + ACTION="erase" + ;; + m) + MAP_ELEMENT=$OPTARG + ;; + h) + show_options + ;; + *) + exit 1 + ;; esac done +shift $((OPTIND-1)) # Packages that aren't available in the distro but requested for installation @@ -87,15 +97,39 @@ if [ -n "$WHITELIST" ]; then else PKGS=$(map-packages $WHITELIST) fi + if [ -z "${PKGS}" ]; then echo "Not running install-packages $ACTION with empty packages list" - else - echo "Running install-packages ${ACTION}. Package list: $PKGS" - ${YUM} -v -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 - fi - done + exit 0 fi + + echo "Running install-packages ${ACTION}. Package list: $PKGS" + + if [ "$ACTION" == "download" ]; then + mkdir -p $DOWNLOAD_PATH + if [ ${YUM} == "dnf" ]; then + dnf download --destdir=$DOWNLOAD_PATH $PKGS + else + # note; you don't want to use yum --download only here. + # Firstly that only puts things in the yum cache + # directory, and secondly it acts funny if old versions + # are already in the cache. + if [ ! -f /usr/bin/yumdownloader ]; then + yum install -y yum-utils + fi + yumdownloader --destdir=$DOWNLOAD_PATH $PKGS + fi + exit 0 + fi + + ${YUM} -v -y $ACTION $EXTRA_ARGS $PKGS + + # probably not the right place for this; but python-pip package on + # fedora/rh calls pip "pip-python" while the rest of the work + # expects it to be just called "pip" + for pkg in "$@"; do + if [ "$pkg" = "python-pip" ] ; then + alternatives --install /usr/bin/pip pip /usr/bin/pip-python 10 + fi + done fi