8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-22 20:03:02 +01:00

Added the linux/unix install to fb2

also modified a bit to start working with autoconf
This commit is contained in:
skywalker 2001-08-01 07:59:14 +00:00
parent 9d3b9ed3ae
commit 5dc9d07e52
31 changed files with 5426 additions and 0 deletions

222
src/install/Makefile.in Normal file
View File

@ -0,0 +1,222 @@
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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.mozilla.org/MPL/
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. You may obtain a copy of the Licence at
# http://www.gnu.org/copyleft/gpl.html
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# Relevant for more details.
#
# This file was created by members of the firebird development team.
# All individual contributions remain the Copyright (C) of those
# individuals. Contributors to this file are either listed here or
# can be obtained from a CVS history command.
#
# All rights reserved.
#
# Created by: Mark O'Donohue <mark.odonohue@ludwig.edu.au>
#
# Contributor(s):
#
#
# $Id: Makefile.in,v 1.1 2001-08-01 07:59:14 skywalker Exp $
#
ROOT=../..
include $(ROOT)/src/make.rules
include $(ROOT)/src/make.defaults
include $(ROOT)/src/make.platform
include $(ROOT)/src/make.shared.variables
INSTALLDIR=@prefix@
@SET_MAKE@
.PHONY: all CSrpmscript SSrpmscript ssinstall runclassicinstall \
classicpackages
# Some of these targets are run from the root tree of the build.
# those need to know where the install subdirectory is kept.
# Others are run locally these need to know the path back to the
# root of the build tree.
BuildRoot=$(GEN_ROOT)
InstallRoot=$(SRC_ROOT)/src/install/linux
RedhatPackageDir=/usr/src/redhat/RPMS/i386
Version=1.5.0-1
ClassicTarFile=FirebirdCS-$(Version).tar.gz
SuperTarFile=FirebirdSS-$(Version).tar.gz
ClassicRPMFile=FirebirdCS-$(Version).i386.rpm
SuperRPMFile=FirebirdSS-$(Version).i386.rpm
ClassicSrcDir=$(InstallRoot)/classic
SuperSrcDir=$(InstallRoot)/super
LastClassicInstallFlg=.classicinstallflg
LastSuperInstallFlg=.superinstallflg
install:
@echo "you need to make a choice here "
@echo "make target"
@echo ""
@echo "Firebird classic targets:"
@echo "runclassicinstall - install classic from build tree"
@echo "classicpackages - build tar and rpm install files"
@echo "classictarfile - build tar install file"
@echo "classicrpmfile - build redhat rpm install file"
@echo ""
@echo "Firebird super targets:"
@echo "runsuperinstall - install super from build tree"
@echo "superpackages - build tar and rpm install files"
@echo "supertarfile - build tar install file"
@echo "superrpmfile - build redhat rpm install file"
@echo ""
all2: CSrpmscript SSrpmscript csinstall ssinstall
classicpackages: classictarfile classicrpmfile
runclassicinstall: $(LastClassicInstallFlg)
classictarfile: runclassicinstall $(ClassicTarFile)
classicrpmfile: runclassicinstall $(ClassicRPMFile)
$(LastClassicInstallFlg) : $(BIN)/gsec
sh $(InstallRoot)/classic/CSTarInstall.sh
touch $(LastClassicInstallFlg)
$(ClassicTarFile) : csinstall runclassicinstall
mv csinstall install
tar -czf $(ClassicTarFile) install
mv install csinstall
$(ClassicRPMFile): CSrpmscript
rpm -bb CSrpmscript
cp $(RedhatPackageDir)/$(ClassicRPMFile) .
superpackages: supertarfile superrpmfile
runsuperinstall: $(LastSuperInstallFlg)
supertarfile: runsuperinstall $(SuperTarFile)
superrpmfile: runsuperinstall $(SuperRPMFile)
$(LastSuperInstallFlg) : interbase/bin/gsec
sh $(InstallRoot)/super/SSTarInstall.sh
touch $(LastSuperInstallFlg)
$(SuperTarFile) : ssinstall runsuperinstall
mv ssinstall install
tar -czf $(SuperTarFile) install
mv install ssinstall
$(SuperRPMFile): SSrpmscript
rpm -bb SSrpmscript
cp $(RedhatPackageDir)/$(SuperRPMFile) .
CSrpmscript:
echo $@
cat $(ClassicSrcDir)/CSrpmheader.txt > $@
echo "" >> $@
echo "%prep" >> $@
# cat $(ClassicSrcDir)/CSprepinstall.sh >> $@
echo "" >> $@
echo "%build" >> $@
# cat $(ClassicSrcDir)/CSbuildinstall.sh >> $@
echo "" >> $@
echo "%install" >> $@
# cat $(ClassicSrcDir)/CSinstall.sh >> $@
echo "" >> $@
echo "%files" >> $@
cat $(ClassicSrcDir)/CSrpmfiles.txt >> $@
echo "" >> $@
echo "%pre" >> $@
cat $(ClassicSrcDir)/CSpreinstall.sh >> $@
echo "" >> $@
echo "%post" >> $@
cat $(ClassicSrcDir)/CSpostinstall.sh >> $@
echo "" >> $@
echo "%preun" >> $@
cat $(ClassicSrcDir)/CSpreuninstall.sh >> $@
echo "" >> $@
echo "%postun" >> $@
cat $(ClassicSrcDir)/CSpostuninstall.sh >> $@
SSrpmscript:
echo $@
cat $(SuperSrcDir)/SSrpmheader.txt > $@
echo "" >> $@
echo "%prep" >> $@
# cat $(SuperSrcDir)/SSprepinstall.sh >> $@
echo "" >> $@
echo "%build" >> $@
# cat $(SuperSrcDir)/SSbuildinstall.sh >> $@
echo "" >> $@
echo "%install" >> $@
# cat $(SuperSrcDir)/SSinstall.sh >> $@
echo "" >> $@
echo "%files" >> $@
cat $(SuperSrcDir)/SSrpmfiles.txt >> $@
echo "" >> $@
echo "%pre" >> $@
cat $(SuperSrcDir)/SSpreinstall.sh >> $@
echo "" >> $@
echo "%post" >> $@
cat $(SuperSrcDir)/SSpostinstall.sh >> $@
echo "" >> $@
echo "%preun" >> $@
cat $(SuperSrcDir)/SSpreuninstall.sh >> $@
echo "" >> $@
echo "%postun" >> $@
cat $(SuperSrcDir)/SSpostuninstall.sh >> $@
CSTarInstallDir=csinstall
csinstall:
mkdir -p $(CSTarInstallDir)/scripts
# (cd $(BuildRoot); tar -czf - interbase ) | cat > $(CSTarInstallDir)/interbase.tar.gz
cp $(ClassicSrcDir)/CSpreinstall.sh $(CSTarInstallDir)/scripts
cp $(ClassicSrcDir)/CSinstall.sh $(CSTarInstallDir)/scripts
cp $(ClassicSrcDir)/CSpostinstall.sh $(CSTarInstallDir)/scripts
cp $(ClassicSrcDir)/CSTarInstall.sh $(CSTarInstallDir)/install.sh
tar -czf $(CSTarInstallDir)/interbase.tar.gz interbase
SSTarInstallDir=ssinstall
ssinstall:
mkdir -p $(SSTarInstallDir)/scripts
cp $(SuperSrcDir)/SSpreinstall.sh $(SSTarInstallDir)/scripts
cp $(SuperSrcDir)/SSinstall.sh $(SSTarInstallDir)/scripts
cp $(SuperSrcDir)/SSpostinstall.sh $(SSTarInstallDir)/scripts
cp $(SuperSrcDir)/SSTarInstall.sh $(SSTarInstallDir)/install.sh
tar -czf $(SSTarInstallDir)/interbase.tar.gz interbase

View File

@ -0,0 +1,697 @@
Summary: Firebird Relational Database Server and Client tools.
Name: FirebirdCS
Version: 0.9
Release: 1
Copyright: Distributable
Group: Applications/Databases
Source: FirebirdCS0.9src.tar.gz
URL: http://firebird.sourceforge.net
Prefix: /opt
AutoReqProv: no
# BuildRoot: /var/tmp/%{name}-buildroot
%description
Firebird is a powerful, high-performance relational database designed to be embedded into
applications on multiple platforms.
%prep
%build
%install
%files
%dir /opt/interbase
%dir /opt/interbase/bin
%dir /opt/interbase/lib
%dir /opt/interbase/UDF
%dir /opt/interbase/intl
%dir /opt/interbase/help
/opt/interbase/bin/gds_inet_server
/opt/interbase/bin/gbak
/opt/interbase/bin/gdef
/opt/interbase/bin/gds_lock_print
/opt/interbase/bin/gds_lock_mgr
/opt/interbase/bin/gds_pipe
/opt/interbase/bin/gds_drop
/opt/interbase/bin/gfix
/opt/interbase/bin/gpre
/opt/interbase/bin/gsec
/opt/interbase/bin/gsplit
/opt/interbase/bin/gstat
/opt/interbase/bin/isc4.gbak
/opt/interbase/bin/isql
/opt/interbase/bin/qli
/opt/interbase/examples
/opt/interbase/help/help.gbak
%attr(666, -, -) /opt/interbase/help/help.gdb
/opt/interbase/include
/usr/include/gds.h
/usr/include/iberror.h
/usr/include/ibase.h
/usr/include/ib_util.h
#/opt/interbase/doc
/opt/interbase/README
/opt/interbase/interbase.msg
%attr(666, -, -) /opt/interbase/isc4.gdb
/opt/interbase/isc_config
/usr/lib/libgds.so.0
/usr/lib/libgds.so
/usr/lib/libib_util.so
/usr/lib/libgds_pyxis.a
/usr/lib/libgds.a
/opt/interbase/intl/gdsintl
/opt/interbase/UDF/ib_udf
/opt/interbase/services.isc
%pre
#!/bin/sh
# The pre install routine for Firebird Classic
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# stop server if it is running
checkIfServerRunning() {
stopServerIfRunning
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $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() {
oldPWD=`pwd`
archiveFileList=""
cd /
DestFile="opt/interbase"
if [ -e "$DestFile" ]
then
echo ""
echo ""
echo ""
echo "--- Warning ----------------------------------------------"
echo " The installation target directory: $IBRootDir"
echo " Already contains a prior installation of InterBase/Firebird."
echo " This and files found in /usr/include and /usr/lib will be"
echo " archived in the file : ${ArchiveMainFile}"
echo ""
if [ ! -z "$InteractiveInstall" ]
then
AskQuestion "Press return to continue or ^C to abort"
fi
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
fi
for i in gds.h ibase.h iberror.h ib_util.h
do
DestFile=usr/include/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
for i in gds_pyxis.a gds.a libgds.so.0 libgds.so ib_util.so
do
DestFile=usr/lib/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
if [ ! -z "$archiveFileList" ]
then
displayMessage "Archiving..."
runAndCheckExit "tar -czf $ArchiveMainFile $archiveFileList"
displayMessage "Done."
displayMessage "Deleting..."
for i in $archiveFileList
do
rm -rf $i
done
displayMessage "Done."
fi
cd $oldPWD
}
#------------------------------------------------------------------------
# Check for installed RPM package
checkForRPMInstall() {
PackageName=$1
rpm -q $PackageName
STATUS=$?
if [ $STATUS -eq 0 ]
then
echo "Previous version of $PackageName is detected on your system."
echo "this will conflict with the current install of Firebird"
echo "Please unistall the previous version `rpm -q $PackageName` and then proceed."
exit $STATUS
fi
}
#= Main Pre ================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
ArchiveDateTag=`date +"%Y%m%d_%H%M"`
ArchiveMainFile="${IBRootDir}_${ArchiveDateTag}.tar.gz"
# Ok so any of the following packages are a problem
# these don't work at least in the latest rpm manager, since it
# has the rpm database locked and it fails.
# checkForRPMInstall InterBase
# checkForRPMInstall FirebirdCS
# checkForRPMInstall FirebirdSS
checkIfServerRunning
# Failing that we archive any files we find
archivePriorInstallSystemFiles
%post
#!/bin/sh
# The post install script for Firebird Classic
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " In file $FileName found line: "
echo " $oldLine"
echo " Which differs from the expected line:"
echo " $newLine"
echo ""
# AskQuestion "Press return to update file or ^C to abort install"
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# Unable to generate the password for the rpm, so put out a message
# instead
keepOrigDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd='masterkey'
echo "Firebird initial install password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "for install on `hostname` at time `date`" >> $DBAPasswordFile
echo "You should change this password at the earliest oportunity" >> $DBAPasswordFile
echo ""
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your should password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=r,go= $DBAPasswordFile
}
#------------------------------------------------------------------------
# Generate new sysdba password - this routine is used only in the
# rpm file not in the install acript.
generateNewDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`/usr/bin/mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=r,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
NewPasswd=""
while [ -z "$NewPasswd" ]
do
# If using a generated password
# DBAPasswordFile=$IBRootDir/SYSDBA.password
# NewPasswd=`mkpasswd -l 8`
# echo "Password for SYSDBA on `hostname` is : $NewPasswd" > $DBAPasswordFile
# chmod ga-rwx $DBAPasswordFile
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
# 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.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
if [ -f /usr/bin/mkpasswd ]
then
generateNewDBAPassword
else
keepOrigDBAPassword
fi
else
askUserForNewDBAPassword
fi
}
#= Main Post ===============================================================
# Make sure the links are in place
if [ ! -L /opt/interbase -a ! -d /opt/interbase ]
then
# Main link and...
ln -s $RPM_INSTALL_PREFIX/interbase /opt/interbase
fi
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
# Update /etc/services
FileName=/etc/services
newLine="gds_db 3050/tcp # InterBase Database Remote Protocol"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# Update the /etc/inetd.conf
FileName=/etc/inetd.conf
newLine="gds_db stream tcp nowait.30000 $RunUser $IBBin/gds_inet_server gds_inet_server # InterBase Database Remote Server"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# Update ownership and SUID bits for programs.
chown -R $RunUser.$RunUser $IBRootDir
cd $IBBin
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug+s $i
done
# Get inetd to reread new init files.
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
# Lock files
# remember isc_guard1 in addition for super
cd $IBRootDir
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
touch $FileName
chmod uga+rw $FileName
done
touch interbase.log
chmod uga+rw interbase.log
# make examples writable by anyone
chmod uga+rw examples/*.gdb
# Change sysdba password
changeDBAPassword
%preun
#! /bin/sh
# The pre uninstall routines for Firebird Classic
#------------------------------------------------------------------------
# stop server if it is running
checkIfServerRunning() {
# Check is server is being actively used.
checkString=`ps -ef| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -ef | grep "gds_lock_mgr" | grep -v "grep" | cut -d' ' -f3`
do
kill $i
done
}
#= Main PreUn ================================================================
# This is a bit simple, but should work for now.
# cron will remove files in /tmp after a while.
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
checkIfServerRunning
cd $IBRootDir
if [ -f isc4.gdb ]
then
cp isc4.gdb /tmp
echo "Saved a copy of isc4.gdb in /tmp"
fi
for i in isc_init1* isc_event1* isc_lock1* interbase.log SYSDBA.password
do
if [ -f $i ]
then
rm -f $i
fi
done
%postun
#!/bin/sh
# The post uninstall routine for Firebird Classic.
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#= Main PostUn ============================================================
if [ -L /usr/lib/libgds.so ]
then
rm /usr/lib/libgds.so
fi
if [ "$1"=0 ]
then
# Lose the gds_db line from /etc/services
FileName=/etc/services
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Next, lose the gds_db line from /etc/inetd.conf
FileName=/etc/inetd.conf
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Get inetd to reread new inetd.conf file
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
fi

View File

@ -0,0 +1,3 @@
# Hello 1

View File

@ -0,0 +1,672 @@
Summary: Firebird Database Server and Client tools.
Name: FirebirdSS
Version: 0.9
Release: 1
Copyright: Distributable
Group: Applications/Databases
Source: FirebirdSS0.9src.tar.gz
URL: http://firebird.sourceforge.net
Prefix: /opt
AutoReqProv: no
%description
Firebird is a powerful, high-performance relational database designed to be embedded into
applications on multiple platforms.
%prep
%build
%install
%files
%dir /opt/interbase
%dir /opt/interbase/bin
%dir /opt/interbase/lib
%dir /opt/interbase/UDF
%dir /opt/interbase/intl
%dir /opt/interbase/help
/opt/interbase/bin/gbak
/opt/interbase/bin/gdef
/opt/interbase/bin/gds_lock_print
/opt/interbase/bin/gfix
/opt/interbase/bin/gpre
/opt/interbase/bin/gsec
/opt/interbase/bin/gsplit
/opt/interbase/bin/gstat
/opt/interbase/bin/isc4.gbak
/opt/interbase/bin/isql
/opt/interbase/bin/qli
/opt/interbase/bin/ibmgr.bin
/opt/interbase/bin/ibserver
/opt/interbase/bin/ibguard
/opt/interbase/examples
/opt/interbase/help/help.gbak
/opt/interbase/help/help.gdb
/opt/interbase/include
/usr/include/gds.h
/usr/include/iberror.h
/usr/include/ibase.h
/opt/interbase/doc
/opt/interbase/interbase.msg
/opt/interbase/isc4.gdb
/opt/interbase/isc_config
/usr/lib/libgds.so.0
/usr/lib/libgds.so
/usr/lib/libib_util.so
/usr/lib/libgds_pyxis.a
/opt/interbase/intl/gdsintl
/opt/interbase/UDF/ib_udf
/opt/interbase/services.isc
/opt/interbase/README
/etc/rc.d/init.d/firebird
%pre
#! /bin/sh
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# Check if server is running
checkIfServerRunning() {
stopServerIfRunning
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $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() {
oldPWD=`pwd`
archiveFileList=""
cd /
DestFile="opt/interbase"
if [ -e "$DestFile" ]
then
echo ""
echo ""
echo ""
echo "--- Warning ----------------------------------------------"
echo " The installation target directory: $IBRootDir"
echo " Already contains a prior installation of InterBase/Firebird."
echo " This and files found in /usr/include and /usr/lib will be"
echo " archived in the file : ${ArchiveMainFile}"
echo ""
if [ ! -z "$InteractiveInstall" ]
then
AskQuestion "Press return to continue or ^C to abort"
fi
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
fi
for i in gds.h ibase.h iberror.h ib_util.h
do
DestFile=usr/include/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
for i in gds_pyxis.a gds.a libgds.so.0 libgds.so ib_util.so
do
DestFile=usr/lib/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
if [ ! -z "$archiveFileList" ]
then
displayMessage "Archiving..."
runAndCheckExit "tar -czf $ArchiveMainFile $archiveFileList"
displayMessage "Done."
displayMessage "Deleting..."
for i in $archiveFileList
do
rm -rf $i
done
displayMessage "Done."
fi
cd $oldPWD
}
#------------------------------------------------------------------------
# Check for installed RPM package
checkForRPMInstall() {
PackageName=$1
rpm -q $PackageName
STATUS=$?
if [ $STATUS -eq 0 ]
then
echo "Previous version of $PackageName is detected on your system."
echo "this will conflict with the current install of Firebird"
echo "Please unistall the previous version `rpm -q $PackageName` and then proceed."
exit $STATUS
fi
}
#== Main Pre =================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
ArchiveDateTag=`date +"%Y%m%d_%H%M"`
ArchiveMainFile="${IBRootDir}_${ArchiveDateTag}.tar.gz"
# Ok so any of the following packages are a problem
# these don't work at least in the latest rpm manager, since it
# has the rpm database locked and it fails.
# checkForRPMInstall InterBase
# checkForRPMInstall FirebirdCS
# checkForRPMInstall FirebirdSS
checkIfServerRunning
# Failing that we archive any files we find
archivePriorInstallSystemFiles
%post
#! /bin/sh
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " In file $FileName found line: "
echo " $oldLine"
echo " Which differs from the expected line:"
echo " $newLine"
echo ""
# AskQuestion "Press return to update file or ^C to abort install"
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeInitPassword
changeInitPassword() {
NewPasswd=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/ISC_PASSWORD/s/ISC_PASSWORD:=.*\}/ISC_PASSWORD:=$NewPasswd\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
#------------------------------------------------------------------------
# Generate new sysdba password
generateNewDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=rw,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
changeInitPassword "$NewPasswd"
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
NewPasswd=""
echo ""
while [ -z "$NewPasswd" ]
do
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
changeInitPassword "$NewPasswd"
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
generateNewDBAPassword
else
askUserForNewDBAPassword
fi
}
#= Main Post ===============================================================
# Make sure the links are in place
if [ ! -L /opt/interbase -a ! -d /opt/interbase ]
then
# Main link and...
ln -s $RPM_INSTALL_PREFIX/interbase /opt/interbase
fi
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
# Update /etc/services
FileName=/etc/services
newLine="gds_db 3050/tcp # InterBase Database Remote Protocol"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# remove any gds_db line in the /etc/inetd.conf
FileName=/etc/inetd.conf
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Get inetd to reread new init files.
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
# Update ownership of programs
chown -R $RunUser.$RunUser $IBRootDir
cd $IBBin
# Create the ibmgr shell script.
cat > ibmgr <<EOF
#!/bin/sh
INTERBASE=$IBRootDir
export INTERBASE
exec \$INTERBASE/bin/ibmgr.bin \$@
EOF
chmod u=rwx,go=rx *
# These two should only be executed by firebird user.
chmod u=rwx,go= ibguard ibserver
# Lock files
cd $IBRootDir
for i in isc_init1 isc_lock1 isc_event1 isc_guard1
do
FileName=$i.`hostname`
touch $FileName
chmod ug=rw,o= $FileName
done
touch interbase.log
chmod u=rw,go= interbase.log
chmod ug+rx,o= /etc/rc.d/init.d/firebird
# This will start it at runlevel defined within the firebird file itself.
/sbin/chkconfig --add firebird
# start the db server so we can change the password
(cd /etc/rc.d/init.d; ./firebird start)
# Change sysdba password
changeDBAPassword
%preun
#! /bin/sh
#------------------------------------------------------------------------
# stop server if it is running
stopServerIfRunning() {
checkString=`ps -ef| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
/etc/rc.d/init.d/firebird stop
fi
}
#= Main PreUn ================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
stopServerIfRunning
/sbin/chkconfig --del firebird
cd $IBRootDir
if [ -f isc4.gdb ]
then
cp isc4.gdb /tmp
echo "Saved a copy of isc4.gdb in /tmp"
fi
for i in isc_init1* isc_event1* isc_lock1* isc_guard* interbase.log SYSDBA.password
do
if [ -f $i ]
then
rm -f $i
fi
done
rm -f $IBBin/ibmgr
%postun
#! /bin/sh
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#= Main ProstUn ===============================================================
if [ -L /usr/lib/libgds.so ]
then
rm -f /usr/lib/libgds.so
fi
# Update /etc/services
FileName=/etc/services
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"

