#!/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