boinc/packages/solaris/CSW/boincclient/preinstall

92 lines
3.0 KiB
Bash

#! /bin/sh
PATH=/bin:/usr/bin:/usr/ucb/bin:/opt/csw/bin
export PATH
if [ -x $PKG_INSTALL_ROOT/opt/csw/etc/csw.conf ] ; then
. $PKG_INSTALL_ROOT/opt/csw/etc/csw.conf
fi
if [ -x $PKG_INSTALL_ROOT/etc/opt/csw/csw.conf ] ; then
. $PKG_INSTALL_ROOT/etc/opt/csw/csw.conf
fi
BOINCUSER=boinc
BOINCGROUP="`( groups ${BOINCUSER} 2>/dev/null || echo boinc ) | gawk '{print $1}'`"
MAJOR=`uname -r | gawk -F. '{print $1}'`
MINOR=`uname -r | gawk -F. '{print $2}'`
# find our run directory
if [ $MAJOR -gt 5 -o \( $MAJOR -eq 5 -a $MINOR -gt 9 \) ] ; then
BOINCDIR=$PKG_INSTALL_ROOT/var/lib/boinc
if [ -d $PKG_INSTALL_ROOT/var/opt/csw/boinc -a ! -d $PKG_INSTALL_ROOT/var/lib/boinc ] ; then
mv -f $PKG_INSTALL_ROOT/var/opt/csw/boinc $PKG_INSTALL_ROOT/var/lib/boinc
fi
else
BOINCDIR=$PKG_INSTALL_ROOT/var/opt/csw/boinc
fi
# find out if the group $BOINCGROUP exists
GROUPENT=`getent group $BOINCGROUP`
# if we need to create the boinc group, find the first unused group number
# 2316 or highter
if [ -z "${GROUPENT}" ] ; then
getent group | gawk -F: '{print $3}' > /tmp/$$.grp
try=2316
while [ ! -z "`grep \^$try /tmp/$$.grp`" ] ; do
try=`expr $try + 1`
done
GROUPNUM=${try}
GROUPENT="${BOINCGROUP}::${try}:"
cp $PKG_INSTALL_ROOT/etc/group $PKG_INSTALL_ROOT/etc/group.boinc_install.bak
echo ${GROUPENT} >> $PKG_INSTALL_ROOT/etc/group
/bin/rm /tmp/$$.grp
else
GROUPNUM=`echo $GROUPENT | gawk -F: '{print $3}'`
fi
# Now find out if the user ${BOINCUSER} exists.
USERENT=`getent passwd $BOINCUSER`
# if we need to create the boinc group, find the first unused user number
# ${BOINCGROUP} or highter
if [ -z "${USERENT}" ] ; then
getent passwd | gawk -F: '{print $3}' >/tmp/$$.user
try="${GROUPNUM}"
while [ ! -z "`grep \^$try /tmp/$$.user`" ] ; do
try=`expr $try + 1`
done
USERENT="${BOINCUSER}:x:${try}:${GROUPNUM}:BOINC client user:${BOINCDIR}:/bin/ksh"
cp $PKG_INSTALL_ROOT/etc/passwd $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak
echo $USERENT >> $PKG_INSTALL_ROOT/etc/passwd
/bin/rm /tmp/$$.user
fi
# Does our user entry point to the correct directory?
if [ -z "`echo $USERENT | grep $BOINCDIR`" ] ; then
# No. We need to correct it.
USERENT=`echo $USERENT | gawk -F: '{print $1":"$2":"$3":"$4":"$5":'$BOINCDIR':"$7}'`
grep -v \^${BOINCUSER}: $PKG_INSTALL_ROOT/etc/passwd > /tmp/passwd.$$
echo "$USERENT" >> /tmp/passwd.$$
if [ ! -f $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak ] ; then
cp $PKG_INSTALL_ROOT/etc/passwd $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak
fi
mv -f /tmp/passwd.$$ $PKG_INSTALL_ROOT/etc/passwd
fi
# check for our shadow entry
shadent="`grep \^$BOINCUSER: $PKG_INSTALL_ROOT/etc/shadow`"
if [ -z "$shadent" ] ; then
shadent="${BOINCUSER}:NP:16384::::::"
cp $PKG_INSTALL_ROOT/etc/shadow $PKG_INSTALL_ROOT/etc/shadow.boinc_install.bak
chmod 0400 $PKG_INSTALL_ROOT/etc/shadow.boinc_install.bak
echo $shadent >> $PKG_INSTALL_ROOT/etc/shadow
fi
# Create the run directory and set permissions properly.
if [ ! -d $BOINCDIR ] ; then
mkdir -p $BOINCDIR
fi
chown -R $BOINCUSER:$BOINCGROUP $BOINCDIR