View File

@ -0,0 +1,125 @@
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Prompt for yes or no answer - returns non-zero for no
AskYNQuestion() {
while echo -n "${*} (y/n): "
do
read answer rest
case $answer in
[yY]*)
return 0
;;
[nN]*)
return 1
;;
*)
echo "Please answer y or n"
;;
esac
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $Cmd
$Cmd
ExitCode=$?
if [ $ExitCode -ne 0 ]
then
echo "Install aborted: The command $Cmd "
echo " failed with error code $ExitCode"
exit
fi
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to install"
echo ""
exit
fi
}
#== Main Program ==========================================================
InteractiveInstall=1
export InteractiveInstall
checkInstallUser
# Ok, here we are installing from a CVS tree
if [ -e firebird ]
then
ScriptsSrcDir=./src/install/linux
( $ScriptsSrcDir/classic/CSpreinstall.sh )
cp $ScriptsSrcDir/misc/README interbase
for i in CSchangeRunUser.sh CSrestoreRootRunUser.sh changeDBAPassword.sh
do
cp $ScriptsSrcDir/misc/$i interbase/bin/$i
chmod ugo=rx interbase/bin/$i
done
mkdir -p interbase/misc
cp $ScriptsSrcDir/misc/firebird.xinetd interbase/misc
($ScriptsSrcDir/classic/CSinstall.sh)
($ScriptsSrcDir/classic/CSpostinstall.sh)
fi
# Here we are installing from a install tar.gz file
if [ -e scripts ]
then
echo "Extracting install data"
runAndCheckExit "tar -xzf interbase.tar.gz"
(./scripts/CSpreinstall.sh)
(./scripts/CSinstall.sh)
(./scripts/CSpostinstall.sh)
rm -rf interbase
fi
echo "Install completed"

View File

@ -0,0 +1,27 @@
#!/bin/sh
IBRootDir=`pwd`/interbase
IBBin=$IBRootDir/bin
RunUser=root
chown -R $RunUser.$RunUser $IBRootDir
cd $IBBin
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug+s $i
done
cd $IBRootDir
rm -f isc_init1*
rm -f isc_lock1*
chmod ugo=rw isc4.gdb
rm -f inetd.conf.isc install

104
src/install/classic/CSinstall.sh Executable file
View File

@ -0,0 +1,104 @@
#!/bin/sh
# Script to install files from the build/transport area
# cd InterBase
# A little bit of tidying up of some odd files not in the original build
# These files will exist in the CVS tree.
# If this is a tar.gz install rather than the result of a build then
# We assume the files have already been copied here manually.
BuildDir=gen/firebird
DestDir=/opt/interbase
if [ -z "$InteractiveInstall" ]
then
ScriptsSrcDir=src/install/linux
cp $ScriptsSrcDir/misc/README $BuildDir
fi
# The guts of the tranfer of files to /opt and other directories
if [ -d $DestDir ]
then
rm -rf $DestDir
fi
mkdir $DestDir
mkdir $DestDir/bin
mkdir $DestDir/examples
mkdir $DestDir/help
mkdir $DestDir/include
mkdir $DestDir/intl
mkdir $DestDir/lib
mkdir $DestDir/doc
mkdir $DestDir/UDF
mkdir $DestDir/misc
cp -f $BuildDir/bin/gds_inet_server $DestDir/bin/gds_inet_server
cp $BuildDir/bin/gbak $DestDir/bin/gbak
cp $BuildDir/bin/gdef $DestDir/bin/gdef
cp $BuildDir/bin/gds_lock_print $DestDir/bin/gds_lock_print
cp $BuildDir/bin/gds_drop $DestDir/bin/gds_drop
cp $BuildDir/bin/gds_lock_mgr $DestDir/bin/gds_lock_mgr
cp $BuildDir/bin/gds_pipe $DestDir/bin/gds_pipe
cp $BuildDir/bin/gfix $DestDir/bin/gfix
cp $BuildDir/bin/gpre $DestDir/bin/gpre
cp $BuildDir/bin/gsec $DestDir/bin/gsec
cp $BuildDir/bin/gsplit $DestDir/bin/gsplit
cp $BuildDir/bin/gstat $DestDir/bin/gstat
cp $BuildDir/bin/isc4.gbak $DestDir/bin/isc4.gbak
cp $BuildDir/bin/isql $DestDir/bin/isql
cp $BuildDir/bin/qli $DestDir/bin/qli
cp $BuildDir/bin/CSchangeRunUser.sh $DestDir/bin
cp $BuildDir/bin/CSrestoreRootRunUser.sh $DestDir/bin
cp $BuildDir/bin/changeDBAPassword.sh $DestDir/bin
cp $BuildDir/examples/v5/*.[ceh] $DestDir/examples
cp $BuildDir/examples/v5/*.sql $DestDir/examples
cp $BuildDir/examples/v5/*.gbk $DestDir/examples
cp $BuildDir/examples/v5/*.gdb $DestDir/examples
cp $BuildDir/examples/v5/makefile $DestDir/examples
cp $BuildDir/help/help.gbak $DestDir/help
cp $BuildDir/help/help.gdb $DestDir/help
#cp -r $BuildDir/doc $DestDir
cp $BuildDir/interbase.msg $DestDir/interbase.msg
cp $BuildDir/isc4.gdb $DestDir/isc4.gdb
cp $BuildDir/isc_config $DestDir/isc_config
cp -f $BuildDir/include/gds.h /usr/include/gds.h
cp -f $BuildDir/include/iberror.h /usr/include/iberror.h
cp -f $BuildDir/include/ibase.h /usr/include/ibase.h
cp -f $BuildDir/include/ib_util.h /usr/include/ib_util.h
cp $BuildDir/include/gds.f $DestDir/include
cp $BuildDir/include/gds.hxx $DestDir/include
cp $BuildDir/include/*.h $DestDir/include
cp -f $BuildDir/lib/gds.so /usr/lib/libgds.so.0
if [ -L /usr/lib/libgds.so ]
then
rm -f /usr/lib/libgds.so
fi
ln -s libgds.so.0 /usr/lib/libgds.so
cp -f $BuildDir/lib/gds.a /usr/lib/libgds.a
cp -f $BuildDir/lib/ib_util.so /usr/lib/libib_util.so
cp $BuildDir/intl/libgdsintl.so $DestDir/intl/
cp $BuildDir/UDF/ib_udf $DestDir/UDF/ib_udf
cp $BuildDir/services.isc $DestDir/services.isc
cp $BuildDir/README $DestDir/README
cp $BuildDir/misc/firebird.xinetd $DestDir/misc/firebird.xinetd
# June 23 2000, 6:00AM
#TIMESTAMP="200006230600.00"
#cd $DestDir/
#touch -t $TIMESTAMP `find . -print`

View File

@ -0,0 +1,553 @@
#!/bin/sh
# The post install script for Firebird Classic
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " In file $FileName found line: "
echo " $oldLine"
echo " Which differs from the expected line:"
echo " $newLine"
echo ""
# AskQuestion "Press return to update file or ^C to abort install"
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# Add new user and group
addFirebirdUser() {
testStr=`grep firebird /etc/group`
if [ -z "$testStr" ]
then
groupadd -g 84 -o -r firebird
fi
testStr=`grep firebird /etc/passwd`
if [ -z "$testDir" ]
then
useradd -o -r -m -d $IBRootDir -s /bin/bash \
-c "Firebird Database Administrator" -g firebird -u 84 firebird
# >/dev/null 2>&1
fi
}
#------------------------------------------------------------------------
# Delete new user and group
deleteFirebirdUser() {
userdel firebird
# groupdel firebird
}
#------------------------------------------------------------------------
# changeXinetdServiceUser
# Change the run user of the xinetd service
changeXinetdServiceUser() {
InitFile=/etc/xinetd.d/firebird
if [ -f $InitFile ]
then
ed -s $InitFile <<EOF
/ user /s/=.*$/= $RunUser/g
w
q
EOF
fi
}
#------------------------------------------------------------------------
# Update inetd service entry
# This just adds/replaces the service entry line
updateInetdEntry() {
FileName=/etc/inetd.conf
newLine="gds_db stream tcp nowait.30000 $RunUser $IBBin/gds_inet_server gds_inet_server # InterBase Database Remote Server"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
}
#------------------------------------------------------------------------
# Update xinetd service entry
updateXinetdEntry() {
cp $IBRootDir/misc/firebird.xinetd /etc/xinetd.d/firebird
changeXinetdServiceUser
}
#------------------------------------------------------------------------
# Update inetd service entry
# Check to see if we have xinetd installed or plain inetd. Install differs
# for each of them.
updateInetdServiceEntry() {
if [ -d /etc/xinetd.d ]
then
updateXinetdEntry
else
updateInetdEntry
fi
}
#------------------------------------------------------------------------
# Unable to generate the password for the rpm, so put out a message
# instead
keepOrigDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd='masterkey'
echo "Firebird initial install password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "for install on `hostname` at time `date`" >> $DBAPasswordFile
echo "You should change this password at the earliest oportunity" >> $DBAPasswordFile
echo ""
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your should password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/changeDBAPassword.sh script" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
chmod u=r,go= $DBAPasswordFile
}
#------------------------------------------------------------------------
# Generate new sysdba password - this routine is used only in the
# rpm file not in the install acript.
generateNewDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`/usr/bin/mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/changeDBAPassword.sh script" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
chmod u=r,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
NewPasswd=""
while [ -z "$NewPasswd" ]
do
# If using a generated password
# DBAPasswordFile=$IBRootDir/SYSDBA.password
# NewPasswd=`mkpasswd -l 8`
# echo "Password for SYSDBA on `hostname` is : $NewPasswd" > $DBAPasswordFile
# chmod ga-rwx $DBAPasswordFile
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
# 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.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
if [ -f /usr/bin/mkpasswd ]
then
generateNewDBAPassword
else
keepOrigDBAPassword
fi
else
askUserForNewDBAPassword
fi
}
#------------------------------------------------------------------------
# fixFilePermissions
# Change the permissions to restrict access to server programs to
# firebird group only. This is MUCH better from a saftey point of
# view than installing as root user, even if it requires a little
# more work.
fixFilePermissions() {
# Turn other access off.
chmod -R o= $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# set up the defaults for bin
for i in `ls`
do
chmod ug=rx,o= $i
done
# User can run these programs, they need to talk to server though.
# and they cannot actually create a database.
chmod a=rx isql
chmod a=rx qli
# SUID is still needed for group direct access. General users
# cannot run though.
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug=rx,o= $i
chmod ug+s $i
done
cd $IBRootDir
# Fix lock files
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
chmod ug=rw,o= $FileName
done
chmod ug=rw,o= interbase.log
chmod a=r interbase.msg
chmod ug=rw,o= help/help.gdb
chmod ug=rw,o= isc4.gdb
# Set a default of read all files in examples
cd examples
for i in `ls`
do
chmod a=r $i
done
# make examples db's writable by group
chmod ug=rw,o= *.gdb
cd ..
# make include files world readable
cd include
for i in `ls`
do
chmod a=r $i
done
cd ..
# make intl library world readable
cd intl
for i in `ls`
do
chmod a=r $i
done
cd ..
}
#------------------------------------------------------------------------
# fixFilePermissionsForRoot
# This sets the file permissions up to what you need if you are
# running the server as root user. I hope to remove this mode
# of running before the next version, since it's security level
# is absolutely woeful.
fixFilePermissionsRoot() {
# Turn other access off.
chmod -R o= $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# set up the defaults for bin
for i in `ls`
do
chmod o=rx $i
done
# SUID is still needed for group direct access. General users
# cannot run though.
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug+s $i
done
cd $IBRootDir
# Fix lock files
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
chmod a=rw $FileName
done
chmod a=rw interbase.log
chmod a=r interbase.msg
chmod a=rw help/help.gdb
chmod a=rw isc4.gdb
# Set a default of read all files in examples
cd examples
for i in `ls`
do
chmod a=r $i
done
# make examples db's writable by group
chmod a=rw *.gdb
cd ..
# make include files world readable
cd include
for i in `ls`
do
chmod a=r $i
done
cd ..
# make intl library world readable
cd intl
for i in `ls`
do
chmod a=r $i
done
cd ..
}
#------------------------------------------------------------------------
# resetXinitdServer
# Check for both inetd and xinetd, only one will actually be running.
# depending upon your system.
resetInetdServer() {
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
if [ -f /var/run/xinetd.pid ]
then
kill -HUP `cat /var/run/xinetd.pid`
fi
}
#= Main Post ===============================================================
# Make sure the links are in place
if [ ! -L /opt/interbase -a ! -d /opt/interbase ]
then
# Main link and...
ln -s $RPM_INSTALL_PREFIX/interbase /opt/interbase
fi
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
# RunUser=firebird
# Update /etc/services
FileName=/etc/services
newLine="gds_db 3050/tcp # InterBase Database Remote Protocol"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# add Firebird user
if [ $RunUser = "firebird" ]
then
addFirebirdUser
fi
# Create Lock files
cd $IBRootDir
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
touch $FileName
done
# Create log
touch interbase.log
# Update ownership and SUID bits for programs.
chown -R $RunUser.$RunUser $IBRootDir
if [ "$RunUser" = "root" ]
then
fixFilePermissionsRoot
else
fixFilePermissions
fi
# Update the /etc/inetd.conf or xinetd entry
updateInetdServiceEntry
# Get inetd to reread new init files.
resetInetdServer
cd $IBRootDir
# Change sysdba password
changeDBAPassword

View File

@ -0,0 +1,51 @@
#!/bin/sh
# The post uninstall routine for Firebird Classic.
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#= Main PostUn ============================================================
if [ -L /usr/lib/libgds.so ]
then
rm /usr/lib/libgds.so
fi
if [ "$1"=0 ]
then
# Lose the gds_db line from /etc/services
FileName=/etc/services
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Next, lose the gds_db line from /etc/inetd.conf
FileName=/etc/inetd.conf
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Get inetd to reread new inetd.conf file
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
fi

View File

@ -0,0 +1,240 @@
#!/bin/sh
# The pre install routine for Firebird Classic
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# stop server if it is running
checkIfServerRunning() {
stopServerIfRunning
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $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() {
oldPWD=`pwd`
archiveFileList=""
cd /
DestFile="opt/interbase"
if [ -e "$DestFile" ]
then
echo ""
echo ""
echo ""
echo "--- Warning ----------------------------------------------"
echo " The installation target directory: $IBRootDir"
echo " Already contains a prior installation of InterBase/Firebird."
echo " This and files found in /usr/include and /usr/lib will be"
echo " archived in the file : ${ArchiveMainFile}"
echo ""
if [ ! -z "$InteractiveInstall" ]
then
AskQuestion "Press return to continue or ^C to abort"
fi
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
fi
for i in gds.h ibase.h iberror.h ib_util.h
do
DestFile=usr/include/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
for i in gds_pyxis.a gds.a libgds.so.0 libgds.so ib_util.so
do
DestFile=usr/lib/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
if [ ! -z "$archiveFileList" ]
then
displayMessage "Archiving..."
runAndCheckExit "tar -czf $ArchiveMainFile $archiveFileList"
displayMessage "Done."
displayMessage "Deleting..."
for i in $archiveFileList
do
rm -rf $i
done
displayMessage "Done."
fi
cd $oldPWD
}
#------------------------------------------------------------------------
# Check for installed RPM package
checkForRPMInstall() {
PackageName=$1
rpm -q $PackageName
STATUS=$?
if [ $STATUS -eq 0 ]
then
echo "Previous version of $PackageName is detected on your system."
echo "this will conflict with the current install of Firebird"
echo "Please unistall the previous version `rpm -q $PackageName` and then proceed."
exit $STATUS
fi
}
#= Main Pre ================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
ArchiveDateTag=`date +"%Y%m%d_%H%M"`
ArchiveMainFile="${IBRootDir}_${ArchiveDateTag}.tar.gz"
# Ok so any of the following packages are a problem
# these don't work at least in the latest rpm manager, since it
# has the rpm database locked and it fails.
# checkForRPMInstall InterBase
# checkForRPMInstall FirebirdCS
# checkForRPMInstall FirebirdSS
checkIfServerRunning
# Failing that we archive any files we find
archivePriorInstallSystemFiles

View File

@ -0,0 +1,57 @@
#! /bin/sh
# The pre uninstall routines for Firebird Classic
#------------------------------------------------------------------------
# stop server if it is running
checkIfServerRunning() {
# Check is server is being actively used.
checkString=`ps -ef| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -ef | grep "gds_lock_mgr" | grep -v "grep" | cut -d' ' -f3`
do
kill $i
done
}
#= Main PreUn ================================================================
# This is a bit simple, but should work for now.
# cron will remove files in /tmp after a while.
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
checkIfServerRunning
cd $IBRootDir
if [ -f isc4.gdb ]
then
cp isc4.gdb /tmp
echo "Saved a copy of isc4.gdb in /tmp"
fi
for i in isc_init1* isc_event1* isc_lock1* interbase.log SYSDBA.password
do
if [ -f $i ]
then
rm -f $i
fi
done

View File

@ -0,0 +1,60 @@
%dir /opt/interbase
%dir /opt/interbase/bin
%dir /opt/interbase/lib
%dir /opt/interbase/UDF
%dir /opt/interbase/intl
%dir /opt/interbase/help
%dir /opt/interbase/misc
/opt/interbase/bin/gds_inet_server
/opt/interbase/bin/gbak
/opt/interbase/bin/gdef
/opt/interbase/bin/gds_lock_print
/opt/interbase/bin/gds_lock_mgr
/opt/interbase/bin/gds_pipe
/opt/interbase/bin/gds_drop
/opt/interbase/bin/gfix
/opt/interbase/bin/gpre
/opt/interbase/bin/gsec
/opt/interbase/bin/gsplit
/opt/interbase/bin/gstat
/opt/interbase/bin/isc4.gbak
/opt/interbase/bin/isql
/opt/interbase/bin/qli
/opt/interbase/bin/CSchangeRunUser.sh
/opt/interbase/bin/CSrestoreRootRunUser.sh
/opt/interbase/bin/changeDBAPassword.sh
/opt/interbase/examples
/opt/interbase/help/help.gbak
%attr(666, -, -) /opt/interbase/help/help.gdb
/opt/interbase/include
/usr/include/gds.h
/usr/include/iberror.h
/usr/include/ibase.h
/usr/include/ib_util.h
#/opt/interbase/doc
/opt/interbase/README
/opt/interbase/interbase.msg
%attr(666, -, -) /opt/interbase/isc4.gdb
/opt/interbase/isc_config
/usr/lib/libgds.so.0
/usr/lib/libgds.so
/usr/lib/libib_util.so
/usr/lib/libgds_pyxis.a
/usr/lib/libgds.a
/opt/interbase/intl/gdsintl
/opt/interbase/UDF/ib_udf
/opt/interbase/services.isc
/opt/interbase/misc/firebird.xinetd

View File

@ -0,0 +1,16 @@
Summary: Firebird Relational Database Server and Client tools.
Name: FirebirdCS
Version: 0.9
Release: 4
Copyright: Distributable
Group: Applications/Databases
Source: FirebirdCS0.9src.tar.gz
URL: http://firebird.sourceforge.net
Prefix: /opt
AutoReqProv: no
# BuildRoot: /var/tmp/%{name}-buildroot
%description
Firebird is a powerful, high-performance relational database designed to be embedded into
applications on multiple platforms.

View File

@ -0,0 +1,372 @@
#!/bin/sh
# A routine to change the user that runs interbase Firebird
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
ehco ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to do this change"
echo ""
exit
fi
}
#------------------------------------------------------------------------
# check if it is running
checkIfServerRunning() {
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Add new user and group
addFirebirdUser() {
testStr=`grep firebird /etc/group`
if [ -z "$testStr" ]
then
groupadd -g 84 -o -r firebird
fi
testStr=`grep firebird /etc/passwd`
if [ -z "$testDir" ]
then
useradd -o -r -m -d $IBRootDir -s /bin/bash \
-c "Firebird Database Administrator" -g firebird -u 84 firebird
# >/dev/null 2>&1
fi
}
#------------------------------------------------------------------------
# Delete new user and group
deleteFirebirdUser() {
userdel firebird
# groupdel firebird
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
# We really expect this to be the case.
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeXinetdServiceUser
# Change the run user of the xinetd service
changeXinetdServiceUser() {
InitFile=/etc/xinetd.d/firebird
if [ -f $InitFile ]
then
ed -s $InitFile <<EOF
/ user /s/=.*$/= $RunUser/g
w
q
EOF
fi
}
#------------------------------------------------------------------------
# Update inetd service entry
# This just adds/replaces the service entry line
updateInetdEntry() {
FileName=/etc/inetd.conf
newLine="gds_db stream tcp nowait.30000 $RunUser $IBBin/gds_inet_server gds_inet_server # InterBase Database Remote Server"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
}
#------------------------------------------------------------------------
# Update xinetd service entry
updateXinetdEntry() {
cp $IBRootDir/misc/firebird.xinetd /etc/xinetd.d/firebird
changeXinetdServiceUser
}
#------------------------------------------------------------------------
# Update inetd service entry
# Check to see if we have xinetd installed or plain inetd. Install differs
# for each of them.
updateInetdServiceEntry() {
if [ -d /etc/xinetd.d ]
then
updateXinetdEntry
else
updateInetdEntry
fi
}
#------------------------------------------------------------------------
# fixFilePermissions
# Change the permissions to restrict access to server programs to
# firebird group only. This is MUCH better from a saftey point of
# view than installing as root user, even if it requires a little
# more work.
fixFilePermissions() {
# Turn other access off.
chmod -R o= $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# set up the defaults for bin
for i in `ls`
do
chmod ug=rx,o= $i
done
# User can run these programs, they need to talk to server though.
# and they cannot actually create a database.
chmod a=rx isql
chmod a=rx qli
# SUID is still needed for group direct access. General users
# cannot run though.
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug=rx,o= $i
chmod ug+s $i
done
cd $IBRootDir
# Fix lock files
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
chmod ug=rw,o= $FileName
done
chmod ug=rw,o= interbase.log
chmod a=r interbase.msg
chmod ug=rw,o= help/help.gdb
chmod ug=rw,o= isc4.gdb
# Set a default of read all files in examples
cd examples
for i in `ls`
do
chmod a=r $i
done
# make examples db's writable by group
chmod ug=rw,o= *.gdb
}
#------------------------------------------------------------------------
# resetXinitdServer
# Check for both inetd and xinetd, only one will be running but script
# will work.
resetInetdServer() {
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
if [ -f /var/run/xinetd.pid ]
then
kill -HUP `cat /var/run/xinetd.pid`
fi
}
#= Main Program ============================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=firebird
RunGroup=firebird
# Well if you really insist, here it is ;-) - Mark.
#RunUser=interbase
#RunGroup=interbase
# If you want to root user (server run restructed to group root)
# RunUser=root
# RunGroup=root
checkInstallUser
checkIfServerRunning
echo ""
echo "Change Firebird install for $IBRootDir to uid=$RunUser gid=$RunGroup"
echo "(User or group options can be changed by editing this script)"
echo ""
AskQuestion "Press return to continue - or ^C to abort"
if [ $RunUser = "firebird" ]
then
# deleteFirebirdUser
addFirebirdUser
fi
# Update the /etc/inetd.conf or xinetd entry
echo "Updating /etc/services file"
updateInetdServiceEntry
# Update ownership and SUID bits for programs.
echo "Updating $IBRootDir"
chown -R $RunUser.$RunGroup $IBRootDir
fixFilePermissions
# Get inetd to reread new init files.
resetInetdServer
cd $IBRootDir
touch interbase.log
chmod ug=rw,o= interbase.log
# make examples writable by group
chmod ug=rw,o= examples/*.gdb
echo "Completed."

View File

@ -0,0 +1,328 @@
#!/bin/sh
# A routine to change the user that runs interbase Firebird
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
ehco ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to do this change"
echo ""
exit
fi
}
#------------------------------------------------------------------------
# check if it is running
checkIfServerRunning() {
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Add new user and group
addFirebirdUser() {
groupadd -g 84 -o -r firebird
useradd -o -r -m -d /home/firebird -s /bin/bash \
-c "Firebird Database Administrator" -g firebird -u 84 firebird
# >/dev/null 2>&1
}
#------------------------------------------------------------------------
# Delete new user and group
deleteFirebirdUser() {
userdel firebird
# groupdel firebird
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
# We really expect this to be the case.
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeXinetdServiceUser
# Change the run user of the xinetd service
changeXinetdServiceUser() {
InitFile=/etc/xinetd.d/firebird
if [ -f $InitFile ]
then
ed -s $InitFile <<EOF
/ user /s/=.*$/= $RunUser/g
w
q
EOF
fi
}
#------------------------------------------------------------------------
# Update inetd service entry
# This just adds/replaces the service entry line
updateInetdEntry() {
FileName=/etc/inetd.conf
newLine="gds_db stream tcp nowait.30000 $RunUser $IBBin/gds_inet_server gds_inet_server # InterBase Database Remote Server"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
}
#------------------------------------------------------------------------
# Update xinetd service entry
# we assume the xinetd script file already exists since we are changing user
# not installing from scratch.
updateXinetdEntry() {
# cp $IBRootDir/misc/firebird.xinetd /etc/xinetd.d/firebird
changeXinetdServiceUser
}
#------------------------------------------------------------------------
# Update inetd service entry
# Check to see if we have xinetd installed or plain inetd. Install differs
# for each of them.
updateInetdServiceEntry() {
if [ -d /etc/xinetd.d ]
then
updateXinetdEntry
else
updateInetdEntry
fi
}
#------------------------------------------------------------------------
# resetXinitdServer
# Check for both inetd and xinetd, only one will actually be running.
# depending upon your system.
resetInetdServer() {
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
if [ -f /var/run/xinetd.pid ]
then
kill -HUP `cat /var/run/xinetd.pid`
fi
}
#== Main Start ==============================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
#RunUser=firebird
#RunGroup=firebird
# Well if you really insist, here it is ;-) - Mark.
#RunUser=interbase
#RunGroup=interbase
RunUser=root
RunGroup=root
checkInstallUser
checkIfServerRunning
echo ""
echo "Restore Firebird install for $IBRootDir to uid=$RunUser gid=$RunGroup"
echo "(User or group options can be changed by editing this script)"
echo ""
AskQuestion "Press return to continue - or ^C to abort"
# Update the /etc/inetd.conf
echo "Updating /etc/services file"
FileName=/etc/inetd.conf
newLine="gds_db stream tcp nowait.30000 $RunUser $IBBin/gds_inet_server gds_inet_server # InterBase Database Remote Server"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# Update ownership and SUID bits for programs.
echo "Updating $IBRootDir"
chown -R $RunUser.$RunGroup $IBRootDir
# Turn everybody to read only.
chmod -R o=r $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# all users can run everything.
chmod o=rx *
# SUID is needed for running server programs.
for i in gds_lock_mgr gds_drop gds_inet_server
do
chmod ug+s $i
done
cd $IBRootDir
# Lock files
# remember isc_guard1 in addition for super
cd $IBRootDir
for i in isc_init1 isc_lock1 isc_event1
do
FileName=$i.`hostname`
touch $FileName
chmod uga=rw $FileName
done
touch interbase.log
chmod ugo=rw interbase.log
# make databases writable by all
chmod ugo=rw examples/*.gdb
chmod ugo=rw help/*.gdb
chmod ugo=rw isc4.gdb
# Update the /etc/inetd.conf or xinetd entry
updateInetdServiceEntry
# Get inetd to reread new init files.
resetInetdServer
echo "Completed."

22
src/install/misc/README Normal file
View File

@ -0,0 +1,22 @@
Firebird 1.0 Classic Server for Linux
More information can be found about the Firebird
database engine from:
http://firebird.sourceforge.net
http://sourceforge.net/projects/firebird
or affiliated sites:
http://www.ibphoenix.com
http://www.interbase2000.com
The Firebird database engine is derived from the
InterBase(tm) product currently owned by Inprise.
The documentation for InterBase v 6.0 applies also to
the current FireBird release. InterBase documentation
is available in Adobe Acrobat format from
http://www.interbase.com.

View File

@ -0,0 +1,268 @@
#!/bin/sh
# A routine to change the user that runs interbase Firebird
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
ehco ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to do this change"
echo ""
exit
fi
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# check if it is running
checkIfServerRunning() {
stopServerIfRunning
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Add new user and group
addFirebirdUser() {
groupadd -g 84 -o -r firebird
useradd -o -r -m -d /home/firebird -s /bin/bash \
-c "Firebird Database Administrator" -g firebird -u 84 firebird
# >/dev/null 2>&1
}
#------------------------------------------------------------------------
# Delete new user and group
deleteFirebirdUser() {
userdel firebird
# groupdel firebird
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
# We really expect this to be the case.
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeInitRunUser
changeInitRunUser() {
NewUser=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/FBRunUser:=/s/FBRunUser:=.*\}/FBRunUser:=$NewUser\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=firebird
RunGroup=firebird
# Well if you really insist, here it is ;-) - Mark.
#RunUser=interbase
#RunGroup=interbase
# If you want to root user (server run restructed to group root)
# RunUser=root
# RunGroup=root
checkInstallUser
echo ""
echo "Change Firebird install for $IBRootDir to uid=$RunUser gid=$RunGroup"
echo "(User or group options can be changed by editing this script)"
echo ""
AskQuestion "Press return to continue - or ^C to abort"
checkIfServerRunning
if [ $RunUser = "firebird" ]
then
# deleteFirebirdUser
addFirebirdUser
fi
# Update ownership and SUID bits for programs.
echo "Updating $IBRootDir"
chown -R $RunUser.$RunGroup $IBRootDir
# Turn everybody option off.
chmod -R o= $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# User can run these programs, they need to talk to server though.
# and they cannot actually create a database.
chmod o=rx isql
chmod o=rx qli
cd $IBRootDir
touch interbase.log
chmod ug=rw,o= interbase.log
chmod ug=rw,o=r interbase.msg
# make examples writable by group
chmod ug=rw,o= examples/*.gdb
changeInitRunUser $RunUser
# start the db server so we can change the password
(cd /etc/rc.d/init.d; ./firebird start)
echo "Completed."

View File

@ -0,0 +1,257 @@
#!/bin/sh
# A routine to change the user that runs interbase Firebird
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
ehco ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to do this change"
echo ""
exit
fi
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# check if it is running
checkIfServerRunning() {
stopServerIfRunning
# Check is server is being actively used.
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Add new user and group
addFirebirdUser() {
groupadd -g 84 -o -r firebird
useradd -o -r -m -d /home/firebird -s /bin/bash \
-c "Firebird Database Administrator" -g firebird -u 84 firebird
# >/dev/null 2>&1
}
#------------------------------------------------------------------------
# Delete new user and group
deleteFirebirdUser() {
userdel firebird
# groupdel firebird
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
# We really expect this to be the case.
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeInitRunUser
changeInitRunUser() {
NewUser=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/FBRunUser:=/s/FBRunUser:=.*\}/FBRunUser:=$NewUser\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
#RunUser=firebird
#RunGroup=firebird
# Well if you really insist, here it is ;-) - Mark.
#RunUser=interbase
#RunGroup=interbase
# If you want to root user (server run restructed to group root)
RunUser=root
RunGroup=root
checkInstallUser
echo ""
echo "Change Firebird install for $IBRootDir to uid=$RunUser gid=$RunGroup"
echo "(User or group options can be changed by editing this script)"
echo ""
AskQuestion "Press return to continue - or ^C to abort"
checkIfServerRunning
# Update ownership and SUID bits for programs.
echo "Updating $IBRootDir"
chown -R $RunUser.$RunGroup $IBRootDir
# Turn everybody option off.
chmod -R o= $IBRootDir
# Now fix up the mess.
# fix up directories
for i in `find $IBRootDir -print`
do
FileName=$i
if [ -d $FileName ]
then
chmod o=rx $FileName
fi
done
cd $IBBin
# User can run these programs, they need to talk to server though.
# and they cannot actually create a database.
chmod o=rx isql
chmod o=rx qli
cd $IBRootDir
touch interbase.log
chmod ug=rw,o= interbase.log
# make examples writable by group
chmod ug=rw,o= examples/*.gdb
changeInitRunUser $RunUser
# start the db server
(cd /etc/rc.d/init.d; ./firebird start)
echo "Completed."

View File

@ -0,0 +1,138 @@
#! /bin/sh
# This shell script changes both the SYSDBA user
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# changeInitPassword
changeInitPassword() {
NewPasswd=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/ISC_PASSWORD/s/ISC_PASSWORD:=.*\}/ISC_PASSWORD:=$NewPasswd\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
#------------------------------------------------------------------------
# Generate new sysdba password
generateNewDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=rw,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
changeInitPassword "$NewPasswd"
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
OrigPasswd=""
while [ -z "$OrigPasswd" ]
do
AskQuestion "Please enter current password for SYSDBA user: "
OrigPasswd=$Answer
done
NewPasswd=""
while [ -z "$NewPasswd" ]
do
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password $OrigPasswd <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
changeInitPassword "$NewPasswd"
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
generateNewDBAPassword
else
askUserForNewDBAPassword
fi
}
#= Main Post ===============================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
InteractiveInstall=true
export InteractiveInstall
changeDBAPassword

View File

@ -0,0 +1,60 @@
#!/bin/sh
# chkconfig: 345 20 80
# description: Start/Stop firebird database server
#
# This file belongs in /etc/init.d where it will be run
# on system startup and shutdown to start the background
# Firebird/interbase database server daemon
: ${INTERBASE:=/opt/interbase}
: ${ISC_USER:=SYSDBA}
: ${ISC_PASSWORD:=masterkey}
: ${FBRunUser:=root}
# WARNING: in a real-world installation, you should not put the
# SYSDBA password in a publicly-readable file.
# Eventually this file should not need to contain any passwords.
# as root user alone should be sufficient privledge to stop/start
# the server.
export INTERBASE
export ISC_USER
export ISC_PASSWORD
# Check the file is there and is executable.
[ -x $INTERBASE/bin/ibmgr ] || exit 0
# See how we were called.
case "$1" in
start)
echo -n "Starting Firebird server: "
echo '$INTERBASE/bin/ibmgr -start -forever' | su $FBRunUser
RETVAL=$?
;;
stop)
echo -n "Stopping Firebird server: "
$INTERBASE/bin/ibmgr -shut
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/identd
;;
status)
RETVAL=0
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: firebird {start|stop|status|restart|reload}"
exit 1
esac
exit $RETVAL

View File

@ -0,0 +1,70 @@
#!/bin/sh
# chkconfig: 345 20 80
# description: Start/Stop firebird database server
#
# This file belongs in /etc/init.d where it will be run
# on system startup and shutdown to start the background
# Firebird/interbase database server daemon
# This init script contains functions specific for redhat
# and mandrake init scripts.
# Source function library.
. /etc/rc.d/init.d/functions
: ${INTERBASE:=/opt/interbase}
: ${ISC_USER:=SYSDBA}
: ${ISC_PASSWORD:=masterkey}
: ${FBRunUser:=root}
# WARNING: in a real-world installation, you should not put the
# SYSDBA password in a publicly-readable file.
# Eventually this file should not need to contain any passwords.
# as root user alone should be sufficient privledge to stop/start
# the server.
export INTERBASE
export ISC_USER
export ISC_PASSWORD
# Check the file is there and is executable.
[ -x $INTERBASE/bin/ibmgr ] || exit 0
# See how we were called.
case "$1" in
start)
echo -n "Starting Firebird server: "
daemon --user $FBRunUser $INTERBASE/bin/ibmgr -start -forever
# echo '$INTERBASE/bin/ibmgr -start -forever' | su $FBRunUser
RETVAL=$?
;;
stop)
echo -n "Stopping Firebird server: "
$INTERBASE/bin/ibmgr -shut
# killproc ibserver
RETVAL=$?
# echo
# [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/identd
;;
status)
status ibserver
RETVAL=$?
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: firebird {start|stop|status|restart|reload}"
exit 1
esac
exit $RETVAL

View File

@ -0,0 +1,13 @@
# default: on
# description: Interbase server
service gds_db
{
flags = REUSE
socket_type = stream
wait = no
user = root
log_on_success += USERID
log_on_failure += USERID
server = /opt/interbase/bin/gds_inet_server
disable = no
}

125
src/install/super/SSTarInstall.sh Executable file
View File

@ -0,0 +1,125 @@
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# Prompt for yes or no answer - returns non-zero for no
AskYNQuestion() {
while echo -n "${*} (y/n): "
do
read answer rest
case $answer in
[yY]*)
return 0
;;
[nN]*)
return 1
;;
*)
echo "Please answer y or n"
;;
esac
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $Cmd
$Cmd
ExitCode=$?
if [ $ExitCode -ne 0 ]
then
echo "Install aborted: The command $Cmd "
echo " failed with error code $ExitCode"
exit
fi
}
#------------------------------------------------------------------------
# Check for a previous install
checkInstallUser() {
if [ "`whoami`" != "root" ];
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " You need to be 'root' user to install"
echo ""
exit
fi
}
#== Main Program ==========================================================
InteractiveInstall=1
export InteractiveInstall
checkInstallUser
# Ok, here we are installing from a CVS tree
if [ -e firebird ]
then
ScriptsSrcDir=./firebird/skywalker/install
( $ScriptsSrcDir/super/SSpreinstall.sh )
cp $ScriptsSrcDir/misc/firebird interbase
cp $ScriptsSrcDir/misc/README interbase
for i in SSchangeRunUser.sh SSrestoreRootRunUser.sh changeDBAPassword.sh
do
cp $ScriptsSrcDir/misc/$i interbase/bin/$i
chmod ugo=rx interbase/bin/$i
done
($ScriptsSrcDir/super/SSinstall.sh)
($ScriptsSrcDir/super/SSpostinstall.sh)
fi
# Here we are installing from a install tar.gz file
if [ -e scripts ]
then
echo "Extracting install data"
runAndCheckExit "tar -xzf interbase.tar.gz"
(./scripts/SSpreinstall.sh)
(./scripts/SSinstall.sh)
(./scripts/SSpostinstall.sh)
rm -rf interbase
fi
echo "Install completed"

View File

@ -0,0 +1,139 @@
#! /bin/sh
# This shell script changes both the SYSDBA user and the firebird
# install script.
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# changeInitPassword
changeInitPassword() {
NewPasswd=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/ISC_PASSWORD/s/ISC_PASSWORD:=.*\}/ISC_PASSWORD:=$NewPasswd\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
#------------------------------------------------------------------------
# Generate new sysdba password
generateNewDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=rw,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
changeInitPassword "$NewPasswd"
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
OrigPasswd=""
while [ -z "$OrigPasswd" ]
do
AskQuestion "Please enter current password for SYSDBA user: "
OrigPasswd=$Answer
done
NewPasswd=""
while [ -z "$NewPasswd" ]
do
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password $OrigPasswd <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
changeInitPassword "$NewPasswd"
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
generateNewDBAPassword
else
askUserForNewDBAPassword
fi
}
#= Main Post ===============================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
InteractiveInstall=true
export InteractiveInstall
changeDBAPassword

95
src/install/super/SSinstall.sh Executable file
View File

@ -0,0 +1,95 @@
#! /bin/sh
# Script to install files from the build/transport area
# cd interbase
# The guts of the tranfer of files to /opt and other directories
if [ -d /opt/interbase ]
then
rm -fr /opt/interbase
fi
mkdir /opt/interbase
mkdir /opt/interbase/bin
mkdir /opt/interbase/examples
mkdir /opt/interbase/help
mkdir /opt/interbase/include
mkdir /opt/interbase/intl
mkdir /opt/interbase/lib
mkdir /opt/interbase/doc
mkdir /opt/interbase/UDF
cp interbase/bin/gbak /opt/interbase/bin/gbak
cp interbase/bin/gdef /opt/interbase/bin/gdef
cp interbase/bin/gds_lock_print /opt/interbase/bin/gds_lock_print
cp interbase/bin/gfix /opt/interbase/bin/gfix
cp interbase/bin/gpre /opt/interbase/bin/gpre
cp interbase/bin/gsec /opt/interbase/bin/gsec
cp interbase/bin/gsplit /opt/interbase/bin/gsplit
cp interbase/bin/gstat /opt/interbase/bin/gstat
cp interbase/bin/isc4.gbak /opt/interbase/bin/isc4.gbak
cp interbase/bin/isql /opt/interbase/bin/isql
cp interbase/bin/qli /opt/interbase/bin/qli
cp interbase/bin/ibmgr.bin /opt/interbase/bin/ibmgr.bin
#cp interbase/bin/ibmgr /opt/interbase/bin/ibmgr
cp interbase/bin/ibserver /opt/interbase/bin/ibserver
cp interbase/bin/ibguard /opt/interbase/bin/ibguard
cp interbase/bin/SSchangeRunUser.sh /opt/interbase/bin
cp interbase/bin/SSrestoreRootRunUser.sh /opt/interbase/bin
cp interbase/bin/changeDBAPassword.sh /opt/interbase/bin
cp interbase/examples/v5/*.[ceh] /opt/interbase/examples
cp interbase/examples/v5/*.sql /opt/interbase/examples
cp interbase/examples/v5/*.gbk /opt/interbase/examples
cp interbase/examples/v5/*.gdb /opt/interbase/examples
cp interbase/examples/v5/makefile /opt/interbase/examples
cp interbase/help/help.gbak /opt/interbase/help
cp interbase/help/help.gdb /opt/interbase/help
#cp -r interbase/doc /opt/interbase
cp interbase/interbase.msg /opt/interbase/interbase.msg
cp interbase/isc4.gdb /opt/interbase/isc4.gdb
cp interbase/isc_config /opt/interbase/isc_config
cp -f interbase/include/gds.h /usr/include/gds.h
cp -f interbase/include/iberror.h /usr/include/iberror.h
cp -f interbase/include/ibase.h /usr/include/ibase.h
cp interbase/include/gds.f /opt/interbase/include
cp interbase/include/gds.hxx /opt/interbase/include
cp interbase/include/*.h /opt/interbase/include
cp -f interbase/lib/gds.so.1 /usr/lib/libgds.so.0
if [ -L /usr/lib/libgds.so ]
then
rm -f /usr/lib/libgds.so
fi
ln -s libgds.so.0 /usr/lib/libgds.so
cp -f interbase/lib/ib_util.so /usr/lib/libib_util.so
cp -f interbase/lib/gds_pyxis.a /usr/lib/libgds_pyxis.a
cp interbase/intl/gdsintl /opt/interbase/intl/gdsintl
cp interbase/UDF/ib_udf /opt/interbase/UDF/ib_udf
cp interbase/services.isc /opt/interbase/services.isc
#cp interbase/license.txt /opt/interbase/license.txt
#cp interbase/license.html /opt/interbase/license.html
#cp interbase/ReleaseNotes.pdf /opt/interbase/ReleaseNotes.pdf
cp interbase/README /opt/interbase/README
cp interbase/firebird /etc/rc.d/init.d
# June 23 2000, 6:00AM
#TIMESTAMP="200006230600.00"
#cd /opt/interbase/
#touch -t $TIMESTAMP `find . -print`

View File

@ -0,0 +1,319 @@
#! /bin/sh
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# add a service line in the (usually) /etc/services or /etc/inetd.conf file
# Here there are three cases, not found => add service line,
# found & different => ask user to check
# found & same => do nothing
#
replaceLineInFile() {
FileName=$1
newLine=$2
oldLine=$3
if [ -z "$oldLine" ]
then
echo "$newLine" >> $FileName
elif [ "$oldLine" != "$newLine" ]
then
echo ""
echo "--- Warning ----------------------------------------------"
echo ""
echo " In file $FileName found line: "
echo " $oldLine"
echo " Which differs from the expected line:"
echo " $newLine"
echo ""
# AskQuestion "Press return to update file or ^C to abort install"
cat $FileName | grep -v "$oldLine" > ${FileName}.tmp
mv ${FileName}.tmp $FileName
echo "$newLine" >> $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#------------------------------------------------------------------------
# changeInitPassword
changeInitPassword() {
NewPasswd=$1
InitFile=/etc/rc.d/init.d/firebird
if [ -f $InitFile ]
then
ed $InitFile <<EOF
/ISC_PASSWORD/s/ISC_PASSWORD:=.*\}/ISC_PASSWORD:=$NewPasswd\}/g
w
q
EOF
chmod u=rwx,g=rx,o= $InitFile
fi
}
#------------------------------------------------------------------------
# Unable to generate the password for the rpm, so put out a message
# instead
keepOrigDBAPassword() {
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd='masterkey'
echo "Firebird initial install password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "for install on `hostname` at time `date`" >> $DBAPasswordFile
echo "You should change this password at the earliest oportunity" >> $DBAPasswordFile
echo ""
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your should password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=r,go= $DBAPasswordFile
}
#------------------------------------------------------------------------
# Generate new sysdba password
generateNewDBAPassword() {
# Not all systems have mkpasswd, and there is also another mkpasswd which
# does different things. So if not at this specific place leave as default
NewPasswd=`/usr/bin/mkpasswd -l 8`
DBAPasswordFile=$IBRootDir/SYSDBA.password
NewPasswd=`mkpasswd -l 8`
echo "Firebird generated password " > $DBAPasswordFile
echo "for user SYSDBA is : $NewPasswd" >> $DBAPasswordFile
echo "generated on `hostname` at time `date`" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "(For superserver you will also want to check the password in the" >> $DBAPasswordFile
echo "daemon init routine in the file /etc/rc.d/init.d/firebird)" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo "Your password can be changed to a more suitable one using the" >> $DBAPasswordFile
echo "/opt/interbase/bin/gsec program as show below:" >> $DBAPasswordFile
echo "" >> $DBAPasswordFile
echo ">cd /opt/interbase" >> $DBAPasswordFile
echo ">bin/gsec -user sysdba -password <password>" >> $DBAPasswordFile
echo "GSEC>modify sysdba -pw <newpassword>" >> $DBAPasswordFile
echo "GSEC>quit" >> $DBAPasswordFile
chmod u=rw,go= $DBAPasswordFile
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
changeInitPassword "$NewPasswd"
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
askUserForNewDBAPassword() {
NewPasswd=""
echo ""
while [ -z "$NewPasswd" ]
do
AskQuestion "Please enter new password for SYSDBA user: "
NewPasswd=$Answer
if [ ! -z "$NewPasswd" ]
then
$IBBin/gsec -user sysdba -password masterkey <<EOF
modify sysdba -pw $NewPasswd
EOF
echo ""
changeInitPassword "$NewPasswd"
fi
done
}
#------------------------------------------------------------------------
# Change sysdba password - this routine is interactive and is only
# used in the install shell script not the rpm one.
# 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.
changeDBAPassword() {
if [ -z "$InteractiveInstall" ]
then
if [ -f /usr/bin/mkpasswd ]
then
generateNewDBAPassword
else
keepOrigDBAPassword
fi
else
askUserForNewDBAPassword
fi
}
#= Main Post ===============================================================
# Make sure the links are in place
if [ ! -L /opt/interbase -a ! -d /opt/interbase ]
then
# Main link and...
ln -s $RPM_INSTALL_PREFIX/interbase /opt/interbase
fi
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
RunUser=root
# Update /etc/services
FileName=/etc/services
newLine="gds_db 3050/tcp # InterBase Database Remote Protocol"
oldLine=`grep "^gds_db" $FileName`
replaceLineInFile "$FileName" "$newLine" "$oldLine"
# remove any gds_db line in the /etc/inetd.conf
FileName=/etc/inetd.conf
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"
# Get inetd to reread new init files.
if [ -f /var/run/inetd.pid ]
then
kill -HUP `cat /var/run/inetd.pid`
fi
# Update ownership of programs
chown -R $RunUser.$RunUser $IBRootDir
cd $IBBin
# Create the ibmgr shell script.
cat > ibmgr <<EOF
#!/bin/sh
INTERBASE=$IBRootDir
export INTERBASE
exec \$INTERBASE/bin/ibmgr.bin \$@
EOF
chmod u=rwx,go=rx *
# These two should only be executed by firebird user.
chmod u=rwx,go= ibguard ibserver
# Lock files
cd $IBRootDir
for i in isc_init1 isc_lock1 isc_event1 isc_guard1
do
FileName=$i.`hostname`
touch $FileName
chmod ug=rw,o= $FileName
done
touch interbase.log
chmod u=rw,go= interbase.log
# make examples writable by anyone
chmod uga+rw examples/*.gdb
chmod ug+rx,o= /etc/rc.d/init.d/firebird
# This will start it at runlevel defined within the firebird file itself.
/sbin/chkconfig --add firebird
# start the db server so we can change the password
(cd /etc/rc.d/init.d; ./firebird start)
# Change sysdba password
changeDBAPassword

View File

@ -0,0 +1,37 @@
#! /bin/sh
#------------------------------------------------------------------------
# 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
mv ${FileName}.tmp $FileName
echo "Updated."
fi
}
#= Main ProstUn ===============================================================
if [ -L /usr/lib/libgds.so ]
then
rm -f /usr/lib/libgds.so
fi
# Update /etc/services
FileName=/etc/services
oldLine=`grep "^gds_db" $FileName`
removeLineFromFile "$FileName" "$oldLine"

237
src/install/super/SSpreinstall.sh Executable file
View File

@ -0,0 +1,237 @@
#! /bin/sh
#------------------------------------------------------------------------
# Prompt for response, store result in Answer
Answer=""
AskQuestion() {
Test=$1
DefaultAns=$2
echo -n "${1}"
Answer="$DefaultAns"
read Answer
}
#------------------------------------------------------------------------
# stop super server if it is running
# Also will only stop firebird, since that has the init script
stopServerIfRunning() {
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
if [ -f /etc/rc.d/init.d/firebird ]
then
/etc/rc.d/init.d/firebird stop
fi
fi
}
#------------------------------------------------------------------------
# Check if server is running
checkIfServerRunning() {
stopServerIfRunning
checkString=`ps -efww| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase Super server seems to be running."
echo "Please quit all interbase applications and then proceed"
exit 1
fi
checkString=`ps -efww| egrep "(gds_inet_server|gds_pipe)" |grep -v grep`
if [ ! -z "$checkString" ]
then
echo "An instance of the Firebird/InterBase server seems to be running."
echo "Please quit all interbase applications and then proceed."
exit 1
fi
# Stop lock manager if it is the only thing running.
for i in `ps -efww | grep "gds_lock_mgr" | grep -v "grep" | awk '{print $2}' `
do
kill $i
done
}
#------------------------------------------------------------------------
# Run process and check status
runAndCheckExit() {
Cmd=$*
# echo $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() {
oldPWD=`pwd`
archiveFileList=""
cd /
DestFile="opt/interbase"
if [ -e "$DestFile" ]
then
echo ""
echo ""
echo ""
echo "--- Warning ----------------------------------------------"
echo " The installation target directory: $IBRootDir"
echo " Already contains a prior installation of InterBase/Firebird."
echo " This and files found in /usr/include and /usr/lib will be"
echo " archived in the file : ${ArchiveMainFile}"
echo ""
if [ ! -z "$InteractiveInstall" ]
then
AskQuestion "Press return to continue or ^C to abort"
fi
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
fi
for i in gds.h ibase.h iberror.h ib_util.h
do
DestFile=usr/include/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
for i in gds_pyxis.a gds.a libgds.so.0 libgds.so ib_util.so
do
DestFile=usr/lib/$i
if [ -e $DestFile ]
then
archiveFileList="$archiveFileList $DestFile"
fi
done
if [ ! -z "$archiveFileList" ]
then
displayMessage "Archiving..."
runAndCheckExit "tar -czf $ArchiveMainFile $archiveFileList"
displayMessage "Done."
displayMessage "Deleting..."
for i in $archiveFileList
do
rm -rf $i
done
displayMessage "Done."
fi
cd $oldPWD
}
#------------------------------------------------------------------------
# Check for installed RPM package
checkForRPMInstall() {
PackageName=$1
rpm -q $PackageName
STATUS=$?
if [ $STATUS -eq 0 ]
then
echo "Previous version of $PackageName is detected on your system."
echo "this will conflict with the current install of Firebird"
echo "Please unistall the previous version `rpm -q $PackageName` and then proceed."
exit $STATUS
fi
}
#== Main Pre =================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
ArchiveDateTag=`date +"%Y%m%d_%H%M"`
ArchiveMainFile="${IBRootDir}_${ArchiveDateTag}.tar.gz"
# Ok so any of the following packages are a problem
# these don't work at least in the latest rpm manager, since it
# has the rpm database locked and it fails.
# checkForRPMInstall InterBase
# checkForRPMInstall FirebirdCS
# checkForRPMInstall FirebirdSS
checkIfServerRunning
# Failing that we archive any files we find
archivePriorInstallSystemFiles

View File

@ -0,0 +1,57 @@
#! /bin/sh
#------------------------------------------------------------------------
# stop server if it is running
stopServerIfRunning() {
checkString=`ps -ef| egrep "(ibserver|ibguard)" |grep -v grep`
if [ ! -z "$checkString" ]
then
/etc/rc.d/init.d/firebird stop
fi
}
#= Main PreUn ================================================================
IBRootDir=/opt/interbase
IBBin=$IBRootDir/bin
stopServerIfRunning
/sbin/chkconfig --del firebird
cd $IBRootDir
if [ -f isc4.gdb ]
then
cp isc4.gdb /tmp
echo "Saved a copy of isc4.gdb in /tmp"
fi
for i in isc_init1* isc_event1* isc_lock1* isc_guard* interbase.log SYSDBA.password
do
if [ -f $i ]
then
rm -f $i
fi
done
rm -f $IBBin/ibmgr

View File

@ -0,0 +1,47 @@
%dir /opt/interbase
%dir /opt/interbase/bin
%dir /opt/interbase/lib
%dir /opt/interbase/UDF
%dir /opt/interbase/intl
%dir /opt/interbase/help
/opt/interbase/bin/gbak
/opt/interbase/bin/gdef
/opt/interbase/bin/gds_lock_print
/opt/interbase/bin/gfix
/opt/interbase/bin/gpre
/opt/interbase/bin/gsec
/opt/interbase/bin/gsplit
/opt/interbase/bin/gstat
/opt/interbase/bin/isc4.gbak
/opt/interbase/bin/isql
/opt/interbase/bin/qli
/opt/interbase/bin/ibmgr.bin
/opt/interbase/bin/ibserver
/opt/interbase/bin/ibguard
/opt/interbase/bin/SSchangeRunUser.sh
/opt/interbase/bin/SSrestoreRootRunUser.sh
/opt/interbase/bin/changeDBAPassword.sh
/opt/interbase/examples
/opt/interbase/help/help.gbak
/opt/interbase/help/help.gdb
/opt/interbase/include
/usr/include/gds.h
/usr/include/iberror.h
/usr/include/ibase.h
/opt/interbase/doc
/opt/interbase/interbase.msg
/opt/interbase/isc4.gdb
/opt/interbase/isc_config
/usr/lib/libgds.so.0
/usr/lib/libgds.so
/usr/lib/libib_util.so
/usr/lib/libgds_pyxis.a
/opt/interbase/intl/gdsintl
/opt/interbase/UDF/ib_udf
/opt/interbase/services.isc
/opt/interbase/README
/etc/rc.d/init.d/firebird

View File

@ -0,0 +1,15 @@
Summary: Firebird Database Server and Client tools.
Name: FirebirdSS
Version: 0.9
Release: 4
Copyright: Distributable
Group: Applications/Databases
Source: FirebirdSS0.9src.tar.gz
URL: http://firebird.sourceforge.net
Prefix: /opt
AutoReqProv: no
%description
Firebird is a powerful, high-performance relational database designed to be embedded into
applications on multiple platforms.