Skip to content

Instantly share code, notes, and snippets.

@piavlo
Created June 3, 2013 12:51
Show Gist options
  • Save piavlo/5697900 to your computer and use it in GitHub Desktop.
Save piavlo/5697900 to your computer and use it in GitHub Desktop.
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