#!/bin/bash if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then set -x fi set -eu set -o pipefail if [[ $DISTRO_NAME =~ (fedora|centos|centos7|rhel|rhel7) ]]; then # GENERAL WARNING : mixing packaged python libraries with # pip-installed versions always creates issues. Upstream # openstack-infra uses this a lot (especially devstack) but be # warned: here be dragons :) # Firstly we want to install the system packages. Otherwise later # on somebody does a "yum install python-virtualenv" and goes and # overwrites the pip installed version with the packaged version, # leading to all sorts of weird version issues. ${YUM:-yum} install -y python-virtualenv python-pip python-setuptools # install pip; this overwrites packaged pip /usr/local/bin/dib-python /tmp/get-pip.py # pip and setuptools are closely related; we want to ensure the # latest for sanity. Because distro packages don't include enough # info in the egg for pip to be certain it has fully uninstalled # the old package, for safety we clear it out by hand (this seems # to have been a problem with very old to new updates, # e.g. centos6 to current-era, but less so for smaller jumps). # There is a bit of chicken-and-egg problem with pip in that it # requires setuptools for some operations, such as wheel creation. # But just installing setuptools shouldn't require setuptools # itself, so we are safe for this small section. rm -rf /usr/lib/python2.7/site-packages/setuptools* pip install -U setuptools # now install latest virtualenv. it vendors stuff it needs so # doesn't have issues with other system packages. pip install -U virtualenv # Add this to exclude so that we don't install a later package # over it if it updates. Note that fedora-minimal, bootstrapped # via yum, can have an old yum.conf around, so look for dnf first. if [[ -f /etc/dnf/dnf.conf ]]; then conf=/etc/dnf/dnf.conf elif [[ -f /etc/yum.conf ]]; then conf=/etc/yum.conf else die "No conf to modify?" fi echo "exclude=python-virtualenv,python-pip,python-setuptools" >> ${conf} else /usr/local/bin/dib-python /tmp/get-pip.py pip install virtualenv fi