anvil/smithy
Joshua Harlow 9697e7c2f9 Helpful cleanups.
1. Ensure the changelog is in ascii
2. Allow post-download patches to come from a directory instead of from a single set of files.
3. Allow rpm patches to come from a directory instead of a single list of files
4. Update smithy so that the epel rpm location can come from somewhere not epel (if desired)
5. Ensure we cleanup the 'negative' phase files correctly at the various phases.
2012-10-26 17:15:36 -07:00

133 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root!" 1>&2
exit 1
fi
shopt -s nocasematch
# Possible locations of the epel rpm/list url
RHEL_VERSION=$(lsb_release -r | awk '{ print $2 }' | cut -d"." -f1)
EPEL_RPM_LIST="http://mirrors.kernel.org/fedora-epel/$RHEL_VERSION/i386"
NODE_RPM_URL="http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm"
ARGS="$@"
VER=$(python -c "from anvil import version; print version.version_string()")
PWD=`pwd`
if [ -z "$BOOT_FILES" ]; then
BOOT_FN=".anvil_bootstrapped"
BOOT_FILES="${PWD}/$BOOT_FN"
if [ -n "$SUDO_USER" ]; then
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
if [ -n "$USER_HOME" ]; then
BOOT_FILES="${BOOT_FILES} ${USER_HOME}/$BOOT_FN"
fi
fi
BOOT_FILES="${BOOT_FILES} ${HOME}/$BOOT_FN"
fi
has_bootstrapped()
{
for i in $BOOT_FILES; do
if [ -f $i ]; then
contents=`cat $i`
if [ "$contents" == "$VER" ]; then
return 0
fi
fi
done
return 1
}
bootstrap_rh()
{
echo "Bootstrapping RHEL: $1"
echo "Please wait..."
echo "Installing node.js yum repository configuration."
JS_REPO_RPM_FN=$(basename $NODE_RPM_URL)
if [ ! -f "/tmp/$JS_REPO_RPM_FN" ]; then
echo "Downloading $JS_REPO_RPM_FN to /tmp/$JS_REPO_RPM_FN..."
wget -q -O "/tmp/$JS_REPO_RPM_FN" "$NODE_RPM_URL"
if [ $? -ne 0 ]; then
return 1
fi
fi
echo "Installing /tmp/$JS_REPO_RPM_FN..."
yum install --assumeyes --nogpgcheck -t "/tmp/$JS_REPO_RPM_FN" 2>&1
echo "Locating the EPEL rpm..."
if [ -z "$EPEL_RPM" ]; then
EPEL_RPM=$(curl -s "$EPEL_RPM_LIST/" | grep -io ">\s*epel.*.rpm\s*<" | grep -io "epel.*.rpm")
if [ $? -ne 0 ]; then
return 1
fi
fi
if [ ! -f "/tmp/$EPEL_RPM" ]; then
echo "Downloading $EPEL_RPM to /tmp/$EPEL_RPM"
wget -q -O "/tmp/$EPEL_RPM" "$EPEL_RPM_LIST/$EPEL_RPM"
if [ $? -ne 0 ]; then
return 1
fi
fi
echo "Installing /tmp/$EPEL_RPM..."
yum install --assumeyes --nogpgcheck -t "/tmp/$EPEL_RPM" 2>&1
echo "Installing distribution dependencies..."
pkgs="gcc git pylint python python-netifaces python-pep8 python-cheetah"
pkgs="$pkgs python-pip python-progressbar PyYAML python-ordereddict python-iso8601"
yum install -y $pkgs 2>&1
echo "Installing pypi dependencies..."
pip-python install -U -I termcolor iniparse "keyring>=0.9.2"
return 0
}
run_smithy()
{
PYTHON=`which python`
exec $PYTHON anvil $ARGS
}
puke()
{
if [[ "$FORCE" == "yes" ]]; then
run_smithy
else
echo "To run anyway set FORCE=yes and rerun."
exit 1
fi
}
has_bootstrapped
if [ $? -eq 0 ]; then
run_smithy
fi
TYPE=$(lsb_release -d | cut -f 2)
if [[ "$TYPE" =~ "Red Hat Enterprise Linux Server" ]]; then
RH_VER=$(lsb_release -r | cut -f 2)
BC_OK=$(echo "$RH_VER < 6" | bc)
if [ "$BC_OK" == "1" ]; then
echo "This script must be ran on RHEL 6.0+ and not RHEL $RH_VER."
puke
fi
bootstrap_rh $RH_VER
if [ $? -eq 0 ]; then
for i in $BOOT_FILES; do
echo "$VER" > $i
done
run_smithy
else
echo "Bootstrapping RHEL $RH_VER failed."
exit 1
fi
else
echo "Anvil has not been tested on distribution '$TYPE'"
puke
fi