Commit 75bde1b8 authored by wyrie's avatar wyrie
Browse files

Helper script

  Bug fix updated layman path
• Bug fix include soap flag when installing php for web
• Bug fix use flags duplicated in is_package_installed
• Bug fix checking for mysql emerged line 543
• Bug fix substring match for quota package
• Improved use flag detection
• Moved layman install to meta_web as it's only required for jailkit
• Added prompt for courier or dovecot
• Added baselayout check
• Added apache module checks and configuration
• Added packages awstats & mod_ruby
parent ff1d9a79
...@@ -30,7 +30,7 @@ install_web="no" ...@@ -30,7 +30,7 @@ install_web="no"
install_ftp="no" install_ftp="no"
install_dns="no" install_dns="no"
spinner_pid=0 spinner_pid=0
version="0.6" version="0.7"
source_path=`dirname $0` source_path=`dirname $0`
source ${source_path}/utils.sh source ${source_path}/utils.sh
...@@ -40,7 +40,7 @@ function package_has_use_flag() ...@@ -40,7 +40,7 @@ function package_has_use_flag()
local package=$1 local package=$1
local useflag=$2 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" ] [ -n "$res" ]
} }
...@@ -64,13 +64,13 @@ function is_package_installed() ...@@ -64,13 +64,13 @@ function is_package_installed()
then then
for useflag in $2 for useflag in $2
do 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. # 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" package_has_use_flag "$1" "$useflag" || usechange="yes"
done done
flagedit $1 $uselist flagedit $1 $uselist --nowarn
fi fi
[ $installed -eq 0 ] && [ "$usechange" == "no" ] [ $installed -eq 0 ] && [ "$usechange" == "no" ]
...@@ -120,7 +120,7 @@ function install_packages() ...@@ -120,7 +120,7 @@ function install_packages()
if [ -n "$package_list" ] if [ -n "$package_list" ]
then 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 "$package_list"
echo -e "" echo -e ""
countdown "00:00:10" Continue in countdown "00:00:10" Continue in
...@@ -154,16 +154,37 @@ function install_rcscripts() ...@@ -154,16 +154,37 @@ function install_rcscripts()
{ {
if [ -n "$1" ] if [ -n "$1" ]
then then
printf "\e[1;37m%-40s\e[0m" "Adding packages to default runlevel"
start_spinner
for rc in $1 for rc in $1
do 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 done
fi
stop_spinner }
echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
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 fi
} }
...@@ -173,30 +194,76 @@ function meta_mail() ...@@ -173,30 +194,76 @@ function meta_mail()
local add_maildrop="" local add_maildrop=""
local remove_ssmtp="no" local remove_ssmtp="no"
local rc_scripts="" 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 "" echo -e ""
printf "\e[1;37m%-40s\e[0m" "Building list of required mail packages" printf "\e[1;37m%-40s\e[0m" "Building list of required mail packages"
start_spinner 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 then
is_package_installed "mail-mta/ssmtp" && local remove_ssmtp="yes"; # Ssmtp blocks postfix and is installed by default. 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" package_list="$package_list mail-mta/postfix"
rc_scripts="$rc_scripts 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 "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"; } is_package_installed "app-antivirus/clamav" || { package_list="$package_list app-antivirus/clamav"; rc_scripts="$rc_scripts clamd"; }
...@@ -219,6 +286,21 @@ function meta_mail() ...@@ -219,6 +286,21 @@ function meta_mail()
exec_command "COLLISION_IGNORE=\"/usr\" emerge mail-filter/maildrop" "Installing maildrop" exec_command "COLLISION_IGNORE=\"/usr\" emerge mail-filter/maildrop" "Installing maildrop"
fi 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" install_rcscripts "$rc_scripts"
} }
...@@ -229,15 +311,83 @@ function meta_web() ...@@ -229,15 +311,83 @@ function meta_web()
local linguas_add="no" local linguas_add="no"
local webmail_add="no" local webmail_add="no"
local rc_scripts="" 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 "" echo -e ""
printf "\e[1;37m%-40s\e[0m" "Building list of required web packages" printf "\e[1;37m%-40s\e[0m" "Building list of required web packages"
start_spinner 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
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
is_package_installed "www-apache/mod_fcgid" || package_list="$package_list www-apache/mod_fcgid" 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" if ! is_package_installed "app-admin/webalizer" "vhosts apache2"
then then
...@@ -256,6 +406,8 @@ function meta_web() ...@@ -256,6 +406,8 @@ function meta_web()
package_list="$package_list app-admin/webalizer" package_list="$package_list app-admin/webalizer"
fi fi
is_package_installed "www-misc/awstats" "vhosts apache2" || package_list="$package_list www-misc/awstats"
if ! is_package_installed "app-admin/vlogger" if ! is_package_installed "app-admin/vlogger"
then then
# Check if package is masked # Check if package is masked
...@@ -269,7 +421,7 @@ function meta_web() ...@@ -269,7 +421,7 @@ function meta_web()
is_package_installed "app-crypt/mcrypt" || package_list="$package_list app-crypt/mcrypt" 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" if ! is_package_installed "www-apache/mod_suphp"
then then
...@@ -282,7 +434,7 @@ function meta_web() ...@@ -282,7 +434,7 @@ function meta_web()
package_list="$package_list www-apache/mod_suphp" package_list="$package_list www-apache/mod_suphp"
fi 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" is_package_installed "media-gfx/imagemagick" "jpeg png tiff" || package_list="$package_list media-gfx/imagemagick"
...@@ -313,16 +465,16 @@ function meta_web() ...@@ -313,16 +465,16 @@ function meta_web()
package_list="$package_list app-admin/jailkit" package_list="$package_list app-admin/jailkit"
fi fi
if [ "$install_mail" == "yes" ] && ! is_package_installed "mail-client/squirrelmail" "vhosts" #if [ "$install_mail" == "yes" ] && ! is_package_installed "mail-client/squirrelmail" "vhosts"
then #then
if ! is_package_installed "app-admin/webapp-config" # if ! is_package_installed "app-admin/webapp-config"
then # then
package_list="$package_list app-admin/webapp-config" # package_list="$package_list app-admin/webapp-config"
fi # fi
webmail_add="yes" # webmail_add="yes"
package_list="$package_list mail-client/squirrelmail" # package_list="$package_list mail-client/squirrelmail"
fi #fi
stop_spinner stop_spinner
echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m" echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m"
...@@ -350,10 +502,15 @@ function meta_web() ...@@ -350,10 +502,15 @@ function meta_web()
echo "/usr/sbin/jk_chrootsh" >> /etc/shells echo "/usr/sbin/jk_chrootsh" >> /etc/shells
fi fi
if [ "$webmail_add" == "yes" ] for config_module in SUEXEC FCGID AUTH_DIGEST DAV DAV_FS RUBY
then do
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" enable_apache_module "$config_module"
fi 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" install_rcscripts "$rc_scripts"
} }
...@@ -386,7 +543,7 @@ function meta_ftp() ...@@ -386,7 +543,7 @@ function meta_ftp()
stop_spinner stop_spinner
echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m" 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 then
echo -e "" 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." 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."
...@@ -402,18 +559,39 @@ function meta_ftp() ...@@ -402,18 +559,39 @@ function meta_ftp()
function meta_dns() function meta_dns()
{ {
local package_list="" 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 ""
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 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 stop_spinner
echo -e "\e[1;37m[ \e[0m\e[1;32mdone\e[0m\e[1;37m ]\e[0m" 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_packages "$package_list" "Installing dns packages"
install_rcscripts "$rc_scripts"
} }
function meta_all() function meta_all()
...@@ -442,6 +620,24 @@ echo -e "\e[1;33mGentoo Linux ISPConfig setup script v$version\e[0m" ...@@ -442,6 +620,24 @@ echo -e "\e[1;33mGentoo Linux ISPConfig setup script v$version\e[0m"
echo -e "\e[1;32m========================================\e[0m" echo -e "\e[1;32m========================================\e[0m"
echo -e "" 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 sleep 0.5
valid_input "Would you like to sync portage now?" valid_input "Would you like to sync portage now?"
...@@ -521,42 +717,42 @@ fi ...@@ -521,42 +717,42 @@ fi
if ! is_package_installed "dev-db/mysql" "extraengine big-tables" if ! is_package_installed "dev-db/mysql" "extraengine big-tables"
then then
package_is_emerged "$1" package_is_emerged "dev-db/mysql"
installed=$? installed=$?
exec_command "emerge dev-db/mysql" "Installing MySql" exec_command "emerge dev-db/mysql" "Installing MySql"
if [ $installed -eq 1 ] if [ $installed -eq 1 ]
then then
exec_command "mysql_install_db" "Set-up mysql grant tables" echo -e ""
exec_command "/etc/init.d/mysql start" "Starting MySql" 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'."
exec_command "rc-update add mysql default" "Add MySql to default runlevel" echo -e ""
fi fi
fi fi
which vim &> /dev/null if [ ! -d '/var/lib/mysql/mysql' ]
if [ $? -ne 0 ]
then then
exec_command "emerge app-editors/vim" "Installing vim" exec_command "mysql_install_db" "Set-up mysql grant tables"
fi fi
is_package_installed "sys-devel/binutils" || exec_command "emerge sys-devel/binutils" "Installing binutils"; install_rcscripts "mysql"
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 mysql_started=`eselect rc show | grep mysql | grep started | grep -v grep`
if [ -z "$(layman -l | grep sunrise)" ] if [ -z "$mysql_started" ]
then then
layman -q -S > /dev/null exec_command "/etc/init.d/mysql start" "Starting MySQL service"
exec_command "layman -a sunrise" "Adding/syncing package overlay"
fi fi
if [ -z "$(grep 'local/portage/layman' /etc/make.conf)" ] which vim &> /dev/null
if [ $? -ne 0 ]
then then
echo "source /usr/local/portage/layman/make.conf" >> /etc/make.conf exec_command "emerge app-editors/vim" "Installing vim"
fi fi
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";
echo -e "" echo -e ""
# Service based packages # Service based packages
...@@ -580,6 +776,9 @@ else ...@@ -580,6 +776,9 @@ else
fi fi
echo -e "" 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?" valid_input "Install web related packages?"
install_web=$Return_Val install_web=$Return_Val
if [ "$install_web" = "yes" ] if [ "$install_web" = "yes" ]
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment