Created
December 5, 2016 13:09
-
-
Save osrecio/52029e6ae0dedb83d1dc960b051c7438 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
#================================================================================ | |
# virtualhost.sh 1.35 | |
# | |
# A fancy little script to manage virtualhosts on Mac OS X. | |
# | |
# For usage help and available commands run `virtualhost.sh`. | |
#================================================================================ | |
# Don't change this! | |
version="1.35" | |
# | |
# No point going any farther if we're not running correctly... | |
if [ `whoami` != 'root' -a "$1" -a "$1" != "--list" ]; then | |
read -d '' prompt <<- EOT | |
virtualhost.sh requires super-user privileges to work. | |
Enter your password to continue... | |
Password: | |
EOT | |
sudo -E -p "$prompt" "$0" $* || exit 1 | |
exit 0 | |
fi | |
if [ "$SUDO_USER" = "root" -a "$1" -a "$1" != "--list" ]; then | |
/bin/echo "You must start this under your regular user account (not root) using sudo." | |
/bin/echo "Rerun using: sudo $0 $*" | |
exit 1 | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# If you are using this script on a production machine with a static IP address, | |
# and you wish to set up a "live" virtualhost, you can change the following IP | |
# address to the IP address of your machine. | |
# | |
: ${IP_ADDRESS:="127.0.0.1"} | |
: ${IPV6_ADDRESS:="::1"} | |
# By default, this script places files in /Users/[you]/Sites. If you would like | |
# to change this, like to how Apple does things by default, uncomment the | |
# following line: | |
# | |
#DOC_ROOT_PREFIX="/Library/WebServer/Documents" | |
# Configure the apache-related paths | |
# | |
: ${APACHE_CONFIG:="/usr/local/etc/apache2/2.4"} | |
: ${APACHECTL:="/usr/local/bin/apachectl"} | |
# If you wish to change the default application that gets launched after the | |
# virtual host is created, define it here: | |
: ${OPEN_COMMAND:="/usr/bin/open"} | |
# If you want to use a different browser than Safari, define it here: | |
#BROWSER="Firefox" | |
#BROWSER="WebKit" | |
#BROWSER="Google Chrome" | |
# If defined, a ServerAlias os $1.$WILDCARD_ZONE will be added to the virtual | |
# host file. This is useful if you, for example, have set up a wildcard domain | |
# either on your own DNS server or using a server like dyndns.org. For example, | |
# if my local IP of 10.0.42.42 is static (which can still be achieved using a | |
# well-configured DHCP server or an Apple Airport Extreme 802.11n base station) | |
# and I create a host on dyndns.org of patrickdev.dyndns.org with wildcard | |
# hostnames turned on, then defining my WILDCARD_ZONE to "patrickdev.dyndns.org" | |
# will enable access to my virtual host from any machine on the network. Note | |
# that this would also work with a public IP too, and the virtual hosts on your | |
# machine would be accessible to anyone on the internets. | |
#WILDCARD_ZONE="my.wildcard.host.address" | |
# A feature to specify a custom log location within your site's document root | |
# was requested, and so you will be prompted about this when you create a new | |
# virtual host. If you do not want to be prompted, set the following to "no": | |
: ${PROMPT_FOR_LOGS:="no"} | |
# If you do not want to be prompted, but you do always want to have the site- | |
# specific logs folder, set PROMPT_FOR_LOGS="no" and enable this: | |
: ${ALWAYS_CREATE_LOGS:="yes"} | |
# By default, log files will be created in DOCUMENT_ROOT/logs. If you wish to | |
# override this to a static location, you can do so here. | |
#LOG_FOLDER="/var/log/httpd" | |
# If you want your logs in your document root, uncomment the following | |
LOG_FOLDER="/var/log/apache2" | |
# If you have an atypical setup, and you don't need or want entries in your | |
# /etc/hosts file, you can set the following option to "yes". | |
: ${SKIP_ETC_HOSTS:="no"} | |
# If you are running this script on a platform other than Mac OS X, your home | |
# partition is going to be different. If so, change it here. | |
: ${HOME_PARTITION:="/Users"} | |
# If your environment has a different default DocumentRoot, and you don't want | |
# to be nagged about "fixing" your DocumentRoot, set this to "yes". | |
: ${SKIP_DOCUMENT_ROOT_CHECK:="no"} | |
# If Apache works on a different port than the default 80, set it here | |
: ${APACHE_PORT:="80"} | |
# Batch mode (all prompting will assume Yes). Any value will activate this. Can | |
# be set here, in ~/.virtualhost.sh.conf, or on the command line, like: | |
# BATCH_MODE=yes virtualhost.sh mysite | |
#BATCH_MODE="yes" | |
# If you're satisfied with the version you have and do not wish to be reminded | |
# of a new version, add the following line to your ~/.virtualhost.sh.conf file. | |
SKIP_VERSION_CHECK="yes" | |
# We now will search your $DOC_ROOT_PREFIX for a matching subfolder using find. | |
# By default, we will go two levels deep so that it doesn't take too long. If | |
# you have a really complex structure, you may need to increase this. | |
: ${MAX_SEARCH_DEPTH:="2"} | |
# Set to "yes" if you don't have a browser (headless) or don't want the site | |
# to be launched in your browser after the virtualhost is set up. | |
#SKIP_BROWSER="yes" | |
# By default, we'll write out an index.html file in the DOCUMENT_ROOT if one | |
# is not already present. | |
: ${CREATE_INDEX:="yes"} | |
# You can now store your configuration directions in a ~/.virtualhost.sh.conf | |
# file so that you can download new versions of the script without having to | |
# redo your own settings. | |
if [ -e ~/.virtualhost.sh.conf ]; then | |
. ~/.virtualhost.sh.conf | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
host_exists() | |
{ | |
if grep -q -e "^$IP_ADDRESS $VIRTUALHOST$" /etc/hosts ; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
open_command() | |
{ | |
if [ ! -z "$BROWSER" ]; then | |
$OPEN_COMMAND -a "$BROWSER" "$@" | |
else | |
$OPEN_COMMAND "$@" | |
fi | |
} | |
create_virtualhost() | |
{ | |
if [ ! -z $WILDCARD_ZONE ]; then | |
SERVER_ALIAS="ServerAlias $VIRTUALHOST.$WILDCARD_ZONE" | |
else | |
SERVER_ALIAS="#ServerAlias your.alias.here" | |
fi | |
date=`/bin/date` | |
if [ -z $3 ]; then | |
log="#" | |
else | |
log="" | |
if [ -n "$LOG_FOLDER" ]; then | |
# would love a pure shell way to do this, but sed makes it oh so hard | |
LOG_FOLDER=`ruby -e "puts File.expand_path('$LOG_FOLDER'.gsub(/__DOCUMENT_ROOT__/, '$2'))"` | |
log_folder_path=$LOG_FOLDER | |
access_log="${log_folder_path}/access_log-$VIRTUALHOST" | |
error_log="${log_folder_path}/error_log-$VIRTUALHOST" | |
else | |
log_folder_path=$FOLDER/logs | |
access_log="${log_folder_path}/access_log" | |
error_log="${log_folder_path}/error_log" | |
fi | |
if [ ! -d "${log_folder_path}" ]; then | |
mkdir -p "${log_folder_path}" | |
chown $USER "${log_folder_path}" | |
fi | |
touch $access_log $error_log | |
chown $USER $access_log $error_log | |
fi | |
cat << __EOF >$APACHE_CONFIG/virtualhosts/$VIRTUALHOST | |
# Created $date | |
<VirtualHost *:$APACHE_PORT> | |
DocumentRoot "$2" | |
ServerName $VIRTUALHOST | |
<Directory "$2"> | |
Options All | |
AllowOverride All | |
<IfModule mod_authz_core.c> | |
Require all granted | |
</IfModule> | |
<IfModule !mod_authz_core.c> | |
Order allow,deny | |
Allow from all | |
</IfModule> | |
</Directory> | |
${log}CustomLog "${access_log}" combined | |
${log}ErrorLog "${error_log}" | |
</VirtualHost> | |
__EOF | |
} | |
edit_virtualhost() | |
{ | |
if [ -e $APACHE_CONFIG/virtualhosts/$VIRTUALHOST ]; then | |
$EDITOR $APACHE_CONFIG/virtualhosts/$VIRTUALHOST | |
restart_apache | |
else | |
/bin/echo "VirtualHost $VIRTUALHOST not found." | |
fi | |
} | |
cleanup() | |
{ | |
/bin/echo | |
/bin/echo "Cleaning up..." | |
exit | |
} | |
restart_apache() | |
{ | |
/bin/echo -n "+ Restarting Apache... " | |
$APACHECTL graceful 1>/dev/null 2>/dev/null | |
/bin/echo "done" | |
} | |
# Based on FreeBSD's /etc/rc.subr | |
checkyesno() | |
{ | |
case $1 in | |
# "yes", "true", "on", or "1" | |
[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|[Yy]|1) | |
return 0 | |
;; | |
# "no", "false", "off", or "0" | |
[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|[Nn]|0) | |
return 1 | |
;; | |
*) | |
return 1 | |
;; | |
esac | |
} | |
version_check() | |
{ | |
# Only check for a new version once every day. | |
current_time=`date +%s` | |
last_update_check_directory="${HOME_PARTITION}/$USER/.virtualhost.sh" | |
last_update_check_file="${last_update_check_directory}/last_update_check" | |
if [ -e "$last_update_check_file" ]; then | |
last_checked=`cat "$last_update_check_file"` | |
due_for_a_check=`/bin/echo "$last_checked < ($current_time - 86400)" | /usr/bin/bc` | |
if [ $due_for_a_check -eq 0 ]; then | |
return 0 | |
fi | |
elif [ ! -d "$last_update_check_directory" ]; then | |
# Set up the last update check directory if it's not there yet. | |
mkdir "$last_update_check_directory" | |
fi | |
/bin/echo -n "Checking for updates... " | |
current_version=`curl --silent https://api.github.com/repos/virtualhost/virtualhost.sh/releases | grep tag_name -m 1 | awk '{print $2}' | sed -e 's/[^0-9.]//g'` | |
/bin/echo $current_time > "$last_update_check_file" | |
chown $USER "$last_update_check_directory" "$last_update_check_file" | |
# See if we have the latest version | |
if [ -n "$current_version" ]; then | |
testes=`/bin/echo "$version < $current_version" | /usr/bin/bc` | |
if [ $testes -eq 1 ]; then | |
/bin/echo "done" | |
if [ -z $BATCH_MODE ]; then | |
/bin/echo "A newer version ($current_version) of virtualhost.sh is available." | |
/bin/echo -n "Do you want to get it now? [Y/n] " | |
read resp | |
else | |
/bin/echo "A newer version ($current_version) of virtualhost.sh is available." | |
/bin/echo "Visit https://github.com/virtualhost/virtualhost.sh to go get it." | |
resp="n" | |
fi | |
case $resp in | |
y*|Y*) | |
open_command "https://github.com/virtualhost/virtualhost.sh" | |
exit | |
;; | |
*) | |
/bin/echo "Okay. At your convenience, visit: https://github.com/virtualhost/virtualhost.sh" | |
/bin/echo | |
;; | |
esac | |
else | |
/bin/echo "none found" | |
fi | |
else | |
/bin/echo "failed. Are you online?" | |
fi | |
} | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Get the Apache version number to check compatibility. | |
APACHE_VERSION=$(${APACHECTL} -v | perl -ne 'print $1 if /Apache\/([0-9.]+)/') | |
# Extract the major, minor, and patch numbers from the Apache version for | |
# easier version comparisons. | |
IFS='.' | |
read APACHE_MAJOR_VERSION APACHE_MINOR_VERSION APACHE_PATCH_VERSION <<< "$APACHE_VERSION" | |
unset IFS | |
# Check for Apache 2.x. | |
if (( $APACHE_MAJOR_VERSION < 2 )); then | |
/bin/echo "Could not find ${APACHE_CONFIG}" | |
/bin/echo "Sorry, this version of virtualhost.sh only works with Leopard. You can download an older version which works with previous versions of Mac OS X here:" | |
/bin/echo | |
/bin/echo "http://patrickgibson.com/news/andsuch/virtualhost.tgz" | |
/bin/echo | |
exit 1 | |
fi | |
# catch Ctrl-C | |
#trap 'cleanup' 2 | |
# restore it | |
#trap '' 2 | |
if [ -z $USER -o $USER = "root" ]; then | |
if [ ! -z $SUDO_USER ]; then | |
USER=$SUDO_USER | |
else | |
USER="" | |
/bin/echo "ALERT! Your root shell did not provide your username." | |
while : ; do | |
if [ -z $USER ]; then | |
while : ; do | |
/bin/echo -n "Please enter *your* username: " | |
read USER | |
if [ -d $HOME_PARTITION/$USER ]; then | |
break | |
else | |
/bin/echo "$USER is not a valid username." | |
fi | |
done | |
else | |
break | |
fi | |
done | |
fi | |
fi | |
if [ -z $DOC_ROOT_PREFIX ]; then | |
DOC_ROOT_PREFIX="${HOME_PARTITION}/$USER/Sites" | |
fi | |
if [ -z $SKIP_VERSION_CHECK ]; then | |
version_check | |
fi | |
usage() | |
{ | |
cat << __EOT | |
Usage: sudo virtualhost.sh <name> [<optional path>] | |
sudo virtualhost.sh --list | |
sudo virtualhost.sh --edit <name> | |
sudo virtualhost.sh --delete <name> | |
where <name> is the one-word name you'd like to use. (e.g. mysite) | |
Note that if "virtualhost.sh" is not in your PATH, you will have to write | |
out the full path to it: eg. /Users/$USER/Desktop/virtualhost.sh <name> | |
__EOT | |
exit 1 | |
} | |
if [ -z $1 ]; then | |
usage | |
else | |
if [ "$1" = "--delete" ]; then | |
if [ -z $2 ]; then | |
usage | |
else | |
VIRTUALHOST=`echo $2|sed -e 's/\///g'` | |
DELETE=0 | |
fi | |
elif [ "$1" = "--list" ]; then | |
if [ -d $APACHE_CONFIG/virtualhosts ]; then | |
echo "Listing virtualhosts found in $APACHE_CONFIG/virtualhosts" | |
echo | |
for i in $APACHE_CONFIG/virtualhosts/*; do | |
server_name=`grep -m1 "^\s*ServerName" $i | awk '{print $2}'` | |
doc_root=`grep -m1 "^\s*DocumentRoot" $i | awk '{print $2}' | sed -e 's/"//g'` | |
echo "http://${server_name}/ -> ${doc_root}" | |
done | |
else | |
echo "No virtualhosts have been set up yet." | |
fi | |
exit | |
elif [ "$1" = "--edit" ]; then | |
if [ -z $2 ]; then | |
usage | |
else | |
VIRTUALHOST=`echo $2|sed -e 's/\///g'` | |
edit_virtualhost | |
exit | |
fi | |
else | |
VIRTUALHOST=`echo $1|sed -e 's/\///g'` | |
FOLDER=`echo $2 | sed -e 's/\/*$//'` | |
fi | |
fi | |
# Test that the virtualhost name is valid (starts with a number or letter) | |
if ! /bin/echo $VIRTUALHOST | grep -q -E '^[A-Za-z0-9]+[A-Za-z0-9.-]+$' ; then | |
/bin/echo "Sorry, '$VIRTUALHOST' is not a valid host name to use. It must start with a letter or number." | |
exit 1 | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Delete the virtualhost if that's the requested action | |
# | |
if [ ! -z $DELETE ]; then | |
/bin/echo -n "- Deleting virtualhost, $VIRTUALHOST... Continue? [Y/n]: " | |
if [ -z "$BATCH_MODE" ]; then | |
read continue | |
else | |
continue="Y" | |
/bin/echo $continue | |
fi | |
case $continue in | |
n*|N*) exit | |
esac | |
if ! checkyesno ${SKIP_ETC_HOSTS}; then | |
/bin/echo -n " - Removing $VIRTUALHOST from /etc/hosts... " | |
cat /etc/hosts | grep -v $VIRTUALHOST > /tmp/hosts.tmp | |
if [ -s /tmp/hosts.tmp ]; then | |
mv /tmp/hosts.tmp /etc/hosts | |
fi | |
/bin/echo "done" | |
fi | |
if [ -e $APACHE_CONFIG/virtualhosts/$VIRTUALHOST ]; then | |
DOCUMENT_ROOT=`grep DocumentRoot $APACHE_CONFIG/virtualhosts/$VIRTUALHOST | awk '{print $2}' | tr -d '"'` | |
if [ -d $DOCUMENT_ROOT ]; then | |
/bin/echo -n " + Found DocumentRoot $DOCUMENT_ROOT. Delete this folder? [y/N]: " | |
if [ -z $BATCH_MODE ]; then | |
read resp | |
else | |
resp="n" | |
echo $resp | |
fi | |
case $resp in | |
y*|Y*) | |
/bin/echo -n " - Deleting folder... " | |
if rm -rf "${DOCUMENT_ROOT}" ; then | |
/bin/echo "done" | |
else | |
/bin/echo "Could not delete $DOCUMENT_ROOT" | |
fi | |
;; | |
esac | |
fi | |
LOG_FILES=`grep "CustomLog\|ErrorLog" $APACHE_CONFIG/virtualhosts/$VIRTUALHOST | awk '{print $2}' | tr -d '"'` | |
if [ ! -z "$LOG_FILES" ]; then | |
/bin/echo -n " + Delete logs? [y/N]: " | |
if [ -z BATCH_MODE ]; then | |
read resp | |
else | |
resp="n" | |
echo $resp | |
fi | |
case $resp in | |
y*|Y*) | |
/bin/echo -n " - Deleting logs... " | |
if rm -f ${LOG_FILES} ; then | |
/bin/echo "done" | |
else | |
/bin/echo "Could not delete $LOG_FILES" | |
fi | |
;; | |
esac | |
fi | |
/bin/echo -n " - Deleting virtualhost file, $APACHE_CONFIG/virtualhosts/$VIRTUALHOST... " | |
rm $APACHE_CONFIG/virtualhosts/$VIRTUALHOST | |
/bin/echo "done" | |
restart_apache | |
else | |
/bin/echo "- Virtualhost $VIRTUALHOST does not currently exist. Aborting..." | |
exit 1 | |
fi | |
exit | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Make sure $APACHE_CONFIG/httpd.conf is ready for virtual hosting... | |
# | |
# If it's not, we will: | |
# | |
# a) Backup the original to $APACHE_CONFIG/httpd.conf.original | |
# b) Add a NameVirtualHost 127.0.0.1 line | |
# c) Create $APACHE_CONFIG/virtualhosts/ (virtualhost definition files reside here) | |
# d) Add a line to include all files in $APACHE_CONFIG/virtualhosts/ | |
# e) Create a _localhost file for the default "localhost" virtualhost | |
# | |
if ! checkyesno ${SKIP_DOCUMENT_ROOT_CHECK} ; then | |
if ! grep -q -e "^DocumentRoot \"$DOC_ROOT_PREFIX\"" $APACHE_CONFIG/httpd.conf ; then | |
/bin/echo "httpd.conf's DocumentRoot does not point where it should." | |
/bin/echo -n "Do you with to set it to $DOC_ROOT_PREFIX? [Y/n]: " | |
if [ -z $BATCH_MODE ]; then | |
read response | |
else | |
response="n" | |
fi | |
case $response in | |
n*|N*) | |
/bin/echo "Okay, just re-run this script if you change your mind." | |
;; | |
*) | |
cat << __EOT | ed $APACHE_CONFIG/httpd.conf 1>/dev/null 2>/dev/null | |
/^DocumentRoot | |
i | |
# | |
. | |
j | |
+ | |
i | |
DocumentRoot "$DOC_ROOT_PREFIX" | |
. | |
w | |
q | |
__EOT | |
;; | |
esac | |
fi | |
fi | |
if ! grep -q -E "^#NameVirtualHost \*:$APACHE_PORT" $APACHE_CONFIG/httpd.conf ; then | |
/bin/echo "httpd.conf not ready for virtual hosting. Fixing..." | |
cp $APACHE_CONFIG/httpd.conf $APACHE_CONFIG/httpd.conf.original | |
/bin/echo "NameVirtualHost *:$APACHE_PORT" >> $APACHE_CONFIG/httpd.conf | |
if [ ! -d $APACHE_CONFIG/virtualhosts ]; then | |
mkdir $APACHE_CONFIG/virtualhosts | |
create_virtualhost localhost $DOC_ROOT_PREFIX | |
fi | |
/bin/echo "Include $APACHE_CONFIG/virtualhosts" >> $APACHE_CONFIG/httpd.conf | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Look for hosts created in Tiger | |
# | |
if [ -d /etc/httpd/virtualhosts ]; then | |
/bin/echo -n "Do you want to port the hosts you previously created in Tiger to the new system? [Y/n]: " | |
read PORT_HOSTS | |
case $PORT_HOSTS in | |
n*|N*) | |
/bin/echo "Okay, just re-run this script if you change your mind." | |
;; | |
*) | |
for host in `ls -1 /etc/httpd/virtualhosts | grep -v _localhost`; do | |
/bin/echo -n " + Creating $host... " | |
if ! checkyesno ${SKIP_ETC_HOSTS}; then | |
if ! host_exists $host ; then | |
/bin/echo "$IP_ADDRESS $host" >> /etc/hosts | |
/bin/echo "" >> /etc/hosts | |
fi | |
fi | |
docroot=`grep DocumentRoot /etc/httpd/virtualhosts/$host | awk '{print $2}'` | |
create_virtualhost $host $docroot | |
/bin/echo "done" | |
done | |
mv /etc/httpd/virtualhosts /etc/httpd/virtualhosts-ported | |
;; | |
esac | |
fi | |
if [ -z $WILDCARD_ZONE ]; then | |
/bin/echo -n "Create http://${VIRTUALHOST}:${APACHE_PORT}/? [Y/n]: " | |
else | |
/bin/echo -n "Create http://${VIRTUALHOST}.${WILDCARD_ZONE}:${APACHE_PORT}/? [Y/n]: " | |
fi | |
if [ -z "$BATCH_MODE" ]; then | |
read continue | |
else | |
continue="Y" | |
/bin/echo $continue | |
fi | |
case $continue in | |
n*|N*) exit | |
esac | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# If the host is not already defined in /etc/hosts, define it... | |
# | |
if ! checkyesno ${SKIP_ETC_HOSTS}; then | |
if ! host_exists $VIRTUALHOST ; then | |
/bin/echo "Creating a virtualhost for $VIRTUALHOST..." | |
/bin/echo -n "+ Adding $VIRTUALHOST to /etc/hosts... " | |
/bin/echo "$IP_ADDRESS $VIRTUALHOST" >> /etc/hosts | |
/bin/echo "" >> /etc/hosts | |
/bin/echo "done" | |
fi | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Ask the user where they would like to put the files for this virtual host | |
# if a document root hasn't been specified as a second argument. | |
# | |
if [ -z "$FOLDER" ]; then | |
/bin/echo "+ Looking in $DOC_ROOT_PREFIX for an existing document root to use..." | |
# See if we can find an appropriate folder | |
if ls -1 $DOC_ROOT_PREFIX | grep -q -e "^$VIRTUALHOST"; then | |
DOC_ROOT_FOLDER_MATCH=`ls -1 $DOC_ROOT_PREFIX | grep -e ^$VIRTUALHOST | head -n 1` | |
DOC_ROOT_FOLDER_MATCH="${DOC_ROOT_PREFIX}/${DOC_ROOT_FOLDER_MATCH}" | |
else | |
if [ -d $DOC_ROOT_PREFIX/$VIRTUALHOST ]; then | |
DOC_ROOT_FOLDER_MATCH="$DOC_ROOT_PREFIX/$VIRTUALHOST" | |
else | |
if [ $MAX_SEARCH_DEPTH -eq 0 ]; then | |
/bin/echo " searching with no maximum depth. This could take a really long time..." | |
else | |
/bin/echo " searching to a maximum directory depth of $MAX_SEARCH_DEPTH. This could take some time..." | |
fi | |
nested_match=`find $DOC_ROOT_PREFIX -maxdepth $MAX_SEARCH_DEPTH -type d -name $VIRTUALHOST 2>/dev/null` | |
if [ -n "$nested_match" ]; then | |
if [ -d $nested_match ]; then | |
DOC_ROOT_FOLDER_MATCH=$nested_match | |
fi | |
else | |
DOC_ROOT_FOLDER_MATCH="$DOC_ROOT_PREFIX/$VIRTUALHOST" | |
fi | |
fi | |
fi | |
/bin/echo -n " - Use $DOC_ROOT_FOLDER_MATCH as the virtualhost folder? [Y/n] " | |
if [ -z "$BATCH_MODE" ]; then | |
read resp | |
else | |
resp="Y" | |
echo $resp | |
fi | |
case $resp in | |
n*|N*) | |
while : ; do | |
if [ -z "$FOLDER" ]; then | |
/bin/echo -n " - Enter new folder name (located in $DOC_ROOT_PREFIX): " | |
read response | |
FOLDER=$DOC_ROOT_PREFIX/$response | |
else | |
break | |
fi | |
done | |
;; | |
*) | |
if [ -d $DOC_ROOT_FOLDER_MATCH/public ]; then | |
/bin/echo -n " - Found a public folder suggesting a Rails/Rack project. Use as DocumentRoot? [Y/n] " | |
if [ -z "$BATCH_MODE" ]; then | |
read response | |
else | |
response="Y" | |
echo $response | |
fi | |
if checkyesno ${response} ; then | |
FOLDER=$DOC_ROOT_FOLDER_MATCH/public | |
else | |
FOLDER=$DOC_ROOT_FOLDER_MATCH | |
fi | |
elif [ -d $DOC_ROOT_FOLDER_MATCH/web ]; then | |
/bin/echo -n " - Found a web folder suggesting a Symfony project. Use as DocumentRoot? [Y/n] " | |
if [ -z "$BATCH_MODE" ]; then | |
read response | |
else | |
response="Y" | |
echo $response | |
fi | |
if checkyesno ${response} ; then | |
FOLDER=$DOC_ROOT_FOLDER_MATCH/web | |
else | |
FOLDER=$DOC_ROOT_FOLDER_MATCH | |
fi | |
else | |
FOLDER=$DOC_ROOT_FOLDER_MATCH | |
fi | |
;; | |
esac | |
fi | |
# Create the folder if we need to... | |
if [ ! -d "${FOLDER}" ]; then | |
/bin/echo -n " + Creating folder ${FOLDER}... " | |
su $USER -c "mkdir -p $FOLDER" | |
# Error out if the folder was not created. | |
if [ ! -d "${FOLDER}" ]; then | |
/bin/echo " # Fatal: could not create ${FOLDER}" | |
exit 1 | |
fi | |
/bin/echo "done" | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# See if a custom log should be used (requested by david.kerns, Issue #7) | |
# | |
if checkyesno ${PROMPT_FOR_LOGS}; then | |
/bin/echo -n " - Enable custom server access and error logs in $VIRTUALHOST/logs? [y/N] " | |
if [ -z "$BATCH_MODE" ]; then | |
read resp | |
else | |
resp="Y" | |
fi | |
case $resp in | |
y*|Y*) | |
log="1" | |
LOG_FOLDER="$FOLDER/logs" | |
;; | |
*) | |
log="" | |
;; | |
esac | |
elif checkyesno ${ALWAYS_CREATE_LOGS}; then | |
log="1" | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Create a default index.html if there isn't already one there | |
# | |
if checkyesno ${CREATE_INDEX}; then | |
if [ ! -e "${FOLDER}/index.html" -a ! -e "${FOLDER}/index.php" ]; then | |
/bin/echo -n "+ Creating 'index.html'... " | |
cat << __EOF >"${FOLDER}/index.html" | |
<html> | |
<head> | |
<title>Welcome to $VIRTUALHOST</title> | |
<style type="text/css"> | |
body, div, td { font-family: "Lucida Grande"; font-size: 12px; color: #666666; } | |
b { color: #333333; } | |
.indent { margin-left: 10px; } | |
</style> | |
</head> | |
<body link="#993300" vlink="#771100" alink="#ff6600"> | |
<table border="0" width="100%" height="95%"><tr><td align="center" valign="middle"> | |
<div style="width: 500px; background-color: #eeeeee; border: 1px dotted #cccccc; padding: 20px; padding-top: 15px;"> | |
<div align="center" style="font-size: 14px; font-weight: bold;"> | |
Congratulations! | |
</div> | |
<div align="left"> | |
<p>If you are reading this in your web browser, then the only logical conclusion is that the <b><a href="http://$VIRTUALHOST:$APACHE_PORT/">http://$VIRTUALHOST:$APACHE_PORT/</a></b> virtualhost was set up correctly. :)</p> | |
<p>You can find the configuration file for this virtual host in:<br> | |
<table class="indent" border="0" cellspacing="3"> | |
<tr> | |
<td><img src="/icons/script.gif" width="20" height="22" border="0"></td> | |
<td><b>$APACHE_CONFIG/virtualhosts/$VIRTUALHOST</b></td> | |
</tr> | |
</table> | |
</p> | |
<p>You will need to place all of your website files in:<br> | |
<table class="indent" border="0" cellspacing="3"> | |
<tr> | |
<td><img src="/icons/dir.gif" width="20" height="22" border="0"></td> | |
<td><b><a href="file://$FOLDER">$FOLDER</b></a></td> | |
</tr> | |
</table> | |
</p> | |
<p>For the latest version of this script, tips, comments, <span style="font-size: 10px; color: #999999;">donations,</span> etc. visit:<br> | |
<table class="indent" border="0" cellspacing="3"> | |
<tr> | |
<td><img src="/icons/forward.gif" width="20" height="22" border="0"></td> | |
<td><b><a href="http://patrickg.com/virtualhost">http://patrickg.com/virtualhost</a></b></td> | |
</tr> | |
</table> | |
</p> | |
</div> | |
</div> | |
</td></tr></table> | |
</body> | |
</html> | |
__EOF | |
/bin/echo "done" | |
chown $USER "${FOLDER}/index.html" | |
fi | |
fi | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Create a default virtualhost file | |
# | |
/bin/echo -n "+ Creating virtualhost file... " | |
create_virtualhost $VIRTUALHOST "${FOLDER}" $log | |
/bin/echo "done" | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Restart apache for the changes to take effect | |
# | |
if [ -x /usr/bin/dscacheutil ]; then | |
/bin/echo -n "+ Flushing cache... " | |
dscacheutil -flushcache | |
/bin/echo "done" | |
dscacheutil -q host | grep -q $VIRTUALHOST | |
sleep 1 | |
fi | |
restart_apache | |
cat << __EOF | |
http://$VIRTUALHOST:$APACHE_PORT/ is set up and ready for use. | |
__EOF | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Launch the new URL in the browser | |
# | |
if [ -z $SKIP_BROWSER ]; then | |
/bin/echo -n "Launching virtualhost... " | |
sleep 1 | |
curl --silent http://$VIRTUALHOST:$APACHE_PORT/ 2>&1 >/dev/null | |
open_command "http://$VIRTUALHOST:$APACHE_PORT/" | |
/bin/echo "done" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment