# # $Id$ # # Installation script to install bootscripts. # PATH=/bin:/sbin:/usr/bin:/usr/sbin:$MBSE_ROOT/bin DISTNAME= DISTVERS= DISTINIT= SU="su" OSTYPE=`uname -s` #------------------------------------------------------------------------ # # Logging procedure, needs two parameters. # log() { /bin/echo `date +%d-%b-%y\ %X ` $1 $2 >> installinit.log } # Check one subdirectory # checkdir() { if [ ! -d $1 ]; then mkdir $1 log "+" "[$?] created directory $1" fi } # Check /etc/rc.d subdirs # checkrcdir() { checkdir "/etc/rc.d/init.d" checkdir "/etc/rc.d/rc0.d" checkdir "/etc/rc.d/rc1.d" checkdir "/etc/rc.d/rc2.d" checkdir "/etc/rc.d/rc3.d" checkdir "/etc/rc.d/rc4.d" checkdir "/etc/rc.d/rc5.d" checkdir "/etc/rc.d/rc6.d" } #------------------------------------------------------------------------ # log "+" "installinit started" # Basic checks. if [ `whoami` != "root" ]; then cat << EOF *** Run $0 as root only! *** Because some of the system files must be changed, you must be root to use this script. *** SETUP aborted *** EOF log "!" "Aborted, not root" exit 2 fi if [ "$MBSE_ROOT" = "" ]; then echo "*** The MBSE_ROOT doesn't exist ***" log "!" "Aborted, MBSE_ROOT variable doesn't exist" exit 2 fi # First do various tests to see which Linux distribution this is. # if [ "$OSTYPE" = "Linux" ]; then if [ -f /etc/slackware-version ]; then # Slackware 7.0 and later DISTNAME="Slackware" DISTVERS=`cat /etc/slackware-version` else if [ -f /etc/debian_version ]; then # Debian, at least since version 2.2 DISTNAME="Debian" DISTVERS=`cat /etc/debian_version` else if [ -f /etc/SuSE-release ]; then DISTNAME="SuSE" DISTVERS=`cat /etc/SuSE-release | grep VERSION | awk '{ print $3 }'` else # Mandrake test before RedHat, Mandrake has a redhat-release # file also which is a symbolic link to mandrake-release. if [ -f /etc/mandrake-release ]; then DISTNAME="Mandrake" # Format: Linux Mandrake release 8.0 (Cooker) for i586 DISTVERS="`cat /etc/mandrake-release | awk '{ print $4 }'`" else if [ -f /etc/redhat-release ]; then DISTNAME="RedHat" if [ -z "`grep e-smith /etc/redhat-release`" ]; then DISTVERS=`cat /etc/redhat-release | awk '{ print $5 }'` else DISTVERS=`cat /etc/redhat-release | awk '{ print $13 }' | tr -d \)` fi else if [ -f /etc/rc.d/rc.0 ] && [ -f /etc/rc.d/rc.local ]; then # If Slackware wasn't detected yet it is version 4.0 or older. DISTNAME="Slackware" DISTVERS="Old" else DISTNAME="Unknown" log "!" "unknown distribution, collecting data" log "-" "`uname -a`" log "-" "`ls -la /etc`" echo "Failed to install bootscripts, unknown Linux distribution." echo "Please mail the file `pwd`/script/installinit.log to mbroek@users.sourceforge.net" echo "or send it as file attach to Michiel Broek at 2:280/2802@Fidonet." echo "Add information about the distribution you use in the message." exit 1; fi fi fi fi fi fi fi if [ "$OSTYPE" = "FreeBSD" ]; then DISTNAME="FreeBSD" DISTVERS=`uname -r` PW="pw " fi if [ "$OSTYPE" = "NetBSD" ]; then DISTNAME="NetBSD" DISTVERS=`uname -r` fi log "+" "Distribution $OSTYPE $DISTNAME $DISTVERS" #-------------------------------------------------------------------------- # # Adding scripts for SuSE # if [ "$DISTNAME" = "SuSE" ]; then DISTINIT="/sbin/init.d/mbsed" echo "Installing SystemV init scripts for SuSE" log "+" "Installing SystemV init scripts for SuSE" echo "Adding $DISTINIT" cat << EOF >$DISTINIT #!/bin/bash # Copyright (c) 2001 Michiel Broek # # Author: Michiel Broek , 23-May-2001 # # $DISTINIT for SuSE # # Find the MBSE_ROOT from the /etc/passwd file. MBSE_ROOT=\`cat /etc/passwd | grep mbse: | awk -F ':' '{ print \$6}'\` if [ "\$MBSE_ROOT" = "" ] then echo "MBSE BBS: No 'mbse' user in the password file." exit 1 fi if [ ! -d \$MBSE_ROOT ] then echo "MBSE BBS: Home directory '\$MBSE_ROOT' not found." exit 1 fi export MBSE_ROOT case "\$1" in start|reload) echo -n "MBSE BBS starting:" rm -f \$MBSE_ROOT/sema/* rm -f \$MBSE_ROOT/var/*.LCK rm -f \$MBSE_ROOT/tmp/mb* $SU mbse -c '\$MBSE_ROOT/bin/mbtask' >/dev/null echo -n " mbtask" sleep 2 if [ -f \$MBSE_ROOT/etc/config.data ]; then $SU mbse -c '\$MBSE_ROOT/bin/mbstat open -quiet' echo " and opened the bbs." else echo "" fi ;; stop) echo -n "MBSE BBS shutdown:" if [ -f \$MBSE_ROOT/etc/config.data ]; then echo -n " logoff users " $SU mbse -c '\$MBSE_ROOT/bin/mbstat close wait -quiet' >/dev/null echo -n "done," fi echo -n " stopping mbtask " killproc \$MBSE_ROOT/bin/mbtask -15 echo "done." ;; restart) echo "Restarting MBSE BBS: just kidding!" ;; status) echo -n "MBSE BBS status: " if [ "\`/sbin/pidof mbtask\`" = "" ]; then echo "mbtask is NOT running" else echo "mbtask Ok" fi ;; *) echo "Usage: \$0 {start|stop|status|reload|restart}" exit 1 esac exit 0 EOF chmod 755 /etc/rc.d/init.d/mbsed echo "Making links for start/stop in runlevel 2" ln -s ../mbsed /sbin/init.d/rc2.d/K05mbsed ln -s ../mbsed /sbin/init.d/rc2.d/S99mbsed echo "Making links for start/stop in runlevel 3" ln -s ../mbsed /sbin/init.d/rc3.d/K05mbsed ln -s ../mbsed /sbin/init.d/rc3.d/S99mbsed echo "SuSE SystemV init configured" log "+" "SuSE SystemV init configured" fi #-------------------------------------------------------------------------- # # Adding scripts for Slackware # if [ "$DISTNAME" = "Slackware" ]; then if [ "$DISTVERS" = "Old" ] || [ "$DISTVERS" = "7.0.0" ]; then # # Slackware before version 7.1 # DISTINIT="$MBSE_ROOT/etc/rc" echo "Adding old style Slackware MBSE BBS start/stop scripts" log "+" "Adding old style Slackware MBSE BBS start/stop scripts" if [ "`grep MBSE /etc/rc.d/rc.local`" = "" ]; then log "+" "Adding $MBSE_ROOT/etc/rc to /etc/rc.d/rc.local" mv /etc/rc.d/rc.local /etc/rc.d/rc.local.mbse cat /etc/rc.d/rc.local.mbse >/etc/rc.d/rc.local echo "# Start MBSE BBS" >>/etc/rc.d/rc.local echo "$MBSE_ROOT/etc/rc" >>/etc/rc.d/rc.local chmod 755 /etc/rc.d/rc.local echo " Added $MBSE_ROOT/etc/rc to /etc/rc.d/rc.local" echo " /etc/rc.d/rc.local.mbse is a backup file." echo "" echo " You must manualy insert the lines '$MBSE_ROOT/etc/rc.shutdown'" echo " into /etc/rc.d/rc.0 and /etc/rc.d/rc.K If you don't do it" echo " everything will work also, but MBSE BBS isn't proper closed" echo " if you halt or reboot your system." fi cp mbse.start $MBSE_ROOT/bin cp mbse.stop $MBSE_ROOT/bin cp rc $MBSE_ROOT/etc cp rc.shutdown $MBSE_ROOT/etc chown mbse.bbs $MBSE_ROOT/bin/mbse.start $MBSE_ROOT/bin/mbse.stop chmod 755 $MBSE_ROOT/bin/mbse.start $MBSE_ROOT/bin/mbse.stop chown root.root $MBSE_ROOT/etc/rc $MBSE_ROOT/etc/rc.shutdown chmod 744 $MBSE_ROOT/etc/rc $MBSE_ROOT/etc/rc.shutdown else DISTINIT="/etc/rc.d/init.d/mbsed" echo "Adding SystemV Slackware MBSE BBS start/stop scripts" log "+" "Adding SystemV Slackware MBSE BBS start/stop scripts" checkrcdir cat << EOF >$DISTINIT #!/bin/sh # # description: Starts and stops MBSE BBS. # # Author: Michiel Broek , 23-May-2001 # # $DISTINIT for Slackware # # Find the MBSE_ROOT from the /etc/passwd file. MBSE_ROOT=\`cat /etc/passwd | grep mbse: | awk -F ':' '{ print \$6}'\` if [ "\$MBSE_ROOT" = "" ] then echo "MBSE BBS: No 'mbse' user in the password file." exit 1 fi if [ ! -d \$MBSE_ROOT ] then echo "MBSE BBS: Home directory '\$MBSE_ROOT' not found." exit 1 fi export MBSE_ROOT # See how we were called. case "\$1" in start) echo -n "MBSE BBS starting:" rm -f \$MBSE_ROOT/sema/* rm -f \$MBSE_ROOT/var/*.LCK rm -f \$MBSE_ROOT/tmp/mb* $SU mbse -c '\$MBSE_ROOT/bin/mbtask' >/dev/null echo -n " mbtask" sleep 2 if [ -f \$MBSE_ROOT/etc/config.data ]; then $SU mbse -c '\$MBSE_ROOT/bin/mbstat open -quiet' echo " and opened the bbs." fi ;; stop) echo -n "MBSE BBS shutdown:" if [ -f \$MBSE_ROOT/etc/config.data ]; then echo -n " logoff users " $SU mbse -c '\$MBSE_ROOT/bin/mbstat close wait -quiet' >/dev/null echo -n "done," fi echo -n " stopping mbtask " kill -15 \`pidof \$MBSE_ROOT/bin/mbtask\` echo "done." ;; status) echo -n "MBSE BBS status: " if [ "\`/sbin/pidof mbtask\`" = "" ]; then echo "mbtask is NOT running" else echo "mbtask Ok" fi ;; restart) echo "Restarting MBSE BBS: just kidding!" ;; *) echo "Usage: mbsed {start|stop|restart|status}" exit 1 esac exit 0 EOF chmod 755 $DISTINIT if [ -f $MBSE_ROOT/bin/mbse.start ]; then echo "Removing old startup scripts" rm $MBSE_ROOT/bin/mbse.start $MBSE_ROOT/bin/mbse.stop $MBSE_ROOT/etc/rc $MBSE_ROOT/etc/rc.shutdown fi echo "Making links for start/stop in runlevel 3" if [ -f /etc/rc.d/rc3.d/K05mbsed ]; then rm /etc/rc.d/rc3.d/K05mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc3.d/K05mbsed if [ -f /etc/rc.d/rc3.d/S95mbsed ]; then rm /etc/rc.d/rc3.d/S95mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc3.d/S95mbsed echo "Making links for start/stop in runlevel 4" if [ -f /etc/rc.d/rc4.d/K05mbsed ]; then rm /etc/rc.d/rc4.d/K05mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc4.d/K05mbsed if [ -f /etc/rc.d/rc4.d/S95mbsed ]; then rm /etc/rc.d/rc4.d/S95mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc4.d/S95mbsed echo "Slackware SystemV init configured" log "+" "Slackware SystemV init configured" fi fi #-------------------------------------------------------------------------- # # Adding scripts for RedHat, e-smith and Mandrake # if [ "$DISTNAME" = "RedHat" ] || [ "$DISTNAME" = "Mandrake" ]; then log "+" "Adding RedHat/E-Smith/Mandrake SystemV init scripts" DISTINIT="/etc/rc.d/init.d/mbsed" SU="su" # # From RedHat version 6.1 and up the behaviour of "su" has changed. # Extra tests are added for the RedHat e-smith server distribution, # this is a special distribution based on RedHat. # For Mandrake we follow the same behaviour. # if [ -f /etc/mandrake-release ]; then RHR="`cat /etc/mandrake-release | awk '{ print $4 }' | tr -d .`" RHN="Mandrake" if [ $RHR -gt 60 ]; then echo "You are running Mandrake v6.1 or newer" SU="su -" else echo "You are running Mandrake v6.0 or older" fi else if [ -f /etc/redhat-release ]; then if [ -z "`grep e-smith /etc/redhat-release`" ]; then RHR=`cat /etc/redhat-release | awk '{ print $5 }' | tr -d .` RHN="RedHat" else RHR=`cat /etc/redhat-release | awk '{ print $13 }' | tr -d . | tr -d \)` RHN="e-smith based on RedHat" fi if [ $RHR -gt 60 ]; then echo "You are running $RHN v6.1 or newer" SU="su -" else echo "You are running $RHN v6.0 or older" fi else echo "You are in big trouble." fi fi echo "Adding startup file $DISTINIT" cat << EOF >$DISTINIT #!/bin/sh # # chkconfig: 345 95 05 # description: Starts and stops MBSE BBS. # # For RedHat, E-Smith and Mandrake SYSV init style. # 20-Jan-2002 M. Broek # # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ \${NETWORKING} = "no" ] && exit 1 # Find the MBSE_ROOT from the /etc/passwd file. MBSE_ROOT=\`cat /etc/passwd | grep mbse: | awk -F ':' '{ print \$6}'\` if [ "\$MBSE_ROOT" = "" ] then echo "MBSE BBS: No 'mbse' user in the password file." exit 1 fi if [ ! -d \$MBSE_ROOT ] then echo "MBSE BBS: Home directory '\$MBSE_ROOT' not found." exit 1 fi export MBSE_ROOT # See how we were called. case "\$1" in start) echo -n "Starting MBSE BBS: " rm -f \$MBSE_ROOT/sema/* rm -f \$MBSE_ROOT/var/*.LCK rm -f \$MBSE_ROOT/tmp/mb* $SU mbse -c '\$MBSE_ROOT/bin/mbtask' >/dev/null echo -n "mbtask " sleep 2 if [ -f \$MBSE_ROOT/etc/config.data ]; then $SU mbse -c '\$MBSE_ROOT/bin/mbstat open -quiet' echo "opened" fi touch /var/lock/subsys/mbsed ;; stop) echo -n "Shutting down MBSE BBS: " if [ -f \$MBSE_ROOT/etc/config.data ]; then echo -n "logoff users " $SU mbse -c '\$MBSE_ROOT/bin/mbstat close wait -quiet' >/dev/null echo -n "done, " fi echo -n "stop mbtask: " killproc mbtask -15 rm -f /var/lock/subsys/mbsed echo "done." ;; status) status mbsed ;; restart) echo "Restarting MBSE BBS: just kidding!" ;; *) echo "Usage: mbsed {start|stop|restart|status}" exit 1 esac exit 0 EOF chmod 755 $DISTINIT echo "Making links for stop in runlevels 0 and 6" if [ -f /etc/rc.d/rc0.d/K05mbsed ]; then rm /etc/rc.d/rc0.d/K05mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc0.d/K05mbsed if [ -f /etc/rc.d/rc6.d/K05mbsed ]; then rm /etc/rc.d/rc6.d/K05mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc6.d/K05mbsed echo "Making links for start in runlevels 3 and 5" if [ -f /etc/rc.d/rc3.d/S95mbsed ]; then rm /etc/rc.d/rc3.d/S95mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc3.d/S95mbsed if [ -f /etc/rc.d/rc5.d/S95mbsed ]; then rm /etc/rc.d/rc5.d/S95mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc5.d/S95mbsed if [ "$RHN" = "e-smith based on RedHat" ]; then echo "Making link for start in runlevel 7" if [ -f /etc/rc.d/rc7.d/S95mbsed ]; then rm /etc/rc.d/rc7.d/S95mbsed fi ln -s ../init.d/mbsed /etc/rc.d/rc7.d/S95mbsed fi fi #-------------------------------------------------------------------------- # # Adding scripts for Debian # # if [ "$DISTNAME" = "Debian" ]; then echo "You are running Debian Linux $DISTVERS" log "+" "Adding Debian SystemV init script" DISTINIT="/etc/init.d/mbsebbs" cat << EOF >$DISTINIT #!/bin/sh # # Note: this is not 100% Debian style, at least it works for now. # 23-May-2001 Michiel Broek. # # description: Starts and stops the MBSE BBS. # For Debian SYSV init style. # Find the MBSE_ROOT from the /etc/passwd file. MBSE_ROOT=\`cat /etc/passwd | grep mbse: | awk -F ':' '{ print \$6}'\` if [ "\$MBSE_ROOT" = "" ]; then echo "MBSE BBS: No 'mbse' user in the password file." exit 1 fi if [ ! -d \$MBSE_ROOT ]; then echo "MBSE BBS: Home directory '\$MBSE_ROOT' not found." exit 1 fi PATH=/sbin:/bin:/usr/sbin:/usr/bin:\$MBSE_ROOT/bin DAEMON=\$MBSE_ROOT/bin/mbtask NAME=mbsebbs DESC="MBSE BBS" export MBSE_ROOT # See how we were called. case "\$1" in start) echo -n "Starting \$DESC: " rm -f \$MBSE_ROOT/sema/* rm -f \$MBSE_ROOT/var/*.LCK rm -f \$MBSE_ROOT/tmp/mb* su mbse -c '\$MBSE_ROOT/bin/mbtask' >/dev/null echo -n "mbtask " sleep 2 if [ -f \$MBSE_ROOT/etc/config.data ]; then su mbse -c '\$MBSE_ROOT/bin/mbstat open -quiet' echo -n "opened " fi echo "done." ;; stop) echo -n "Stopping \$DESC: " if [ -f \$MBSE_ROOT/etc/config.data ]; then echo -n "logoff users " su mbse -c '\$MBSE_ROOT/bin/mbstat close wait -quiet' >/dev/null fi start-stop-daemon --stop --signal 15 --user mbtask echo "\$NAME done." ;; force-reload|restart) echo "Restarting \$DESC: is not possible, done." ;; *) N=/etc/init.d/\$NAME echo "Usage: \$N {start|stop|restart|force-reload}" >&2 exit 1 esac exit 0 EOF chmod 755 $DISTINIT update-rc.d mbsebbs defaults echo "Debian install ready." log "+" "Debian SystemV init script installed" fi #-------------------------------------------------------------------------- # # Adding scripts for FreeBSD and NetBSD # # if [ "$DISTNAME" = "FreeBSD" ] || [ "$DISTNAME" = "NetBSD" ]; then # # FreeBSD init # DISTINIT="$MBSE_ROOT/etc/rc" echo "Adding $DISTNAME style MBSE BBS start/stop scripts" log "+" "Adding $DISTNAME style MBSE BBS start/stop scripts" if [ -f /etc/rc.local ]; then if [ "`grep MBSE /etc/rc.local`" = "" ]; then log "+" "Adding $MBSE_ROOT/etc/rc to existing /etc/rc.local" mv /etc/rc.local /etc/rc.local.mbse cat /etc/rc.local.mbse >/etc/rc.local echo "# Start MBSE BBS" >>/etc/rc.local echo "$MBSE_ROOT/etc/rc" >>/etc/rc.local chmod 644 /etc/rc.local echo " Added $MBSE_ROOT/etc/rc to /etc/rc.local" echo " /etc/rc.local.mbse is a backup file." echo "" fi else log "+" "Adding $MBSE_ROOT/etc/rc to new /etc/rc.local" echo "# Start MBSE BBS" >/etc/rc.local echo "$MBSE_ROOT/etc/rc" >>/etc/rc.local chmod 644 /etc/rc.local echo " Added $MBSE_ROOT/etc/rc to /etc/rc.local" echo "" fi cp mbse.start $MBSE_ROOT/bin cp mbse.stop $MBSE_ROOT/bin cp rc $MBSE_ROOT/etc cp rc.shutdown $MBSE_ROOT/etc chown mbse.bbs $MBSE_ROOT/bin/mbse.start $MBSE_ROOT/bin/mbse.stop chmod 755 $MBSE_ROOT/bin/mbse.start $MBSE_ROOT/bin/mbse.stop chown `id -un`.`id -gn` $MBSE_ROOT/etc/rc $MBSE_ROOT/etc/rc.shutdown chmod 744 $MBSE_ROOT/etc/rc $MBSE_ROOT/etc/rc.shutdown fi echo echo "Please note, your MBSE BBS startup file is \"$DISTINIT\"" echo