You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2015/03/26 14:41:07 UTC
svn commit: r8441 - in /release/vcl: vcl-install-2.4.1.sh vcl-install.sh
Author: jfthomps
Date: Thu Mar 26 13:41:07 2015
New Revision: 8441
Log:
removing vcl-install.sh and adding vcl-install-2.4.1.sh so that vcl-install.sh can be changed to a symlink to point to the latest installer
Added:
release/vcl/vcl-install-2.4.1.sh (with props)
Removed:
release/vcl/vcl-install.sh
Added: release/vcl/vcl-install-2.4.1.sh
==============================================================================
--- release/vcl/vcl-install-2.4.1.sh (added)
+++ release/vcl/vcl-install-2.4.1.sh Thu Mar 26 13:41:07 2015
@@ -0,0 +1,918 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+function print_break() {
+ echo "------------------------------------------------------------------------------------------"
+}
+
+function random_string() {
+ local string_length
+ if [[ -n $1 ]]; then string_length=$1; else string_length=8; fi
+ random_string=</dev/urandom tr -dc A-Za-z0-9 | head -c $string_length
+ echo $random_string
+}
+
+function help() {
+ name=`basename $0`
+ echo ""
+ echo "$name [-h|--help] [-d|--database] [-w|--web] [-m|--managementnode]"
+ echo -e "\t\t[--dbhost <hostname> --dbpass <password>] "
+ echo -e "\t\t[--mnhost <hostname>] [--webhost <hostname>]"
+ echo ""
+ echo -e "\t-d|--database - install database server components"
+ echo -e "\t\t--dbpass, --mnhost, --mnip, --webhost, and --adminpass must also be specified"
+ echo ""
+ echo -e "\t-w|--web - install web server components"
+ echo -e "\t\t--dbhost and --dbpass must also be specified"
+ echo ""
+ echo -e "\t-m|--managementnode - install management node (vcld) components"
+ echo -e "\t\t--dbhost, --dbpass, and --adminpass must also be specified"
+ echo ""
+ echo -e "\t--dbhost <hostname> - hostname of database server (default=localhost)"
+ echo ""
+ echo -e "\t--dbpass <password> - password VCL will use for accessing"
+ echo -e "\t\tdatabase (default=random)"
+ echo ""
+ echo -e "\t--mnhost <hostname> - hostname of management node (default=localhost)"
+ echo ""
+ echo -e "\t--webhost <hostname> - hostname of web server (default=localhost)"
+ echo ""
+ echo -e "\t--adminpass <password> - password for VCL admin user"
+ echo ""
+ echo "If no arguments supplied, all components will be install and you"
+ echo "will be prompted for any required additional information."
+ echo ""
+ exit 2
+}
+
+args=$(getopt -q -o dwmh -l database,web,managementnode,help,dbhost:,dbpass:,mnhost:,mnip:,webhost:,adminpass:,rc: -n $0 -- "$@")
+
+if [ $? -ne 0 ]; then help; fi
+
+eval set -- "$args"
+
+# ------------------------- variables -------------------------------
+VCL_VERSION=2.4.1
+DB_USERNAME=vcluser
+ADMIN_PASSWORD=
+
+DB_HOST=localhost
+DB_PASSWORD=`random_string 15`
+MN_HOST=localhost
+WEB_HOST=localhost
+CRYPTKEY=`random_string 20`
+PEMKEY=`random_string 20`
+ARCHIVE=apache-VCL-$VCL_VERSION.tar.bz2
+ARCHIVEURLPATH="http://vcl.apache.org/downloads/download.cgi?action=download&filename=%2Fvcl%2F"
+SIGPATH="http://www.apache.org/dist/vcl/"
+
+DODB=0
+DOWEB=0
+DOMN=0
+DOALL=1
+dbhostdefault=1
+dbpassdefault=1
+mnhostdefault=1
+mnipdefault=1
+adminpassdefault=1
+webhostdefault=1
+DODHCP=no
+dorc=0
+
+while true; do
+ case "$1" in
+ -d|--database)
+ DODB=1
+ DOALL=0
+ shift
+ ;;
+ -w|--web)
+ DOWEB=1
+ DOALL=0
+ shift
+ ;;
+ -m|--managementnode)
+ DOMN=1
+ DOALL=0
+ shift
+ ;;
+ --dbhost)
+ DB_HOST=$2
+ dbhostdefault=0
+ shift 2
+ ;;
+ --dbpass)
+ DB_PASSWORD=$2
+ dbpassdefault=0
+ shift 2
+ ;;
+ --mnhost)
+ MN_HOST=$2
+ mnhostdefault=0
+ shift 2
+ ;;
+ --mnip)
+ PUBIP=$2
+ mnipdefault=0
+ shift 2
+ ;;
+ --webhost)
+ WEB_HOST=$2
+ webhostdefault=0
+ shift 2
+ ;;
+ --adminpass)
+ ADMIN_PASSWORD=$2
+ adminpassdefault=0
+ shift 2
+ ;;
+ --rc)
+ RC=$2
+ dorc=1
+ shift 2
+ ;;
+ -h|--help)
+ help
+ exit 1
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ echo "unknown option: $1"
+ exit 1
+ ;;
+ esac
+done
+
+if [[ $dorc -eq 1 ]]; then
+ if [[ ! $RC =~ ^[0-9]+$ ]]; then
+ echo ""
+ echo "Invalid value specified for --rc=, must be a number"
+ echo ""
+ exit 1
+ fi
+ VCL_VERSION=${VCL_VERSION}-RC$RC
+ ARCHIVE=apache-VCL-$VCL_VERSION.tar.bz2
+ ARCHIVEURLPATH="http://people.apache.org/~jfthomps/apache-VCL-${VCL_VERSION}/"
+ SIGPATH="http://people.apache.org/~jfthomps/apache-VCL-${VCL_VERSION}/"
+fi
+
+if [[ $DOALL -eq 1 ]]; then
+ DODB=1
+ DOWEB=1
+ DOMN=1
+fi
+
+if [[ $DODB -eq 1 && $DOWEB -eq 1 && $DOMN -eq 1 ]]; then
+ DOALL=1
+fi
+
+if [[ $DODB -eq 1 && ($DOWEB -eq 0 || $DOMN -eq 0) && ($dbpassdefault -eq 1 || $mnhostdefault -eq 1 || $mnipdefault -eq 1 || $webhostdefault -eq 1 || $adminpassdefault -eq 1) ]]; then
+ echo ""
+ echo "Error missing arguments:"
+ echo ""
+ echo -e "\t-d or --database was specified but one of --dbpass, --mnhost,"
+ echo -e "\t--mnip, --webhost, or --adminpass was missing"
+ echo ""
+ exit 1
+fi
+
+if [[ $DOWEB -eq 1 && ($DODB -eq 0 || $DOMN -eq 0) && ($dbhostdefault -eq 1 || $dbpassdefault -eq 1) ]]; then
+ echo ""
+ echo "Error missing arguments:"
+ echo ""
+ echo -e "\t-w or --web was specified but one of --dbhost or --dbpass was missing"
+ echo ""
+ exit 1
+fi
+
+if [[ $DOMN -eq 1 && ($DODB -eq 0 || $DOWEB -eq 0) && ($dbhostdefault -eq 1 || $dbpassdefault -eq 1 || $adminpassdefault -eq 1) ]]; then
+ echo ""
+ echo "Error missing arguments:"
+ echo ""
+ echo -e "\t-m or --managementnode was specified but one of --dbhost,"
+ echo -e "\t--dbpass, or --adminpass was missing"
+ echo ""
+ exit 1
+fi
+
+if [[ $adminpassdefault -eq 0 && ($ADMIN_PASSWORD = ^[[:space:]]+$ || $ADMIN_PASSWORD = "") ]]; then
+ echo ""
+ echo "Invalid value for admin password. Admin password cannot be empty"
+ echo "or contain only whitespace."
+ echo ""
+ exit 1
+fi
+
+# ------------------------- check for being root -----------------------------
+who=$(whoami)
+if [[ $who != "root" ]]; then
+ echo "You must be root to run this script."
+ exit 1
+fi
+
+WORKPATH=$(pwd)
+
+if [[ -f NOTICE && -f LICENSE && -d managementnode && -d web && -d mysql ]]; then
+ WORKPATH=$(dirname `pwd`)
+fi
+
+# ------------------- checks for existing installation -----------------------
+echo ""
+echo "This script will exit if any existing parts of VCL are found. If they exist, you"
+echo "must manually clean them up before using this script to install VCL. Checking"
+echo "for existing VCL components..."
+echo ""
+# database
+if [[ $DODB -eq 1 ]]; then
+ mysql -e "use vcl;" &> /dev/null
+ if [ $? -eq 0 ]; then echo "Existing vcl database found, exiting"; exit 1; fi
+fi
+# web code
+if [[ $DOWEB -eq 1 ]]; then
+ if [ -d /var/www/html/vcl ]; then echo "Existing web code found at /var/www/html/vcl, exiting"; exit 1; fi
+fi
+# management code
+if [[ $DOMN -eq 1 ]]; then
+ if [ -d /usr/local/vcl ]; then echo "Existing management node code found at /usr/local/vcl, exiting"; exit 1; fi
+fi
+echo "no existing VCL components found"
+
+# ------------------------------ NOTICES -------------------------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break
+ echo ""
+ echo "NOTICE: Later in this process, you will be prompted to download and install"
+ echo "Linux packages and Perl modules. At that time, if you agree with the license"
+ echo "terms, enter YES to install them. Otherwise, enter NO to exit and abort the "
+ echo "installation."
+ echo ""
+ echo "(Press Enter to continue)"
+ read tmp
+fi
+
+# -------------------------- admin password ----------------------------------
+if [[ $DOALL -eq 1 ]]; then
+ print_break
+ echo ""
+ echo "Enter the password you would like to use for the VCL admin user. This can be changed"
+ echo "later by running '/usr/local/vcl/bin/vcld --setup'"
+ echo -n "Admin Password: "
+ IFS= read ADMIN_PASSWORD
+
+ while [[ $ADMIN_PASSWORD = ^[[:space:]]+$ || $ADMIN_PASSWORD = "" ]]; do
+ echo "Password cannot be empty or contain only whitespace. Please enter the password."
+ echo -n "Admin Password: "
+ IFS= read ADMIN_PASSWORD
+ done
+fi
+
+# --------------------- public/private address selection ---------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break;
+ echo ""
+ echo "VCL requires two networks to operate (referred to as public and private"
+ echo "networks). The following network adapters and addresses were found. Please"
+ echo "enter the number next to the adapter/address you would like to use for the"
+ echo "specified network."
+ echo ""
+ netpubpriv=1
+
+ ifcnt=0
+ while read line; do
+ ((ifcnt++))
+ addr[$ifcnt]=$(echo $line | awk '{print $2}' | awk -F'/' '{print $1}')
+ if [[ ${addr[$ifcnt]} = '' ]]; then echo "Error: Failed to parse network address data"; exit 1; fi
+ if[$ifcnt]=$(echo $line | awk '{print $(NF)}')
+ if [[ ${if[$ifcnt]} = '' ]]; then echo "Error: Failed to parse network address data"; exit 1; fi
+ done < <(ip addr list | grep inet | grep -v inet6)
+
+ i=0
+ while [[ $i < $ifcnt ]]; do
+ ((i++))
+ echo "$i: ${if[$i]} ${addr[$i]}"
+ done
+ echo ""
+ echo -n "Private adapter/address: "
+ read privnum
+ while [[ ! $privnum =~ ^[0-9]+$ || $privnum < 1 || $privnum > $ifcnt ]]; do
+ echo "Invalid selection. Please enter the number next to the adapter/address you would"
+ echo "like to use for the private network."
+ echo -n "Private adapter/address: "
+ read privnum
+ done
+ PRIVIP=${addr[$privnum]}
+ echo ""
+
+ i=0
+ while [[ $i < $ifcnt ]]; do
+ ((i++))
+ echo "$i: ${if[$i]} ${addr[$i]}"
+ done
+ echo ""
+ echo -n "Public adapter/address: "
+ read pubnum
+ while [[ ! $pubnum =~ ^[0-9]+$ || $pubnum < 1 || $pubnum > $ifcnt ]]; do
+ echo "Invalid selection. Please enter the number next to the adapter/address you would"
+ echo "like to use for the public network."
+ echo -n "Public adapter/address: "
+ read pubnum
+ done
+ PUBIP=${addr[$pubnum]}
+ if [[ $PUBIP = "" || $PRIVIP = "" ]]; then echo "Error: Failed to determine network addresses"; exit 1; fi
+ echo ""
+ echo "Private address selected: $PRIVIP"
+ echo "Public address selected: $PUBIP"
+fi
+
+# --------------------- prompt for installing dhcpd ----------------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break
+ echo "This script can install and configure dhcpd for you. VCL requires that VMs"
+ echo "always have the same private IP address assigned to them via dhcp. If you prefer"
+ echo "to install and configure dhcpd manually, answer NO to the following question."
+ echo "If you enter NO, you will have to set up dhcpd *manually* for VCL to work."
+ echo ""
+ echo -n "Install dhcpd? [yes] "
+ read DODHCP
+ DODHCP=$(echo $DODHCP | tr '[:upper:]' '[:lower:]')
+ if [[ $DODHCP = '' ]]; then DODHCP=yes; fi
+
+ while [[ ! $DODHCP =~ ^(yes|no)$ ]]; do
+ echo -n "Please enter 'yes' or 'no': [yes] "
+ read DODHCP
+ DODHCP=$(echo $DODHCP | tr '[:upper:]' '[:lower:]')
+ if [[ $DODHCP = '' ]]; then DODHCP=yes; fi
+ done
+
+ if [[ $DODHCP = 'yes' ]] && grep -q $PRIVIP /etc/dhcp/dhcpd.conf &> /dev/null; then
+ echo ""
+ echo "/etc/dhcp/dhcpd.conf appears to have been configured for VCL already, exiting"
+ exit 1
+ fi
+ if [[ $DODHCP = 'yes' ]] && grep -q ${if[$privnum]} /etc/sysconfig/dhcpd &> /dev/null; then
+ echo ""
+ echo "/etc/sysconfig/dhcpd appears to have been configured for VCL already, exiting"
+ exit 1
+ fi
+fi
+
+# ------------------------- install basic required packages --------------------
+print_break
+echo "Installing Linux packages..."
+if [[ $DOMN -eq 1 ]]; then
+ yum -q -y install openssh-clients wget perl
+ if [ $? -ne 0 ]; then "Error: Failed to install required linux packages (openssh-client, wget, and perl)"; exit 1; fi;
+else
+ yum -q -y install openssh-clients wget
+ if [ $? -ne 0 ]; then "Error: Failed to install required linux packages (openssh-client and wget)"; exit 1; fi;
+fi
+
+# ------------------------------------ functions -------------------------------
+
+function set_localauth_password() {
+ local username=$1
+ local password=$2
+
+ #echo "Setting localauth password..."
+ #echo "Username: $username"
+ #echo "Password: $password"
+
+ salt=$(random_string 8)
+ #echo "Password salt: $salt"
+ passhash=$(echo -n $password$salt | sha1sum | awk '{print $1}')
+ #echo "Password hash: $passhash"
+ mysql -e "UPDATE localauth SET passhash = '$passhash', salt = '$salt', lastupdated = NOW() WHERE localauth.userid = (SELECT id FROM user WHERE unityid = '$username');" vcl
+ if [ $? -ne 0 ]; then
+ echo "Error: Failed to set $username password to '$password'";
+ exit 1;
+ else
+ echo "Successfully set $username password to '$password'"
+ echo
+ fi;
+}
+
+function download_archive() {
+ wget -q "${ARCHIVEURLPATH}${ARCHIVE}" -O $ARCHIVE
+ if [ $? -ne 0 ]; then generic_error "failed to download $ARCHIVE from $ARCHIVEURLPATH"; exit 1; fi
+}
+
+function validate_archive_sha1() {
+ echo "Downloading sha1 file for $VCL_VERSION..."
+ /bin/rm -f $ARCHIVE.sha1
+ wget -q $SIGPATH$ARCHIVE.sha1
+ echo "validating $ARCHIVE"
+ sha1sum -c $ARCHIVE.sha1
+ return $?
+}
+
+function validate_archive_gpg() {
+ echo "Downloading GPG file for $VCL_VERSION..."
+ /bin/rm -f $ARCHIVE.asc
+ wget -q $SIGPATH$ARCHIVE.asc
+ echo "Downloading KEYS file for ASF VCL..."
+ wget -q https://svn.apache.org/repos/asf/vcl/KEYS
+ echo "Importing KEYS..."
+ gpg -q --import KEYS
+ /bin/rm -f KEYS
+ echo "validating $ARCHIVE..."
+ gpg -q --verify $ARCHIVE.asc 2>&1 | grep 'Good signature'
+ return $?
+}
+
+function generic_error() {
+ if [[ -n $1 ]]; then
+ echo "$1; correct any errors listed above and try again"
+ else
+ echo "installation failed; correct any errors listed above and try again"
+ fi
+}
+
+# ------------------- download/validate arvhice ---------------------
+print_break
+cd $WORKPATH
+if [[ ! -f $ARCHIVE ]]; then
+ echo "Downloading VCL $VCL_VERSION..."
+ download_archive
+ validate_archive_sha1
+ if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+ validate_archive_gpg
+ if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+else
+ dir=`pwd`
+ echo "archive for $VCL_VERSION found at $dir/$ARCHIVE"
+ validate_archive_sha1
+ if [ $? -ne 0 ]; then
+ echo "failed to validate $ARCHIVE; downloading again..."
+ /bin/mv -f $ARCHIVE $ARCHIVE.old
+ download_archive
+ validate_archive_sha1
+ if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+ validate_archive_gpg
+ if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+ else
+ validate_archive_gpg
+ if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+ fi;
+fi
+
+# ------------------------ extract archive ---------------------------
+echo "Extracting $ARCHIVE"
+tar -xf $ARCHIVE
+if [ $? -ne 0 ]; then generic_error "failed to extract $ARCHIVE"; exit 1; fi;
+
+# ------------------- run install_perl_libs.pl ------------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break
+ echo "Installing Linux and PERL system requirements (this takes a while)"
+ sleep 1
+ yum -q -y install perl-CPAN
+ if [ $? -ne 0 ]; then echo "Error: Failed to install perl-CPAN"; exit 1; fi;
+ perl apache-VCL-$VCL_VERSION/managementnode/bin/install_perl_libs.pl
+ rc=$?
+ if [ $rc -eq 2 ]; then
+ echo "License terms not accepted; aborting installation"
+ exit 2
+ elif [ $rc -ne 0 ]; then
+ generic_error "Failed to install system requirements"
+ exit 1
+ fi
+fi
+
+# ---------------------- install mysql/mariadb -------------------------
+if [[ $DODB -eq 1 ]]; then
+ print_break
+ rpm -q mysql-server &> /dev/null
+ if [ $? -ne 0 ]; then
+ rpm -q mariadb-server &> /dev/null
+ if [ $? -ne 0 ]; then
+ echo "Installing MySQL/MariaDB Server..."
+ yum -q search mysql-server | grep -q '^mysql-server'
+ if [ $? -ne 0 ]; then
+ yum -q search mariadb-server | grep -q '^mariadb-server'
+ if [ $? -ne 0 ]; then
+ echo "No mysql-server or mariadb-server packages found by yum"
+ exit 1
+ else
+ yum -q -y install mariadb-server
+ if [ $? -ne 0 ]; then generic_error "Failed to install mariadb-server"; exit 1; fi;
+ echo "setting MariaDB to start on boot"
+ /sbin/chkconfig mariadb on
+ if [ $? -ne 0 ]; then generic_error "Failed to set mariadb-server to start at boot"; exit 1; fi;
+ /sbin/service mariadb start
+ if [ $? -ne 0 ]; then generic_error "Failed to start mariadb-server"; exit 1; fi;
+ fi
+ else
+ yum -q -y install mysql-server
+ if [ $? -ne 0 ]; then generic_error "Failed to install mysql-server"; exit 1; fi;
+ echo "setting MySQL to start on boot"
+ /sbin/chkconfig mysqld on
+ if [ $? -ne 0 ]; then generic_error "Failed to set mysql-server to start at boot"; exit 1; fi;
+ /sbin/service mysqld start
+ if [ $? -ne 0 ]; then generic_error "Failed to start mysql-server"; exit 1; fi;
+ fi
+ else
+ echo "MariaDB server already installed"
+ echo "setting MariaDB to start on boot"
+ /sbin/chkconfig mariadb on
+ if [ $? -ne 0 ]; then generic_error "Failed to set mariadb-server to start at boot"; exit 1; fi;
+ /sbin/service mariadb start
+ if [ $? -ne 0 ]; then generic_error "Failed to start mariadb-server"; exit 1; fi;
+ fi
+ else
+ echo "MySQL server already installed"
+ echo "setting MySQL to start on boot"
+ /sbin/chkconfig mysqld on
+ if [ $? -ne 0 ]; then generic_error "Failed to set mysql-server to start at boot"; exit 1; fi;
+ /sbin/service mysqld start
+ if [ $? -ne 0 ]; then generic_error "Failed to start mysql-server"; exit 1; fi;
+ fi
+fi
+
+# ---------------------- install httpd and php -------------------------
+if [[ $DOWEB -eq 1 ]]; then
+ print_break
+ echo "Installing httpd and php components..."
+ yum -q -y install httpd php mod_ssl php php-gd php-mysql php-xml php-xmlrpc php-ldap sendmail php-mbstring
+ if [ $? -ne 0 ]; then generic_error "Failed to install httpd"; exit 1; fi;
+ echo "setting httpd to start on boot"
+ /sbin/chkconfig httpd on
+ if [ $? -ne 0 ]; then generic_error "Failed to set httpd to start at boot"; exit 1; fi;
+ /sbin/service httpd start
+ if [ $? -ne 0 ]; then generic_error "Failed to start httpd"; exit 1; fi;
+fi
+
+# ------------------------- set up firewall ----------------------------
+if [[ $DODB -eq 1 || $DOWEB -eq 1 ]]; then
+ print_break
+ webports=0
+ dbport=0
+ if [[ $DODB -eq 1 && $DOWEB -eq 1 && $DOMN -eq 0 ]]; then
+ echo "Opening TCP ports 80, 443, and 3306..."
+ webports=1
+ dbport=1
+ elif [[ $DOWEB -eq 1 ]]; then
+ echo "Opening TCP ports 80 and 443..."
+ webports=1
+ elif [[ $DODB -eq 1 ]]; then
+ echo "Opening TCP port 3306..."
+ dbport=1
+ fi
+
+ if [[ $webports -eq 1 || $dbport -eq 1 ]]; then
+ if [[ -x /bin/firewall-cmd ]] && /bin/firewall-cmd -q --state; then
+ if [[ $webports -eq 1 ]]; then
+ /bin/firewall-cmd --zone=public --add-service=http --permanent
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 80"; exit 1; fi;
+ /bin/firewall-cmd --zone=public --add-service=https --permanent
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 443"; exit 1; fi;
+ fi
+ if [[ $dbport -eq 1 ]]; then
+ if [[ $DOWEB -eq 0 ]]; then
+ /bin/firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="$WEB_HOST" service name="mysql" accept"
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 3306 for $WEB_HOST"; exit 1; fi;
+ fi
+ if [[ $DOMN -eq 0 ]]; then
+ /bin/firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="$MN_HOST" service name="mysql" accept"
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 3306 for $MN_HOST"; exit 1; fi;
+ fi
+ fi
+ /bin/firewall-cmd --reload
+ if [ $? -ne 0 ]; then echo "Error: Failed reload firewall"; exit 1; fi;
+ elif [[ -x /sbin/iptables ]]; then
+ if [[ $webports -eq 1 ]]; then
+ if ! /sbin/iptables -nL | grep 80 | grep ACCEPT; then
+ /sbin/iptables -I INPUT 1 -m state --state NEW,RELATED,ESTABLISHED -m tcp -p tcp -j ACCEPT --dport 80
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 80"; exit 1; fi;
+ fi
+ if ! /sbin/iptables -nL | grep 443 | grep ACCEPT; then
+ /sbin/iptables -I INPUT 1 -m state --state NEW,RELATED,ESTABLISHED -m tcp -p tcp -j ACCEPT --dport 443
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 443"; exit 1; fi;
+ fi
+ fi
+ if [[ $dbport -eq 1 ]]; then
+ if [[ $DOWEB -eq 0 ]] && ! /sbin/iptables -L | grep mysql | grep $WEB_HOST | grep ACCEPT; then
+ /sbin/iptables -I INPUT 1 -m state --state NEW,RELATED,ESTABLISHED -s $WEB_HOST -m tcp -p tcp -j ACCEPT --dport 3306
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 3306 for $WEB_HOST"; exit 1; fi;
+ fi
+ if [[ $DOMN -eq 0 ]] && ! /sbin/iptables -L | grep mysql | grep $MN_HOST | grep ACCEPT; then
+ /sbin/iptables -I INPUT 1 -m state --state NEW,RELATED,ESTABLISHED -s $MN_HOST -m tcp -p tcp -j ACCEPT --dport 3306
+ if [ $? -ne 0 ]; then echo "Error: Failed to set firewall to allow port 3306 for $MN_HOST"; exit 1; fi;
+ fi
+ fi
+ /sbin/iptables-save > /etc/sysconfig/iptables
+ if [ $? -ne 0 ]; then echo "Error: Failed to save iptables configuration"; exit 1; fi;
+ else
+ echo "Warning: Failed to detect firewall system. You will need to ensure "
+ if [[ $DODB -eq 1 && $DOWEB -eq 1 ]]; then
+ echo -n "ports 80, 443, and 3306 are "
+ elif [[ $DODB -eq 1 ]]; then
+ echo -n "port 3306 is "
+ elif [[ $DOWEB -eq 1 ]]; then
+ echo -n "ports 80 and 443 are "
+ fi
+ echo "allowed through your firewall."
+ echo ""
+ echo "(Press ENTER to continue)"
+ read tmp
+ fi
+ fi
+fi
+
+# ------------------------- check selinux ----------------------------
+if [[ $DOWEB -eq 1 && -x /usr/sbin/getenforce ]]; then
+ if /usr/sbin/getenforce | grep -q -i enforcing; then
+ print_break
+ echo "Configuring SELinux to allow httpd to make network connections..."
+ /usr/sbin/setsebool -P httpd_can_network_connect=1
+ fi
+fi
+
+# ---------------------- create/set up vcl database ------------------------
+if [[ $DODB -eq 1 ]]; then
+ print_break
+ echo "Creating VCL database..."
+ mysql -e "DROP DATABASE IF EXISTS vcl;"
+ mysql -e "CREATE DATABASE vcl;"
+ if [ $? -ne 0 ]; then generic_error "Failed to create VCL database"; exit 1; fi;
+ if [[ $DOMN -eq 1 || $DOWEB -eq 1 ]]; then
+ mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE TEMPORARY TABLES ON vcl.* TO '$DB_USERNAME'@'localhost' IDENTIFIED BY '$DB_PASSWORD';"
+ if [ $? -ne 0 ]; then generic_error "Failed to create VCL database user"; exit 1; fi;
+ fi
+ if [[ $MN_HOST != "localhost" ]]; then
+ mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE TEMPORARY TABLES ON vcl.* TO '$DB_USERNAME'@'$MN_HOST' IDENTIFIED BY '$DB_PASSWORD';"
+ if [ $? -ne 0 ]; then generic_error "Failed to create VCL database user"; exit 1; fi;
+ fi
+ if [[ $WEB_HOST != "localhost" ]]; then
+ mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE TEMPORARY TABLES ON vcl.* TO '$DB_USERNAME'@'$WEB_HOST' IDENTIFIED BY '$DB_PASSWORD';"
+ if [ $? -ne 0 ]; then generic_error "Failed to create VCL database user"; exit 1; fi;
+ fi
+ mysql vcl < $WORKPATH/apache-VCL-$VCL_VERSION/mysql/vcl.sql
+ if [ $? -ne 0 ]; then generic_error "Failed to initialize VCL database"; exit 1; fi;
+fi
+
+# ------------------------- copy web code in place -------------------------
+if [[ $DOWEB -eq 1 ]]; then
+ print_break
+ echo "Installing VCL web code..."
+ /bin/cp -r $WORKPATH/apache-VCL-$VCL_VERSION/web/ /var/www/html/vcl-$VCL_VERSION
+ if [ $? -ne 0 ]; then generic_error "Failed to install VCL web code"; exit 1; fi;
+ ln -s /var/www/html/vcl-$VCL_VERSION /var/www/html/vcl
+ if [ $? -ne 0 ]; then generic_error "Failed to install VCL web code"; exit 1; fi;
+ chown apache /var/www/html/vcl/.ht-inc/maintenance
+fi
+
+# ---------------------------- configure web code --------------------------
+if [[ $DOWEB -eq 1 ]]; then
+ echo "Configuring secrets.php..."
+ /bin/cp -f /var/www/html/vcl/.ht-inc/secrets-default.php /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to create secrets.php"; exit 1; fi;
+ sed -i -r -e "s/(vclhost\s+=\s+).*;/\1'$DB_HOST';/" /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure secrets.php"; exit 1; fi;
+ sed -i -r -e "s/(vclusername\s+=\s+).*;/\1'$DB_USERNAME';/" /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure secrets.php"; exit 1; fi;
+ sed -i -r -e "s/(vclpassword\s+=\s+).*;/\1'$DB_PASSWORD';/" /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure secrets.php"; exit 1; fi;
+ sed -i -r -e "s/(cryptkey\s+=\s+).*;/\1'$CRYPTKEY';/" /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure secrets.php"; exit 1; fi;
+ sed -i -r -e "s/(pemkey\s+=\s+).*;/\1'$PEMKEY';/" /var/www/html/vcl/.ht-inc/secrets.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure secrets.php"; exit 1; fi;
+
+ echo "Configureing conf.php..."
+ /bin/cp -f /var/www/html/vcl/.ht-inc/conf-default.php /var/www/html/vcl/.ht-inc/conf.php
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure conf.php"; exit 1; fi;
+
+ echo "Generating keys..."
+ cd /var/www/html/vcl/.ht-inc
+ ./genkeys.sh &> /dev/null
+ if [ $? -ne 0 ]; then echo "Error: Failed to generate crypto keys"; exit 1; fi;
+fi
+
+# ---------------------------- set passwords ---------------------------
+if [[ $DODB -eq 1 ]]; then
+ print_break
+ echo "Setting passwords..."
+ set_localauth_password admin $ADMIN_PASSWORD
+ set_localauth_password vclsystem $ADMIN_PASSWORD
+fi
+
+# ---------------- copy management node code in place ------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break
+ echo "Installing management node components..."
+ /bin/cp -r $WORKPATH/apache-VCL-$VCL_VERSION/managementnode/ /usr/local/vcl-$VCL_VERSION
+ if [ $? -ne 0 ]; then generic_error "Failed to install VCL management node code"; exit 1; fi;
+ ln -s /usr/local/vcl-$VCL_VERSION /usr/local/vcl
+ if [ $? -ne 0 ]; then generic_error "Failed to install VCL management node code"; exit 1; fi;
+fi
+
+#--------------------- configure management node code ------------------
+if [[ $DOMN -eq 1 ]]; then
+ echo "Configuring vcld.conf..."
+ pkill -9 -f vcld
+ if [[ ! -d /etc/vcl ]]; then
+ mkdir /etc/vcl
+ if [ $? -ne 0 ]; then echo "Error: Failed to create /etc/vcl directory"; exit 1; fi;
+ fi
+ /bin/cp -f /usr/local/vcl/etc/vcl/vcld.conf /etc/vcl
+ if [ $? -ne 0 ]; then echo "Error: Failed to copy vcld.conf file to /etc/vcl"; exit 1; fi;
+ if [[ $DODB -eq 0 && $MN_HOST -eq "localhost" ]]; then
+ sed -i -r -e "s/(FQDN=).*/\1$PUBIP/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ else
+ sed -i -r -e "s/(FQDN=).*/\1$MN_HOST/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ fi
+ sed -i -r -e "s/(server=).*/\1$DB_HOST/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ sed -i -r -e "s/(LockerWrtUser=).*/\1$DB_USERNAME/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ sed -i -r -e "s/(wrtPass=).*/\1$DB_PASSWORD/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ sed -i -r -e "s/(xmlrpc_url=).*/\1https:\/\/$WEB_HOST\/vcl\/index.php?mode=xmlrpccall/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+ sed -i -r -e "s/(xmlrpc_pass=).*/\1$ADMIN_PASSWORD/" /etc/vcl/vcld.conf
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi;
+fi
+
+#------------------ configure vcld to start at boot ---------------
+if [[ $DOMN -eq 1 ]]; then
+ echo "Configuring vcld service..."
+ /bin/cp -f /usr/local/vcl/bin/S99vcld.linux /etc/init.d/vcld
+ if [ $? -ne 0 ]; then echo "Error: Failed to copy initialization file in place"; exit 1; fi;
+ /sbin/chkconfig --add vcld
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld service to start on boot"; exit 1; fi;
+ /sbin/chkconfig --level 345 vcld on
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld service to start on boot"; exit 1; fi;
+fi
+
+#----------------------- configure management node in vcl --------------------
+if [[ $DODB -eq 1 ]]; then
+ print_break
+ echo "Adding managment node to database..."
+ mysql -e "DELETE FROM vcl.managementnode;"
+ mysql -e "INSERT INTO vcl.managementnode (IPaddress, hostname, stateid) VALUES ('$PUBIP', '$MN_HOST', '2');"
+ if [ $? -ne 0 ]; then echo "Error: Failed to add management node to database"; exit 1; fi;
+ mysql -e "DELETE FROM vcl.resource WHERE resourcetypeid = 16;"
+ mysql -e "INSERT INTO vcl.resource (resourcetypeid, subid) VALUES ('16', (SELECT id FROM vcl.managementnode WHERE hostname = '$MN_HOST'));"
+ if [ $? -ne 0 ]; then echo "Error: Failed to add management node to database"; exit 1; fi;
+ mysql -e "INSERT INTO vcl.resourcegroupmembers (resourceid, resourcegroupid) SELECT vcl.resource.id, vcl.resourcegroup.id FROM vcl.resource, vcl.resourcegroup WHERE vcl.resource.resourcetypeid = 16 AND vcl.resourcegroup.resourcetypeid = 16;"
+ if [ $? -ne 0 ]; then echo "Error: Failed to add management node to database"; exit 1; fi;
+fi
+
+# ----------------- install and configure dhcpd ------------------------
+if [[ $DODHCP = 'yes' ]]; then
+ print_break
+ echo "Installing dhcp..."
+ yum -q -y install dhcp
+ if [ $? -ne 0 ]; then echo "Error: Failed to install dhcp"; exit 1; fi;
+
+ echo "Configuring dhcp..."
+ if ifconfig ${if[$privnum]} | grep $PRIVIP | grep -q 'Mask:'; then
+ privmask=$(ifconfig ${if[$privnum]} | grep $PRIVIP | awk '{print $4}' | awk -F: '{print $2}')
+ elif ifconfig ${if[$privnum]} | grep $PRIVIP | grep -q 'netmask '; then
+ privmask=$(ifconfig ${if[$privnum]} | grep $PRIVIP | awk '{print $4}')
+ fi
+ if [[ ! $privmask =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+ echo "Error: Failed to determine netmask for private address"
+ exit 1
+ fi
+ IFS=. read pr1 pr2 pr3 pr4 <<<"$PRIVIP"
+ IFS=. read prm1 prm2 prm3 prm4 <<<"$privmask"
+ privnet="$((pr1 & prm1)).$((pr2 & prm2)).$((pr3 & prm3)).$((pr4 & prm4))"
+ if [[ ! $privnet =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+ echo "Error: Failed to determine network for private address"
+ exit 1
+ fi
+
+ echo "Private address: $PRIVIP"
+ echo "Private netmask: $privmask"
+ echo "Private network: $privnet"
+
+ echo "Configuring /etc/dhcp/dhcpd.conf..."
+(
+cat <<'EOF'
+#
+# DHCP Server Configuration file.
+# see /usr/share/doc/dhcp*/dhcpd.conf.sample
+# see 'man 5 dhcpd.conf'
+#
+ddns-update-style none;
+shared-network eth0 {
+ subnet PRIVNET netmask PRIVMASK {
+ ignore unknown-clients;
+ }
+ # ----------- add computers from VCL web site below here ------------
+}
+EOF
+) > /etc/dhcp/dhcpd.conf
+ sed -i "s/PRIVNET/$privnet/" /etc/dhcp/dhcpd.conf
+ sed -i "s/PRIVMASK/$privmask/" /etc/dhcp/dhcpd.conf
+ if ! grep -q $privmask /etc/dhcp/dhcpd.conf; then
+ echo "Error: Failed to configure /etc/dhcp/dhcpd.conf"
+ exit 1
+ fi
+
+ if [[ -f /etc/sysconfig/dhcpd ]] && grep -q DHCPDARGS /etc/sysconfig/dhcpd; then
+ sed -i -r -e "s/(DHCPDARGS=).*/\1${if[$privnum]}/" /etc/sysconfig/dhcpd
+ else
+ echo "DHCPDARGS=\"${if[$privnum]}\"" > /etc/sysconfig/dhcpd
+ fi
+ if ! grep -q ${if[$privnum]} /etc/sysconfig/dhcpd; then
+ echo "Error: Failed to configure /etc/sysconfig/dhcpd"
+ exit 1
+ fi
+
+ /sbin/chkconfig dhcpd on
+ if [ $? -ne 0 ]; then echo "Error: Failed to configure dhcpd service to start on boot"; exit 1; fi;
+
+ echo "Starting dhcpd service..."
+ /sbin/service dhcpd start
+ if [ $? -ne 0 ]; then generic_error "Failed to start dhcpd service"; exit 1; fi;
+fi
+
+# -------------------- create ssh identity key ---------------------
+if [[ $DOMN -eq 1 && ! -r /etc/vcl/vcl.key ]]; then
+ print_break
+ echo "Creating SSH identity key file at /etc/vcl/vcl.key"
+ ssh-keygen -t rsa -f "/etc/vcl/vcl.key" -N '' -b 1024 -C 'VCL root account'
+ if [ $? -ne 0 ]; then echo "Error: Failed to create ssh identity key for connecting to managed VMs"; exit 1; fi;
+ echo "IdentityFile /etc/vcl/vcl.key" >> /etc/ssh/ssh_config
+ if [ $? -ne 0 ]; then echo "Error: Failed to add ssh identity key to /etc/ssh/ssh_config"; exit 1; fi;
+fi
+
+# ---------------------------- start vcld ----------------------------
+if [[ $DOMN -eq 1 ]]; then
+ print_break
+ echo "Starting vcld service..."
+ /sbin/service vcld stop &> /dev/null
+ sleep 1
+ /sbin/service vcld start
+ if [ $? -ne 0 ]; then echo "Error: Failed to start vcld service"; exit 1; fi;
+fi
+
+echo ""
+if [[ $DOALL -eq 1 ]]; then
+ echo "VCL installation complete"
+ echo ""
+ echo "Your VCL system now needs to be configured. Follow online instructions to"
+elif [[ $DODB -eq 1 && $DOWEB -eq 1 ]]; then
+ echo "VCL installation of database and web components complete. If you have not"
+ echo "already done so, install management node components to complete your VCL"
+ echo "installation. After all components are installed, your VCL system will need"
+ echo "to be configured. Follow online instructions to"
+elif [[ $DODB -eq 1 && $DOMN -eq 1 ]]; then
+ echo "VCL installation of database and management node components complete. If you"
+ echo "have not already done so, install web components to complete your VCL"
+ echo "installation. After all components are installed, your VCL system will need to"
+ echo "be configured. Follow online instructions to"
+elif [[ $DOWEB -eq 1 && $DOMN -eq 1 ]]; then
+ echo "VCL installation of web and management node components complete. If you have"
+ echo "not already done so, install database components to complete your VCL"
+ echo "installation. After all components are installed, your VCL system will need to"
+ echo "be configured. Follow online instructions to"
+elif [[ $DODB -eq 1 ]]; then
+ echo "VCL installation of database components complete. If you have not already done"
+ echo "so, install web and management node components to complete your VCL"
+ echo "installation. After all components are installed, your VCL system will need to"
+ echo "be configured. Follow online instructions to"
+elif [[ $DOWEB -eq 1 ]]; then
+ echo "VCL installation of web components complete. If you have not already done so,"
+ echo "install database and management node components to complete your VCL"
+ echo "installation. After all components are installed, your VCL system will need to"
+ echo "be configured. Follow online instructions to"
+elif [[ $DOMN -eq 1 ]]; then
+ echo "VCL installation of management node components complete. If you have not already"
+ echo "done so, install database and web components to complete your VCL installation."
+ echo "After all components are installed, your VCL system will need to be configured."
+ echo "Follow online instructions to"
+fi
+
+echo ""
+echo "1) Set up a VM Host Profile"
+echo "2) Add a Virtual Host"
+echo "3) Add VMs"
+echo "4) export dhcpd data for the VMS and add that to /etc/dhcp/dhcpd.conf"
+echo "5) Assign VMs to your VM Host(s)"
+echo "6) create base images"
+echo ""
+
+if [[ $DOALL -eq 1 ]]; then
+ echo "Your VCL system can be accessed at https://$PUBIP/vcl"
+fi
Propchange: release/vcl/vcl-install-2.4.1.sh
------------------------------------------------------------------------------
svn:executable = *