diff options
-rwxr-xr-x | localezcreate | 171 |
1 files changed, 104 insertions, 67 deletions
diff --git a/localezcreate b/localezcreate index 72427f6..0422d78 100755 --- a/localezcreate +++ b/localezcreate @@ -3,7 +3,7 @@ # /usr/local/sbin/localezcreate # Copyright 2001-2002 Jonas Smedegaard <dr@jones.dk> # -# $Id: localezcreate,v 1.20 2002-12-08 15:28:21 jonas Exp $ +# $Id: localezcreate,v 1.21 2002-12-08 17:50:27 jonas Exp $ # # Create local eZ Publish site # @@ -13,12 +13,13 @@ # TODO: Make a note about installed languages and themes (for smooth upgrades) # TODO: Make md5 of all files (for smooth upgrades) # TODO: Make script (mostly) work as noon-root +# TODO: Include all mail addresses in site.ini.override set -e prg=`basename $0` -TEMP=`getopt -o hu:g:d:m:f::v --long help,user:,group:,domain:,mailuser:,maildomain:,dbname:,dbserver:,dballow:,force::,verbose -n "$prg" -- "$@"` +TEMP=`getopt -o hu:g:d:a:m:N:U:D:Z:i::v::q::f:: --long help,user:,group:,domain:,mailuser:,maildomain:,dbname:,dbuser:,dbserver:,dballow:,info::,verbose::,query::,force:: -n "$prg" -- "$@"` # Check for non-GNU getopt if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi @@ -30,6 +31,7 @@ eval set -- "$TEMP" opts1="user group domain maildomain dbserver dballow" # Options with self-contained defaults opts2="dbuser home" # Options requiring $opts1 to resolve default opts3="mailuser dbname basedir adminhost webcfg" # Options requiring $opts1, $opts2 or $host to resolve default +optsboolean="info verbose query force" # Do not touch these! # Defaults defaultuser="www-data" @@ -41,6 +43,9 @@ defaultdbname='ez_2_2_$host' # TODO: Allow all defaults to be set like this defaultdbuser='$user' defaultdbserver="localhost" defaultdballow="localhost" +defaultinfo="on" +defaultverbose="off" +defaultquery="on" defaultforce="off" # Defaults not (yet) user configurable @@ -75,18 +80,20 @@ function usage() { echo " -g, --group=GID System group id (default: $defaultgroup)" echo " -d, --domain=DOMAIN Domain name with hostname stripped off (default:" echo " $defaultdomain)" - echo " --mailuser=UID User part of mail address (default: $defaultmailuser)" + echo " -a, --mailuser=UID User part (account) of mail address (default: $defaultmailuser)" echo " -m, --maildomain=DOMAIN Domain part of mail address (default:" echo " $defaultmaildomain)" - echo " --dbname=DB MySQL database name (default:" + echo " -N, --dbname=DB MySQL database name (default:" echo " $defaultdbname)" - echo " --dbuser=UID MySQL database user (default: $defaultdbuser)" - echo " --dbserver=HOST IP or host of MySQL server (default:" + echo " -U, --dbuser=UID MySQL database user (default: $defaultdbuser)" + echo " -D, --dbserver=HOST IP or host of MySQL server (default:" echo " $defaultdbserver)" - echo " --dballow=HOST IP or host of eZ server (default:" + echo " -Z, --dballow=HOST IP or host of eZ server (default:" echo " $defaultdballow)" - echo " -f, --force[=FLAG] Replace existing installation (default: $defaultforce)" - echo " -v, --verbose Be talkative during installation" + echo " -i, --info[=on|off] Show info during installation (default: $defaultinfo)" + echo " -v, --verbose[=on|off] Show details during installation (default: $defaultverbose)" + echo " -q, --query[=on|off] Ask for missing options (default: $defaultquery)" + echo " -f, --force[=on|off] Replace existing installation (default: $defaultforce)" echo echo "Each HOST is a simple hostname, without the domain part." echo @@ -108,17 +115,14 @@ while true ; do -d|--domain) domain="$2"; shift 2;; -a|--mailuser) mailuser="$2"; shift 2;; -m|--maildomain) maildomain="$2"; shift2 ;; - --dbname) dbname="$2"; shift 2;; - --dbuser) dbuser="$2"; shift 2;; - --dbserver) dbserver="$2"; shift 2;; - --dballow) dballow="$2"; shift 2;; - -f|--force) - case "$2" in - ""|on) force="on"; shift 2;; - *) force="off"; shift 2;; - esac - ;; - -v|--verbose) verbose="1"; shift;; + -N|--dbname) dbname="$2"; shift 2;; + -U|--dbuser) dbuser="$2"; shift 2;; + -D|--dbserver) dbserver="$2"; shift 2;; + -Z|--dballow) dballow="$2"; shift 2;; + -i|--info) case "$2" in ""|on) info="on";; *) info="off";; shift 2;; + -v|--verbose) case "$2" in ""|on) verbose="on";; *) verbose="off";; shift 2;; + -q|--query) case "$2" in ""|on) query="on";; *) query="off";; shift 2;; + -f|--force) case "$2" in ""|on) force="on";; *) force="off";; shift 2;; --) shift; break;; *) echo "Internal error!" ; exit 1 ;; esac @@ -126,16 +130,33 @@ done setparams $opts1 setparams $opts2 +optdbserver="-p$dbserver" +if [ "$dbserver" = "localhost" ]; then + optdbserver="" # Do not force TCP/IP access when connecting locally +fi +for boolean in $optsboolean; do + setparams $boolean + case "$boolean" in + on) eval $boolean="1";; + off) eval $boolean="";; + *) echo "ERROR: $boolean must be either \"on\" or \"off\"!"; exit 1;; + esac +done -# Attempt to figure out dbpass, dbadmin and dbadmpass, else ask for them +[ $verbose ] && echo "Figure out database users and passwords" if [ -z "$dbpass" ]; then if [ -f $home/.my.cnf ]; then dbpass=$(grep password $home/.my.cnf | awk -F= '{print $2}' | head -1 | sed 's/^ //g') fi if [ -z "$dbpass" ]; then - echo -n "Enter MySQL password for $dbuser: " - read -s dbpass - echo + if [ $query ]; then + echo -n "Enter database password for MySQL user $dbuser: " + read -s dbpass + echo + else + echo "ERROR: Database password for MySQL $dbuser not found!" + exit 1 + fi fi fi if [ -e /usr/share/wwwconfig-common/mysql-localadmpass.get -a "$dbserver" = "localhost" ] ; then @@ -145,46 +166,62 @@ if [ -e /usr/share/wwwconfig-common/mysql-localadmpass.get -a "$dbserver" = "loc [ $verbose ] && echo "$error" fi fi -if [ -z "$dbadmpass" ]; then - echo -n "Enter MySQL administrator (usually root): " - read -s dbadmin - echo - echo -n "Enter MySQL root password: " - read -s dbadmpass - echo +if [ -z "$dbadmin" ]; then + if [ $query ]; then + echo -n "Enter database administrator user (usually root): " + read -s dbadmin + echo + else + echo "ERROR: Database administrator user not resolved!" + exit 1 + fi fi - -# Do not force TCP/IP access when connecting locally -optdbserver="" -if [ "$dbserver" != "localhost" ]; then - optdbserver="-p$dbserver" +if [ -z "$dbadmpass" ]; then + if [ $query ]; then + echo -n "Enter database password for administrator $sbadmin: " + read -s dbadmpass + echo + else + echo "ERROR: Database password for administrator $dbadmin not found!" + exit 1 + fi fi ############################################## # The rest of the script is host-specific... # ############################################## - for host do -echo "Installing $host..." +[ $info ] && echo "Installing $host..." setparams $opts3 -if [ -d $basedir -o -d $webcfg ]; then # TODO: Check for MySQL database as well - echo "WARNING: Target dir or Apache config snippet already exists." - echo -n " Purge existing installation (y/N)?: " - read -s ack - echo - case $ack in - y|Y) +[ $verbose ] && echo "Check for existing installation" +error="" +if [ -d $basedir ]; then + error="Target directory already exists." +elif [ -f $webcfg ]; then + error="Apache config already exists." +fi +# TODO: Check for existing MySQL database +if [ -n "$error" ]; then + if [ $query ]; then + echo "WARNING: $error" + echo -n "Overwrite existing installation (y/N)?: " + read -s ack + echo + case $ack in + y|Y) force="1";; + *) echo "Installation aborted!"; exit 1;; + esac + fi + if [ $force ]; then mysqladmin -u$dbadmin -p$dbadmpass $optdbserver drop $dbname rm -rf $basedir - ;; - *) - echo "Installation aborted!" + else + echo "ERROR: $error!" exit 1 - ;; - esac + fi fi [ $verbose ] && echo "Create database $dbname" @@ -196,6 +233,7 @@ if [ -e /usr/share/wwwconfig-common/mysql-createdb.sh ] ; then exit 1 fi else + # TODO: Purge existing database as the wwwconfig-common script does mysqladmin -u$dbadmin -p$dbadmpass $optdbserver create $dbname fi @@ -216,14 +254,15 @@ else done fi +[ $verbose ] && echo -n "Fill the database: " for chunk in $sqlchunks; do - [ $verbose ] && echo -n "Feeding $chunk into database: " + [ $verbose ] && echo -n "$chunk " found="" + sqlfile=${chunk}_mysql.sql for dir in $sqldirs; do - if [ -f $dir/${chunk}_mysql.sql ]; then + if [ -f $dir/$sqlfile ]; then found="1" sqldir=$dir - sqlfile=${chunk}_mysql.sql break fi done @@ -238,7 +277,6 @@ for chunk in $sqlchunks; do else cat $sqldir/$sqlfile | mysql -u$dbadmin -p$dbadmpass $optdbserver $dbname fi - echo -n " " else [ $verbose ] && echo echo "ERROR: $chunk not found!" @@ -247,20 +285,23 @@ for chunk in $sqlchunks; do done [ $verbose ] && echo +[ $verbose ] && echo "Create base directory $basedir" +mkdir $basedir + for area in source language template; do [ $verbose ] && echo -n "Unpacking $area files: " for tarball in `eval echo \$\{${area}s\}`; do - [ $verbose ] && echo -n "$tarball" + [ $verbose ] && echo -n "$tarball " found="" for dir in `eval echo \$\{${area}dirs\}`; do if [ -f $dir/$tarball.tar.gz ]; then found="1" - (cd $basedir && tar -xz -C $basedir -f $dir/$tarball.tar.gz) || exit 1 + tarballdir=$dir break fi done if [ "$found" = "1" ]; then - echo -n " " + (cd $basedir && tar -xz -C $basedir -f $tarballdir/$tarball.tar.gz) || exit 1 else [ $verbose ] && echo echo "ERROR: $area $tarball not found!" @@ -271,13 +312,10 @@ done [ $verbose ] && echo [ $verbose ] && echo "Configuring website" -su $user -c " - set -e - cd $basedir - $bindir/modfix.sh >/dev/null - $bindir/secure_modfix.sh $user $group >/dev/null - mkdir -p override - echo \"[site] +(cd $basedir && $bindir/modfix.sh >/dev/null) || exit 1 # TODO: Check if these are in sync and disable one of them +(cd $basedir && $bindir/secure_modfix.sh $user $group >/dev/null) || exit 1 +mkdir -p $basedir/override +echo "[site] SiteURL=$host.$domain AdminSiteURL=$adminhost UserSiteURL=$host.$domain @@ -304,8 +342,7 @@ ApacheUser=UserApacheRunsAs [eZForumMain] ReplyAddress=$mailuser@$maildomain -\" > override/site.ini.append -" +" > $basedir/override/site.ini.append chown -R $user:$group $basedir @@ -353,4 +390,4 @@ echo "# Generated by $prg done -echo "All done! (Remember to reload the webserver...)" +[ $info ] && echo "All done! (Remember to reload the webserver...)" |