diff --git a/bin/installfog.sh b/bin/installfog.sh index aa7a8197c6..56beb2ecde 100755 --- a/bin/installfog.sh +++ b/bin/installfog.sh @@ -23,7 +23,30 @@ if [[ ! $EUID -eq 0 ]]; then echo "FOG Installation must be run as root user" exit 1 fi -which useradd >/dev/null 2>&1 + +[[ -z $OS ]] && OS=$(uname -s) +if [[ $OS =~ ^[^Ll][^Ii][^Nn][^Uu][^Xx] ]]; then + echo "We do not currently support Installation on non-Linux Operating Systems" + exit 2 # Fail OS Check +else + if [[ -f /etc/os-release ]]; then + [[ -z $linuxReleaseName ]] && linuxReleaseName=$(sed -n 's/^NAME=\(.*\)/\1/p' /etc/os-release | tr -d '"') + [[ -z $OSVersion ]] && OSVersion=$(sed -n 's/^VERSION_ID=\([^.]*\).*/\1/p' /etc/os-release | tr -d '"') + elif [[ -f /etc/redhat-release ]]; then + [[ -z $linuxReleaseName ]] && linuxReleaseName=$(cat /etc/redhat-release | awk '{print $1}') + [[ -z $OSVersion ]] && OSVersion=$(cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*// | awk -F. '{print $1}') + elif [[ -f /etc/debian_version ]]; then + [[ -z $linuxReleaseName ]] && linuxReleaseName='Debian' + [[ -z $OSVersion ]] && OSVersion=$(cat /etc/debian_version) + fi +fi + +if [[ $linuxReleaseName == "Alpine Linux" ]]; then + echo "Linuxname = ${linuxReleaseName}" + which adduser >/dev/null 2>&1 +else + which useradd >/dev/null 2>&1 +fi if [[ $? -eq 1 || $(echo $PATH | grep -o "sbin" | wc -l) -lt 2 ]]; then echo "Please switch to a proper root environment to run the installer!" echo "Use 'sudo -i' or 'su -' (skip the ' and note the hyphen at the end" @@ -360,6 +383,8 @@ if [[ ! $exitcode -eq 0 ]]; then *[Aa][Rr][Cc][Hh]*) pacman -Sy --noconfirm lsb-release >>$workingdir/error_logs/fog_error_${version}.log 2>&1 ;; + *[Aa][Ll][Pp][Ii][Nn][Ee]*) + ;; esac fi [[ -z $OSVersion ]] && OSVersion=$(lsb_release -r| awk -F'[^0-9]*' /^[Rr]elease\([^.]*\).*/'{print $2}') diff --git a/lib/alpine/config.sh b/lib/alpine/config.sh new file mode 100644 index 0000000000..2e15066e29 --- /dev/null +++ b/lib/alpine/config.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# lib/alpine/config.sh +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +[[ -z $packages ]] && packages="openrc nginx bc cdrkit curl gcc g++ git gzip lftp m4 make mariadb mariadb-client net-tools nfs-utils openssh openssl perl perl-crypt-passwdmd5 php7 php7-session php7-fpm php7-mbstring php7-mcrypt php7-soap php7-openssl php7-gmp php7-pdo_odbc php7-json php7-dom php7-pdo php7-zip php7-mysqli php7-sqlite3 php7-apcu php7-pdo_pgsql php7-bcmath php7-gd php7-odbc php7-pdo_mysql php7-pdo_sqlite php7-gettext php7-xmlreader php7-xmlrpc php7-bz2 php7-iconv php7-pdo_dblib php7-curl php7-sockets php7-mysqli php7-ctype syslinux tar tftp-hpa vsftpd wget xz" +[[ -z $packageinstaller ]] && packageinstaller="apk add" +[[ -z $packagelist ]] && packagelist="apk info" +[[ -z $packageupdater ]] && packageupdater="apk update && apk upgrade" +[[ -z $packmanUpdate ]] && packmanUpdate="$packageinstaller" +[[ -z $packageQuery ]] && packageQuery="apk info -e \$x " +[[ -z $langPackages ]] && langPackages="iso-codes" +[[ -z $dhcpname ]] && dhcpname="" +if [[ -z $webdirdest ]]; then + if [[ -z $docroot ]]; then + docroot="/var/www/" + webdirdest="${docroot}fog/" + elif [[ "$docroot" != *'fog'* ]]; then + webdirdest="${docroot}fog/" + else + webdirdest="${docroot}/" + fi +fi +[[ -z $webredirect ]] && webredirect="${webdirdest}/index.php" +[[ -z $apacheuser ]] && apacheuser="nginx" +[[ -z $apachelogdir ]] && apachelogdir="/var/log/nginx" +[[ -z $apacheerrlog ]] && apacheerrlog="$apachelogdir/error.log" +[[ -z $apacheacclog ]] && apacheacclog="$apachelogdir/access.log" +[[ -z $httpdconf ]] && httpdconf="/etc/nginx/nginx.conf" +[[ -z $etcconf ]] && etcconf="/etc/nginx/http.d/default.conf" +[[ -z $phpini ]] && phpini="/etc/php7/php.ini" +[[ -z $storageLocation ]] && storageLocation="/images" +[[ -z $storageLocationCapture ]] && storageLocationCapture="${storageLocation}/dev" +[[ -z $dhcpconfig ]] && dhcpconfig="/etc/dhcpd.conf" +[[ -z $dhcpconfigother ]] && dhcpconfigother="/etc/dhcp/dhcpd.conf" +[[ -z $tftpdirdst ]] && tftpdirdst="/var/tftpboot" +[[ -z $tftpconfig ]] && tftpconfig="/etc/xinetd.d/tftpd" +[[ -z $ftpxinetd ]] && ftpxinetd="/etc/xinetd.d/vsftpd" +[[ -z $ftpconfig ]] && ftpconfig="/etc/vsftpd.conf" +[[ -z $dhcpd ]] && dhcpd="dhcpd4" +[[ -z $snapindir ]] && snapindir="/opt/fog/snapins" +[[ -z $php_ver ]] && php_ver="7" +[[ -z $phpfpm ]] && phpfpm="php-fpm${php_ver}" diff --git a/lib/common/config.sh b/lib/common/config.sh index e5c1bb06cf..42d54cf2ef 100755 --- a/lib/common/config.sh +++ b/lib/common/config.sh @@ -1,3 +1,4 @@ +# lib/common/config.sh # FOG is a computer imaging solution. # Copyright (C) 2007 Chuck Syperski & Jian Zhang # @@ -72,6 +73,9 @@ else *[Uu][Bb][Uu][Nn][Tt][Uu]*|*[Bb][Ii][Aa][Nn]*|*[Mm][Ii][Nn][Tt]*) initdsrc="../packages/init.d/ubuntu" ;; + *[Aa][Ll][Pp][Ii][Nn][Ee]*) + initdsrc="../packages/init.d/alpine" + ;; *) initdsrc="../packages/init.d/redhat" ;; diff --git a/lib/common/functions.sh b/lib/common/functions.sh index bc3ec59591..30af7c22a5 100755 --- a/lib/common/functions.sh +++ b/lib/common/functions.sh @@ -426,29 +426,31 @@ installFOGServices() { errorStat $? } configureUDPCast() { - dots "Setting up UDPCast" - cp -Rf "$udpcastsrc" "$udpcasttmp" - cur=$(pwd) - cd /tmp - tar xvzf "$udpcasttmp" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - cd $udpcastout - grep -q 'BCM[0-9][0-9][0-9][0-9]' /proc/cpuinfo >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - if [[ $? -eq 0 ]]; then - wget -qO config.guess "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - wget -qO config.sub "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - chmod +x config.guess config.sub >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ $osid -ne 4 ]]; then + dots "Setting up UDPCast" + cp -Rf "$udpcastsrc" "$udpcasttmp" + cur=$(pwd) + cd /tmp + tar xvzf "$udpcasttmp" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + cd $udpcastout + grep -q 'BCM[0-9][0-9][0-9][0-9]' /proc/cpuinfo >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ $? -eq 0 ]]; then + wget -qO config.guess "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + wget -qO config.sub "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + chmod +x config.guess config.sub >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi + errorStat $? + dots "Configuring UDPCast" + ./configure >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + errorStat $? + dots "Building UDPCast" + make >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + errorStat $? + dots "Installing UDPCast" + make install >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + errorStat $? + cd $cur fi - errorStat $? - dots "Configuring UDPCast" - ./configure >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - errorStat $? - dots "Building UDPCast" - make >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - errorStat $? - dots "Installing UDPCast" - make install >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - errorStat $? - cd $cur } configureFTP() { dots "Setting up and starting VSFTP Server..." @@ -530,7 +532,7 @@ configureTFTPandPXE() { if [[ -f $tftpconfig ]]; then cp -Rf $tftpconfig ${tftpconfig}.fogbackup >>$workingdir/error_logs/fog_error_${version}.log 2>&1 fi - if [[ $noTftpBuild != "true" ]]; then + if [[ $noTftpBuild != "true" ]] && [[ $osid -ne 4 ]]; then echo -e "# default: off\n# description: The tftp server serves files using the trivial file transfer \n# protocol. The tftp protocol is often used to boot diskless \n# workstations, download configuration files to network-aware printers, \n# and to start the installation process for some operating systems.\nservice tftp\n{\n socket_type = dgram\n protocol = udp\n wait = yes\n user = root\n server = /usr/sbin/in.tftpd\n server_args = -s ${tftpdirdst}\n disable = no\n per_source = 11\n cps = 100 2\n flags = IPv4\n}" > "$tftpconfig" fi case $systemctl in @@ -571,6 +573,10 @@ configureTFTPandPXE() { sleep 2 $initdpath/xinetd start >>$workingdir/error_logs/fog_error_${version}.log 2>&1 sleep 2 + elif [[ $osid -eq 4 ]]; then + $initdpath/in.tftpd stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sleep 2 + $initdpath/in.tftpd start >>$workingdir/error_logs/fog_error_${version}.log 2>&1 else chkconfig xinetd on >>$workingdir/error_logs/fog_error_${version}.log 2>&1 service xinetd stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 @@ -762,7 +768,7 @@ installPackages() { done ;; php${php_ver}-mysql*) - for phpmysql in $(echo php${php_ver}-mysqlnd php${php_ver}-mysql); do + for phpmysql in $(echo php${php_ver}-mysqli php${php_ver}-mysqlnd php${php_ver}-mysql); do eval $packagelist "$phpmysql" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 if [[ $? -eq 0 ]]; then x=$phpmysql @@ -969,6 +975,12 @@ doOSSpecificIncludes() { . ../lib/arch/config.sh systemctl="yes" ;; + 4) + echo -e "\n\n Starting Alpine Installation\n\n" + osname="Alpine" + . ../lib/alpine/config.sh + systemctl="no" + ;; *) echo -e " Sorry, answer not recognized\n\n" sleep 2 @@ -1092,7 +1104,11 @@ installInitScript() { configureMySql() { stopInitScript dots "Setting up and starting MySQL" - dbservice=$(systemctl list-units | grep -o -e "mariadb\.service" -e "mysqld\.service" -e "mysql\.service" | tr -d '@') + if [[ $osid -eq 4 ]]; then + dbservice=$(rc-service -l | grep mariadb) + else + dbservice=$(systemctl list-units | grep -o -e "mariadb\.service" -e "mysqld\.service" -e "mysql\.service" | tr -d '@') + fi [[ -z $dbservice ]] && dbservice=$(systemctl list-unit-files | grep -v bad | grep -o -e "mariadb\.service" -e "mysqld\.service" -e "mysql\.service" | tr -d '@') for mysqlconf in $(grep -rl '.*skip-networking' /etc | grep -v init.d); do sed -i '/.*skip-networking/ s/^#*/#/' -i $mysqlconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 @@ -1387,7 +1403,14 @@ configureUsers() { echo "Skipped" fi else - useradd -s "/bin/bash" -d "/home/${username}" -m ${username} >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ $osid -eq 4 ]]; then + addgroup -S ${username} >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + adduser -s "/bin/bash" -h "/home/${username}" -S ${username} >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + touch "/home/${username}/.bashrc" + chown $username:$username "/home/${username}/.bashrc" + else + useradd -s "/bin/bash" -d "/home/${username}" -m ${username} >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi errorStat $? fi if [[ ! -d /home/$username ]]; then @@ -1402,7 +1425,9 @@ configureUsers() { #errorStat $? fi dots "Locking $username as a system account" - chsh -s /bin/bash $username >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ $osid -ne 4 ]]; then + chsh -s /bin/bash $username >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi textmessage="You seem to be using the '$username' system account to logon and work \non your FOG server system.\n\nIt's NOT recommended to use this account! Please create a new \naccount for administrative tasks.\n\nIf you re-run the installer it would reset the 'fog' account \npassword and therefore lock you out of the system!\n\nTake care, \nyour FOGproject team" grep -q "exit 1" /home/$username/.bashrc || cat >>/home/$username/.bashrc <>$workingdir/error_logs/fog_error_${version}.log 2>&1 errorStat $? [[ $httpproto == https ]] && sslenabled=" (SSL)" || sslenabled=" (no SSL)" - dots "Setting up Apache virtual host${sslenabled}" - case $novhost in - [Yy]|[Yy][Ee][Ss]) - echo "Skipped" - ;; - *) - if [[ $osid -eq 2 ]]; then - a2dissite 001-fog >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2ensite 000-default >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - fi - mv -fv "${etcconf}" "${etcconf}.${timestamp}" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - echo "" > "$etcconf" - echo " " >> "$etcconf" - if [[ $osid -eq 1 && $OSVersion -lt 7 ]]; then - echo " SetHandler application/x-httpd-php" >> "$etcconf" - else - echo " SetHandler \"proxy:fcgi://127.0.0.1:9000/\"" >> "$etcconf" - fi - echo " " >> "$etcconf" - echo " ServerName $ipaddress" >> "$etcconf" - echo " ServerAlias $hostname" >> "$etcconf" - echo " DocumentRoot $docroot" >> "$etcconf" - if [[ $httpproto == https ]]; then - echo " RewriteEngine On" >> "$etcconf" - echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" - echo " RewriteRule .* - [F]" >> "$etcconf" - echo " RewriteRule /management/other/ca.cert.der$ - [L]" >> "$etcconf" - echo " RewriteCond %{HTTPS} off" >> "$etcconf" - echo " RewriteRule (.*) https://%{HTTP_HOST}/\$1 [R,L]" >> "$etcconf" - echo "" >> "$etcconf" - echo "" >> "$etcconf" - echo " KeepAlive Off" >> "$etcconf" + if [[ $osid -eq 4 ]]; then + dots "Setting up Nginx host${sslenabled}" + echo "server {" > "$etcconf" + echo "listen 80;" >> "$etcconf" + echo "root ${docroot};" >> "$etcconf" + echo "index index.html index.htm index.php;" >> "$etcconf" + echo "server_name localhost;" >> "$etcconf" + echo "client_max_body_size 32m;" >> "$etcconf" + echo "error_page 500 502 503 504 /50x.html;" >> "$etcconf" + echo "location = /50x.html {" >> "$etcconf" + echo " root /var/lib/nginx/html;" >> "$etcconf" + echo "}" >> "$etcconf" + echo "location ~ \.php$ {" >> "$etcconf" + echo " set \$phproot /var/www;" >> "$etcconf" + echo " root /var/www;" >> "$etcconf" + echo " fastcgi_pass 127.0.0.1:9000;" >> "$etcconf" + echo " fastcgi_index index.php;" >> "$etcconf" + echo " include fastcgi.conf;" >> "$etcconf" + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;" >> "$etcconf" + + echo "}" >> "$etcconf" + echo "}" >> "$etcconf" + cat $etcconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ ${DEBUGMODE} == true ]]; then + sed -i "s/display_errors = Off/display_errors = On/g" /etc/php7/php.ini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi + else + dots "Setting up Apache virtual host${sslenabled}" + case $novhost in + [Yy]|[Yy][Ee][Ss]) + echo "Skipped" + ;; + *) + if [[ $osid -eq 2 ]]; then + a2dissite 001-fog >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2ensite 000-default >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi + mv -fv "${etcconf}" "${etcconf}.${timestamp}" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + echo "" > "$etcconf" echo " " >> "$etcconf" if [[ $osid -eq 1 && $OSVersion -lt 7 ]]; then echo " SetHandler application/x-httpd-php" >> "$etcconf" @@ -1925,73 +1957,94 @@ EOF echo " ServerName $ipaddress" >> "$etcconf" echo " ServerAlias $hostname" >> "$etcconf" echo " DocumentRoot $docroot" >> "$etcconf" - echo " SSLEngine On" >> "$etcconf" - echo " SSLProtocol all -SSLv3 -SSLv2" >> "$etcconf" - echo " SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" >> "$etcconf" - echo " SSLHonorCipherOrder On" >> "$etcconf" - echo " SSLCertificateFile $webdirdest/management/other/ssl/srvpublic.crt" >> "$etcconf" - echo " SSLCertificateKeyFile $sslprivkey" >> "$etcconf" - echo " SSLCACertificateFile $webdirdest/management/other/ca.cert.pem" >> "$etcconf" - echo " " >> "$etcconf" - echo " DirectoryIndex index.php index.html index.htm" >> "$etcconf" - echo " " >> "$etcconf" - echo " RewriteEngine On" >> "$etcconf" - echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" - echo " RewriteRule .* - [F]" >> "$etcconf" - echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f" >> "$etcconf" - echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d" >> "$etcconf" - echo " RewriteRule ^/fog/(.*)$ /fog/api/index.php [QSA,L]" >> "$etcconf" - echo "" >> "$etcconf" - else - echo " KeepAlive Off" >> "$etcconf" - echo " " >> "$etcconf" - echo " DirectoryIndex index.php index.html index.htm" >> "$etcconf" - echo " " >> "$etcconf" - echo " RewriteEngine On" >> "$etcconf" - echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" - echo " RewriteRule .* - [F]" >> "$etcconf" - echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f" >> "$etcconf" - echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d" >> "$etcconf" - echo " RewriteRule ^/fog/(.*)$ /fog/api/index.php [QSA,L]" >> "$etcconf" - echo "" >> "$etcconf" - fi - diffconfig "${etcconf}" - errorStat $? - ln -s $webdirdest $webdirdest/ >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - case $osid in - 1) - phpfpmconf='/etc/php-fpm.d/www.conf'; - ;; - 2) - if [[ $php_ver == 5 ]]; then - phpfpmconf="/etc/php$php_ver/fpm/pool.d/www.conf" + if [[ $httpproto == https ]]; then + echo " RewriteEngine On" >> "$etcconf" + echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" + echo " RewriteRule .* - [F]" >> "$etcconf" + echo " RewriteRule /management/other/ca.cert.der$ - [L]" >> "$etcconf" + echo " RewriteCond %{HTTPS} off" >> "$etcconf" + echo " RewriteRule (.*) https://%{HTTP_HOST}/\$1 [R,L]" >> "$etcconf" + echo "" >> "$etcconf" + echo "" >> "$etcconf" + echo " KeepAlive Off" >> "$etcconf" + echo " " >> "$etcconf" + if [[ $osid -eq 1 && $OSVersion -lt 7 ]]; then + echo " SetHandler application/x-httpd-php" >> "$etcconf" else - phpfpmconf="/etc/php/$php_ver/fpm/pool.d/www.conf" + echo " SetHandler \"proxy:fcgi://127.0.0.1:9000/\"" >> "$etcconf" fi - ;; - 3) - phpfpmconf='/etc/php/php-fpm.d/www.conf' - ;; - esac - if [[ -n $phpfpmconf ]]; then - sed -i 's/listen = .*/listen = 127.0.0.1:9000/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/^[;]pm\.max_requests = .*/pm.max_requests = 2000/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/^[;]php_admin_value\[memory_limit\] = .*/php_admin_value[memory_limit] = 256M/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/pm\.max_children = .*/pm.max_children = 50/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/pm\.min_spare_servers = .*/pm.min_spare_servers = 5/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/pm\.max_spare_servers = .*/pm.max_spare_servers = 10/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - sed -i 's/pm\.start_servers = .*/pm.start_servers = 5/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - fi - if [[ $osid -eq 2 ]]; then - a2enmod $phpcmd >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2enmod proxy_fcgi setenvif >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2enmod rewrite >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2enmod ssl >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2ensite "001-fog" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - a2dissite "000-default" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 - fi - ;; - esac + echo " " >> "$etcconf" + echo " ServerName $ipaddress" >> "$etcconf" + echo " ServerAlias $hostname" >> "$etcconf" + echo " DocumentRoot $docroot" >> "$etcconf" + echo " SSLEngine On" >> "$etcconf" + echo " SSLProtocol all -SSLv3 -SSLv2" >> "$etcconf" + echo " SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" >> "$etcconf" + echo " SSLHonorCipherOrder On" >> "$etcconf" + echo " SSLCertificateFile $webdirdest/management/other/ssl/srvpublic.crt" >> "$etcconf" + echo " SSLCertificateKeyFile $sslprivkey" >> "$etcconf" + echo " SSLCACertificateFile $webdirdest/management/other/ca.cert.pem" >> "$etcconf" + echo " " >> "$etcconf" + echo " DirectoryIndex index.php index.html index.htm" >> "$etcconf" + echo " " >> "$etcconf" + echo " RewriteEngine On" >> "$etcconf" + echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" + echo " RewriteRule .* - [F]" >> "$etcconf" + echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f" >> "$etcconf" + echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d" >> "$etcconf" + echo " RewriteRule ^/fog/(.*)$ /fog/api/index.php [QSA,L]" >> "$etcconf" + echo "" >> "$etcconf" + else + echo " KeepAlive Off" >> "$etcconf" + echo " " >> "$etcconf" + echo " DirectoryIndex index.php index.html index.htm" >> "$etcconf" + echo " " >> "$etcconf" + echo " RewriteEngine On" >> "$etcconf" + echo " RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)" >> "$etcconf" + echo " RewriteRule .* - [F]" >> "$etcconf" + echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f" >> "$etcconf" + echo " RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d" >> "$etcconf" + echo " RewriteRule ^/fog/(.*)$ /fog/api/index.php [QSA,L]" >> "$etcconf" + echo "" >> "$etcconf" + fi + diffconfig "${etcconf}" + errorStat $? + ln -s $webdirdest $webdirdest/ >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + case $osid in + 1) + phpfpmconf='/etc/php-fpm.d/www.conf'; + ;; + 2) + if [[ $php_ver == 5 ]]; then + phpfpmconf="/etc/php$php_ver/fpm/pool.d/www.conf" + else + phpfpmconf="/etc/php/$php_ver/fpm/pool.d/www.conf" + fi + ;; + 3) + phpfpmconf='/etc/php/php-fpm.d/www.conf' + ;; + esac + if [[ -n $phpfpmconf ]]; then + sed -i 's/listen = .*/listen = 127.0.0.1:9000/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/^[;]pm\.max_requests = .*/pm.max_requests = 2000/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/^[;]php_admin_value\[memory_limit\] = .*/php_admin_value[memory_limit] = 256M/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/pm\.max_children = .*/pm.max_children = 50/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/pm\.min_spare_servers = .*/pm.min_spare_servers = 5/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/pm\.max_spare_servers = .*/pm.max_spare_servers = 10/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/pm\.start_servers = .*/pm.start_servers = 5/g' $phpfpmconf >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi + if [[ $osid -eq 2 ]]; then + a2enmod $phpcmd >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2enmod proxy_fcgi setenvif >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2enmod rewrite >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2enmod ssl >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2ensite "001-fog" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + a2dissite "000-default" >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi + ;; + esac + fi dots "Starting and checking status of web services" case $systemctl in yes) @@ -2026,6 +2079,18 @@ EOF service apache2 status >>$workingdir/error_logs/fog_error_${version}.log 2>&1 service $phpfpm status >>$workingdir/error_logs/fog_error_${version}.log 2>&1 ;; + 4) + rc-service nginx stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sleep 2 + rc-service nginx start >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sleep 2 + rc-service $phpfpm stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sleep 2 + rc-service $phpfpm start >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sleep 2 + rc-service nginx status >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + rc-service $phpfpm status >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + ;; *) service httpd stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 sleep 2 @@ -2070,6 +2135,11 @@ configureHttpd() { errorStat $? service php${php_ver}-fpm stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 ;; + 4) + rc-service nginx stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 && sleep 2 + errorStat $? + service php-fpm${php_ver} stop >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + ;; esac ;; esac @@ -2085,7 +2155,21 @@ configureHttpd() { echo " Could not find $phpini!" exit 1 fi - if [[ $osid -eq 3 ]]; then + if [[ $osid -eq 4 ]]; then + sed -i 's/;extension=bcmath/extension=bcmath/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=curl/extension=curl/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=ftp/extension=ftp/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=gd/extension=gd/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=gettext/extension=gettext/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=ldap/extension=ldap/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=mysqli/extension=mysqli/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=openssl/extension=openssl/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=pdo_mysql/extension=pdo_mysql/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=posix/extension=posix/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=sockets/extension=sockets/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/;extension=zip/extension=zip/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + sed -i 's/$open_basedir\ =/;open_basedir\ =/g' $phpini >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + elif [[ $osid -eq 3 ]]; then if [[ ! -f $httpdconf ]]; then echo " Apache configs not found!" exit 1 @@ -2337,6 +2421,9 @@ die(); fi elif [[ $systemctl == yes ]]; then systemctl enable httpd php-fpm >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + elif [[ $osid -eq 4 ]]; then + rc-update add php-fpm$php_ver >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + rc-update add nginx >>$workingdir/error_logs/fog_error_${version}.log 2>&1 else chkconfig php-fpm on >>$workingdir/error_logs/fog_error_${version}.log 2>&1 chkconfig httpd on >>$workingdir/error_logs/fog_error_${version}.log 2>&1 @@ -2389,7 +2476,11 @@ downloadfiles() { fi while [[ $checksum -ne 0 && $cnt -lt 10 ]] do - [[ -f $hashfile ]] && sha256sum --check $hashfile >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + if [[ $osid -eq 4 ]]; then + [[ -f $hashfile ]] && sha256sum -c $hashfile >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + else + [[ -f $hashfile ]] && sha256sum --check $hashfile >>$workingdir/error_logs/fog_error_${version}.log 2>&1 + fi checksum=$? if [[ $checksum -ne 0 ]] then diff --git a/lib/common/input.sh b/lib/common/input.sh index bb8385923a..68fa479451 100755 --- a/lib/common/input.sh +++ b/lib/common/input.sh @@ -24,6 +24,9 @@ if [[ $guessdefaults == 1 ]]; then *[Aa][Rr][Cc][Hh]*) strSuggestedOS=3 ;; + *[Aa][Ll][Pp][Ii][Nn][Ee]*) + strSuggestedOS=4 + ;; *) strSuggestedOS=1 ;; diff --git a/packages/init.d/alpine/FOGImageReplicator b/packages/init.d/alpine/FOGImageReplicator new file mode 100644 index 0000000000..34afd740d8 --- /dev/null +++ b/packages/init.d/alpine/FOGImageReplicator @@ -0,0 +1,24 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGImageReplicator +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGMulticastManager +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGMulticastManager Service. +# FOGMulticastManager is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO + +name=FOGImageReplicator +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGImageSize b/packages/init.d/alpine/FOGImageSize new file mode 100644 index 0000000000..563a77fdc8 --- /dev/null +++ b/packages/init.d/alpine/FOGImageSize @@ -0,0 +1,21 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGImageSize +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGImageSize +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGImageSize Service. +### END INIT INFO + +name=FOGImageSize +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGMulticastManager b/packages/init.d/alpine/FOGMulticastManager new file mode 100644 index 0000000000..e991ffe38c --- /dev/null +++ b/packages/init.d/alpine/FOGMulticastManager @@ -0,0 +1,23 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGMulticastManager +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGMulticastManager +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGMulticastManager Service. +# FOGMulticastManager is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO +name=FOGMulticastManager +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGPingHosts b/packages/init.d/alpine/FOGPingHosts new file mode 100644 index 0000000000..bb7f8b6940 --- /dev/null +++ b/packages/init.d/alpine/FOGPingHosts @@ -0,0 +1,24 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGPingHosts +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGPingHosts +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGPingHosts Service. +# FOGPingHosts is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO + +name=FOGPingHosts +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGScheduler b/packages/init.d/alpine/FOGScheduler new file mode 100644 index 0000000000..3e2792aad3 --- /dev/null +++ b/packages/init.d/alpine/FOGScheduler @@ -0,0 +1,24 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGScheduler +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGScheduler +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGScheduler Service. +# FOGScheduler is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO + +name=FOGScheduler +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGSnapinHash b/packages/init.d/alpine/FOGSnapinHash new file mode 100644 index 0000000000..43dda24d21 --- /dev/null +++ b/packages/init.d/alpine/FOGSnapinHash @@ -0,0 +1,24 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGSnapinHash +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGSnapinHash +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGSnapinHash Service. +# FOGSnapinHash is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO + +name=FOGSnapinHash +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file diff --git a/packages/init.d/alpine/FOGSnapinReplicator b/packages/init.d/alpine/FOGSnapinReplicator new file mode 100644 index 0000000000..6087d752ba --- /dev/null +++ b/packages/init.d/alpine/FOGSnapinReplicator @@ -0,0 +1,24 @@ +#!/bin/openrc-run +### BEGIN INIT INFO +# Provides: FOGSnapinReplicator +# Required-Start: $local_fs $remote_fs $network $syslog $network $inetd $apache2 $mysql +# Required-Stop: $local_fs $remote_fs $network $syslog $network $inetd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# X-Interactive: true +# Short-Description: Start/Stop FOGSnapinReplicator +# Long-Description: Created by Chuck Syperski +# Used to stop and start the FOGSnapinReplicator Service. +# FOGSnapinReplicator is used to destribute images through +# Multicast. Useful to image large amounts of systems simultaneously. +# It serves this ability only if it's the master node. +### END INIT INFO + +name=FOGSnapinReplicator +command=/opt/fog/service/$name/$name +pidfile=/var/run/fog/$name.pid +command_background="yes" + +depend() { + need net +} \ No newline at end of file