142 lines
3.3 KiB
Bash
142 lines
3.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
INSTALLER_OPTS=""
|
|
UNINSTALLER_OPTS=""
|
|
PMGR=""
|
|
PMGR_LIST_OPTS=""
|
|
|
|
function include(){
|
|
curr_dir=$(cd $(dirname "$0") && pwd)
|
|
inc_file_path=$curr_dir/$1
|
|
if [ -f "$inc_file_path" ]; then
|
|
. $inc_file_path
|
|
else
|
|
exit 1
|
|
fi
|
|
}
|
|
function set_install_options(){
|
|
case $1 in
|
|
apt-get )
|
|
INSTALLER_OPTS="-y -q install"
|
|
UNINSTALLER_OPTS="-y -q remove"
|
|
PMGR="dpkg"
|
|
PMGR_LIST_OPTS="-s"
|
|
;;
|
|
yum )
|
|
INSTALLER_OPTS="--assumeyes install"
|
|
UNINSTALLER_OPTS="--assumeyes erase"
|
|
PMGR="rpm"
|
|
PMGR_LIST_OPTS="-q"
|
|
;;
|
|
urpm* )
|
|
INSTALLER_OPTS="-y"
|
|
UNINSTALLER_OPTS=""
|
|
PMGR="rpm"
|
|
PMGR_LIST_OPTS="-q"
|
|
;;
|
|
zypper )
|
|
INSTALLER_OPTS="install"
|
|
UNINSTALLER_OPTS="remove --quiet"
|
|
PMGR="rpm"
|
|
PMGR_LIST_OPTS="-q"
|
|
;;
|
|
pip )
|
|
INSTALLER_OPTS="install"
|
|
UNINSTALLER_OPTS="uninstall --yes"
|
|
find_pip
|
|
PACKAGER=$PIPCMD
|
|
PMGR=$PIPCMD
|
|
PMGR_LIST_OPTS="freeze | grep"
|
|
;;
|
|
* )
|
|
exit 1
|
|
;;
|
|
esac
|
|
PACKAGER=$(which $1)
|
|
if [ $? -ne 0 ]; then
|
|
log "Can't find \"$1\", exiting!"
|
|
exit 1
|
|
fi
|
|
}
|
|
function package_install(){
|
|
PKG=$1
|
|
eval "$PMGR $PMGR_LIST_OPTS $PKG" > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
log "\"$PKG\" already installed"
|
|
else
|
|
log "Installing \"$PKG\" ..."
|
|
$PACKAGER $INSTALLER_OPTS $PKG > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
log "\"$PKG\" installation fails, exiting!"
|
|
exit 1
|
|
else
|
|
log "\t\t...success"
|
|
fi
|
|
fi
|
|
}
|
|
function package_uninstall(){
|
|
PKG=$1
|
|
eval "$PMGR $PMGR_LIST_OPTS $PKG" > /dev/null 2>&1
|
|
if [ $? -eq 1 ]; then
|
|
log "\"$PKG\" not installed"
|
|
else
|
|
log "Unnstalling \"$PKG\" ..."
|
|
$PACKAGER $UNINSTALLER_OPTS $PKG > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
log "\"$PKG\" uninstallation fails, exiting!"
|
|
exit 1
|
|
else
|
|
log "\t\t...success"
|
|
fi
|
|
fi
|
|
}
|
|
function run_install(){
|
|
for PKG in $@
|
|
do
|
|
package_install $PKG
|
|
done
|
|
}
|
|
function run_uninstall(){
|
|
for PKG in $@
|
|
do
|
|
package_uninstall $PKG
|
|
done
|
|
}
|
|
# Main workflow
|
|
include "common.sh"
|
|
if [ $# -eq 0 ]; then
|
|
script=$(basename $0)
|
|
echo -e "Usage:\n\t* install packages -- ./$script -p package_manager -i package0 [packageN]\n\t* remove packages -- ./$script -p package_manager -r package0 [packageN]"
|
|
exit 1
|
|
fi
|
|
Packager=''
|
|
get_os
|
|
if [ $? -ne 0 ]; then
|
|
log "Unsupported *nix version ($DistroBasedOn - $DIST/$PSUEDONAME/$REV/$MACH)"
|
|
exit 1
|
|
fi
|
|
while getopts ":p:i:r:" opt ; do
|
|
case "$opt" in
|
|
p)
|
|
if [[ "$OPTARG" != sys ]]; then
|
|
Packager=$OPTARG
|
|
fi
|
|
set_install_options $Packager
|
|
;;
|
|
i)
|
|
n=$OPTARG
|
|
run_install $(collect_args $n $@)
|
|
break;
|
|
;;
|
|
r)
|
|
n=$OPTARG
|
|
run_uninstall $(collect_args $n $@)
|
|
break;
|
|
;;
|
|
\?)
|
|
log "Invalid option: -$OPTARG" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1)) |