?? preinstall.sh
字號:
#!/bin/sh# posixLibrary.sh#!/bin/sh#------------------------------------------------------------------------# Global stuff initAnswer=""OrigPasswd=""TmpFile=""FBRootDir=/opt/firebirdexport FBRootDirFBBin=$FBRootDir/binexport FBBinSecurityDatabase=security2.fdbArchiveDateTag=`date +"%Y%m%d_%H%M"`export ArchiveDateTagArchiveMainFile="${FBRootDir}_${ArchiveDateTag}.tar.gz"export ArchiveMainFile#------------------------------------------------------------------------# Create temporary file. In case mktemp failed, do something...MakeTemp() { TmpFile=`mktemp -q /tmp/firebird_install.XXXXXX` if [ $? -ne 0 ] then TmpFile=/tmp/firebird_install touch $TmpFile fi}#------------------------------------------------------------------------# Prompt for response, store result in AnswerAskQuestion() { Test=$1 DefaultAns=$2 echo -n "${1}" Answer="$DefaultAns" read Answer if [ -z "$Answer" ] then Answer="$DefaultAns" fi}#------------------------------------------------------------------------# Prompt for yes or no answer - returns non-zero for noAskYNQuestion() { 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 $1. If exit status is not zero, show output to user.runSilent() { MakeTemp $1 >$TmpFile 2>&1 if [ $? -ne 0 ] then cat $TmpFile echo "" rm -f $TmpFile return 1 fi rm -f $TmpFile return 0}#------------------------------------------------------------------------# Check for a user, running install, to be rootcheckRootUser() { if [ "`whoami`" != "root" ]; then echo "" echo "--- Stop ----------------------------------------------" echo "" echo " You need to be 'root' user to do this change" echo "" exit 1 fi}#aliascheckInstallUser() { checkRootUser}#------------------------------------------------------------------------# resetInetdServer# Works for both inetd and xinetdresetInetdServer() { pid=`ps -efww | grep inetd | grep -v grep | awk '{print $2}'` if [ "$pid" ] then kill -HUP $pid fi}#------------------------------------------------------------------------# remove the xinetd config file(s)# take into account possible pre-firebird xinetd servicesremoveXinetdEntry() { for i in `grep -l "service gds_db" /etc/xinetd.d/*` do rm -f $i done}#------------------------------------------------------------------------# remove the line from inetd fileremoveInetdEntry() { FileName=/etc/inetd.conf oldLine=`grep "^gds_db" $FileName` removeLineFromFile "$FileName" "$oldLine"}#------------------------------------------------------------------------# Remove (x)inetd service entry and restart the service.# Check to see if we have xinetd installed or plain inetd. # Install differs for each of them.removeInetdServiceEntry() { if [ -d /etc/xinetd.d ] then removeXinetdEntry elif [ -f /etc/inetd.conf ] then removeInetdEntry fi # make [x]inetd reload configuration resetInetdServer}#------------------------------------------------------------------------# check if it is runningcheckIfServerRunning() { stopSuperServerIfRunning# Check is server is being actively used. checkString=`ps -efww| egrep "\b(fbserver|fbguard)\b" |grep -v grep` if [ ! -z "$checkString" ] then echo "An instance of the Firebird Super server seems to be running." echo "Please quit all Firebird applications and then proceed." exit 1 fi checkString=`ps -efww| egrep "\b(fb_inet_server|gds_pipe)\b" |grep -v grep` if [ ! -z "$checkString" ] then echo "An instance of the Firebird Classic server seems to be running." echo "Please quit all Firebird applications and then proceed." exit 1 fi# The following check for running interbase or firebird 1.0 servers. checkString=`ps -efww| egrep "\b(ibserver|ibguard)\b" |grep -v grep` if [ ! -z "$checkString" ] then echo "An instance of the Firebird/InterBase Super server seems to be running." echo "(the ibserver or ibguard process was detected running on your system)" echo "Please quit all Firebird applications and then proceed." exit 1 fi checkString=`ps -efww| egrep "\b(gds_inet_server|gds_pipe)\b" |grep -v grep` if [ ! -z "$checkString" ] then echo "An instance of the Firebird/InterBase Classic server seems to be running." echo "(the gds_inet_server or gds_pipe process was detected running on your system)" echo "Please quit all Firebird applications and then proceed." exit 1 fi removeInetdServiceEntry # Stop lock manager if it is the only thing running. for i in `ps -efww | grep "fb_lock_mgr" | grep -v "grep" | awk '{print $2}' ` do kill $i done}#------------------------------------------------------------------------# ask user to enter CORRECT original DBA passwordaskForOrigDBAPassword() { OrigPasswd="" while [ -z "$OrigPasswd" ] do AskQuestion "Please enter current password for SYSDBA user: " OrigPasswd=$Answer if ! runSilent "$FBBin/gsec -user sysdba -password $OrigPasswd -di" then OrigPasswd="" fi done}#------------------------------------------------------------------------# Modify DBA password to value, asked from user. # $1 may be set to original DBA password# !! This routine is interactive !!askUserForNewDBAPassword() { if [ -z $1 ] then askForOrigDBAPassword else OrigPasswd=$1 fi NewPasswd="" while [ -z "$NewPasswd" ] do AskQuestion "Please enter new password for SYSDBA user: " NewPasswd=$Answer if [ ! -z "$NewPasswd" ] then if ! runSilent "$FBBin/gsec -user sysdba -password $OrigPasswd -modify sysdba -pw $NewPasswd" then NewPasswd="" fi fi done}#------------------------------------------------------------------------# add a line in the (usually) /etc/services or /etc/inetd.conf file# Here there are three cases, not found => add# found & different => replace# found & same => do nothing# replaceLineInFile() { FileName="$1" newLine="$2" oldLine=`grep "$3" $FileName` if [ -z "$oldLine" ] then echo "$newLine" >> "$FileName" elif [ "$oldLine" != "$newLine" ] then MakeTemp grep -v "$oldLine" "$FileName" > "$TmpFile" echo "$newLine" >> $TmpFile # The \n is needed, some /etc/services files are missing a trailing # line feed - MOD 12-Dec-2003 echo "" >>$TmpFile cp $TmpFile $FileName && rm -f $TmpFile echo "Updated $1" fi}#------------------------------------------------------------------------# "edit" file $1 - replace line starting from $2 with $3# This should stop ed/ex/vim/"what else editor" battle.# I hope awk is present in any posix system? AP.editFile() { FileName=$1 Starting=$2 NewLine=$3 AwkProgram="(\$1 == \"$Starting\") {\$0=\"$NewLine\"} {print \$0}" MakeTemp awk "$AwkProgram" <$FileName >$TmpFile && mv $TmpFile $FileName || rm -f $TmpFile}#------------------------------------------------------------------------# remove line from config file if it exists in it.removeLineFromFile() { FileName=$1 oldLine=$2 if [ ! -z "$oldLine" ] then cat $FileName | grep -v "$oldLine" > ${FileName}.tmp cp ${FileName}.tmp $FileName && rm -f ${FileName}.tmp fi}#------------------------------------------------------------------------# Write new password to the /opt/firebird/SYSDBA.password filewriteNewPassword() { NewPasswd=$1 DBAPasswordFile=$FBRootDir/SYSDBA.password cat <<EOT >$DBAPasswordFile# Firebird generated password for user SYSDBA is:ISC_USER=sysdbaISC_PASSWD=$NewPasswdEOT if [ $NewPasswd = "masterkey" ] then echo "# for install on `hostname` at time `date`" >> $DBAPasswordFile echo "# You should change this password at the earliest oportunity" >> $DBAPasswordFile else echo "# generated on `hostname` at time `date`" >> $DBAPasswordFile fi cat <<EOT >>$DBAPasswordFile# Your password can be changed to a more suitable one using the# /opt/firebird/bin/changeDBAPassword.sh scriptEOT chmod u=r,go= $DBAPasswordFile # Only if we have changed the password from the default do we need # to update the entry in the database if [ $NewPasswd != "masterkey" ] then runSilent "$FBBin/gsec -user sysdba -password masterkey -modify sysdba -pw $NewPasswd" fi}#------------------------------------------------------------------------# Generate new sysdba password - this routine is used only in the # rpm file not in the install script.generateNewDBAPassword() { # openssl generates random data. openssl </dev/null >/dev/null 2&>/dev/null if [ $? -eq 0 ] then # We generate 20 random chars, strip any '/''s and get the first 8 NewPasswd=`openssl rand -base64 20 | tr -d '/' | cut -c1-8` fi # mkpasswd is a bit of a hassle, but check to see if it's there if [ -z "$NewPasswd" ] then if [ -f /usr/bin/mkpasswd ] then NewPasswd=`/usr/bin/mkpasswd -l 8` fi fi # On some systems the mkpasswd program doesn't appear and on others # there is another mkpasswd which does a different operation. So if # the specific one isn't available then keep the original password. if [ -z "$NewPasswd" ] then NewPasswd="masterkey" fi writeNewPassword $NewPasswd}#------------------------------------------------------------------------# Change sysdba password.changeDBAPassword() { if [ -z "$InteractiveInstall" ] then generateNewDBAPassword else askUserForNewDBAPassword masterkey fi}#------------------------------------------------------------------------# buildUninstallFile# This will work only for the .tar.gz install and it builds an# uninstall shell script. The RPM system, if present, takes care of it's own.buildUninstallFile() { cd "$origDir" if [ ! -f manifest.txt ] # Only exists if we are a .tar.gz install then return fi cp manifest.txt $FBRootDir/misc cp -r scripts $FBRootDir/misc/ cp scripts/tarMainUninstall.sh $FBRootDir/bin/uninstall.sh}#------------------------------------------------------------------------# Remove if only a linkremoveIfOnlyAlink() { Target=$1 if [ -L $Target ] then rm -f $Target fi}#------------------------------------------------------------------------# re-link new file only if target is a link or missingsafeLink() { Source=$1 Target=$2 removeIfOnlyAlink $Target if [ ! -e $Target ] then ln -s $Source $Target fi}#------------------------------------------------------------------------# createLinksForBackCompatibility# Create links for back compatibility to InterBase and Firebird1.0 # linked systems.createLinksForBackCompatibility() { # These two links are required for compatibility with existing ib programs # If the program had been linked with libgds.so then this link is required # to ensure it loads the fb equivalent. Eventually these should be # optional and in a seperate rpm install. MOD 7-Nov-2002. if [ "$1" ] then # Use library name from parameter newLibrary=$FBRootDir/lib/$1 else # Use DefaultLibrary, set by appropriate install library newLibrary=$FBRootDir/lib/$DefaultLibrary.so fi safeLink $newLibrary /usr/lib/libgds.so safeLink $newLibrary /usr/lib/libgds.so.0}#------------------------------------------------------------------------# removeLinksForBackCompatibility# Remove links for back compatibility to InterBase and Firebird1.0 # linked systems.removeLinksForBackCompatibility() { removeIfOnlyAlink /usr/lib/libgds.so removeIfOnlyAlink /usr/lib/libgds.so.0}#------------------------------------------------------------------------# For security reasons most files in firebird installation are# root-owned and world-readable(executable) only (including firebird).# For some files RunUser (firebird) must have write access - # lock and log for examples.MakeFileFirebirdWritable() { FileName=$1 chown $RunUser:$RunUser $FileName chmod 0644 $FileName}#------------------------------------------------------------------------# Set correct permissions for $FbRoot/doc treefixDocPermissions() { cd $FBRootDir for i in `find doc -print`; do chown root:root $i if [ -d $i ]; then chmod 0755 $i else chmod 0644 $i fi done}#------------------------------------------------------------------------# Run process and check statusrunAndCheckExit() { 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.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -