summaryrefslogtreecommitdiff
path: root/localezcreate
diff options
context:
space:
mode:
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...)"