#!/bin/sh # install-queue -- a queue installer # Copyright (C) 2008, Laurent Mazet # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ # Changelog: # - 0.1.0 # * initial version # Potential bugs: ## constant values version=0.1.0 ## read configuration file [ -f /etc/${progname}rc ] && source /etc/${progname}rc [ -f $HOME/.${progname}rc ] && source $HOME/.${progname}rc ## variables # user parameters : ${qdbpw=qu3u3} : ${qid=5555} : ${qpassword=/TitHazmX3t.4PlbucKNc3g.i8/} : ${quser=queue} # directories : ${prefix=/usr} : ${bindir=$prefix/bin} : ${docdir=$prefix/share/doc} : ${etcdir=/etc} : ${initrddir=/etc/init.d} : ${logdir=/var/log} : ${mandir=$prefix/share/man} : ${nfsdir=/home/$quser} : ${spooldir=/home/$quser/spool} # configuration files : ${autofsdir=/etc/autofs} : ${permlocal=/etc/security/msec/perm.local} # network parameters : ${clusterhead=babel.softndesign.org} : ${netmask=192.168.1.0/24} ## check arguments progname=$(basename $0) while [ $# -gt 0 ]; do case "$1" in -h|--help) ## help message echo "usage: $progname -h|--help $progname -v|--version $progname client $progname head $progname node" exit 0 ;; -v|--version) ## show version echo "$progname version $version" >&2 exit 0 ;; install|remove) # set process mode process=$1 ;; client|head|node) # set host type host=$1 ;; *) echo "usage: $progname -h" >&2 exit 1 ;; esac shift done ## check that host and process are set if [ "$process" -a "$host" ]; then true; else echo "usage: $progname -h" >&2 exit 1 fi ## queue version eval $(grep \^version queue) ## file installations case $process in install) ## create directories [ "node" = "$host" -a \! -d $autofsdir ] && mkdir -p -m 755 $autofsdir [ -d $bindir ] || mkdir -p -m 755 $bindir [ -d $etcdir ] || mkdir -p -m 755 $etcdir [ -d $initrddir ] || mkdir -p -m 755 $initrddir [ "node" = "$host" -a \! -d $logdir ] && mkdir -p -m 755 $logdir/queue [ "node" = "$host" ] && chown queue.root $logdir/queue [ -d $mandir/man1 ] || mkdir -p -m 755 $mandir/man1 [ -d $docdir/queue-$version ] || mkdir -p -m 755 $docdir/queue-$version ## install queue script install -m 755 queue $bindir sed -i "s#/etc/#$etcdir/#g" $bindir/queue ## install update-queue-password script if [ $host = "head" ]; then install -m 755 update-queue-password $bindir sed -i "s#/etc/#$etcdir/#g" $bindir/update-queue-password fi ## install default configuration file install -m 644 queuerc $etcdir sed -i -e 's#^\#\(head=\).*$#\1'$clusterhead'#' \ -e 's#^\#\(home=\).*$#\1'$spooldir'#' $etcdir/queuerc ## install autofs configuration files [ $host = "node" ] && install -m 644 auto.* $autofsdir ## install service node script if [ $host = "node" ]; then install -m 700 node $initrddir sed -i "s#/etc/#$etcdir/#g" $initrddir/node fi ## install documentation files install -m 644 queue.1 $mandir/man1 install -m 644 queue.sql BUGS INSTALL README $docdir/queue-$version ;; remove) ## remove scripts [ $host = "node" ] && for f in auto.*; do rm -f $autofsdir/$f; done rm -f $bindir/queue [ $host = "head" ] && rm -f $bindir/update-queue-password rm -f $etcdir/queuerc [ $host = "node" ] && rm -f $initrddir/node rm -f $mandir/man1/queue.1 rm -rf $docdir/queue-$version [ $host = "head" ] && rm -rf $logdir/queue ;; esac ## manage user and group case $host in head|node) case $process in install) ## create a user queue in group queue id 5555 [ "$(grep \^$quser: $etcdir/group)" ] || groupadd $quser -g $qid [ "$(grep \^$quser: $etcdir/passwd)" ] || \ useradd $quser -u $qid -g $quser -p $qpassword ;; remove) ## removinf group and user queue [ "$(grep \^$quser: $etcdir/passwd)" ] && userdel $quser [ "$(grep \^$quser: $etcdir/group)" ] && groupdel $quser ;; esac esac ## manage spool directory case $host in head) case $process in install) ## create spool directory if [ \! -d $spooldir ]; then mkdir -p $spooldir chown $quser.$quser $spooldir chmod 770 $spooldir fi esac esac ## manage msec policy case $host in head) case $process in install) ## update msec policy ( cat $permlocal l="" for d in $(echo $spooldir | sed 's/\// /g'); do l="$l/$d" if [ -z "$(grep \^$l $permlocal)" ]; then echo -n $l for i in $(seq ${#l} 48); do echo -n " "; done echo -n "$quser.$quser" for i in $(seq $(expr ${#quser} \* 2 + 1) 24); do echo -n " "; done echo "750" fi done ) | sort >$permlocal.tmp mv -f $permlocal.tmp $permlocal ;; remove) ## remove specific msec policy sed -i "/$quser\\.$quser/ d" $permlocal ;; esac esac ## manage nfs server case $host in head) case $process in install) ## export nfs directory [ "$(grep \^$nfsdir $etcdir/exports)" ] || \ echo "$nfsdir $netmask(root_squash,async,secure,subtree_check,rw)" \ >> $etcdir/exports chmod a+rx $nfsdir ;; remove) ## unexport nfs directory sed -i '\#^'$nfsdir'# d' $etcdir/exports ;; esac # resync nfs serveur exportfs esac ## manage autofs client case $host in node) case $process in install) ## update autofs rules for f in auto.*; do [ "$(grep '$autofsdir/$f' $autofsdir/auto.master)" ] || \ echo "${f/auto.} $autofsdir/$f --timeout=60" \ >> $autofsdir/auto.master done ;; remove) ## update autofs rules for f in auto.*; do sed -i '\#^$autofsdir/'$f'# d' $autofsdir/auto.master done ;; esac ## restart autofs service service autofs restart esac ## manage queue service case $host in node) case $process in install) ## add node service chkconfig --add node service node start ;; remove) ## remove node service service node stop chkconfig --del node ;; esac esac ## manage queue database case $host in head) case $process in install) ## create database cat mysql.sql | mysql -u root -p update-queue-password $qdbpw; ;; remove) ## remove database echo "delete from mysql.users where User='$quser';" \ "delete from mysql.db where User='$quser';" | mysql -u root -p ;; esac esac