Created
October 24, 2016 17:56
-
-
Save kckrinke/b15137f99360965bb5f1a5e4c762c3d1 to your computer and use it in GitHub Desktop.
apt-get hold / un-hold debian package
This file contains 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
#!/bin/bash | |
# | |
# To hold one or more packages: | |
# apt-hold <pkg> [pkg2 ...] | |
# | |
# To un-hold one ore more packages: | |
# apt-hold -u <pkg> [pkg2 ...] | |
# or if this script is symlinked as apt-unhold: | |
# apt-unhold <pkg> [pkg2 ...] | |
function display_usage { | |
while [ $# -gt 0 ]; do echo "$1" 1>&2; shift; done | |
echo "Place APT packages on hold." 1>&2 | |
echo "usage: $(basename $0) [pkgname...]" 1>&2 | |
exit 1 | |
} | |
function apt_hold { | |
local pkg="$1" | |
dpkg --get-selections | egrep -q "\\b${pkg}\\b\\s*install" | |
if [ $? -ne 0 ] | |
then | |
echo "${pkg} is not set for install" | |
return 0 | |
fi | |
echo "Marking ${pkg} for holding" | |
echo "${pkg} hold" | dpkg --set-selections | |
return $? | |
} | |
function apt_unhold { | |
local pkg="$1" | |
dpkg --get-selections | egrep -q "\\b${pkg}\\b\\s*hold" | |
if [ $? -ne 0 ] | |
then | |
echo "${pkg} is not set for hold" | |
return 0 | |
fi | |
echo "Marking ${pkg} for installation" | |
echo "${pkg} install" | dpkg --set-selections | |
return $? | |
} | |
if [ $EUID -ne 0 ] | |
then | |
echo "root privileges required." | |
exit 1 | |
fi | |
PKG_NAMES="" | |
DO_UNHOLD=0 | |
[ "$(basename $0)" == "apt-unhold" ] && DO_UNHOLD=1 | |
while [ $# -gt 0 ] | |
do | |
case "$1" in | |
"-h"|"--help") display_usage;; | |
"-u"|"--unhold") DO_UNHOLD=1;; | |
*) | |
export PKG_NAMES="${PKG_NAMES} $1" | |
;; | |
esac | |
shift | |
done | |
if [ -z "${PKG_NAMES}" ] | |
then | |
dpkg --get-selections | grep hold | |
if [ $? -ne 0 ] | |
then | |
echo "No packages are being held." | |
fi | |
exit 0 | |
fi | |
for pkg in ${PKG_NAMES} | |
do | |
if [ $DO_UNHOLD -eq 1 ] | |
then | |
apt_unhold "${pkg}" | |
else | |
apt_hold "${pkg}" | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment