8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 21:23:04 +01:00
firebird-mirror/builds/install/arch-specific/linux/misc/linuxLibrary.sh.in

422 lines
9.5 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 /bin/false \
-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)\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)\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(fbserver|fb_smp_server)\b" |grep -v grep`
if [ -z "$checkString" ]
then
# server didn't start - possible reason bad shell /bin/false for user "firebird"
echo
echo Fixing firebird\'s shell to /bin/sh
echo
usermod -s /bin/sh firebird
"$InitFile" start
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
if [ -e /etc/init.d/firebird ]; then
rm -f /etc/init.d/firebird
fi
if [ -e /etc/rc.d/init.d/firebird ]; then
rm -f /etc/rc.d/init.d/firebird
fi
fi
}