This is an old revision of the document!
This is a shell-script setting a package to be set up, if another package is already installed
I use this script to either set “setup”-Task on all hosts, already having a special package (for updating)
or to install a software like adobeflash, if a host has already Mozilla Firefox
#!/bin/bash
# insert proper values for your opsi-server here
# Feel free to modify, as long as you let us participate on your changes...
# Licensed under GPL
# Copyright Sven Schumacher, 2011
# NO WARRANTY
defaultuser="admin"
BASENAME=`basename $0`
OPSIDEPOT=`cat /etc/opsi/opsiconfd.conf|grep opsi-depot|awk -F= '{ print $2; }'|cut -d ' ' -f 2` # NOT the workbench-dir
#OPSIDEPOT=/opsidepot/pcbin/install
CUT_OF_DOMAIN=`dnsdomainname`
# if backend file is used for softwareaudits, scroll down and uncomment line starting with "# hostlist=`fgrep "
OPSI_SOFTWARE_INVENTORY_DIR="/var/lib/opsi/config/audit" # where to find *.sw-files generated by swaudit
# if backend mysql is used for softwareaudits nothing needs to be changed
# NO MORE CHANGES BELOW THIS LINE NEEDED
function usageinfo {
echo "$BASENAME [OPTIONS] PRODUCT PRODUCTID
$BASENAME sets for each found host which has PRODUCT installed the PRODUCTID to be installed
Usage (e.g.):
$BASENAME Firefox adobeflash
Options:
-q|--quiet be quiet
-h prints this help
--host single host to install
-u USER the user to be used (default: admin)
-p PASSWORD the password for user in OPSI (read by STDIN if missing)
Where
PRODUCT product, which should be listed in software-inventory
PRODUCTID id of the package, which should be installed
"
}
user=$defaultuser;
#use getopt to parse options
TEMP=`getopt -o hqp:u: --long help,quiet,host:,user:,password: \
-n 'opsi-productadd' -- "$@"`
if [ $? != 0 ] ; then usageinfo ; exit 1 ; fi
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"
quiet="1"
while true ; do
case "$1" in
-q|--quiet)
quiet="0";
shift;
;;
-u|--user)
user=$2;
shift 2;
;;
--host)
host=$2;
shift 2;
;;
-p|--password)
password=$2;
shift 2;
;;
-h|--help)
usageinfo;
shift;
exit 1;
;;
--) shift; break;;
*) echo "We never should get here. Fatal error. AAAARRGS"; exit 1;;
esac
done;
if [ $# != 2 ]; then
echo "Missing essential parameters"
usageinfo
exit 1;
fi
#if you don't want to enter the password in commandline, you'll be asked for it
if [ -z "$password" ]; then
read -s -p "Enter password for user $user (will not be displayed):"
echo
password=$REPLY
fi
product=$1;
productid=$2;
cd $OPSI_SOFTWARE_INVENTORY_DIR
if [ ! -d "$OPSIDEPOT/$productid" ]; then
echo "No such package: $productid";
exit 1;
fi
if [ -z "$host" ]; then
# to be replaced by mysql query
# use the following line if software-audit has backend "mysql"
hostlist=`(mysql -N --password=opsi -u opsi opsi <<--ENDE
SELECT clientid FROM SOFTWARE_CONFIG WHERE name LIKE "%$product%";
-ENDE
)|sed " s/.$CUT_OF_DOMAIN//g; "|uniq`
# if your software-audit has backend file use this line instead
# hostlist=`fgrep -r $product *.sw |awk -F: '{ print $1; }'|egrep -v "global"|sed " s/.sw//g; s/.$CUT_OF_DOMAIN//g; "|uniq`
else
hostlist=$host
fi
for I in $hostlist; do
if [[ $quiet = "1" ]] ; then
echo "Setting install for $I of $productid"
fi
opsi-admin -u $user -p $password method setProductActionRequest $productid $I.$CUT_OF_DOMAIN setup;
done