From 2794de42eaec364d8d3290c09f0ce41ec6f8991e Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Sun, 8 Dec 2002 17:50:27 +0000 Subject: Add short-opts corresponding all long-opts, and fix misspelled options. Add flags info and query, and improve logik of setting the boolean value. Improve dialog when checking for existing installation, and actually respect the force option. Fix messy output in tarball and sql loops. Remove last su invocation (in the process of making the script work as non-root). --- localezcreate | 171 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 104 insertions(+), 67 deletions(-) (limited to 'localezcreate') 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 # -# $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...)" -- cgit v1.2.3