summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2002-12-07 18:34:05 +0000
committerJonas Smedegaard <dr@jones.dk>2002-12-07 18:34:05 +0000
commitbd234136699fbe0314672aaaa9110c0d55e133d7 (patch)
tree821b2fe3cbb70d2c6770625f6f29330b9fbc1763
parentfe03d997bc85c1f5db8c4a0392de5b3d71a20377 (diff)
Use GNU getopt, and make lots of options configurable.
Redesign help text to look similar to cp help text. Generalize initializing options in function setparams. Add options --force and --verbose. Add support for overriding with locally provided tarballs and sqlfiles.
-rwxr-xr-xlocalezcreate310
1 files changed, 197 insertions, 113 deletions
diff --git a/localezcreate b/localezcreate
index f00db8d..7db41b8 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.16 2002-12-06 23:38:37 jonas Exp $
+# $Id: localezcreate,v 1.17 2002-12-07 18:34:05 jonas Exp $
#
# Create local eZ Publish site
#
@@ -12,68 +12,121 @@
# TODO: Ask for and set default language and theme
# 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
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" -- "$@"`
+
+# Check for non-GNU getopt
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+
+eval set -- "$TEMP"
+
# Defaults
-pkg="ezpublish"
-srcdir="/usr/src/ezpublish"
-sqldir="/usr/share/ezpublish/sql"
-bindir="/usr/share/ezpublish/bin"
-tarballs="lib data tpl www"
-sqlfile="publish_mysql.sql"
-sqlfile2="data_mysql.sql"
-defaultuid="www-data"
+defaultuser="www-data"
+defaultgroup="www-data"
defaultdomain="ez."`hostname -d`
-defaultmaildomain=`cat /etc/mailname 2> /dev/null || echo $defaultdomain`
-defaultdbname="ez_2_2_$host"
-defaultgid="www-data"
+defaultmailuser='$dbuser'
+defaultmaildomain=`cat /etc/mailname 2> /dev/null || hostname -d`
+defaultdbname='ez_2_2_$host' # TODO: Allow all defaults to be set like this
+defaultdbuser='$user'
defaultdbserver="localhost"
defaultdballow="localhost"
-template_tarballs=""
-language_tarballs="en_GB en_GB_org"
+defaultforce="off"
+
+# Defaults not (yet) user configurable
+templates=""
+languages="en_GB en_GB_org"
+sqlchunks="publish data"
+defaulthome='`getent passwd $user | awk -F: '"'"'{print $6}'"'"';`'
+defaultbasedir='$home/webphpsites/$host.$domain'
+defaultadminhost='admin.$host.$domain'
+defaultadmindir='$home/webphpsites/$host.$domain/admin'
+defaultwebcfg='/etc/apache/vhosts.d/$home.$domain'
+templatedirs="/usr/src/ezpublish/templates"
+languagedirs="/usr/src/ezpublish/lang"
+sqldirs="/usr/share/ezpublish/sql"
+
+# If overriding some defaults, you might need to change these as well
+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 admindir webcfg" # Options requiring $opts1, $opts2 or $host to resolve default
+
+# Override defaults from config file if available
if [ -e /etc/local/localezcreate.conf ]; then
. /etc/local/localezcreate.conf
fi
-if [ $# \< 1 -o $# \> 8 ]; then
- echo "Usage: `basename $0` host [ uid [ fqdn [ maildomain [ dbname [ dbuser"
- echo " [ mailuser [ gid ]]]]]]"
+# These are unlikely to change
+sourcedirs="/usr/src/ezpublish"
+sources="lib data tpl www"
+bindir="/usr/share/ezpublish/bin"
+
+function usage() {
+ echo "Usage: $prg [OPTION]... HOST [HOST]..."
+ echo "Create local eZ Publish sites"
echo
- echo " OPTION DESCRIPTION DEFAULT VALUE"
- echo " host: hostname (without domain)"
- echo " uid: System user id ($defaultuid)"
- echo " fqdn: Complete domain name (<host>.$defaultdomain)"
- echo " maildomain: Domain part of mail address ($defaultmaildomain)"
- echo " dbname: MySQL database name ($defaultdbname)"
- echo " dbuser: MySQL database user (<uid>)"
- echo " mailuser: User part of mail address (<dbuser>)"
- echo " gid: System group id ($defaultgid)"
- echo " dbserver: IP or host of MySQL server ($defaultdbserver)"
- echo " dballow: IP or host of eZ server ($defaultdballow)"
+ echo "Mandatory arguments to long options are mandatory for short options too."
+ echo " -h, --help Show this help"
+ echo " -u, --user=UID System user id (default: $defaultuser)"
+ 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 " -m, --maildomain=DOMAIN Domain part of mail address (default:"
+ echo " $defaultmaildomain)"
+ echo " --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 " $defaultdbserver)"
+ echo " --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
- echo " MySQL password for <dbuser> can be stored in \$HOME/.my.cnf of <uid>."
+ echo "Each HOST is a simple hostname, without the domain part."
echo
- echo " Example: `basename $0` bilbo news news.forum.com"
+ echo "MySQL password for \$dbuser can be stored in \$HOME/.my.cnf of \$user."
+}
- exit 1
-fi
+function setparams () {
+ for param in $@; do
+ # TODO: Check here if default exists or fail loudly
+ eval "$param=`eval \"echo \"\\\"\$\{$param:-\\\$default${param}\}\\\"\"\"`"
+ [ $verbose ] && echo "--> $param="`eval echo \$\{$param\}`
+ done
+}
+
+while true ; do
+ case "$1" in
+ -h|--help) usage; exit 0;;
+ -u|--user) user="$2"; shift 2;;
+ -g|--group) group="$2"; shift 2;;
+ -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;;
+ --) shift; break;;
+ *) echo "Internal error!" ; exit 1 ;;
+ esac
+done
-uid=${2:-$defaultuid}
-fqdn=${3:-$host.$defaultdomain}
-maildomain=${4:-$defaultmaildomain}
-dbname=${5:-$defaultdbname}
-dbuser=${6:-$uid}
-mailuser=${7:-$uid}
-gid=${8:-$defaultgid}
-dbserver=${9:-$defaultdbserver}
-dballow=${10:-$defaultdballow}
-
-home=`getent passwd $uid | awk -F: '{print $6}';`
-basedir="$home/webphpsites/$fqdn"
-adminhost="admin.$fqdn"
-adminbasedir="$basedir/admin"
-webcfg="/etc/apache/vhosts.d/$fqdn"
+setparams $opts1
+setparams $opts2
# Attempt to figure out dbpass, dbadmin and dbadmpass, else ask for them
if [ -z "$dbpass" ]; then
@@ -90,7 +143,7 @@ if [ -e /usr/share/wwwconfig-common/mysql-localadmpass.get -a "$dbserver" = "loc
status=""
. /usr/share/wwwconfig-common/mysql-localadmpass.get
if [ "$status" = "error" ] ; then
- echo "$error"
+ [ $verbose ] && echo "$error"
fi
fi
if [ -z "$dbadmpass" ]; then
@@ -102,20 +155,40 @@ if [ -z "$dbadmpass" ]; then
echo
fi
-#TODO: Make sure $basedir, $dbname, $dbuser and $webcfg doesn't exist
-
# Do not force TCP/IP access when connecting locally
optdbserver=""
if [ "$dbserver" != "localhost" ]; then
optdbserver="-p$dbserver"
fi
-#if [ "$(basename $0)" = "${pkg}betarecreate" ]; then
-# mysqladmin -u$dbadmin -p$dbadmpass $optdbserver drop $dbname
-# rm -rf $basedir
-#fi
+##############################################
+# The rest of the script is host-specific... #
+##############################################
+
+for host do
+
+echo "Installing $host..."
+
+setparams $opts3
+
+if [ -d $basedir -o -d $webcfg ]; then
+ 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)
+ mysqladmin -u$dbadmin -p$dbadmpass $optdbserver drop $dbname
+ rm -rf $basedir
+ ;;
+ *)
+ echo "Installation aborted!"
+ exit 1
+ ;;
+ esac
+fi
-echo "Creating database $dbname"
+[ $verbose ] && echo "Create database $dbname"
if [ -e /usr/share/wwwconfig-common/mysql-createdb.sh ] ; then
status=""
. /usr/share/wwwconfig-common/mysql-createdb.sh
@@ -126,6 +199,8 @@ if [ -e /usr/share/wwwconfig-common/mysql-createdb.sh ] ; then
else
mysqladmin -u$dbadmin -p$dbadmpass $optdbserver create $dbname
fi
+
+[ $verbose ] && echo "Create/update database user $dbuser"
if [ -e /usr/share/wwwconfig-common/mysql-createuser.sh ] ; then
status=""
. /usr/share/wwwconfig-common/mysql-createuser.sh
@@ -142,63 +217,71 @@ else
done
fi
-echo "Inject initial data into database"
-if [ -e /usr/share/wwwconfig-common/mysql-exec.sh ] ; then
- status=""
- (cd $sqldir && . /usr/share/wwwconfig-common/mysql-exec.sh)
- if [ "$status" = "error" ] ; then
- echo "$error"
+for chunk in $sqlchunks; do
+ [ $verbose ] && echo -n "Feeding $chunk into database: "
+ found=""
+ for dir in $sqldirs; do
+ if [ -f $dir/${chunk}_mysql.sql ]; then
+ found="1"
+ sqldir=$dir
+ sqlfile=${chunk}_mysql.sql
+ break
+ fi
+ done
+ if [ "$found" = "1" ]; then
+ if [ -e /usr/share/wwwconfig-common/mysql-exec.sh ] ; then
+ status=""
+ (cd $sqldir && . /usr/share/wwwconfig-common/mysql-exec.sh)
+ if [ "$status" = "error" ] ; then
+ echo "$error"
+ exit 1
+ fi
+ else
+ cat $sqldir/$sqlfile | mysql -u$dbadmin -p$dbadmpass $optdbserver $dbname
+ fi
+ echo -n " "
+ else
+ [ $verbose ] && echo
+ echo "ERROR: $chunk not found!"
exit 1
fi
-else
- cat $sqldir/$sqlfile | mysql -u$dbadmin -p$dbadmpass $optdbserver $dbname
-fi
+done
+[ $verbose ] && echo
-echo -n "Unpacking tarballs:"
-mkdir $basedir
-chown $uid:$gid $basedir
-su $uid -c "
- set -e
- cd $basedir
- for tarball in $tarballs; do
- echo -n \" \$tarball\"
- tar -xz -C $basedir -f $srcdir/\$tarball.tar.gz
- done
- for tarball in $language_tarballs; do
- echo -n \" \$tarball\"
- tar -xz -C $basedir -f $srcdir/lang/\$tarball.tar.gz
- done
- for tarball in $template_tarballs; do
- echo -n \" \$tarball\"
- tar -xz -C $basedir -f $srcdir/templates/\$tarball.tar.gz
+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"
+ 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)
+ break
+ fi
+ done
+ if [ "$found" = "1" ]; then
+ echo -n " "
+ else
+ [ $verbose ] && echo
+ echo "ERROR: $area $tarball not found!"
+ exit 1
+ fi
done
- echo
-"
+done
+[ $verbose ] && echo
-echo "Adding demo data to database"
-sqlfile=$sqlfile2
-if [ -e /usr/share/wwwconfig-common/mysql-exec.sh ] ; then
- status=""
- (cd $sqldir && . /usr/share/wwwconfig-common/mysql-exec.sh)
- if [ "$status" = "error" ] ; then
- echo "$error"
- exit 1
- fi
-else
- cat $sqldir/$sqlfile | mysql -u$dbadmin -p$dbadmpass $optdbserver $dbname
-fi
-
-echo "Configuring website"
-su $uid -c "
+[ $verbose ] && echo "Configuring website"
+su $user -c "
set -e
cd $basedir
$bindir/modfix.sh >/dev/null
- $bindir/secure_modfix.sh $uid $gid >/dev/null
+ $bindir/secure_modfix.sh $user $group >/dev/null
mkdir -p override
echo \"[site]
-SiteURL=$fqdn
-AdminSiteURL=admin.$fqdn
-UserSiteURL=$fqdn
+SiteURL=$host.$domain
+AdminSiteURL=$adminhost
+UserSiteURL=$host.$domain
SiteTitle=$host eZ site
Keywords=$host $maildomain
SiteAuthor=someone at $maildomain
@@ -225,16 +308,16 @@ ReplyAddress=$mailuser@$maildomain
\" > override/site.ini.append
"
-chown -R $uid:$gid $basedir
+chown -R $user:$group $basedir
-echo "Configuring Apache"
+[ $verbose ] && echo "Configuring Apache"
echo "# Generated for $pkg by $(basename $0)
<VirtualHost *>
- ServerName $fqdn
+ ServerName $host.$domain
ServerAdmin $mailuser@$maildomain
DocumentRoot $basedir
- user $uid
- group $gid
+ user $user
+ group $group
<Directory $basedir>
Options FollowSymLinks
AllowOverride None
@@ -251,8 +334,8 @@ echo "# Generated for $pkg by $(basename $0)
ServerName $adminhost
ServerAdmin $mailuser@$maildomain
DocumentRoot $basedir
- user $uid
- group $gid
+ user $user
+ group $group
<Directory $basedir>
Options FollowSymLinks
AllowOverride None
@@ -263,11 +346,12 @@ echo "# Generated for $pkg by $(basename $0)
RewriteRule !\.(gif|css|jpg|png|jar|wbmp) $basedir/index_admin.php
</VirtualHost>
<VirtualHost *>
- ServerName www.$fqdn
+ ServerName www.$host.$domain
RewriteEngine On
- RewriteRule / http://$fqdn/ [R]
+ RewriteRule / http://$host.$domain/ [R]
TransferLog /dev/null
</VirtualHost>" > $webcfg
-echo "Done!"
-echo "Remember to reload Apache..."
+done
+
+echo "All done! (Remember to reload the webserver...)"