#!/bin/bash # ehcp - Easy Hosting Control Panel install/remove by info@ehcpforce.tk (actually, no remove yet) # this is a very basic shell installer, real installation in install_lib.php, which is called by install_1.php, install_2.php # # please contact me if you made any modifications.. or you need help # msn/email: info@ehcpforce.tk # skype/yahoo/gtalk: bvidinli # Marcel # - added initial support for yum (RedHat/CentOS) # - some code ordering, documentation and cleanup # ehcpversion="0.34" chmod -Rf a+r * if [ "$1" == "noapt" ] ; then noapt="noapt" fi ################################################################################################ # Function Definitions # ################################################################################################ # Stub function for apt-get function installaptget () { echo "now let's try to install apt-get on your system." echo "Not yet implemented" exit } # Stub function fot yum function installyum () { echo "now let's try to install yum on your system." echo "Not yet implemented" } # Initial Welcome Screen function ehcpHeader() { echo echo echo "STAGE 1" echo "=====================================================================" echo echo "--------------------EHCP PRE-INSTALLER $ehcpversion -------------------------" echo "-----Easy Hosting Control Panel for Ubuntu, Debian and alikes--------" echo "-------------------------www.ehcp.net--------------------------------" echo "---------------------------------------------------------------------" echo echo echo "Now, ehcp pre-installer begins, a series of operations will be performed and main installer will be invoked. " echo "if any problem occurs, refer to www.ehcpforce.tk forum section, or contact me, mail/msn: info@ehcpforce.tk" echo "Please be patient, press enter to continue" read echo echo "Note that ehcp can only be installed automatically on Debian based Linux OS'es or Linux'es with apt-get enabled..(Ubuntu, Kubuntu, debian and so on) Do not try to install ehcp with this installer on redhat, centos and non-debian Linux's... To use ehcp on no-debian systems, you need to manually install.. " echo "this installer is for installing onto a clean, newly installed Ubuntu/Debian. If you install it on existing system, some existing packages will be removed after prompting, if they conflict with packages that are used in ehcp, so, be careful to answer yes/no when using in non-new system" echo "Actually, I dont like saying like, 'No warranty, I cannot be responsible for any damage.... ', But, this is just a utility.. use at your own." echo "ehcp also sends some usage data to developer for statistical purposes" echo "press enter to continue" read } # Check for yum function checkyum () { which yum > /dev/null 2>&1 if [ "$?" == "0" ]; then echo "yum is available" return 0 else # This should never happen echo "Please install yum" installyum fi } # Check for apt-get function checkAptget(){ sayi=`which apt-get | wc -w` if [ $sayi -eq 0 ] ; then ehco "apt-get is not found." installaptget fi echo "apt-get seems to be installed on your system." sayi=`grep -v "#" /etc/apt/sources.list | wc -l` if [ $sayi -lt 10 ] ; then echo echo "WARNING ! Your /etc/apt/sources.list file contains very few sources, This may cause problems installing some packages.. see http://www.ehcp.net/?q=node/389 for an example file" echo "This may be normal for some versions of debian" echo "press enter to continue or Ctrl-C to cancel and fix that file" read fi } # Function to be called when installing packages, by Marcel function installPack(){ if [ -n "$noapt" ] ; then # skip install echo "skipping apt-get install for:$1" return fi if [ $distro == "ubuntu" ] || [ $distro == "debian" ];then # first, try to install without any prompt, then if anything goes wrong, normal install.. apt-get -y --no-remove --allow-unauthenticated install $1 if [ $? -ne 0 ]; then apt-get --allow-unauthenticated install $1 fi else # Yum is nice, you don't get prompted :) yum -y -t install $1 fi } function logToFile(){ logfile="ehcp-apt-get-install.log" echo "$1" >> $logfile } function aptget_Update(){ if [ -n "$noapt" ] ; then # skip install echo "skipping apt-get update" return fi apt-get update } function aptgetInstall(){ if [ -n "$noapt" ] ; then # skip install echo "skipping apt-get install for:$1" return fi # first, try to install without any prompt, then if anything goes wrong, normal install.. cmd="apt-get -y --no-remove --allow-unauthenticated install $1" logToFile "$cmd" $cmd if [ $? -ne 0 ]; then cmd="apt-get --allow-unauthenticated install $1" logToFile "$cmd" $cmd fi } function aptgetRemove(){ if [ -n "$noapt" ] ; then # skip uninstall echo "skipping apt-get remove for:$1" return fi # first, try to uninstall without any prompt, then if anything goes wrong, normal uninstall.. cmd="apt-get -y remove $1" logToFile "$cmd" $cmd if [ $? -ne 0 ]; then cmd="apt-get remove $1" logToFile "$cmd" $cmd fi } # Get distro name , by Marcel , thanks to marcel for fixing whole code syntax # No longer works in Ubuntu 13.04 # Fixed by Eric Martin function checkDistro() { # Get distro properly if [ -e /etc/issue ]; then distro=$( cat /etc/issue | awk '{ print $1 }' ) fi if [ ! -z "$distro" ]; then # Convert it to lowercase distro=$( echo $distro | awk '{print tolower($0)}' ) fi if [ -z "$distro" ] || [[ "$distro" != "ubuntu" && "$distro" != "debian" ]]; then if [ -e /etc/os-release ]; then distro=$( cat /etc/os-release | grep -o "^NAME=.*" | grep -o "[^NAME=\"].*[^\"]" ) fi fi # Assume Ubuntu if [ -z "$distro" ]; then distro="ubuntu" else # Convert it to lowercase distro=$( echo $distro | awk '{print tolower($0)}' ) fi # Get actual release version information version=$( lsb_release -r | awk '{ print $2 }' ) if [ -z "$version" ]; then version=$( cat /etc/issue | awk '{ print $2 }' ) fi # Separate year and version if [[ "$version" == *.* ]]; then yrelease=$( echo "$version" | cut -d. -f1 ) mrelease=$( echo "$version" | cut -d. -f2 ) fi # Get 64-bit OS or 32-bit OS [used in vsftpd fix] if [ $( uname -m ) == 'x86_64' ]; then OSBits=64 else OSBits=32 fi # Another way to get the version number # version=$(lsb_release -r | awk '{ print $2 }') echo "Your distro is $distro runnning version $version" } # Check if the running user is root, if not restart with sudo function checkUser() { if [ `whoami` != "root" ];then echo "you are $who, you have to be root to use ehcp installation program. switching to root mode, please enter password or re-run install.sh as root" sudo $0 # restart this with superuser-root privileges exit fi } # Function to kill any running ehcp / php daemons function killallEhcp() { for i in `ps aux | grep ehcpdaemon.sh | grep -v grep | awk -F " " '{ print $2 }'`;do kill -9 $i done for i in `ps aux | grep 'php index.php' | grep -v grep | awk -F " " '{ print $2 }'`;do kill -9 $i done } function checkPhp(){ which php if [ $? -eq 0 ] ; then echo "php seems installed. This is good.." else echo "PHP IS STILL NOT INSTALLED. THIS IS A SERIOUS PROBLEM. MOST PROBABLY, YOU WILL NOT BE ABLE TO CONTINUE. TRY TO INSTLL PHP yourself." echo "if rest of install is successfull, then, this is a false alarm, just ignore" fi } function launchPanel(){ firefox=`which firefox` if [ -n "$firefox" ] ; then echo "now, you should be able to navigate to your" echo "panel admin username: admin " echo "now will try to launch your control panel, if it is on local computer.. " echo -e "\nwill use firefox as browser...\n\n" $firefox "http://localhost" & fi } # Thanks a lot to earnolmartin@gmail.com for fail2ban integration & vsftpd fixes. function slaveDNSApparmorFix(){ # by earnolmartin@gmail.com if [ -e /etc/apparmor.d/usr.sbin.named ]; then echo -e "\nChanging bind apparmor rule to allow master DNS synchronization for slave setups.\n" sed -i 's#/etc/bind/\*\* r,#/etc/bind/\*\* rw,#g' /etc/apparmor.d/usr.sbin.named fi } function libldapFix(){ # by earnolmartin@gmail.com # install libldap, for vsftpd fix, without prompts #Remove originally installed libpam-ldap if it exists origDir=$(pwd) aptgetRemove libpam-ldap DEBIAN_FRONTEND=noninteractive apt-get -y install libpam-ldap cd $patchDir mkdir lib32gccfix cd lib32gccfix wget -O "ldap_conf.tar.gz" http://dinofly.com/files/linux/ldap_conf_64bit_vsftpd.tar.gz tar -zxvf ldap_conf.tar.gz cp ldap.conf /etc/ cd $origDir } function fixVSFTPConfig(){ # by earnolmartin@gmail.com sed -i 's/chroot_local_user=NO/chroot_local_user=YES/g' /etc/vsftpd.conf allowWriteValue=$( cat /etc/vsftpd.conf | grep -o "allow_writeable_chroot=.*" | grep -o "=.*$" | grep -o "[^=].*" ) if [ -z "$allowWriteValue" ]; then sh -c "echo 'allow_writeable_chroot=YES' >> /etc/vsftpd.conf" else sed -i 's/allow_writeable_chroot=NO/allow_writeable_chroot=YES/g' /etc/vsftpd.conf fi if [ $OSBits -eq "64" ]; then #aptgetInstall libpam-ldap # this is required in buggy vsftpd installs.. ubuntu 12.04,12.10, 13.04, now... libldapFix aptgetInstall libgcc1 # 64-bit 500 OOPS: priv_sock_get_cmd Fix # seccomp_sandbox=NO allowSandBox=$( cat /etc/vsftpd.conf | grep -o "seccomp_sandbox=.*" | grep -o "=.*$" | grep -o "[^=].*" ) if [ -z "$allowSandBox" ]; then sh -c "echo 'seccomp_sandbox=NO' >> /etc/vsftpd.conf" else sed -i 's/seccomp_sandbox=YES/seccomp_sandbox=NO/g' /etc/vsftpd.conf fi fi service vsftpd restart } function remove_vsftpd(){ #Remove originally installed vsftpd aptgetRemove vsftpd # Just incase it's been installed already or another version has been installed using dpgk, let's remove it dpkg --remove vsftpd } function ubuntuVSFTPDFix(){ # by earnolmartin@gmail.com # Get currently working directory origDir=$( pwd ) patchDir="/root/Downloads" if [ ! -e $patchDir ]; then mkdir $patchDir fi # Ubuntu VSFTPD Fixes if [ ! -z "$yrelease" ]; then if [ "$distro" == "ubuntu" ]; then if [ "$yrelease" -ge "12" ] && [ "$yrelease" -lt 13 ]; then if [ "$mrelease" == "04" ]; then # Run 12.04 Fix remove_vsftpd echo -e "\nRunning VSFTPD fix for Ubuntu 12.04\n" add-apt-repository -y ppa:thefrontiergroup/vsftpd aptget_Update aptgetInstall vsftpd fixVSFTPConfig elif [ "$mrelease" -eq "10" ]; then # Run 12.10 Fix remove_vsftpd echo -e "\nRunning VSFTPD fix for Ubuntu 12.10\n" #get the code cd $patchDir if [ ! -e vsftpd_2.3.5-3ubuntu1.deb ]; then if [ $OSBits -eq "32" ]; then wget -O "vsftpd_2.3.5-3ubuntu1.deb" http://dinofly.com/files/linux/vsftpd_2.3.5-3ubuntu1_i386.deb else wget -O "vsftpd_2.3.5-3ubuntu1.deb" http://dinofly.com/files/linux/vsftpd_2.3.5-3.jme_amd64.deb fi fi #install dpkg -i vsftpd_2.3.5-3ubuntu1.deb cd $origDir fixVSFTPConfig fi elif [ "$yrelease" -eq "13" ]; then if [ "$mrelease" == "04" ]; then remove_vsftpd echo -e "\nRunning VSFTPD fix for Ubuntu 13.04\n" cd $patchDir if [ ! -e vsftpd_3.0.2-patched_ubuntu.deb ]; then if [ $OSBits -eq "32" ]; then wget -O "vsftpd_3.0.2-patched_ubuntu.deb" http://dinofly.com/files/linux/vsftpd_3.0.2-patched_ubuntu_13.04_x86.deb else wget -O "vsftpd_3.0.2-patched_ubuntu.deb" http://dinofly.com/files/linux/vsftpd_3.0.2-1ubuntu1_amd64_patched.deb fi fi sudo dpkg -i vsftpd_3.0.2-patched_ubuntu.deb cd $origDir fixVSFTPConfig fi fi fi fi } function logDirFix(){ # by earnolmartin@gmail.com chmod 755 log chmod 744 log/ehcp_failed_authentication.log chown vsftpd:www-data log/ehcp_failed_authentication.log } function fixEHCPPerms(){ # by earnolmartin@gmail.com chmod a+rx /var/www/new/ehcp/ chmod -R a+r /var/www/new/ehcp/ find ./ -type d -exec chmod a+rx {} \; chown -R vsftpd:www-data /var/www/new/ehcp/webmail chmod 755 -R /var/www/new/ehcp/webmail chmod 755 /var/www/new/index.html } function fixPHPConfig(){ # by earnolmartin@gmail.com PHPConfFile="/etc/php5/cli/php.ini" if [ -e $PHPConfFile ]; then PHPConfCheck=$( cat $PHPConfFile | grep -o ";extension=mysql.so" ) if [ -z "$PHPConfCheck" ]; then sed -i "s/extension=mysql.so/;extension=mysql.so/g" $PHPConfFile service apache2 restart fi fi } ############################################################# # End Functions & Start Install # ############################################################# cd /var/www/new/ehcp/ installdir=$(pwd) if [ ! -f $installdir/install.sh ] ; then echo "install.sh is not in install dir. Run install.sh from within ehcp installation dir." exit 1 fi checkUser #ehcpHeader service apparmor stop & > /dev/null # apparmor causes many problems.. checkDistro #killallEhcp aptget_Update checkPhp # Post Install Functions by Eric Arnol-Martin mv /var/www/new/ehcp/install_?.php /etc/ehcp/ # move it, to prevent later unauthorized access of installer from web cd "/var/www/new/ehcp" # Run VSFTPD Fix depending on version ubuntuVSFTPDFix # Run SlaveDNS Fix So that DNS Zones can be transfered slaveDNSApparmorFix # Run log chmod fix logDirFix # Configure Fail2Ban for EHCP if Fail2Ban is present and configured # fail2banCheck # done in install*php files. # Fix EHCP Permissions fixEHCPPerms # Fix extra mysql module getting loaded in the PHP config printing warning messages fixPHPConfig # Launch firefox and the panel ############################################## launchPanel # you may disable following lines, these are for debug/check purposes. echo "now running ehcp daemon.." cd /var/log service ehcp restart echo "ehcp run/restart complete.." sleep 5 # to let ehcp log fill a little ps aux > debug.txt echo "============================================" >> debug.txt tail -100 /var/log/syslog >> debug.txt tail -100 /var/log/ehcp.log >> debug.txt echo "ehcp : Finished all operations.. go to your panel at http://yourip/ now..."