⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preinstall.sh

📁 2000年7月,Borland(即现在的Inprise)公司公布了其数据库产品Interbase的源代码.Firebird数据库就是从该数据库中派生出来的.当时,Interbase是与客户/服务器版本
💻 SH
📖 第 1 页 / 共 2 页
字号:
#!/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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -