Till Brehm
2016-07-24 b9a3ef486ebcde18a5ade37865ff8f397185d24f
helper_scripts/gentoo_setup.sh
@@ -30,7 +30,7 @@
install_ftp="no"
install_dns="no"
spinner_pid=0
version="0.6"
version="0.7"
source_path=`dirname $0`
source ${source_path}/utils.sh
@@ -40,8 +40,16 @@
        local package=$1
        local useflag=$2
        res=`equery -C -N uses $package | grep -o -E "^[ +-]+$useflag" | grep "+"`
        res=`equery -C -N uses $package | grep -o -P "^ [-+]{1} \+ $useflag"`
        [ -n "$res" ]
}
function package_is_emerged()
{
      local package=$1
      installed=`equery -C -N list -e -i $1 | grep $1 | grep "^\[I"`
      [ -n "$installed" ]
}
function is_package_installed()
@@ -49,22 +57,23 @@
        local usechange="no"
        local uselist=""
        installed=`equery -C -N list -e -i $1 | grep $1 | grep "^\[I"`
        package_is_emerged "$1"
      installed=$?
        if [ -n "$2" ] # Use flags parsed
        then
                for useflag in $2
                do
                        uselist="$uselist +$2"
                        uselist="$uselist +$useflag"
                        # If the use flag isn't currently set or wasn't enabled when installed we'll need to re-install it.
                        package_has_use_flag "$1" "$useflag" || usechange="yes"
                done
                flagedit $1 $uselist
                flagedit $1 $uselist --nowarn
        fi
        [ -n "$installed" ] && [ "$usechange" == "no" ]
        [ $installed -eq 0 ] && [ "$usechange" == "no" ]
}
function install_progress()
@@ -111,7 +120,7 @@
   
   if [ -n "$package_list" ]
   then
      echo -e "The following packages are going to be emerged:"
      echo -e "The following packages are going to be emerged (not including dependencies):"
      echo -e "$package_list"
      echo -e ""
      countdown "00:00:10" Continue in
@@ -145,16 +154,37 @@
{
   if [ -n "$1" ]
   then
      printf "\e[1;37m%-40s\e[0m" "Adding packages to default runlevel"
      start_spinner
      for rc in $1
      do
         rc-update add $rc default &> /dev/null
         res=`rc-status default | grep "$1" | grep -v grep`
         if [ -z "$res" ]
         then
           printf "\e[1;37m%-40s\e[0m" "Adding $rc to default runlevel"
           start_spinner
           rc-update add $rc default &> /dev/null
           stop_spinner
           echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
         fi
      done
      stop_spinner
      echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
   fi
}
function enable_apache_module()
{
   local apache_conffile='/etc/conf.d/apache2'
   if [ -n "$1" ]
   then
      source $apache_conffile
      if [ $(expr "$APACHE2_OPTS" : ".*$1.*") == "0" ]
      then
         APACHE2_OPTS="${APACHE2_OPTS} -D $1"
         sed -i -e "s:APACHE2_OPTS=\".*\":APACHE2_OPTS=\"${APACHE2_OPTS}\":" $apache_conffile
      fi
   fi
}
@@ -164,30 +194,76 @@
   local add_maildrop=""
   local remove_ssmtp="no"
   local rc_scripts=""
   local use_courier="no"
   local use_dovecot="no"
   local useflags_postfix="mysql"
   local installed_postfix="no"
   local installed_amavisd="no"
   valid_input "Do you want to use dovecot or courier?" "dovecot/courier"
   if [ "$Return_Val" = "dovecot" ]
   then
      use_dovecot="yes"
   else
       use_courier="yes"
   fi
   
   echo -e ""
   printf "\e[1;37m%-40s\e[0m" "Building list of required mail packages"
   
   start_spinner
   
   is_package_installed "net-libs/courier-authlib" "mysql" || { package_list="$package_list net-libs/courier-authlib"; rc_scripts="$rc_scripts courier-authlib"; }
   if [ "$use_courier" == "yes" ]
   then
      is_package_installed "net-libs/courier-authlib" "mysql" || { package_list="$package_list net-libs/courier-authlib"; rc_scripts="$rc_scripts courier-authlib"; }
   
   is_package_installed "net-mail/courier-imap" "fam" || { package_list="$package_list net-mail/courier-imap"; rc_scripts="$rc_scripts courier-imapd courier-imapd-ssl courier-pop3d courier-pop3d-ssl"; }
      is_package_installed "net-mail/courier-imap" "fam" || { package_list="$package_list net-mail/courier-imap"; rc_scripts="$rc_scripts courier-imapd courier-imapd-ssl courier-pop3d courier-pop3d-ssl"; }
      is_package_installed "mail-filter/maildrop" || add_maildrop="yes" # Avoid file collision warnings from emerge
      is_package_installed "dev-libs/cyrus-sasl" "mysql" || { package_list="$package_list dev-libs/cyrus-sasl"; rc_scripts="$rc_scripts saslauthd"; }
      useflags_postfix="$useflags_postfix sasl"
   fi
   
   is_package_installed "mail-filter/maildrop" || add_maildrop="yes" # Avoid file collision warnings from emerge
   if [ "$use_dovecot" == "yes" ]
   then
      is_package_installed "net-mail/dovecot" "sieve managesieve maildir" || { package_list="$package_list net-mail/dovecot"; rc_scripts="$rc_scripts dovecot"; }
      useflags_postfix="$useflags_postfix dovecot-sasl"
   fi
   
   if ! is_package_installed "mail-mta/postfix" "mysql sasl"
   if ! is_package_installed "mail-mta/postfix" "$useflags_postfix"
   then
      is_package_installed "mail-mta/ssmtp" && local remove_ssmtp="yes"; # Ssmtp blocks postfix and is installed by default.
      package_list="$package_list mail-mta/postfix"
      rc_scripts="$rc_scripts postfix"
   fi
      package_is_emerged "mail-mta/postfix" # USE flag difference will result in re-installing. If we are installing for the first time do some things later.
      installed=$?
   
   is_package_installed "dev-libs/cyrus-sasl" "mysql" || { package_list="$package_list dev-libs/cyrus-sasl"; rc_scripts="$rc_scripts saslauthd"; }
      if [ $installed -eq 1 ]
      then
         installed_postfix="yes"
      fi
   fi
   
   is_package_installed "net-mail/getmail" || package_list="$package_list net-mail/getmail"
   
   is_package_installed "mail-filter/amavisd-new" "mysql razor spamassassin" || { package_list="$package_list mail-filter/amavisd-new"; rc_scripts="$rc_scripts amavisd"; }
   if ! is_package_installed "mail-filter/amavisd-new" "mysql razor spamassassin"
   then
      package_list="$package_list mail-filter/amavisd-new"
      rc_scripts="$rc_scripts amavisd"
      package_is_emerged "mail-filter/amavisd-new" # USE flag difference will result in re-installing. If we are installing for the first time do some things later.
      installed=$?
      if [ $installed -eq 1 ]
      then
         installed_amavisd="yes"
      fi
   fi
   
   is_package_installed "app-antivirus/clamav" || { package_list="$package_list app-antivirus/clamav"; rc_scripts="$rc_scripts clamd"; }
   
