summaryrefslogtreecommitdiff
path: root/localezcreate
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 /localezcreate
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.
Diffstat (limited to 'localezcreate')
-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...)"