summaryrefslogtreecommitdiff
path: root/localezcreate
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2002-12-08 17:50:27 +0000
committerJonas Smedegaard <dr@jones.dk>2002-12-08 17:50:27 +0000
commit2794de42eaec364d8d3290c09f0ce41ec6f8991e (patch)
treeafde7f4ba443da17ea5c93169ac4a7c7bf021192 /localezcreate
parent87f80cab7c52f206c1f685d62dd5a12446a31470 (diff)
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).
Diffstat (limited to 'localezcreate')
-rwxr-xr-xlocalezcreate171
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...)"