@@ -210,6 +286,21 @@
      exec_command "COLLISION_IGNORE=\"/usr\" emerge mail-filter/maildrop" "Installing maildrop"
   fi
   
   if [ "$installed_postfix" == "yes" ] && [ ! -d '/etc/mail/aliases.db' ]
   then
      postmap /etc/mail/aliases 2> /dev/null
   fi
   if [ "$installed_amavisd" == "yes" ]
   then
      if [ -e '/usr/share/spamassassin/sa-update-pubkey.txt' ]
      then
         sa-update --import /usr/share/spamassassin/sa-update-pubkey.txt
      fi
      sa-update
   fi
   install_rcscripts "$rc_scripts"
}
@@ -220,15 +311,83 @@
   local linguas_add="no"
   local webmail_add="no"
   local rc_scripts=""
   local installed_fcgid="no"
   if ! is_package_installed "dev-vcs/subversion"
    then
      flagedit dev-vcs/subversion -apache2 --nowarn
    fi
   is_package_installed "app-portage/layman" "subversion" || exec_command "emerge app-portage/layman" "Installing layman";
   # Check if sunrise overlay has been enabled
   if [ -z "$(layman -l | grep sunrise)" ]
   then
      layman -q -S > /dev/null
      exec_command "layman -a sunrise" "Adding/syncing package overlay"
   fi
   if [ -z "$(grep 'var/lib/layman' /etc/make.conf)" ]
   then
      echo "source /var/lib/layman/make.conf" >> /etc/make.conf
   fi
   
   echo -e ""
   printf "\e[1;37m%-40s\e[0m" "Building list of required web packages"
   
   start_spinner
   
   is_package_installed "www-servers/apache" "ssl suexec doc" || { package_list="$package_list www-servers/apache"; rc_scripts="$rc_scripts apache2"; }
   # Check profile and ensure the apache modules ISPConfig needs are enabled.
   source /etc/make.conf
   
   is_package_installed "www-apache/mod_fcgid" || package_list="$package_list www-apache/mod_fcgid"
   if [ -z "${APACHE2_MODULES+xxx}" ] # Not set, fetch defaults
   then
      source /usr/portage/profiles/base/make.defaults
      echo "APACHE2_MODULES=\"$APACHE2_MODULES\"" >> /etc/make.conf
      source /etc/make.conf
   fi
   local added_module='no'
   for module in rewrite dav dav_fs auth_digest
   do
      if [ $(expr "$APACHE2_MODULES" : ".*$module.*") == "0" ]
      then
         APACHE2_MODULES="${APACHE2_MODULES} $module"
         added_module='yes'
      fi
   done
   if [ "$added_module" == "yes" ]
   then
      sed -i -e "s:APACHE2_MODULES=\".*\":APACHE2_MODULES=\"${APACHE2_MODULES}\":" /etc/make.conf
   fi
   local added_worker='no'
   if [ -z "${APACHE2_MPMS+xxx}" ] # Not set, fetch defaults
   then
      echo 'APACHE2_MPMS="prefork"' >> /etc/make.conf
      added_worker='yes'
   else
      if [ $(expr "$APACHE2_MPMS" : '.*prefork.*') == "0" ]
      then
         APACHE2_MPMS="${APACHE2_MPMS} prefork"
         sed -i -e "s:APACHE2_MPMS=\".*\":APACHE2_MPMS=\"${APACHE2_MPMS}\":" /etc/make.conf
         added_worker='yes'
      fi
   fi
   if is_package_installed "www-servers/apache" "ssl suexec doc" || "$added_module" == "yes" || "$added_worker" == "yes"
   then
      package_list="$package_list www-servers/apache"
      rc_scripts="$rc_scripts apache2"
   fi
   if ! is_package_installed "www-apache/mod_fcgid"
   then
      installed_fcgid="yes"
      package_list="$package_list www-apache/mod_fcgid"
   fi
   
   if ! is_package_installed "app-admin/webalizer" "vhosts apache2"
   then
@@ -247,7 +406,9 @@
      package_list="$package_list app-admin/webalizer"
   fi
   
   if is_package_installed "app-admin/vlogger"
   is_package_installed "www-misc/awstats" "vhosts apache2" || package_list="$package_list www-misc/awstats"
   if ! is_package_installed "app-admin/vlogger" "dbi"
   then
      # Check if package is masked
      if [ -n "$(equery -C -N list -I -o -e app-admin/vlogger | grep app-admin/vlogger | awk '{print $2}' | grep '^\[M')" ]
@@ -260,7 +421,7 @@
   
   is_package_installed "app-crypt/mcrypt" || package_list="$package_list app-crypt/mcrypt"
   
   is_package_installed "dev-lang/php" "apache2 gd mysql mysqli imap cli cgi pcre xml zlib crypt ctype session unicode mhash ftp" || package_list="$package_list dev-lang/php"
   is_package_installed "dev-lang/php" "apache2 gd mysql mysqli imap cli cgi pcre xml zlib crypt ctype session unicode mhash ftp soap" || package_list="$package_list dev-lang/php"
   
   if ! is_package_installed "www-apache/mod_suphp"
   then
@@ -273,7 +434,7 @@
      package_list="$package_list www-apache/mod_suphp"
   fi
   
   is_package_installed "dev-db/phpmyadmin" || package_list="$package_list dev-db/phpmyadmin"
   is_package_installed "www-apache/mod_ruby" || package_list="$package_list www-apache/mod_ruby"
   
   is_package_installed "media-gfx/imagemagick" "jpeg png tiff" || package_list="$package_list media-gfx/imagemagick"
   
@@ -284,6 +445,10 @@
   is_package_installed "dev-php5/pecl-imagick" || package_list="$package_list dev-php5/pecl-imagick"
   
   is_package_installed "sys-auth/pam_mysql" || package_list="$package_list sys-auth/pam_mysql"
   is_package_installed "app-admin/sudo" || package_list="$package_list app-admin/sudo"
   is_package_installed "app-arch/zip" || package_list="$package_list app-arch/zip"
   
   if ! is_package_installed "app-admin/jailkit"
   then
@@ -304,16 +469,16 @@
      package_list="$package_list app-admin/jailkit"
   fi
   
   if [ "$install_mail" == "yes" ] && ! is_package_installed "mail-client/squirrelmail" "vhosts"
   then
      if ! is_package_installed "app-admin/webapp-config"
      then
         package_list="$package_list app-admin/webapp-config"
      fi
   #if [ "$install_mail" == "yes" ] && ! is_package_installed "mail-client/squirrelmail" "vhosts"
   #then
   #   if ! is_package_installed "app-admin/webapp-config"
   #   then
   #      package_list="$package_list app-admin/webapp-config"
   #   fi
      
      webmail_add="yes"
      package_list="$package_list mail-client/squirrelmail"
   fi
   #   webmail_add="yes"
   #   package_list="$package_list mail-client/squirrelmail"
   #fi
   
   stop_spinner
   echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
@@ -341,10 +506,15 @@
      echo "/usr/sbin/jk_chrootsh" >> /etc/shells
   fi
   
   if [ "$webmail_add" == "yes" ]
   then
      exec_command "webapp-config -I -h localhost -u apache -d /webmail squirrelmail $(ls -r /usr/share/webapps/squirrelmail/ | awk '{print $1}')" "Adding squirrelmail to localhost"
   fi
   for config_module in SUEXEC FCGID AUTH_DIGEST DAV DAV_FS RUBY
   do
      enable_apache_module "$config_module"
   done
   #if [ "$webmail_add" == "yes" ]
   #then
   #   exec_command "webapp-config -I -h localhost -u apache -d /webmail squirrelmail $(ls -r /usr/share/webapps/squirrelmail/ | awk '{print $1}')" "Adding squirrelmail to localhost"
   #fi
   
   install_rcscripts "$rc_scripts"
}
@@ -377,7 +547,7 @@
   stop_spinner
   echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
   
   if [ $(expr match "$package_list" 'sys-fs/quota') -ne 0 ]
   if [ $(expr "$package_list" : '.*sys-fs/quota.*') -ne 0 ]
   then
      echo -e ""
      echo -e "\e[1;33mNotice:\e[0m Don't forget to edit your fstab file and add the usrquota & grpquota options to your data partition."
@@ -393,18 +563,39 @@
function meta_dns()
{
   local package_list=""
   local use_bind="no"
   local use_pdns="no"
   valid_input "Do you want to use bind or powerdns?" "bind/powerdns"
   if [ "$Return_Val" = "bind" ]
   then
      use_bind="yes"
   else
       use_pdns="yes"
   fi
   
   echo -e ""
   echo -e "\e[1;37mBuilding list of required dns packages\e[0m\n"
   printf "\e[1;37m%-40s\e[0m" "Building list of required dns packages"
   
   start_spinner
   
   is_package_installed "net-dns/pdns" "mysql" || package_list="$package_list net-dns/pdns"
   if [ "$use_bind" == "yes" ]
   then
      is_package_installed "net-dns/bind" "mysql dlz" || { package_list="$package_list net-dns/bind"; rc_scripts="$rc_scripts named"; }
   fi
   if [ "$use_pdns" == "yes" ]
   then
      is_package_installed "net-dns/pdns" "mysql" || package_list="$package_list net-dns/pdns";
   fi
   
   stop_spinner
   echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
   
   install_packages "$package_list" "Installing dns packages"
   install_rcscripts "$rc_scripts"
}
function meta_all()
@@ -432,6 +623,24 @@
echo -e "\e[1;33mGentoo Linux ISPConfig setup script v$version\e[0m"
echo -e "\e[1;32m========================================\e[0m"
echo -e ""
if [ -e "/etc/gentoo-release" ]
then
   BASELAYOUT_VERSION=$(cat /etc/gentoo-release | sed "s/[^0-9.]//g")
   package_is_emerged "sys-apps/baselayout-$BASELAYOUT_VERSION"
   installed=$?
   if [ "$installed" != "0" ]
   then
      echo -e ""
      echo "This script is exclusively for use with a Gentoo Linux system."
      exit 10
   fi
else
   echo -e ""
   echo "This script is exclusively for use with a Gentoo Linux system."
   exit 10
fi
sleep 0.5
@@ -468,7 +677,7 @@
   for logger in $loggers
   do
      if ! is_package_installed "app-admin/$logger" && [ -n "$(rc-config list default | grep $logger)" ]
      if is_package_installed "app-admin/$logger" && [ -n "$(rc-config list default | grep $logger)" ]
      then
         clogger=$logger
         break
@@ -491,7 +700,7 @@
      if [ "$Return_Val" = "yes" ]
      then
         echo -e ""
         exec_command "/etc/init.d/syslog-ng stop" "Stopping $clogger"
         exec_command "/etc/init.d/$clogger stop" "Stopping $clogger"
         exec_command "rc-update del $clogger default" "Remove $clogger from default runlevel"
      else
         rsyslog_install="no"
@@ -503,7 +712,7 @@
   then
      exec_command "emerge app-admin/rsyslog" "Installing rsyslog"
      exec_command "/etc/init.d/rsyslog start" "Starting rsyslog"
      exec_command "rc-update add mysql default" "Add rsyslog to default runlevel"
      exec_command "rc-update add rsyslog default" "Add rsyslog to default runlevel"
   fi
   
   echo -e ""
@@ -512,10 +721,30 @@
if ! is_package_installed "dev-db/mysql" "extraengine big-tables"
then
   package_is_emerged "dev-db/mysql"
   installed=$?
   exec_command "emerge dev-db/mysql" "Installing MySql"
   if [ $installed -eq 1 ]
   then
      echo -e ""
      echo -e "\e[1;33mNotice:\e[0m Don't forget to set the mysql root password with: /usr/bin/mysqladmin -u root password 'new-password'."
      echo -e ""
   fi
fi
if [ ! -d '/var/lib/mysql/mysql' ]
then
   exec_command "mysql_install_db"   "Set-up mysql grant tables"
   exec_command "/etc/init.d/mysql start" "Starting MySql"
   exec_command "rc-update add mysql default" "Add MySql to default runlevel"
fi
install_rcscripts "mysql"
mysql_started=`eselect rc show | grep mysql | grep started | grep -v grep`
if [ -z "$mysql_started" ]
then
   exec_command "/etc/init.d/mysql start"   "Starting MySQL service"
fi
which vim &> /dev/null
@@ -527,19 +756,6 @@
is_package_installed "sys-devel/binutils" || exec_command "emerge sys-devel/binutils" "Installing binutils";
is_package_installed "app-forensics/rkhunter" || exec_command "emerge app-forensics/rkhunter" "Installing rkhunter";
is_package_installed "net-analyzer/fail2ban" || exec_command "emerge net-analyzer/fail2ban" "Installing fail2ban";
is_package_installed "app-portage/layman" "subversion" || exec_command "emerge app-portage/layman" "Installing layman";
# Check if sunrise overlay has been enabled
if [ -z "$(layman -l | grep sunrise)" ]
then
   layman -q -S > /dev/null
   exec_command "layman -a sunrise" "Adding/syncing package overlay"
fi
if [ -z "$(grep 'local/portage/layman' /etc/make.conf)" ]
then
   echo "source /usr/local/portage/layman/make.conf" >> /etc/make.conf
fi
echo -e ""
@@ -564,6 +780,9 @@
   fi
   
   echo -e ""
   echo -e "\e[1;33mNotice:\e[0m If this server is going to run the ISPConfig interface, say 'yes' to web related packages."
   echo -e ""
   valid_input "Install web related packages?"
   install_web=$Return_Val
   if [ "$install_web" = "yes" ]
@@ -588,6 +807,11 @@
   fi
fi
if [ "$install_web" = "no" ] && ! is_package_installed "dev-lang/php" "-apache2 gd mysql mysqli imap cli cgi pcre xml zlib crypt ctype session unicode mhash ftp"
then
   exec_command "emerge dev-lang/php" "Installing PHP"
fi
echo -e ""
echo -e "\e[1;33mSetup script completed\e[0m"
echo -e "\e[1;32m========================================\e[0m"