#!/bin/sh # # BEGIN COPYRIGHT BLOCK # This Program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation; version 2 of the License. # # 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 GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # this Program; if not, write to the Free Software Foundation, Inc., 59 Temple # Place, Suite 330, Boston, MA 02111-1307 USA. # # In addition, as a special exception, Red Hat, Inc. gives You the additional # right to link the code of this Program with code not covered under the GNU # General Public License ("Non-GPL Code") and to distribute linked combinations # including the two, subject to the limitations in this paragraph. Non-GPL Code # permitted under this exception must only link to the code of this Program # through those well defined interfaces identified in the file named EXCEPTION # found in the source code files (the "Approved Interfaces"). The files of # Non-GPL Code may instantiate templates or use macros or inline functions from # the Approved Interfaces without causing the resulting work to be covered by # the GNU General Public License. Only Red Hat, Inc. may make changes or # additions to the list of Approved Interfaces. You must obey the GNU General # Public License in all respects for all of the Program code and other code used # in conjunction with the Program except the Non-GPL Code covered by this # exception. If you modify this file, you may extend this exception to your # version of the file, but you are not obligated to do so. If you do not wish to # provide this exception without modification, you must delete this exception # statement from your version and license this file solely under the GPL without # exception. # # # Copyright (C) 2005 Red Hat, Inc. # All rights reserved. # END COPYRIGHT BLOCK # ########################### # # This shell script provides a way to set up a new installation after # the binaries have already been extracted. This is typically after # using native packaging support to install the package e.g. RPM, # pkgadd, depot, etc. This script will show the license, readme, # dsktune, then run the usual setup pre and post installers. This # script should be run from the server root directory since it uses # pwd to get the server root directory. # ########################## # get command line arguments # see if silent mode counter=0 doMktmp() { tmpfile=`mktemp /tmp/${1}XXXXXX 2> /dev/null` if ! [ $tmpfile ] ; then tmpfile=/tmp/$1.$counter.$$ counter=`expr $counter + 1` fi echo $tmpfile } doExit() { echo "ERROR Exiting . . ." | tee -a $logfile if [ $tmpinffile ]; then rm -f $inffile fi echo "Log file is $logfile" exit 1 } askYN() { prompt="$1" finished= while ! [ $finished ]; do echo "" echo -n "$prompt (yes/no) " | tee -a $logfile read ans echo $ans >> $logfile case "$ans" in y*|Y*) finished=1 ;; n*|N*) exit 1 ;; *) echo "Please answer yes or no" | tee -a $logfile ;; esac done } ask123() { prompt=$2 default=$1 finished= ans= while ! [ $finished ]; do echo -n "" echo "" echo -n $prompt "" | tee -a $logfile read ans echo $ans >> $logfile if ! [ $ans ]; then return $default fi case "$ans" in 1|2|3) finished=1 ;; *) echo "Please answer 1, 2, or 3" | tee -a $logfile ;; esac done return $ans } getFQDN() { max=0 maxhost= defhost=`hostname` echo "getFQDN: hostname = $defhost" >> $logfile hosthost=`host $defhost | grep -v "not found" | awk '{print $1}'` echo "getFQDN: host $defhost = $hosthost" >> $logfile for host in $defhost $hosthost `hostname -f` `hostname -a` ; do len=`echo $host | wc -c` echo "getFQDN: host $host has length $len" >> $logfile if [ $len -gt $max ]; then max=$len maxhost=$host echo "getFQDN: new max host $host has length $max" >> $logfile fi done echo $maxhost } logfile=`doMktmp log` myargs= silent= inffile= tmpinffile= nextisinffile= keepinffile= for arg in "$@" ; do if [ "$arg" = "-s" ]; then silent=1 elif [ "$arg" = "-k" ]; then keepinffile=1 elif [ "$arg" = "-f" ]; then nextisinffile=1 elif [ $nextisinffile ]; then inffile="$arg" nextisinffile= else myargs="$myargs $arg" fi done # figure out where we are and make sure we cd to the serverroot dir setupdir=`dirname $0` sroot=`dirname $setupdir` cd $sroot currentdir=`pwd` if [ "$currentdir" != "$sroot" ]; then # running setup using a relative path bname=`basename $setupdir` if [ "$bname" = "." ]; then setupdir=$currentdir else setupdir=`echo $currentdir/$bname` fi sroot=`dirname $setupdir` cd $sroot fi rm -f $sroot/setup/install.inf echo "INFO Begin Setup . . ." | tee -a $logfile # cat LICENSE.txt if ! [ $silent ]; then echo "" | tee -a $logfile echo "" | tee -a $logfile echo "" | tee -a $logfile cat LICENSE.txt | tee -a $logfile askYN "Do you accept the license terms?" fi # cat README.txt if ! [ $silent ]; then cat README.txt | tee -a $logfile askYN "Continue?" fi # dsktune if ! [ $silent ]; then bin/slapd/server/dsktune | tee -a $logfile askYN "Continue?" fi # install mode if ! [ $silent ]; then echo "" echo "Please select the install mode:" echo " 1 - Express - minimal questions" echo " 2 - Typical - some customization (default)" echo " 3 - Custom - lots of customization" ask123 "2" "Please select 1, 2, or 3 (default: 2) " installmode=$? fi # if silent mode, do not run the pre-installer programs # otherwise, create a temp file for their use if ! [ $silent ]; then inffile=`doMktmp setup` tmpinffile=1 # put some common answers in the file hostname=`getFQDN` if ! [ $hostname ] ; then hostname=localhost.localdomain fi echo "" | tee -a $logfile echo -n "Hostname to use (default: $hostname) " | tee -a $logfile read ans echo $ans >> $logfile if [ "$ans" ]; then hostname="$ans" fi user=nobody group=nobody echo "" echo -n "Server user ID to use (default: $user) " | tee -a $logfile read ans echo $ans >> $logfile if [ "$ans" ]; then user="$ans" fi echo "" echo -n "Server group ID to use (default: $group) " | tee -a $logfile read ans echo $ans >> $logfile if [ "$ans" ]; then group="$ans" fi echo '[General]' >> $inffile echo "FullMachineName = $hostname" >> $inffile echo "SuiteSpotUserID = $user" >> $inffile echo "SuiteSpotGroup = $group" >> $inffile echo ServerRoot = `pwd` >> $inffile # check if ds instance directory exists or not # if it does, run ns-config with the reconfigure option doreconfig="" for x in `ls -d slapd-*` do if [ -d $x ]; then doreconfig="-r" break fi done # first, run ds cd bin/slapd/admin/bin ./ns-config -f $inffile -l $logfile -m $installmode $doreconfig || doExit cd ../../../.. # next, run admin cd bin/admin ./ns-config -f $inffile -l $logfile -m $installmode || doExit cd ../.. fi # do the post installers silentarg="" if ! [ $silent ] ; then silentarg="-s" fi `pwd`/bin/slapd/admin/bin/ns-update $silentarg $myargs -f $inffile | tee -a $logfile || doExit `pwd`/bin/admin/ns-update $silentarg $myargs -f $inffile | tee -a $logfile || doExit echo "INFO Finished with setup, logfile is setup/setup.log" | tee -a $logfile if [ -f setup/setup.log ] ; then cat $logfile >> setup/setup.log else cp $logfile setup/setup.log fi rm -f $logfile if [ $tmpinffile ]; then if [ $keepinffile ]; then if [ -f setup/install.inf ]; then cat $inffile >> setup/install.inf else cp $inffile setup/install.inf fi chmod 600 setup/install.inf fi rm -f $inffile fi exit 0