mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 07:23:03 +01:00
430 lines
9.7 KiB
Bash
430 lines
9.7 KiB
Bash
#!/bin/sh
|
|
#
|
|
# The contents of this file are subject to the Initial
|
|
# Developer's Public License Version 1.0 (the "License");
|
|
# you may not use this file except in compliance with the
|
|
# License. You may obtain a copy of the License at
|
|
# http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
|
|
#
|
|
# Software distributed under the License is distributed AS IS,
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing rights
|
|
# and limitations under the License.
|
|
#
|
|
# The Original Code was created by Mark O'Donohue
|
|
# for the Firebird Open Source RDBMS project.
|
|
#
|
|
# Copyright (c) Mark O'Donohue <mark.odonohue@ludwig.edu.au>
|
|
# and all contributors signed below.
|
|
#
|
|
# All Rights Reserved.
|
|
# Contributor(s): ______________________________________.
|
|
# Alex Peshkoff
|
|
#
|
|
|
|
RunUser=firebird
|
|
export RunUser
|
|
RunGroup=firebird
|
|
export RunGroup
|
|
PidDir=/var/run/firebird
|
|
export PidDir
|
|
|
|
#------------------------------------------------------------------------
|
|
# Get correct options & misc.
|
|
|
|
psOptions=aww
|
|
export psOptions
|
|
mktOptions=-q
|
|
export mktOptions
|
|
tarOptions=z
|
|
export tarOptions
|
|
tarExt=tar.gz
|
|
export tarExt
|
|
|
|
#------------------------------------------------------------------------
|
|
# Add new user and group
|
|
|
|
TryAddGroup() {
|
|
|
|
AdditionalParameter=$1
|
|
testStr=`grep firebird /etc/group`
|
|
|
|
if [ -z "$testStr" ]
|
|
then
|
|
groupadd $AdditionalParameter firebird
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
TryAddUser() {
|
|
|
|
AdditionalParameter=$1
|
|
testStr=`grep firebird /etc/passwd`
|
|
|
|
if [ -z "$testStr" ]
|
|
then
|
|
useradd $AdditionalParameter -d @FB_CONFDIR@ -s /sbin/nologin \
|
|
-c "Firebird Database Owner" -g firebird firebird
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
addFirebirdUser() {
|
|
|
|
TryAddGroup "-g 84 -r" >/dev/null 2>&1
|
|
TryAddGroup "-g 84" >/dev/null 2>&1
|
|
TryAddGroup "-r" >/dev/null 2>&1
|
|
TryAddGroup " "
|
|
|
|
TryAddUser "-u 84 -r -M" >/dev/null 2>&1
|
|
TryAddUser "-u 84 -M" >/dev/null 2>&1
|
|
TryAddUser "-r -M" >/dev/null 2>&1
|
|
TryAddUser "-M" >/dev/null 2>&1
|
|
TryAddUser "-u 84 -r" >/dev/null 2>&1
|
|
TryAddUser "-u 84" >/dev/null 2>&1
|
|
TryAddUser "-r" >/dev/null 2>&1
|
|
TryAddUser " "
|
|
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Detect Distribution.
|
|
# AP: very beautiful, but unused. Let's keep alive for a while. (2005)
|
|
|
|
detectDistro() {
|
|
|
|
# it's not provided...
|
|
if [ -z "$linuxDistro" ]
|
|
then
|
|
if [ -e /etc/SuSE-release ]
|
|
then
|
|
# SuSE
|
|
linuxDistro="SuSE"
|
|
elif [ -e /etc/mandrake-release ]
|
|
then
|
|
# Mandrake
|
|
linuxDistro="MDK"
|
|
elif [ -e /etc/debian_version ]
|
|
then
|
|
# Debian
|
|
linuxDistro="Debian"
|
|
elif [ -e /etc/gentoo-release ]
|
|
then
|
|
# Debian
|
|
linuxDistro="Gentoo"
|
|
elif [ -e /etc/rc.d/init.d/functions ]
|
|
then
|
|
# very likely Red Hat
|
|
linuxDistro="RH"
|
|
elif [ -d /etc/rc.d/init.d ]
|
|
then
|
|
# generic Red Hat
|
|
linuxDistro="G-RH"
|
|
elif [ -d /etc/init.d ]
|
|
then
|
|
# generic SuSE
|
|
linuxDistro="G-SuSE"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# print location of init script
|
|
|
|
getInitScriptLocation() {
|
|
if [ -f /etc/rc.d/init.d/firebird ]
|
|
then
|
|
echo -n /etc/rc.d/init.d/firebird
|
|
elif [ -f /etc/rc.d/rc.firebird ]
|
|
then
|
|
echo -n /etc/rc.d/rc.firebird
|
|
elif [ -f /etc/init.d/firebird ]
|
|
then
|
|
echo -n /etc/init.d/firebird
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# stop super server if it is running
|
|
|
|
stopSuperServerIfRunning() {
|
|
checkString=`ps -eaf | egrep "\b(fbserver|fbguard|fb_smp_server|firebird)\b" |grep -v grep`
|
|
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
init_d=`getInitScriptLocation`
|
|
|
|
if [ -x "$init_d" ]
|
|
then
|
|
i=1
|
|
while [ $i -le 20 ]
|
|
do
|
|
$init_d stop
|
|
sleep 1
|
|
checkString=`ps -eaf | egrep "\b(fbserver|fbguard|fb_smp_server|firebird)\b" |grep -v grep`
|
|
if [ -z "$checkString" ]
|
|
then
|
|
return
|
|
fi
|
|
i=$((i+1))
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Generate new sysdba password - this routine is used only in the
|
|
# rpm file not in the install script.
|
|
|
|
generateNewDBAPassword() {
|
|
# openssl generates random data.
|
|
openssl </dev/null >/dev/null 2&>/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
# We generate 20 random chars, strip any '/''s and get the first 8
|
|
NewPasswd=`openssl rand -base64 20 | tr -d '/' | cut -c1-8`
|
|
fi
|
|
|
|
# mkpasswd is a bit of a hassle, but check to see if it's there
|
|
if [ -z "$NewPasswd" ]
|
|
then
|
|
if [ -f /usr/bin/mkpasswd ]
|
|
then
|
|
NewPasswd=`/usr/bin/mkpasswd -l 8`
|
|
fi
|
|
fi
|
|
|
|
# On some systems the mkpasswd program doesn't appear and on others
|
|
# there is another mkpasswd which does a different operation. So if
|
|
# the specific one isn't available then keep the original password.
|
|
if [ -z "$NewPasswd" ]
|
|
then
|
|
NewPasswd="masterkey"
|
|
fi
|
|
|
|
writeNewPassword $NewPasswd
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# change init.d RunUser
|
|
|
|
changeInitRunUser() {
|
|
NewUser=$1
|
|
|
|
InitFile=`getInitScriptLocation`
|
|
if [ -f "$InitFile" ]
|
|
then
|
|
editFile "$InitFile" FBRunUser "FBRunUser=$NewUser"
|
|
chmod u=rwx,g=rx,o= "$InitFile"
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# installInitdScript
|
|
# Everbody stores this one in a seperate location, so there is a bit of
|
|
# running around to actually get it for each packager.
|
|
# Update rcX.d with Firebird initd entries
|
|
# initd script for SuSE >= 7.2 is a part of RPM package
|
|
|
|
installInitdScript() {
|
|
Arch=$1
|
|
if [ "$Arch" != super ]; then
|
|
return 0
|
|
fi
|
|
|
|
srcScript=""
|
|
initScript=
|
|
|
|
# This is for RH and MDK specific
|
|
|
|
if [ -e /etc/rc.d/init.d/functions ]
|
|
then
|
|
srcScript=firebird.init.d.mandrake
|
|
initScript=/etc/rc.d/init.d/firebird
|
|
|
|
# SuSE specific
|
|
|
|
elif [ -r /etc/SuSE-release ]
|
|
then
|
|
srcScript=firebird.init.d.suse
|
|
initScript=/etc/init.d/firebird
|
|
rm -f /usr/sbin/rcfirebird
|
|
ln -s ../../etc/init.d/firebird /usr/sbin/rcfirebird
|
|
|
|
# Debian specific
|
|
|
|
elif [ -r /etc/debian_version ]
|
|
then
|
|
srcScript=firebird.init.d.debian
|
|
initScript=/etc/init.d/firebird
|
|
rm -f /usr/sbin/rcfirebird
|
|
ln -s ../../etc/init.d/firebird /usr/sbin/rcfirebird
|
|
|
|
# Slackware specific
|
|
|
|
elif [ -r /etc/slackware-version ]
|
|
then
|
|
srcScript=firebird.init.d.slackware
|
|
initScript=/etc/rc.d/rc.firebird
|
|
rclocal=/etc/rc.d/rc.local
|
|
if ! grep -q "$initScript" $rclocal
|
|
then
|
|
cat >>$rclocal <<EOF
|
|
if [ -x $initScript ] ; then
|
|
$initScript start
|
|
fi
|
|
EOF
|
|
fi
|
|
|
|
# Gentoo specific
|
|
|
|
elif [ -r /etc/gentoo-release ]
|
|
then
|
|
srcScript=firebird.init.d.gentoo
|
|
initScript=/etc/init.d/firebird
|
|
|
|
# Generic...
|
|
|
|
elif [ -d /etc/rc.d/init.d ]
|
|
then
|
|
srcScript=firebird.init.d.generic
|
|
initScript=/etc/rc.d/init.d/firebird
|
|
fi
|
|
|
|
|
|
if [ "$initScript" ]
|
|
then
|
|
# Install the firebird init.d script
|
|
cp @FB_MISCDIR@/$srcScript $initScript
|
|
chown root:root $initScript
|
|
chmod ug=rx,o=r $initScript
|
|
|
|
|
|
# RedHat and Mandrake specific
|
|
if [ -x /sbin/chkconfig ]
|
|
then
|
|
/sbin/chkconfig --add firebird
|
|
|
|
# Gentoo specific
|
|
elif [ -x /sbin/rc-update ]
|
|
then
|
|
/sbin/rc-update add firebird default
|
|
|
|
# Suse (& Debian ?) specific
|
|
elif [ -x /sbin/insserv ]
|
|
then
|
|
/sbin/insserv /etc/init.d/firebird
|
|
|
|
# One more way to register service - used in Knoppix (& Debian ?)
|
|
elif [ -x /usr/sbin/update-rc.d ]
|
|
then
|
|
/usr/sbin/update-rc.d firebird start 14 2 3 5 . stop 20 0 1 6 .
|
|
fi
|
|
|
|
# More SuSE - rc.config fillup
|
|
if [ -f /etc/rc.config ]
|
|
then
|
|
if [ -x /bin/fillup ]
|
|
then
|
|
/bin/fillup -q -d = /etc/rc.config @FB_MISCDIR@/rc.config.firebird
|
|
fi
|
|
elif [ -d /etc/sysconfig ]
|
|
then
|
|
cp @FB_MISCDIR@/rc.config.firebird /etc/sysconfig/firebird
|
|
fi
|
|
|
|
else
|
|
echo "Couldn't autodetect linux type. You must select"
|
|
echo "the most appropriate startup script in @FB_MISCDIR@"
|
|
echo "and manually register it in your OS."
|
|
fi
|
|
|
|
# Create directory to store pidfile
|
|
if [ ! -d $PidDir ]
|
|
then
|
|
[ -e $PidDir ] && rm -rf $PidDir
|
|
mkdir $PidDir
|
|
fi
|
|
chown $RunUser:$RunGroup $PidDir
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# start init.d service
|
|
|
|
startService() {
|
|
Arch=$1
|
|
if [ "$Arch" != super ]; then
|
|
return 0
|
|
fi
|
|
|
|
InitFile=`getInitScriptLocation`
|
|
if [ -f "$InitFile" ]
|
|
then
|
|
"$InitFile" start
|
|
|
|
checkString=`ps -eaf | egrep "\b(firebird)\b" |grep -v grep`
|
|
if [ -z "$checkString" ]
|
|
then
|
|
# server didn't start - wait a bit and recheck
|
|
sleep 2
|
|
"$InitFile" start
|
|
|
|
checkString=`ps -eaf | egrep "\b(firebird)\b" |grep -v grep`
|
|
if [ -z "$checkString" ]
|
|
then
|
|
echo "Looks like standalone server failed to start"
|
|
echo "Trying to continue anyway..."
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# If we have right systems remove the service autostart stuff.
|
|
|
|
removeServiceAutostart() {
|
|
InitFile=`getInitScriptLocation`
|
|
if [ -f "$InitFile" ]; then
|
|
|
|
# Unregister using OS command
|
|
if [ -x /sbin/insserv ]; then
|
|
/sbin/insserv /etc/init.d/
|
|
fi
|
|
|
|
if [ -x /sbin/chkconfig ]; then
|
|
/sbin/chkconfig --del firebird
|
|
fi
|
|
|
|
if [ -x /sbin/rc-update ]; then
|
|
/sbin/rc-update del firebird
|
|
fi
|
|
|
|
# Remove /usr/sbin/rcfirebird symlink
|
|
if [ -e /usr/sbin/rcfirebird ]
|
|
then
|
|
rm -f /usr/sbin/rcfirebird
|
|
fi
|
|
|
|
# Remove initd script
|
|
rm -f $InitFile
|
|
fi
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Returns TRUE if SA server is installed
|
|
|
|
isStandaloneServerInstalled() {
|
|
InitFile=`getInitScriptLocation`
|
|
if [ -f "$InitFile" ]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|