- #!/bin/bash
- #
- # /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 $
- #
- # Create local eZ Publish site
- #
- # This script makes use of the Debian package wwwconfig-common if installed
- #
- # 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 are evaluated at runtime in this order
- # (If changing 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 webcfg" # Options requiring $opts1, $opts2 or $host to resolve default
- # Defaults
- defaultuser="www-data"
- defaultgroup="www-data"
- defaultdomain="ez."`hostname -d`
- 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"
- defaultforce="off"
- # Defaults not (yet) user configurable
- templates=""
- languages="en_GB en_GB_org"
- sqlchunks="publish data"
- defaulthome="/var/www"
- defaultbasedir='/var/www/ez-$host.$domain'
- defaultadminhost='admin.$host.$domain'
- defaultwebcfg='/etc/apache/vhosts.d/ez-$host.$domain'
- templatedirs="/usr/src/ezpublish/templates"
- languagedirs="/usr/src/ezpublish/lang"
- sqldirs="/usr/share/ezpublish/sql"
- # Override defaults from config file if available
- if [ -e /etc/local/localezcreate.conf ]; then
- . /etc/local/localezcreate.conf
- fi
- # 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 "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 "Each HOST is a simple hostname, without the domain part."
- echo
- echo "MySQL password for \$dbuser can be stored in \$HOME/.my.cnf of \$user."
- }
- function setparams () { # TODO: Handle default argument '[[ASK]]', and fail loudly on empty defaults
- for param in $@; do
- 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
- setparams $opts1
- setparams $opts2
- # Attempt to figure out dbpass, dbadmin and dbadmpass, else ask for them
- 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
- fi
- fi
- if [ -e /usr/share/wwwconfig-common/mysql-localadmpass.get -a "$dbserver" = "localhost" ] ; then
- status=""
- . /usr/share/wwwconfig-common/mysql-localadmpass.get
- if [ "$status" = "error" ] ; then
- [ $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
- fi
- # Do not force TCP/IP access when connecting locally
- optdbserver=""
- if [ "$dbserver" != "localhost" ]; then
- optdbserver="-p$dbserver"
- fi
- ##############################################
- # The rest of the script is host-specific... #
- ##############################################
- for host do
- 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)
- mysqladmin -u$dbadmin -p$dbadmpass $optdbserver drop $dbname
- rm -rf $basedir
- ;;
- *)
- echo "Installation aborted!"
- exit 1
- ;;
- esac
- fi
- [ $verbose ] && echo "Create database $dbname"
- if [ -e /usr/share/wwwconfig-common/mysql-createdb.sh ] ; then
- status=""
- . /usr/share/wwwconfig-common/mysql-createdb.sh
- if [ "$status" = "error" ] ; then
- echo "$error"
- exit 1
- fi
- 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
- if [ "$status" = "error" ] ; then
- echo "$error"
- exit 1
- fi
- for h in `echo "localhost $dballow" | sort -u`; do
- echo "GRANT INDEX ON $dbname.* TO '$dbuser'@$h IDENTIFIED BY '$dbpass';" | mysql -u$dbadmin -p$dbadmpass $optdbserver
- done
- else
- for h in `echo "localhost $dballow" | sort -u`; do
- echo "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX ON $dbname.* TO '$dbuser'@$h IDENTIFIED BY '$dbpass';" | mysql -u$dbadmin -p$dbadmpass $optdbserver
- done
- fi
- 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) || exit 1
- 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
- done
- [ $verbose ] && echo
- 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) || exit 1
- break
- fi
- done
- if [ "$found" = "1" ]; then
- echo -n " "
- else
- [ $verbose ] && echo
- echo "ERROR: $area $tarball not found!"
- exit 1
- fi
- done
- 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]
- SiteURL=$host.$domain
- AdminSiteURL=$adminhost
- UserSiteURL=$host.$domain
- SiteTitle=$host eZ site
- Keywords=$host $maildomain
- SiteAuthor=someone at $maildomain
- SiteCopyright=someone © 2001
- SiteDescription=a web application suite
- SiteKeywords=Content Management System, CMS, e-commerce
- Database=$dbname
- User=$dbuser
- Server=$dbserver
- Password=$dbpass
- [eZUserMain]
- DefaultCountry=58
- [eZTradeMain]
- OrderSenderEmail=$mailuser@$maildomain
- OrderReceiverEmail=$mailuser@$maildomain
- mailToAdmin=$mailuser@$maildomain
- ForceSSL=disabled
- ApacheUser=UserApacheRunsAs
- [eZForumMain]
- ReplyAddress=$mailuser@$maildomain
- \" > override/site.ini.append
- "
- chown -R $user:$group $basedir
- [ $verbose ] && echo "Configuring Apache"
- echo "# Generated by $prg
- <VirtualHost *>
- ServerName $host.$domain
- ServerAdmin $mailuser@$maildomain
- DocumentRoot $basedir
- user $user
- group $group
- <Directory $basedir>
- Options FollowSymLinks
- AllowOverride None
- </Directory>
- php_flag magic_quotes_gpc off
- RewriteEngine On
- RewriteRule ^/stats/store/(.*).gif\$ $basedir/ezstats/user/storestats.php [S=4]
- RewriteRule ^/filemanager/filedownload/([^/]+)/(.*)\$ $basedir/ezfilemanager/files/\$1 [T=\"application/oct-stream\",S=3]
- RewriteRule .*/ezmediacatalogue/catalogue/(.*)\$ $basedir/ezmediacatalogue/catalogue/\$1 [T=\"application/oct-stream\",S=2]
- RewriteRule ^/xmlrpc.*\$ $basedir/index_xmlrpc.php [S=1]
- RewriteRule !\.(gif|css|jpg|png|jar|wbmp)\$ $basedir/index.php
- </VirtualHost>
- <VirtualHost *>
- ServerName $adminhost
- ServerAdmin $mailuser@$maildomain
- DocumentRoot $basedir
- user $user
- group $group
- <Directory $basedir>
- Options FollowSymLinks
- AllowOverride None
- </Directory>
- php_flag magic_quotes_gpc off
- RewriteEngine On
- RewriteRule .*/ezmediacatalogue/catalogue/(.*)\$ $basedir/ezmediacatalogue/catalogue/\$1 [T=\"application/oct-stream\",S=1]
- RewriteRule !\.(gif|css|jpg|png|jar|wbmp) $basedir/index_admin.php
- </VirtualHost>
- <VirtualHost *>
- ServerName www.$host.$domain
- RewriteEngine On
- RewriteRule / http://$host.$domain/ [R]
- TransferLog /dev/null
- </VirtualHost>" > $webcfg
- done
- echo "All done! (Remember to reload the webserver...)"
|