#!/bin/sh
# This script is written by DirectAdmin and Martynas Bendorius (smtalk)
BUILDSCRIPT_VER=1.2.13
NAME=custombuild
OS=`uname`
WORKDIR=/usr/local/directadmin/${NAME}
OPTIONS_CONF=${WORKDIR}/options.conf
VERSIONS_FILE=${WORKDIR}/versions.txt
CPU_CORES=1
if [ ${OS} = "FreeBSD" ]; then
if [ "`sysctl -a | grep kern.threads.virtual_cpu | cut -d' ' -f2`" -gt 1 ]; then
CPU_CORES="`sysctl -a | grep kern.threads.virtual_cpu | cut -d' ' -f2`"
fi
else
if [ "`cat /proc/cpuinfo | grep 'core id' | wc -l`" -gt 0 ]; then
CPU_CORES="`cat /proc/cpuinfo | grep 'core id' | wc -l`"
fi
fi
# Main variables
HTTPDDIR=/etc/httpd
HTTPDCONF=/etc/httpd/conf
HTTPD_CONF=${HTTPDCONF}/httpd.conf
WEBPATH=http://files.directadmin.com/services/custombuild
WEBPATH_BACKUP=http://84.16.234.222/services/custombuild
WEBPATH_SERVICES=http://files.directadmin.com/services
DEBIAN_VERSION=/etc/debian_version
WWWDIR=/var/www/html
# Variables for jailed shell
SHELLS=/etc/shells
JAIL_DIR=${WORKDIR}/jail
SERVICES=/usr/local/directadmin/data/admin/services.status
#CWD=`pwd`
CWD=${WORKDIR}
FORCE=0
HIDE_CHANGES=0
# Check if workdir exists
if [ ! -d ${WORKDIR} ]; then
echo "Directory ${WORKDIR} does not exist."
exit 1
fi
# Write options.conf
if [ ! -e ${OPTIONS_CONF} ]; then
echo "Can not find ${OPTIONS_CONF}, writing defaults."
echo -n "" > ${OPTIONS_CONF}
echo "#PHP settings. default_php possible values - 5 or 6" >> ${OPTIONS_CONF}
echo "default_php=5" >> ${OPTIONS_CONF}
echo "php5_cli=yes" >> ${OPTIONS_CONF}
echo "php5_cgi=no" >> ${OPTIONS_CONF}
echo "php6_cli=no" >> ${OPTIONS_CONF}
echo "php6_cgi=no" >> ${OPTIONS_CONF}
echo "mail-header-patch=yes" >> ${OPTIONS_CONF}
echo "php_ini=no" >> ${OPTIONS_CONF}
echo "#Possible values - recommended or dist" >> ${OPTIONS_CONF}
echo "php_ini_type=recommended" >> ${OPTIONS_CONF}
echo "zend=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Possible values - 5.0, 5.1" >> ${OPTIONS_CONF}
echo "mysql=5.1" >> ${OPTIONS_CONF}
echo "mysql_inst=no" >> ${OPTIONS_CONF}
echo "mysql_backup=yes" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Possible values - 1.3, 2.0 or 2.2" >> ${OPTIONS_CONF}
echo "apache_ver=2.2" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Web applications" >> ${OPTIONS_CONF}
echo "phpmyadmin=yes" >> ${OPTIONS_CONF}
echo "atmail=no" >> ${OPTIONS_CONF}
echo "squirrelmail=yes" >> ${OPTIONS_CONF}
echo "roundcube=yes" >> ${OPTIONS_CONF}
echo "uebimiau=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Mail options" >> ${OPTIONS_CONF}
echo "clamav=no" >> ${OPTIONS_CONF}
echo "dovecot=yes" >> ${OPTIONS_CONF}
echo "exim=no" >> ${OPTIONS_CONF}
echo "eximconf=no" >> ${OPTIONS_CONF}
echo "spamassassin=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Statistics" >> ${OPTIONS_CONF}
echo "awstats=yes" >> ${OPTIONS_CONF}
echo "webalizer=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#FTP options" >> ${OPTIONS_CONF}
echo "proftpd=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Jailed shell" >> ${OPTIONS_CONF}
echo "jail=no" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Custombuild options" >> ${OPTIONS_CONF}
echo "autover=no" >> ${OPTIONS_CONF}
echo "bold=yes" >> ${OPTIONS_CONF}
echo "clean=yes" >> ${OPTIONS_CONF}
echo "cleanapache=no" >> ${OPTIONS_CONF}
echo "clean_old_tarballs=no" >> ${OPTIONS_CONF}
echo "clean_old_webapps=yes" >> ${OPTIONS_CONF}
echo "fileserver=1" >> ${OPTIONS_CONF}
echo "custombuild=1.2" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
echo "#Cron settings" >> ${OPTIONS_CONF}
echo "cron=no" >> ${OPTIONS_CONF}
echo "email=email@domain.com" >> ${OPTIONS_CONF}
echo "notifications=yes" >> ${OPTIONS_CONF}
echo "da_autoupdate=no" >> ${OPTIONS_CONF}
echo "updates=no" >> ${OPTIONS_CONF}
echo "webapps_updates=yes" >> ${OPTIONS_CONF}
echo "" >> ${OPTIONS_CONF}
fi
# Check if options.conf exists
if [ ! -e ${OPTIONS_CONF} ]; then
echo "Options file options.conf does not exist."
exit 1
fi
####################################################
getVer()
{
grep -m1 $1: ${VERSIONS_FILE} | cut -d ':' -f 2
}
getMD5()
{
grep -m1 $1: ${VERSIONS_FILE} | cut -d ':' -f 3
}
do_exit()
{
if [ "$2" != "" ]; then
echo "$2";
fi
rm -f ${WORKDIR}/.custombuild
exit $1
}
getOpt()
{
#$1 is option name
#$2 is default value
COUNT_OPT="`grep -c -e "^$1=" ${OPTIONS_CONF}`"
if [ "${COUNT_OPT}" -eq 0 ]; then
echo "$1=$2" >> ${OPTIONS_CONF}
fi
COUNT_OPT="`grep -c -e "^$1=" ${OPTIONS_CONF}`"
if [ "${COUNT_OPT}" -ne 1 ]; then
do_exit 1 "${OPTIONS_CONF} value $1 is damaged. Please check or delete it."
fi
grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2
}
secure_phpini(){
if [ -e $1 ]; then
COUNT_DISABLE_FUNCT="`grep -c -e disable_functions $1`"
if [ "${COUNT_DISABLE_FUNCT}" -gt 0 ]; then
CURRENT_DISABLE_FUNCT="`grep -m1 'disable_functions' $1`"
NEW_DISABLE_FUNCT="exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source"
perl -pi -e "s#${CURRENT_DISABLE_FUNCT}#disable_functions \= ${NEW_DISABLE_FUNCT}#" $1
else
echo "Unable to find disable_functions in $1"
fi
perl -pi -e 's/^register_globals = On/register_globals = Off/' $1
fi
}
#sets the value of $1 to $2 in the file $3
setVal()
{
if [ ! -e $3 ]; then
return;
fi
COUNT=`grep -c $1 $3`
if [ "$COUNT" -eq 0 ]; then
#ok, it's not there, add it.
echo "$1=$2" >> $3
return;
else
#ok, the value is already in the file $3, so use perl to regex it.
perl -pi -e "s/`grep ${1}= ${3}`/${1}=${2}/" ${3}
fi
}
####################################################
# Read options.conf
APACHE_OPT=`getOpt apache_ver 2.2`
PROFTPD_OPT=`getOpt proftpd yes`
JAIL_OPT=`getOpt jail no`
#PHP
DEFPHP=`getOpt default_php 6`
PHP5_CLI_OPT=`getOpt php5_cli no`
PHP5_CGI_OPT=`getOpt php5_cgi no`
PHP6_CLI_OPT=`getOpt php6_cli yes`
PHP6_CGI_OPT=`getOpt php6_cgi no`
PHPINI_OPT=`getOpt php_ini no`
PHPINITYPE_OPT=`getOpt php_ini_type recommended`
ZEND_OPT=`getOpt zend no`
#MySQL
MYSQLBACK_OPT=`getOpt mysql_backup yes`
MYSQL_OPT=`getOpt mysql 5.1`
MYSQLINST_OPT=`getOpt mysql_inst no`
#Email
MAIL_HEADER_PATCH=`getOpt mail-header-patch yes`
DOVECOT_OPT=`getOpt dovecot yes`
EXIM_OPT=`getOpt exim no`
EXIMCONF_OPT=`getOpt eximconf no`
SPAMASSASSIN_OPT=`getOpt spamassassin no`
CLAMAV_OPT=`getOpt clamav no`
#Applications
ATMAIL_OPT=`getOpt atmail no`
PHPMYADMIN_OPT=`getOpt phpmyadmin yes`
SQUIRRELMAIL_OPT=`getOpt squirrelmail yes`
ROUNDCUBE_OPT=`getOpt roundcube yes`
UEBIMIAU_OPT=`getOpt uebimiau no`
#Statistics software
AWSTATS_OPT=`getOpt awstats yes`
WEBALIZER_OPT=`getOpt webalizer no`
#CustomBuild
AUTOVER_OPT=`getOpt autover no`
BOLD_OPT=`getOpt bold yes`
CLEAN_OPT=`getOpt clean yes`
CLEAN_OLD_TARBALLS_OPT=`getOpt clean_old_tarballs yes`
CLEAN_OLD_WEBAPPS_OPT=`getOpt clean_old_webapps yes`
CLEANAPACHE_OPT=`getOpt cleanapache yes`
FILESERVER_OPT=`getOpt fileserver 1`
CUSTOMBUILD_OPT=`getOpt custombuild 1.2`
#Cron
CRON_OPT=`getOpt cron no`
EMAIL_OPT=`getOpt email email@domain.com`
NOTIFICATIONS_OPT=`getOpt notifications yes`
DA_AUTOUPDATE_OPT=`getOpt da_autoupdate no`
UPDATES_OPT=`getOpt updates no`
WEBAPPS_UPDATES_OPT=`getOpt webapps_updates yes`
# Variables for bolded text
boldon=""
boldoff=""
if [ "${BOLD_OPT}" = "yes" ]; then
boldon="`tput bold`"
boldoff="`tput sgr0`"
fi
setOpt()
{
#$1 is option name
#$2 is value
if [ "$1" = "email" ]; then
OPT_VALUE1="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2 | cut -d\@ -f 1`"
OPT_VALUE2="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2 | cut -d\@ -f 2`"
OPT_NEW_VALUE1="`echo "$2" | cut -d\@ -f 1`"
OPT_NEW_VALUE2="`echo "$2" | cut -d\@ -f 2`"
perl -pi -e "s#$1=${OPT_VALUE1}\@${OPT_VALUE2}#$1=${OPT_NEW_VALUE1}\@${OPT_NEW_VALUE2}#" ${WORKDIR}/options.conf
if [ "${HIDE_CHANGES}" = "0" ]; then
echo "Changed ${boldon}$1${boldoff} option from ${boldon}${OPT_VALUE1}@${OPT_VALUE2}${boldoff} to ${boldon}$2${boldoff}"
fi
else
OPT_VALUE="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2`"
perl -pi -e "s#$1=${OPT_VALUE}#$1=$2#" ${WORKDIR}/options.conf
if [ "${HIDE_CHANGES}" = "0" ]; then
echo "Changed ${boldon}$1${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}$2${boldoff}"
fi
fi
}
if [ "${PHPINITYPE_OPT}" != "dist" ] && [ "${PHPINITYPE_OPT}" != "recommended" ]; then
echo "Wrong php_ini_type set in options.conf."
exit 1
fi
if [ "${FILESERVER_OPT}" != "1" ] && [ "${FILESERVER_OPT}" != "2" ]; then
echo "Wrong fileserver set in options.conf."
exit 1
fi
if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
echo "Can not install PHP6 and PHP5 as CLI."
exit 1
elif [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP6_CGI_OPT}" = "yes" ] || [ "${PHP5_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
echo "Can not install one PHP version as CLI and CGI."
exit 1
elif [ "${PHP6_CLI_OPT}" = "no" ] && [ "${PHP6_CGI_OPT}" = "no" ] && [ "${PHP5_CLI_OPT}" = "no" ] && [ "${PHP5_CGI_OPT}" = "no" ]; then
echo "You do not have any PHP version set in options.conf."
exit 1
fi
#Which PHP is the default one?
if [ "${DEFPHP}" = "5" ]; then
ADDITPHP=6
elif [ "${DEFPHP}" = "6" ]; then
ADDITPHP=5
else
echo "There is wrong default PHP in ${OPTIONS_CONF} set."
exit 1
fi
#Is the default PHP running as CGI?
DEFPHP_CGI="`grep php${DEFPHP}_cgi ${WORKDIR}/options.conf | cut -d= -f2`"
# Get apache version from directadmin.conf
DACONF_FILE=/usr/local/directadmin/conf/directadmin.conf
DACONF_TEMPLATE_FILE=/usr/local/directadmin/data/templates/directadmin.conf
DACONF_APACHE_VER=1.3
if [ -e ${DACONF_FILE} ]; then
DACONF_APACHE_VER=`grep "^apache_ver=" ${DACONF_FILE} | cut -d= -f2`
fi
# Download versions.txt if AUTOVER_OPT is set to "yes"
if [ "${AUTOVER_OPT}" = "yes" ]; then
wget ${WEBPATH}/versions.txt -O ${VERSIONS_FILE} 2> /dev/null
fi
# Check if ld.so.conf has /usr/local/lib
if [ ! -e /etc/ld.so.conf ] || [ "`grep -c -E '/usr/local/lib$' /etc/ld.so.conf`" = "0" ]; then
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
fi
####################################################
checkMD5()
{
#$1 is the local file
#$2 is the versions.txt variable
#return values:
#1 for error, try agian
#0 for nothing to report.
MD5SUM=/usr/bin/md5sum
if [ ! -e $MD5SUM ]; then
echo 0;
return;
fi
if [ ! -e "$1" ]; then
echo 1;
fi
VMD5=`getMD5 $2`
if [ "$VMD5" = "" ]; then
echo 0;
return;
fi
FMD5=`$MD5SUM $1 | cut -d\ -f1`
if [ "$FMD5" = "$VMD5" ]; then
echo 0;
else
echo 1;
fi
}
getFile() {
cd ${CWD};
if [ ! -e ${1} ]
then
echo -e "Downloading\t\t$1...";
if [ ${OS} = "FreeBSD" ]; then
fetch ${WEBPATH}/${1};
else
wget -O ${CWD}/${1} ${WEBPATH}/${1}
fi
if [ ! -e $1 ]
then
echo "Fileserver is down, using the backup file server..";
if [ ${OS} = "FreeBSD" ]; then
fetch ${WEBPATH_BACKUP}/${1};
else
wget ${WEBPATH_BACKUP}/${1} -O ${CWD}/${1};
fi
fi
else
echo -e "File already exists:\t${1}";
fi
if [ "$#" -eq 2 ]; then
M=`checkMD5 ${1} ${2}`
if [ "$M" != "0" ]; then
echo "";
echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}";
echo "";
#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.
rm -f $1
getFile $1
M=`checkMD5 ${1} ${2}`
if [ "$M" != "0" ]; then
echo "";
echo "";
echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}";
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
echo "Install continuing with this possibly corrupted file. (it may also be fine)";
echo "";
echo "";
else
echo "MD5 Checksum on $1 passed."
fi
else
echo "MD5 Checksum on $1 passed."
fi
fi
}
####################################################
# Rewrite directadmin-vhosts.conf
doVhosts(){
if [ ! -d ${HTTPDCONF}/extra ]; then
mkdir -p ${HTTPDCONF}/extra
fi
echo -n '' > ${HTTPDCONF}/extra/directadmin-vhosts.conf
for i in `ls /usr/local/directadmin/data/users`; do { echo "Include /usr/local/directadmin/data/users/$i/httpd.conf" >> ${HTTPDCONF}/extra/directadmin-vhosts.conf; }; done;
}
####################################################
# init.d scripts
if [ "${OS}" = "FreeBSD" ]; then
INITDDIR=/usr/local/etc/rc.d
else
INITDDIR=/etc/init.d
fi
# check if we have versions.txt
if [ ! -e ${VERSIONS_FILE} ]; then
cd ${WORKDIR}
getFile versions.txt
fi
if [ ! -e ${VERSIONS_FILE} ]; then
echo "There is no versions.txt file. Unable to download."
exit 0;
fi
#####################################################
# User Variables
DIRECTADMIN_VER=`getVer directadmin`
MODSSL_VER=`getVer mod_ssl`
if [ "${APACHE_OPT}" = "1.3" ]; then
APACHE_VER=`getVer apache`
elif [ "${APACHE_OPT}" = "2.0" ]; then
APACHE2_VER=`getVer apache2.0`
elif [ "${APACHE_OPT}" = "2.2" ]; then
APACHE2_VER=`getVer apache2.2`
else
echo "Wrong apache_ver value set in ${OPTIONS_CONF}."
exit 1
fi
PHP5_VER=`getVer php5`
PHP6_VER=`getVer php6`
if [ "${MYSQL_OPT}" = "5.0" ]; then
MYSQL_VER=`getVer mysql5.0`
elif [ "${MYSQL_OPT}" = "5.1" ]; then
MYSQL_VER=`getVer mysql5.1`
elif [ "${MYSQL_OPT}" = "4.1" ]; then
MYSQL_VER=`getVer mysql4.1`
else
echo "Wrong mysql_ver value set in ${OPTIONS_CONF}."
exit 1
fi
#http://choon.net/opensource/php/php-${PHP_VER}-mail-header.patch
APPLY_MAIL_HEADER_PATCH=${MAIL_HEADER_PATCH}
MAIL_HEADER_FILE_PHP5=php-${PHP5_VER}-mail-header.patch
PCRE_VER=`getVer pcre`
CURL_VER=`getVer curl`
ZLIB_VER=`getVer zlib`
MCRYPT_VER=`getVer mcrypt`
if [ "${APACHE_OPT}" = "1.3" ]; then
MODPERL_VER=`getVer mod_perl`
MODPERL_INDEX=mod_perl
elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ]; then
MODPERL_VER=`getVer mod_perl2`
MODPERL_INDEX=mod_perl2
fi
MHASH_VER=`getVer mhash`
SUPHP_VER=`getVer suphp`
DOVECOT_VER=`getVer dovecot`
EXIM_VER=`getVer exim`
PROFTPD_VER=`getVer proftpd`
AUTOCONF_VER=`getVer autoconf`
AUTOMAKE_VER=`getVer automake`
LIBTOOL_VER=`getVer libtool`
LIBXML2_VER=`getVer libxml2`
LIBXSLT_VER=`getVer libxslt`
FREETYPE_VER=`getVer freetype`
ICONV_VER=`getVer iconv`
ICU_VER=`getVer icu4c`
IMAP_VER=`getVer imap`
CLAMAV_VER=`getVer clamav`
AWSTATS_VER=`getVer awstats`
ZEND_VER=`getVer ZendOptimizer-linux-glibc23-i386`
FBSD4_ZEND_VER=`getVer ZendOptimizer-freebsd4.3-i386`
FBSD5_ZEND_VER=`getVer ZendOptimizer-freebsd5.4-i386`
if [ -e /lib64 ]; then
PNG_VER=`getVer libpng64`
else
PNG_VER=`getVer libpng`
fi
# SpamAssassin versions
SPAMASSASSIN_VER=`getVer spamassassin`
DIGEST_VER=`getVer digest`
DIGEST_SHA1_VER=`getVer digest_sha1`
PARSER_VER=`getVer parser`
NETDNS_VER=`getVer netdns`
NETIP_VER=`getVer netip`
URI_VER=`getVer uri`
NET_CIDR_LITE_VER=`getVer net_cidr_lite`
STORABLE_VER=`getVer storable`
DB_FILE_VER=`getVer db_file`
MAIL_SPF_VER=`getVer mail_spf`
SYS_HOSTNAME_VER=`getVer sys_hostname`
NET_SSLeay_VER=`getVer net_ssleay`
IO_SOCKET_VER=`getVer io_socket`
# SpamAssassin names
NETDNS_NAME=Net-DNS-${NETDNS_VER}
NETIP_NAME=Net-IP-${NETIP_VER}
URI_NAME=URI-${URI_VER}
NET_CIDR_LITE_NAME=Net-CIDR-Lite-${NET_CIDR_LITE_VER}
DIGEST_NAME=Digest-${DIGEST_VER}
DIGEST_SHA1_NAME=Digest-SHA1-${DIGEST_SHA1_VER}
PARSER_NAME=HTML-Parser-${PARSER_VER}
STORABLE_NAME=Storable-${STORABLE_VER}
DB_FILE_NAME=DB_File-${DB_FILE_VER}
MAIL_SPF_NAME=Mail-SPF-${MAIL_SPF_VER}
SYS_HOSTNAME_NAME=Sys-Hostname-Long-${SYS_HOSTNAME_VER}
NET_SSLeay_NAME=Net_SSLeay.pm-${NET_SSLeay_VER}
IO_SOCKET_NAME=IO-Socket-SSL-${IO_SOCKET_VER}
# Applications versions
PHPMYADMIN_VER=`getVer phpmyadmin3`
ATMAIL_VER=`getVer atmail`
ROUNDCUBE_VER=`getVer roundcubemail`
SQUIRRELMAIL_VER=`getVer squirrelmail`
UEBIMIAU_VER=`getVer uebimiau`
# Jailed shell
JAIL_VER=`getVer jail`
COREUTILS_VER=`getVer coreutils`
NB_SMTP_VER=`getVer nbsmtp`
# More variables for jailed shell
SU_FILE=${JAIL_DIR}/ap${APACHE_OPT}/suexec.c
#####################################################
ensureVersion() {
PERL_VER=`perl -v | head -n2 | tail -n1 | cut -d\ -f4 | cut -dv -f2`
NUM1=`echo $PERL_VER | cut -d. -f1`
NUM2=`echo $PERL_VER | cut -d. -f2`
NUM3=`echo $PERL_VER | cut -d. -f3`
if [ $NUM1 -gt 5 ]; then
return 1;
fi
if [ $NUM2 -gt 6 ]; then
return 1;
fi
if [ $NUM3 -gt 0 ]; then
return 1;
fi
echo "Your perl version is $PERL_VER. You require at least perl 5.6.1 for Mail-SpamAssassin-${SPAMASSASSIN_VER}.";
exit 1;
}
#####################################################
downloadMake() {
cd $CWD
getFile ${1}.tar.gz
tar xvzf ${1}.tar.gz
cd ${1}
perl Makefile.PL
make
make install
cd $CWD
}
#####################################################
# Applications variables
APPUSER=webapps
if [ "${OS}" = "FreeBSD" ]; then
WGET=/usr/local/bin/wget
TAR=/usr/bin/tar
CHOWN=/usr/sbin/chown
MYSQL_DATA=/home/mysql
MYSQL_BIN=/usr/local/mysql/bin/mysql
else
WGET=/usr/bin/wget
TAR=/bin/tar
CHOWN=/bin/chown
if [ -e /etc/debian_version ]; then
MYSQL_DATA=/home/mysql
MYSQL_BIN=/usr/local/mysql/bin/mysql
else
MYSQL_DATA=/var/lib/mysql
MYSQL_BIN=/usr/bin/mysql
fi
fi
# Variable for proftpd
PROFTPD_CONFIGURE=configure/proftpd/configure.proftpd
if [ -e custom/proftpd/configure.proftpd ]; then
PROFTPD_CONFIGURE=custom/proftpd/configure.proftpd
fi
# Variables for apache
APACHE_SSL_CONFIGURE=configure/ap1/configure.apache_ssl
if [ -e custom/ap1/configure.apache_ssl ]; then
APACHE_SSL_CONFIGURE=custom/ap1/configure.apache_ssl
fi
APACHE2_CONFIGURE=configure/ap2/configure.apache
if [ -e custom/ap2/configure.apache ]; then
APACHE2_CONFIGURE=custom/ap2/configure.apache
fi
SUPHP_HTTPD=/etc/httpd/conf/extra/httpd-suphp.conf
PHP_HANDLERS_HTTPD=/etc/httpd/conf/extra/httpd-php-handlers.conf
if [ "${APACHE_OPT}" = "1.3" ]; then
PHP5_CONFIGURE=configure/ap1/configure.php5
if [ -e custom/ap1/configure.php5 ]; then
PHP5_CONFIGURE=custom/ap1/configure.php5
fi
PHP6_CONFIGURE=configure/ap1/configure.php6
if [ -e custom/ap1/configure.php6 ]; then
PHP6_CONFIGURE=custom/ap1/configure.php6
fi
elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ]; then
PHP5_CONFIGURE=configure/ap2/configure.php5
if [ -e custom/ap2/configure.php5 ]; then
PHP5_CONFIGURE=custom/ap2/configure.php5
fi
PHP6_CONFIGURE=configure/ap2/configure.php6
if [ -e custom/ap2/configure.php6 ]; then
PHP6_CONFIGURE=custom/ap2/configure.php6
fi
else
echo "Can not find configure files."
exit 1
fi
AP1CONFDIR=${WORKDIR}/configure/ap1/conf
AP1CUSTOMCONFDIR=0
if [ -d custom/configure/ap1/conf ]; then
AP1CUSTOMCONFDIR=custom/configure/ap1/conf
fi
AP2CONFDIR=${WORKDIR}/configure/ap2/conf
AP2CUSTOMCONFDIR=0
if [ -d custom/configure/ap2/conf ]; then
AP2CUSTOMCONFDIR=custom/configure/ap2/conf
fi
# Variables for suPHP
PHP5_CONFIGURE_SUPHP=configure/suphp/configure.php5
if [ -e custom/suphp/configure.php5 ]; then
PHP5_CONFIGURE_SUPHP=custom/suphp/configure.php5
fi
PHP6_CONFIGURE_SUPHP=configure/suphp/configure.php6
if [ -e custom/suphp/configure.php6 ]; then
PHP6_CONFIGURE_SUPHP=custom/suphp/configure.php6
fi
SUPHP_CONFIGURE=configure/suphp/configure.suphp
if [ -e custom/suphp/configure.suphp ]; then
SUPHP_CONFIGURE=custom/suphp/configure.suphp
fi
SUPHP_PATH=/usr/local/suphp
SUPHP_CONF_FILE=${SUPHP_PATH}/etc/suphp.conf
PHP_INI=/usr/local/lib/php.ini
PHP_INI_SUPHP5=/usr/local/etc/php5/cgi/php.ini
PHP_INI_SUPHP6=/usr/local/etc/php6/cgi/php.ini
# Variables for frontpage
ROOT_GRP=root
if [ ${OS} = "FreeBSD" ]; then
ROOT_GRP=wheel
fi
USER_INPUT=1
INPUT_VALUE=d
if [ ${OS} = "FreeBSD" ]; then
OS_VER=`uname -r | cut -d- -f1`
elif [ -e /etc/fedora-release ]; then
OS=fedora
if [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora Core" ]; then
OS_VER=`cat /etc/fedora-release | awk '{ print $4 }'`
elif [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora release" ]; then
OS_VER=`cat /etc/fedora-release | awk '{ print $3 }'`
fi
elif [ -e ${DEBIAN_VERSION} ]; then
OS_VER=3.1
else
OS_VER=`cat /etc/redhat-release | cut -d\ -f5`
if [ "${OS_VER}" = "" ]; then
OS_VER=`cat /etc/redhat-release | cut -d\ -f1`
fi
fi
B64=0
if [ -e /usr/lib64 ]; then
if [ "`ls /usr/lib64/ | grep -v libmudflap | wc -l`" != "0" ]; then
B64=1
LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
fi
fi
if [ "${OS}" = "FreeBSD" ]; then
MAINVER=`echo ${OS_VER} | cut -d. -f1`
case "${MAINVER}" in
4) ZEND_VER=$FBSD4_ZEND_VER
ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd4.3-i386
;;
5) ZEND_VER=$FBSD5_ZEND_VER
ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd5.4-i386
;;
6|7) ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd6.0-i386
;;
esac
else
ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-i386
#1|1.90|2|2.0|2.1|3|3.0|3.1|4|4.0|5|6|7|7.2|7.3|8|8.0|9|9.0|release|ES|WS|CentOS|Server) ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-i386
fi
if [ ${B64} -eq 1 ]; then
ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-x86_64
fi
if [ -e ${DEBIAN_VERSION} ]; then
ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-i386
fi
ZENDFILE=${ZENDNAME}.tar.gz
JPEGFILE=jpegsrc.v6b.tar.gz
JPEGDIR=jpeg-6b
WEBALIZER_VER=`getVer webalizer`
WEBALIZER=webalizer-${WEBALIZER_VER}
WEBALIZER_FILE=webalizer-${WEBALIZER_VER}-src.tgz
####################################################
clean_tarball(){
#clean_tarball name current_version extension
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then
echo "Skipping $1 tarball, needs more arguments in doclean_old_tarballs()."
return;
fi
for i in `ls ${WORKDIR} | grep "$1" | grep -v "$2" | grep "$3"`; do {
rm -f ${WORKDIR}/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing ${WORKDIR}/$i...";
fi
};
done;
}
doclean_old_tarballs() {
if [ "${APACHE_OPT}" = "1.3" ]; then
clean_tarball apache ${APACHE_VER} tar.gz
clean_tarball mod_ssl ${MODSSL_VER}-${APACHE_VER} tar.gz;
elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ]; then
clean_tarball httpd ${APACHE2_VER} tar.gz;
fi;
clean_tarball mod_perl ${MODPERL_VER} tar.gz;
clean_tarball curl ${CURL_VER} tar.gz;
clean_tarball pcre ${PCRE_VER} tar.gz;
clean_tarball zlib ${ZLIB_VER} tar.gz;
clean_tarball libpng ${PNG_VER} tar.gz;
clean_tarball libmcrypt ${MCRYPT_VER} tar.gz;
clean_tarball mhash ${MHASH_VER} tar.gz;
clean_tarball freetype ${FREETYPE_VER} tar.gz;
clean_tarball libiconv ${ICONV_VER} tar.gz;
clean_tarball libxslt ${LIBXSLT_VER} tar.gz;
clean_tarball libxml2 ${LIBXML2_VER} tar.gz;
clean_tarball icu4c ${ICU_VER}-src tgz;
clean_tarball ZendOptimizer ${ZEND_VER} tar.gz;
clean_tarball webalizer ${WEBALIZER_VER}-src tgz;
clean_tarball proftpd ${PROFTPD_VER} tar.gz;
clean_tarball ${MODPERL_INDEX} ${MODPERL_VER} tar.gz;
clean_tarball exim ${EXIM_VER} tar.gz;
clean_tarball dovecot ${DOVECOT_VER} tar.gz;
clean_tarball suphp ${SUPHP_VER} tar.gz;
clean_tarball autoconf ${AUTOCONF_VER} tar.gz;
clean_tarball automake ${AUTOMAKE_VER} tar.gz;
clean_tarball libtool ${LIBTOOL_VER} tar.gz;
clean_tarball coreutils ${COREUTILS_VER} tar.gz;
clean_tarball roundcubemail ${ROUNDCUBE_VER} tar.gz;
clean_tarball squirrelmail ${SQUIRRELMAIL_VER} tar.gz;
clean_tarball awstats ${AWSTATS_VER} tar.gz;
clean_tarball atmail ${ATMAIL_VER} tar.gz;
clean_tarball phpMyAdmin ${PHPMYADMIN_VER} tar.gz;
#PHP bit needs to be different
for i in `ls ${WORKDIR} | grep 'php' | grep -v "${PHP5}" | grep -v "${PHP4}" | grep 'tar.gz'`; do {
rm -f ${WORKDIR}/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing ${WORKDIR}/$i...";
fi
};
done;
#PHP bit for mail-header-patch needs to be different
for i in `ls ${WORKDIR} | grep 'php' | grep -v "${PHP5}" | grep -v "${PHP4}" | grep 'patch'`; do {
rm -f ${WORKDIR}/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing ${WORKDIR}/$i...";
fi
};
done;
}
####################################################
doclean_old_webapps() {
if [ "${CLEAN_OLD_WEBAPPS_OPT}" != "yes" ]; then
echo "You can not clean webapps, because you do not have it set in options.conf file.";
exit 1;
fi
#Clean phpMyAdmin
if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ -e /var/www/html/phpMyAdmin ]; then
PHPMYADMIN_CUR=`ls -ld /var/www/html/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`
for i in `ls /var/www/html/ | grep phpMyAdmin- | grep -v "${PHPMYADMIN_CUR}"`; do {
rm -rf /var/www/html/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i...";
fi
};
done;
fi
#Clean SquirrelMail
if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ -e /var/www/html/squirrelmail ]; then
SQUIRRELMAIL_CUR=`ls -ld /var/www/html/squirrelmail | cut -d\> -f2 | cut -d- -f2`
for i in `ls /var/www/html/ | grep squirrelmail- | grep -v "${SQUIRRELMAIL_CUR}"`; do {
rm -rf /var/www/html/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i...";
fi
};
done;
fi
#Clean Atmail
if [ "${ATMAIL_OPT}" = "yes" ] && [ -e /var/www/html/atmail ]; then
ATMAIL_CUR=`ls -ld /var/www/html/atmail | cut -d\> -f2 | cut -d- -f2`
for i in `ls /var/www/html/ | grep atmail- | grep -v "${ATMAIL_CUR}"`; do {
rm -rf /var/www/html/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i...";
fi
};
done;
fi
#Clean RoundCube
if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ -e /var/www/html/roundcube ]; then
ROUNDCUBE_CUR=`ls -ld /var/www/html/roundcube | cut -d\> -f2 | cut -d- -f2`
for i in `ls /var/www/html/ | grep roundcubemail- | grep -v "${ROUNDCUBE_CUR}"`; do {
rm -rf /var/www/html/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i...";
fi
};
done;
fi
#Clean AWstats
if [ "${AWSTATS_OPT}" = "yes" ] && [ -e /usr/local/awstats ]; then
AWSTATS_CUR=`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`
for i in `ls /usr/local/ | grep awstats- | grep -v "${AWSTATS_CUR}"`; do {
rm -rf /usr/local/$i;
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /usr/local/$i...";
fi
};
done;
fi
}
####################################################
doClean() {
cd ${CWD}
if [ "${CLEANAPACHE_OPT}" = "yes" ]; then
rm -rf apache_${APACHE_VER};
fi
rm -rf mod_ssl-${MODSSL_VER}-${APACHE_VER};
rm -rf php-${PHP6_VER};
rm -rf php-${PHP5_VER};
rm -rf mod_perl-${MODPERL_VER};
rm -rf curl-${CURL_VER};
rm -rf pcre-${PCRE_VER};
rm -rf zlib-${ZLIB_VER};
rm -rf ${JPEGDIR}
rm -rf libpng-${PNG_VER};
rm -rf libmcrypt-${MCRYPT_VER};
rm -rf mhash-${MHASH_VER};
rm -rf freetype-${FREETYPE_VER};
rm -rf libiconv-${ICONV_VER};
rm -rf libxslt-${LIBXSLT_VER};
rm -rf libxml2-${LIBXML2_VER};
rm -rf icu4c-${ICU_VER}-src;
rm -rf ${ZENDNAME};
rm -rf ${WEBALIZER};
rm -rf proftpd-${PROFTPD_VER};
rm -rf httpd-${APACHE2_VER}
rm -rf ${MODPERL2_DIR};
rm -rf exim-${EXIM_VER};
rm -rf dovecot-${DOVECOT_VER};
rm -rf suphp-${SUPHP_VER};
rm -rf autoconf-${AUTOCONF_VER};
rm -rf automake-${AUTOMAKE_VER};
rm -rf libtool-${LIBTOOL_VER};
rm -rf Mail-SpamAssassin-${SPAMASSASSIN_VER}
rm -rf clamav-${CLAMAV_VER}
rm -rf imap-${IMAP_VER}
# Jailed shell
rm -rf coreutils-${COREUTILS_VER}
rm -f ${JAIL_DIR}/su
rm -f ${JAIL_DIR}/jail
rm -rf nbsmtp-${NB_SMTP_VER}
rm -f nbsmtp
if [ "${CLEAN_OLD_TARBALLS_OPT}" = "yes" ]; then
doclean_old_tarballs;
fi
if [ "${CLEAN_OLD_WEBAPPS_OPT}" = "yes" ]; then
doclean_old_webapps;
fi
if [ "${CLEAN_OPT}" = "no" ]; then
echo "All clean!";
fi
}
####################################################
if [ "${CLEAN_OPT}" = "yes" ]; then
doClean;
fi
####################################################
showHelp() {
echo "*************************************************";
echo "* *";
echo "* DirectAdmin WebServices Installer *";
echo "* Written by Martynas Bendorius and DirectAdmin *";
echo "* Version: ${BUILDSCRIPT_VER} *";
echo "* *";
echo "*************************************************";
echo "";
echo " To build everything run:";
echo " $0 all";
echo "";
echo " ${boldon}NOTE${boldoff}: Command all will compile everything as set in the options.conf, please take a look at \"${boldon}$0 options${boldoff}\"!";
echo "";
echo "";
echo " Other options:";
echo " $0 apache";
echo " $0 autoconf";
echo " $0 automake";
echo " $0 awstats";
echo " $0 clamav";
echo " $0 create_options";
echo " $0 cron";
echo " $0 curl";
echo " $0 dovecot";
echo " $0 exim";
echo " $0 exim_conf";
echo " $0 freetype";
echo " $0 iconv";
echo " $0 icu";
echo " $0 imap";
echo " $0 libjpeg";
echo " $0 libpng";
echo " $0 libtool";
echo " $0 libxml2";
echo " $0 libxslt";
echo " $0 mcrypt";
echo " $0 mhash";
echo " $0 mod_perl";
echo " $0 mysql";
echo " $0 pcre";
echo " $0 php";
echo " $0 php-ini";
echo " $0 proftpd";
echo " $0 rewrite_confs";
echo " $0 secure_php";
echo " $0 spamassassin";
echo " $0 suphp";
echo " $0 update_versions";
echo " $0 update_webapps";
echo " $0 used_configs";
echo " $0 versions";
echo " $0 webalizer";
echo " $0 zend";
echo " $0 zlib";
echo "";
echo " Applications:";
echo " $0 phpmyadmin";
echo " $0 atmail";
echo " $0 roundcube";
echo " $0 squirrelmail";
echo " $0 uebimiau";
echo "";
echo " Jailed shell (beta):";
echo " $0 all_jail";
echo " $0 coreutils";
echo " $0 shell";
echo " $0 smtp_mail";
echo " ./jail/jail_user.sh ${boldon}user${boldoff}";
echo "";
echo " Remove old build data:";
echo " $0 clean";
echo " $0 clean_old_webapps";
echo "";
echo " Get latest build script or (and) data:";
echo " $0 update";
echo " $0 update_script";
echo "";
echo " Get data for current build script:";
echo " $0 update_data";
echo "";
echo " Set option:";
echo " $0 set option_name value";
echo "";
echo " These functions are only recommended ${boldon}for experienced users${boldoff}:";
echo " $0 php5-cli";
echo " $0 php6-cli";
echo " $0 php5-cgi";
echo " $0 php6-cgi";
echo " $0 todovecot";
echo "";
echo " You can pass a 2nd argument to automate the input:";
echo " $0