Created
June 3, 2013 12:51
-
-
Save piavlo/5697900 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
deb_hold_packages() { | |
for pkg in $*; do | |
aptitude hold $pkg | |
echo $pkg hold | /usr/bin/dpkg --set-selections | |
done | |
} | |
deb_installnoninteractive() { | |
logger -is -p local1.notice -t ec2bootstrap "installing deb package $*" | |
env DEBIAN_FRONTEND=noninteractive aptitude install -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' -f -q -y $* | |
} | |
is_package_installed() { | |
local pkg=$1 | |
local ver=$2 | |
if [ "deb" == "${os_packaging}" ]; then | |
if [ ! -z "$ver" ]; then | |
apt-cache policy $pkg | awk '$1 ~ /^Installed:$/ && $2 ~ /'${ver}'/ {exit 13}' | |
[ $? -eq 13 ] && return 0 | |
return 1 | |
else | |
apt-cache policy $pkg | awk '$1 ~ /^Installed:$/ && $2 !~ /(none)/ {exit 13}' | |
[ $? -eq 13 ] && return 0 | |
return 1 | |
fi | |
elif [ "rpm" == "${os_packager}" ]; then | |
rpm -qi $pkg | egrep -q -e "package $1 is not installed" | |
if [ $? -eq 0 ]; then | |
return 1 | |
elif [ ! -z "$ver" ]; then | |
version=$(rpm -qi $pkg | awk '$1 ~ /Version/ {print $3}') | |
rpm -q $pkg | egrep -q -e ${version} | |
return $? | |
fi | |
else | |
exit 666 | |
fi | |
} | |
assert_package() { | |
[ "X${1}" == "Xpin" ] && local pin=true && shift | |
local pkg=$1 | |
local ver=$2 | |
if [ "deb" == "${os_packaging}" ]; then | |
# apt-cache policy $pkg >&2 | egrep -q -e '.*Unable.*to.*locate.*package.*'${pkg}'$' | |
# if [ $? -eq 0 ]; then | |
# logger -is -p local1.notice -t ec2bootstrap "deb package ${pkg} does not exists" | |
# return 1 | |
# fi | |
if [ ! -z "$ver" ]; then | |
apt-cache policy $pkg | awk '$1 ~ /^Installed:$/ && $2 ~ /'${ver}'/ {exit 13}' | |
[ $? -eq 0 ] && deb_installnoninteractive ${pkg}=${ver} && deb_hold_packages $pkg | |
if [ $? -eq 0 ] && test $pin; then | |
deb_hold_packages $pkg | |
deb_pin_package $pkg $ver | |
fi | |
else | |
apt-cache policy $pkg | awk '$1 ~ /^Installed:$/ && $2 !~ /(none)/ {exit 13}' | |
[ $? -eq 0 ] && deb_installnoninteractive $pkg | |
if [ $? -eq 0 ] && test $pin; then | |
deb_pin_packages $pkg | |
fi | |
fi | |
elif [ "rpm" == "${os_packager}" ]; then | |
rpm -qi $pkg | egrep -q -e "package $1 is not installed" | |
if [ $? -eq 0 ]; then | |
if [ -z "$ver" ]; then | |
yum -y install $pkg | |
else | |
yum -y install ${pkg}-${ver} | |
fi | |
elif [ ! -z "$ver" ]; then | |
version=$(rpm -qi $pkg | awk '$1 ~ /Version/ {print $3}') | |
rpm -q $pkg | egrep -q -e ${version} | |
[ $? -ne 0 ] && yum -y install ${pkg}-${ver} | |
fi | |
else | |
exit 666 | |
fi | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment