mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 22:43:03 +01:00
1073 lines
24 KiB
Bash
1073 lines
24 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
|
|
#
|
|
|
|
fb_install_prefix=@prefix@
|
|
default_prefix=@prefix@
|
|
fb_startup_name=firebird
|
|
|
|
#------------------------------------------------------------------------
|
|
# Build startup name from install path
|
|
|
|
startupName() {
|
|
# sanity check
|
|
if [ -z "${fb_install_prefix}" ]
|
|
then
|
|
echo "Empty install path - can not proceed"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
fb_startup_name=firebird
|
|
else
|
|
# strip first '/' if present
|
|
fb_startup_name=`echo ${fb_install_prefix} | colrm 2`
|
|
if [ ${fb_startup_name} = / ]
|
|
then
|
|
fb_startup_name=`echo ${fb_install_prefix} | colrm 1 1`
|
|
if [ -z "$fb_startup_name" ]
|
|
then
|
|
# root specified - hmmm...
|
|
fb_startup_name=root
|
|
fi
|
|
else
|
|
echo "Parameter (${fb_install_prefix}) for -path option should start with /"
|
|
exit 1
|
|
fi
|
|
|
|
# build final name
|
|
fb_startup_name=firebird.`echo $fb_startup_name | tr / _`
|
|
fi
|
|
}
|
|
|
|
startupName ## build it for what's present in current file
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Adds parameter to $PATH if it's missing in it
|
|
|
|
Add2Path() {
|
|
Dir=${1}
|
|
x=`echo :${PATH}: | grep :$Dir:`
|
|
if [ -z "$x" ]
|
|
then
|
|
PATH=$PATH:$Dir
|
|
export PATH
|
|
fi
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Global stuff init
|
|
|
|
Answer=""
|
|
OrigPasswd=""
|
|
TmpFile=""
|
|
MANIFEST_TXT=""
|
|
Manifest=manifest.txt
|
|
SecurityDatabase=security6.fdb
|
|
DefaultLibrary=libfbclient
|
|
UninstallScript=FirebirdUninstall.sh
|
|
XINETD=/etc/xinetd.d/
|
|
ArchiveDateTag=`date +"%Y%m%d_%H%M"`
|
|
export ArchiveDateTag
|
|
ArchiveMainFile="@FB_CONFDIR@_${ArchiveDateTag}"
|
|
export ArchiveMainFile
|
|
#this solves a problem with sudo env missing sbin
|
|
Add2Path /usr/sbin
|
|
Add2Path /sbin
|
|
|
|
#------------------------------------------------------------------------
|
|
# Create temporary file. In case mktemp failed, do something...
|
|
|
|
MakeTemp() {
|
|
TmpFile=`mktemp $mktOptions /tmp/firebird_install.XXXXXX`
|
|
if [ $? -ne 0 ]
|
|
then
|
|
for n in `seq 1000`
|
|
do
|
|
TmpFile=/tmp/firebird_install.$n
|
|
if [ ! -e $TmpFile ]
|
|
then
|
|
touch $TmpFile
|
|
return
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Prompt for response, store result in Answer
|
|
|
|
AskQuestion() {
|
|
Test=$1
|
|
DefaultAns=$2
|
|
printf %s "$Test"
|
|
Answer="$DefaultAns"
|
|
read Answer
|
|
|
|
if [ -z "$Answer" ]
|
|
then
|
|
Answer="$DefaultAns"
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Prompt for yes or no answer - returns non-zero for no
|
|
|
|
AskYNQuestion() {
|
|
while true
|
|
do
|
|
printf %s "${*} (y/n): "
|
|
read answer rest
|
|
case $answer in
|
|
[yY]*)
|
|
return 0
|
|
;;
|
|
[nN]*)
|
|
return 1
|
|
;;
|
|
*)
|
|
echo "Please answer y or n"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Run $1. If exit status is not zero, show output to user.
|
|
|
|
runSilent() {
|
|
MakeTemp
|
|
rm -f $TmpFile
|
|
$1 >>$TmpFile 2>>$TmpFile
|
|
if [ $? -ne 0 ]
|
|
then
|
|
cat $TmpFile
|
|
echo ""
|
|
rm -f $TmpFile
|
|
return 1
|
|
fi
|
|
rm -f $TmpFile
|
|
return 0
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Check for a user, running install, to be root
|
|
|
|
checkRootUser() {
|
|
|
|
if [ "`whoami`" != "root" ];
|
|
then
|
|
echo ""
|
|
echo "--- Stop ----------------------------------------------"
|
|
echo ""
|
|
echo " You need to be 'root' user to do this change"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
#alias
|
|
checkInstallUser() {
|
|
checkRootUser
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Report missing library error and exit
|
|
|
|
missingLibrary() {
|
|
libName=${1}
|
|
echo "Please install required library '$libName' before firebird, after it repeat firebird install"
|
|
exit 1
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Check library presence, errorexit when missing
|
|
|
|
checkLibrary() {
|
|
libList=${1}
|
|
for libName in $libList
|
|
do
|
|
haveLibrary $libName || missingLibrary $libName
|
|
done
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Make sure we have required libraries installed
|
|
checkLibraries() {
|
|
# if [ "@TOMMATH_BUILD@" != "Y" -o "${fb_install_prefix}" != "${default_prefix}" ]
|
|
if [ "@TOMMATH_BUILD@" != "Y" ]
|
|
then
|
|
fixTommath=
|
|
checkLibrary tommath # Should have at least some version of it
|
|
[ $LIBTOMMATH ] && haveLibrary $LIBTOMMATH || [ "$fixTommath" ] && $fixTommath
|
|
fi
|
|
|
|
# if [ "@TOMCRYPT_BUILD@" != "Y" -o "${fb_install_prefix}" != "${default_prefix}" ]
|
|
if [ "@TOMCRYPT_BUILD@" != "Y" ]
|
|
then
|
|
[ -z "$LIBTOMCRYPT" ] && LIBTOMCRYPT=tomcrypt
|
|
checkLibrary $LIBTOMCRYPT
|
|
fi
|
|
|
|
checkLibrary icudata
|
|
|
|
[ "$LIBCURSES" ] && checkLibrary $LIBCURSES
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# grep process by name
|
|
|
|
grepProcess() {
|
|
processList=$1
|
|
eol=\$
|
|
ps $psOptions | egrep "\<($processList)($eol|[[:space:]])" | grep -v grep | grep -v -w '\-path'
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# check if it is running
|
|
|
|
checkIfServerRunning() {
|
|
|
|
if [ "$1" != "install-embedded" ]
|
|
then
|
|
stopSuperServerIfRunning
|
|
fi
|
|
|
|
|
|
# Check is server is being actively used.
|
|
|
|
checkString=`grepProcess "firebird"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird server seems to be running."
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
|
|
checkString=`grepProcess "fb_smp_server"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird SuperClassic server seems to be running."
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
|
|
checkString=`grepProcess "fbserver|fbguard"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird Super server seems to be running."
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
|
|
checkString=`grepProcess "fb_inet_server|gds_pipe"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird Classic server seems to be running."
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# The following check for running interbase or firebird 1.0 servers.
|
|
|
|
checkString=`grepProcess "ibserver|ibguard"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird/InterBase Super server seems to be running."
|
|
echo "(the ibserver or ibguard process was detected running on your system)"
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
|
|
checkString=`grepProcess "gds_inet_server|gds_pipe"`
|
|
if [ ! -z "$checkString" ]
|
|
then
|
|
echo "An instance of the Firebird/InterBase Classic server seems to be running."
|
|
echo "(the gds_inet_server or gds_pipe process was detected running on your system)"
|
|
echo "Please quit all Firebird applications and then proceed."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# ask user to enter CORRECT original DBA password
|
|
|
|
askForOrigDBAPassword() {
|
|
OrigPasswd=""
|
|
while [ -z "$OrigPasswd" ]
|
|
do
|
|
AskQuestion "Please enter current password for SYSDBA user: "
|
|
OrigPasswd=$Answer
|
|
if ! runSilent "@FB_BINDIR@/gsec -user sysdba -password $OrigPasswd -di"
|
|
then
|
|
OrigPasswd=""
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Ask user to enter new DBA password string
|
|
# !! This routine is interactive !!
|
|
|
|
getNewDBAPasswordFromUser()
|
|
{
|
|
AskQuestion "Please enter new password for SYSDBA user: "
|
|
NewPasswd=$Answer
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# add a line in the (usually) /etc/services or /etc/inetd.conf file
|
|
# Here there are three cases, not found => add
|
|
# found & different => replace
|
|
# found & same => do nothing
|
|
#
|
|
|
|
replaceLineInFile() {
|
|
FileName="$1"
|
|
newLine="$2"
|
|
oldLine=`grep "$3" $FileName`
|
|
|
|
if [ -z "$oldLine" ]
|
|
then
|
|
echo "$newLine" >> "$FileName"
|
|
elif [ "$oldLine" != "$newLine" ]
|
|
then
|
|
MakeTemp
|
|
grep -v "$oldLine" "$FileName" > "$TmpFile"
|
|
echo "$newLine" >> $TmpFile
|
|
cp $TmpFile $FileName && rm -f $TmpFile
|
|
echo "Updated $1"
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# "edit" file $1 - replace line starting from $2 with $3
|
|
|
|
editFile() {
|
|
FileName=$1
|
|
Starting=$2
|
|
NewLine=$3
|
|
|
|
AwkProgram="(/^$Starting.*/ || \$1 == \"$Starting\") {\$0=\"$NewLine\"} {print \$0}"
|
|
MakeTemp
|
|
awk "$AwkProgram" <$FileName >$TmpFile && mv $TmpFile $FileName || rm -f $TmpFile
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# remove line from config file if it exists in it.
|
|
|
|
removeLineFromFile() {
|
|
FileName=$1
|
|
oldLine=$2
|
|
|
|
if [ ! -z "$oldLine" ]
|
|
then
|
|
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
|
|
cp ${FileName}.tmp $FileName && rm -f ${FileName}.tmp
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Write new password to the @FB_CONFDIR@/SYSDBA.password file
|
|
|
|
writeNewPassword() {
|
|
NewPasswd=$1
|
|
DBAPasswordFile=@FB_CONFDIR@/SYSDBA.password
|
|
FB_HOST=`hostname`
|
|
FB_TIME=`date`
|
|
|
|
cat <<EOT >$DBAPasswordFile
|
|
#
|
|
# Firebird generated password for user SYSDBA is:
|
|
#
|
|
ISC_USER=sysdba
|
|
ISC_PASSWORD=$NewPasswd
|
|
#
|
|
# Also set legacy variable though it can't be exported directly
|
|
#
|
|
ISC_PASSWD=$NewPasswd
|
|
#
|
|
# generated on $FB_HOST at time $FB_TIME
|
|
#
|
|
# Your password can be changed to a more suitable one using
|
|
# SQL operator ALTER USER.
|
|
#
|
|
EOT
|
|
|
|
chmod u=r,go= $DBAPasswordFile
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Set sysdba password.
|
|
|
|
setDBAPassword() {
|
|
writePassword=
|
|
|
|
if [ -z "$InteractiveInstall" ]
|
|
then
|
|
passwd=`createNewPassword`
|
|
writePassword=yes
|
|
else
|
|
NewPasswd=""
|
|
getNewDBAPasswordFromUser
|
|
passwd=$NewPasswd
|
|
|
|
if [ -z "$passwd" ]
|
|
then
|
|
echo " "
|
|
echo "Press enter once more if you need random password"
|
|
echo "or enter non-empty password."
|
|
echo " "
|
|
getNewDBAPasswordFromUser
|
|
passwd=$NewPasswd
|
|
|
|
if [ -z "$passwd" ]
|
|
then
|
|
passwd=`createNewPassword`
|
|
writePassword=yes
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$passwd" ]
|
|
then
|
|
passwd=masterkey
|
|
fi
|
|
|
|
runSilent "@FB_BINDIR@/gsec -add sysdba -pw $passwd"
|
|
|
|
if [ "$writePassword" ]
|
|
then
|
|
writeNewPassword $passwd
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# buildUninstallFile
|
|
# This will work only for the .tar.gz install and it builds an
|
|
# uninstall shell script.
|
|
|
|
buildUninstallFile() {
|
|
cd "$origDir"
|
|
|
|
if [ ! -f $Manifest ] # Only exists if we are a .tar.gz install
|
|
then
|
|
return
|
|
fi
|
|
|
|
MANIFEST_TXT=@FB_MISCDIR@/$Manifest
|
|
if [ "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
cp $Manifest $MANIFEST_TXT
|
|
else
|
|
newManifest $Manifest $MANIFEST_TXT
|
|
fi
|
|
|
|
[ -f @FB_SBINDIR@/$UninstallScript ] && chmod u=rx,go= @FB_SBINDIR@/$UninstallScript
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# newManifest
|
|
# Create new manifest replacing default_prefix with fb_install_prefix
|
|
# in existing manifest
|
|
|
|
newManifest() {
|
|
ExistingManifestFile=${1}
|
|
CreateManifestFile=${2}
|
|
|
|
rm -f $CreateManifestFile
|
|
oldPath=".${default_prefix}"
|
|
|
|
for line in `grep "^${oldPath}" $ExistingManifestFile | colrm 1 ${#oldPath}`
|
|
do
|
|
echo ".${fb_install_prefix}${line}" >>$CreateManifestFile
|
|
done
|
|
|
|
newPath=`dirname "${fb_install_prefix}"`
|
|
while [ ${#newPath} -gt 1 ]
|
|
do
|
|
echo ".${newPath}" >>$CreateManifestFile
|
|
newPath=`dirname $newPath`
|
|
done
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# Remove if only a link
|
|
|
|
removeIfOnlyAlink() {
|
|
Target=$1
|
|
|
|
if [ -L $Target ]
|
|
then
|
|
rm -f $Target
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# re-link new file only if target is a link or missing
|
|
|
|
safeLink() {
|
|
Source=$1
|
|
Target=$2
|
|
Manifest=$3
|
|
|
|
if [ $Source != $Target -a "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
removeIfOnlyAlink $Target
|
|
if [ ! -e $Target ]
|
|
then
|
|
ln -s $Source $Target
|
|
if [ -f "$Manifest" ]
|
|
then
|
|
echo $Target >>$Manifest
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# createLinksForBackCompatibility
|
|
# Create links for back compatibility to InterBase and Firebird1.0
|
|
# linked systems.
|
|
|
|
createLinksForBackCompatibility() {
|
|
|
|
# These two links are required for compatibility with existing ib programs
|
|
# If the program had been linked with libgds.so then this link is required
|
|
# to ensure it loads the fb equivalent. MOD 7-Nov-2002.
|
|
|
|
newLibrary=@FB_LIBDIR@/$DefaultLibrary.@SHRLIB_EXT@
|
|
LibDir=`CorrectLibDir @libdir@`
|
|
safeLink $newLibrary $LibDir/libgds.@SHRLIB_EXT@
|
|
safeLink $newLibrary $LibDir/libgds.@SHRLIB_EXT@.0
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# createLinksInSystemLib
|
|
# Create links to firebird client library in system directory.
|
|
|
|
createLinksInSystemLib() {
|
|
LibDir=`CorrectLibDir @libdir@`
|
|
libtom='libtom*.@SHRLIB_EXT@*'
|
|
tomdir=@FB_LIBDIR@/.tm
|
|
origDirLinksInSystemLib=`pwd`
|
|
|
|
cd @FB_LIBDIR@
|
|
Libraries=`echo libfbclient.@SHRLIB_EXT@* libib_util.@SHRLIB_EXT@`
|
|
|
|
cd /
|
|
for l in $Libraries
|
|
do
|
|
safeLink @FB_LIBDIR@/$l .$LibDir/$l ${MANIFEST_TXT}
|
|
done
|
|
|
|
if [ -d $tomdir ]; then
|
|
cd $tomdir
|
|
Libraries=`echo ${libtom}`
|
|
|
|
cd /
|
|
for l in $Libraries
|
|
do
|
|
[ -f .$LibDir/$l ] || safeLink @FB_LIBDIR@/.tm/$l .$LibDir/$l ${MANIFEST_TXT}
|
|
done
|
|
fi
|
|
|
|
cd $origDirLinksInSystemLib
|
|
|
|
reconfigDynamicLoader
|
|
}
|
|
|
|
#------------------------------------------------------------------------
|
|
# removeLinksForBackCompatibility
|
|
# Remove links for back compatibility to InterBase and Firebird1.0
|
|
# linked systems.
|
|
|
|
removeLinksForBackCompatibility() {
|
|
LibDir=`CorrectLibDir @libdir@`
|
|
|
|
removeIfOnlyAlink $LibDir/libgds.@SHRLIB_EXT@
|
|
removeIfOnlyAlink $LibDir/libgds.@SHRLIB_EXT@.0
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Run process and check status
|
|
|
|
runAndCheckExit() {
|
|
Cmd=$*
|
|
|
|
$Cmd
|
|
ExitCode=$?
|
|
|
|
if [ $ExitCode -ne 0 ]
|
|
then
|
|
echo "Install aborted: The command $Cmd "
|
|
echo " failed with error code $ExitCode"
|
|
exit $ExitCode
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Display message if this is being run interactively.
|
|
|
|
displayMessage() {
|
|
msgText=$1
|
|
|
|
if [ ! -z "$InteractiveInstall" ]
|
|
then
|
|
echo $msgText
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# Archive any existing prior installed files.
|
|
# The 'cd' stuff is to avoid the "leading '/' removed message from tar.
|
|
# for the same reason the DestFile is specified without the leading "/"
|
|
|
|
archivePriorInstallSystemFiles() {
|
|
if [ -z ${ArchiveMainFile} ]
|
|
then
|
|
echo "Variable ArchiveMainFile not set - exiting"
|
|
exit 1
|
|
fi
|
|
|
|
tarArc=${ArchiveMainFile}.$tarExt
|
|
oldPWD=`pwd`
|
|
distManifest=${oldPWD}/manifest.txt
|
|
archiveFileList=""
|
|
archiveDelTemp=""
|
|
|
|
if [ "${fb_install_prefix}" != "${default_prefix}" ]
|
|
then
|
|
TmpFile=""
|
|
MakeTemp
|
|
newManifest $distManifest $TmpFile
|
|
distManifest=$TmpFile
|
|
archiveDelTemp=$TmpFile
|
|
fi
|
|
|
|
|
|
cd /
|
|
|
|
if [ -f ${distManifest} ]; then
|
|
manifest=`cat ${distManifest}`
|
|
for i in $manifest; do
|
|
if [ -f $i ]; then
|
|
i=${i#/} # strip off leading /
|
|
archiveFileList="$archiveFileList $i"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
rm -f "$archiveDelTemp"
|
|
|
|
DestFile=@FB_CONFDIR@
|
|
if [ -e "$DestFile" ]
|
|
then
|
|
echo ""
|
|
echo ""
|
|
echo ""
|
|
echo "--- Warning ----------------------------------------------"
|
|
echo " The installation target directory $DestFile already exists."
|
|
echo " This and other related files found will be"
|
|
echo " archived in the file : ${tarArc}"
|
|
echo ""
|
|
|
|
if [ ! -z "$InteractiveInstall" ]
|
|
then
|
|
AskQuestion "Press return to continue or ^C to abort"
|
|
fi
|
|
|
|
if [ -e $DestFile ]
|
|
then
|
|
archiveFileList="$archiveFileList $DestFile"
|
|
fi
|
|
fi
|
|
|
|
if [ "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
for i in ibase.h ib_util.h
|
|
do
|
|
DestFile=usr/include/$i
|
|
if [ -e $DestFile ]; then
|
|
if [ ! "`echo $archiveFileList | grep $DestFile`" ]; then
|
|
archiveFileList="$archiveFileList $DestFile"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
for i in libib_util.@SHRLIB_EXT@ libfbclient.@SHRLIB_EXT@*
|
|
do
|
|
for DestFile in usr/lib/$i
|
|
do
|
|
if [ -e $DestFile ]; then
|
|
if [ ! "`echo $archiveFileList | grep $DestFile`" ]; then
|
|
archiveFileList="$archiveFileList $DestFile"
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
|
|
for i in usr/sbin/rcfirebird etc/init.d/firebird etc/rc.d/init.d/firebird
|
|
do
|
|
DestFile=./$i
|
|
if [ -e $DestFile ]; then
|
|
if [ ! "`echo $archiveFileList | grep $DestFile`" ]; then
|
|
archiveFileList="$archiveFileList $DestFile"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ ! -z "$archiveFileList" ]
|
|
then
|
|
displayMessage "Archiving..."
|
|
runAndCheckExit "tar -cv${tarOptions}f $tarArc $archiveFileList"
|
|
displayMessage "Done."
|
|
|
|
displayMessage "Deleting..."
|
|
for i in $archiveFileList
|
|
do
|
|
rm -rf $i
|
|
done
|
|
displayMessage "Done."
|
|
fi
|
|
|
|
cd $oldPWD
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# removeInstalledFiles
|
|
#
|
|
removeInstalledFiles() {
|
|
|
|
origDir=`pwd`
|
|
cd /
|
|
|
|
for manifestFile in @FB_MISCDIR@/manifest*.txt
|
|
do
|
|
if [ -f "$manifestFile" ]
|
|
then
|
|
for i in `cat $manifestFile`
|
|
do
|
|
if [ -f $i -o -L $i ]
|
|
then
|
|
rm -f $i
|
|
#echo $i
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
|
|
cd "$origDir"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# removeUninstallFiles
|
|
# Under the install directory remove all the empty directories
|
|
# If some files remain then
|
|
|
|
removeUninstallFiles() {
|
|
# remove the uninstall files
|
|
rm -f @FB_MISCDIR@/manifest*.txt
|
|
rm -f @FB_SBINDIR@/$UninstallScript
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# removeEmptyDirs
|
|
# Under the install directory remove all the empty directories
|
|
# This routine loops, since deleting a directory possibly makes
|
|
# the parent empty as well
|
|
|
|
removeEmptyDirs() {
|
|
|
|
dirContentChanged='yes'
|
|
while [ "$dirContentChanged" ]; do
|
|
dirContentChanged=''
|
|
|
|
for rootDir in @FB_BINDIR@ @FB_SBINDIR@ @FB_LIBDIR@ @FB_INCDIR@ @FB_DOCDIR@ @FB_SAMPLEDIR@ @FB_SAMPLEDBDIR@ \
|
|
@FB_INTLDIR@ @FB_MISCDIR@ @FB_SECDBDIR@ @FB_MSGDIR@ @FB_LOGDIR@ @FB_GUARDDIR@ @FB_PLUGDIR@ \
|
|
@FB_TZDATADIR@ @FB_CONFDIR@; do
|
|
|
|
if [ -d $rootDir ]; then
|
|
for i in `find $rootDir -type d -print`; do
|
|
rmdir $i >/dev/null 2>/dev/null && dirContentChanged=$i
|
|
done
|
|
fi
|
|
|
|
done
|
|
done
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# For security reasons most files in firebird installation are
|
|
# root-owned and world-readable(executable) only (including firebird).
|
|
|
|
# For some files RunUser and RunGroup (firebird)
|
|
# must have write access - lock and log for example.
|
|
|
|
MakeFileFirebirdWritable() {
|
|
FileName=$1
|
|
chown $RunUser:$RunGroup $FileName
|
|
|
|
if [ "$RunUser" = "root" ]
|
|
# In that case we must open databases, locks, etc. to the world...
|
|
# That's a pity, but required if root RunUser choosen.
|
|
then
|
|
chmod a=rw $FileName
|
|
else
|
|
# This is good secure setting
|
|
chmod ug=rw,o= $FileName
|
|
fi
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# fixFilePermissions
|
|
# Change the permissions to restrict access to server programs to
|
|
# firebird group only. This is MUCH better from a safety point of
|
|
# view than installing as root user, even if it requires a little
|
|
# more work.
|
|
|
|
fixFilePermissions() {
|
|
# First of all set owneship of all files to root
|
|
# Build list of interesting directories all over the FS
|
|
dirs="@FB_BINDIR@ @FB_SBINDIR@ @FB_CONFDIR@ @FB_LIBDIR@ @FB_INCDIR@/firebird @FB_DOCDIR@/sql.extensions \
|
|
@FB_SAMPLEDIR@ @FB_SAMPLEDBDIR@ @FB_INTLDIR@ @FB_MISCDIR@ @FB_SECDBDIR@ @FB_MSGDIR@ @FB_LOGDIR@ \
|
|
@FB_GUARDDIR@ @FB_PLUGDIR@ @FB_TZDATADIR@"
|
|
dirs2=`for i in $dirs; do echo $i; done|sort|uniq`
|
|
|
|
MakeTemp
|
|
tmp1=$TmpFile
|
|
MakeTemp
|
|
tmp2=$TmpFile
|
|
MakeTemp
|
|
tmp3=$TmpFile
|
|
MakeTemp
|
|
tmp4=$TmpFile
|
|
|
|
# Extract list of our files in that directories from manifest
|
|
manifest=@FB_MISCDIR@/manifest.txt
|
|
for i in $dirs2
|
|
do
|
|
grep $i manifest.txt >$tmp1
|
|
echo $i > $tmp3
|
|
for j in $dirs2
|
|
do
|
|
if [ $i != $j ]
|
|
then
|
|
if ! grep -q $j $tmp3
|
|
then
|
|
grep -v $j $tmp1 >$tmp2
|
|
rm -f $tmp1
|
|
mv $tmp2 $tmp1
|
|
fi
|
|
fi
|
|
done
|
|
cat $tmp1 >> $tmp4
|
|
done
|
|
|
|
# Change ownership
|
|
rundir=`pwd`
|
|
cd /
|
|
for f in `cat $tmp4`
|
|
do
|
|
chown root:root $f
|
|
done
|
|
cd $rundir
|
|
|
|
rm -f $tmp1 $tmp2 $tmp3 $tmp4
|
|
|
|
# Lock files
|
|
cd @FB_GUARDDIR@
|
|
for FileName in fb_guard
|
|
do
|
|
touch $FileName
|
|
MakeFileFirebirdWritable $FileName
|
|
done
|
|
|
|
# Log file
|
|
cd @FB_LOGDIR@
|
|
touch firebird.log
|
|
MakeFileFirebirdWritable firebird.log
|
|
touch replication.log
|
|
MakeFileFirebirdWritable replication.log
|
|
|
|
# Security database
|
|
cd @FB_SECDBDIR@
|
|
MakeFileFirebirdWritable $SecurityDatabase
|
|
|
|
# make examples DB(s) writable
|
|
for i in `find @FB_SAMPLEDBDIR@ -name '*.fdb' -print`
|
|
do
|
|
MakeFileFirebirdWritable $i
|
|
done
|
|
}
|
|
|
|
|
|
fbUsage() {
|
|
pf=""
|
|
if [ "@CHANGE_PATH_SUPPORT@" = "yes" ]
|
|
then
|
|
pf=', -path <install path>'
|
|
fi
|
|
|
|
echo "$1 option: $2. Known option(s): -silent${pf}."
|
|
exit 1
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# parseArgs
|
|
# Parse passed arguments.
|
|
# Set appropriate global flags.
|
|
|
|
parseArgs() {
|
|
flSilent=0
|
|
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
-silent)
|
|
flSilent=1
|
|
;;
|
|
-path)
|
|
if [ "@CHANGE_PATH_SUPPORT@" = "yes" ]
|
|
then
|
|
{ fb_install_prefix="$2"; }
|
|
if [ -z "${fb_install_prefix}" ]
|
|
then
|
|
fbUsage "Missing argument for" "$1"
|
|
fi
|
|
shift
|
|
startupName
|
|
else
|
|
fbUsage "Not supported" "$1"
|
|
fi
|
|
;;
|
|
*)
|
|
fbUsage Invalid "$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ $flSilent -eq 0 ]; then
|
|
InteractiveInstall=1
|
|
export InteractiveInstall
|
|
fi
|
|
}
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
# set new prefix for fb installation
|
|
|
|
setNewPrefix() {
|
|
binlist="@FB_BINDIR@/changeServerMode.sh @FB_BINDIR@/fb_config @FB_BINDIR@/registerDatabase.sh @FB_BINDIR@/FirebirdUninstall.sh"
|
|
filelist="$binlist @FB_MISCDIR@/firebird.init.d.*"
|
|
for file in $filelist
|
|
do
|
|
editFile $file fb_install_prefix "fb_install_prefix=${fb_install_prefix}"
|
|
done
|
|
for file in $binlist
|
|
do
|
|
chmod 0700 $file
|
|
done
|
|
}
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
# extract installation archive
|
|
|
|
extractBuildroot() {
|
|
displayMessage "Extracting install data"
|
|
|
|
if [ "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
# Extract archive in root directory
|
|
cd /
|
|
tar -xzof "$origDir/buildroot.tar.gz"
|
|
else
|
|
mkdir -p ${fb_install_prefix}
|
|
cd ${fb_install_prefix}
|
|
defDir=".${default_prefix}"
|
|
if [ -d $defDir ]
|
|
then
|
|
echo "${default_prefix} should not exist in ${fb_install_prefix}"
|
|
fi
|
|
|
|
tar -xzof "$origDir/buildroot.tar.gz" ${defDir}
|
|
for p in ${defDir}/*
|
|
do
|
|
mv $p .
|
|
done
|
|
|
|
while [ ${#defDir} -gt 2 ]
|
|
do
|
|
rm -rf ${defDir}
|
|
defDir=`dirname $defDir`
|
|
done
|
|
fi
|
|
|
|
cd "$origDir"
|
|
}
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
# starts firebird server
|
|
|
|
startFirebird() {
|
|
if [ "${fb_install_prefix}" = "${default_prefix}" ]
|
|
then
|
|
startService
|
|
fi
|
|
}
|