diff --git a/mysql_install.sh b/mysql_install.sh index 57874be..d596286 100644 --- a/mysql_install.sh +++ b/mysql_install.sh @@ -6,6 +6,7 @@ set -Eeuo pipefail # Includes: # - Apache prefork fix for mod_php # - ServerName fix +# - Proper PHP handler so PHP executes instead of displaying as text # ============================================================ DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-}" @@ -54,9 +55,21 @@ append_if_missing() { grep -Fqx "$line" "$file" 2>/dev/null || echo "$line" >> "$file" } -# ============================================================ -# FIX 1: Apache MPM (required for mod_php) -# ============================================================ +ensure_block_if_missing() { + local file="$1" + local marker="$2" + local block="$3" + + if ! grep -Fq "$marker" "$file"; then + printf '\n%s\n' "$block" >> "$file" + fi +} + +install_packages() { + log "Installing packages" + pacman -Sy --needed --noconfirm mariadb apache php php-apache phpmyadmin openssl +} + configure_apache_mpm_for_php() { log "Switching Apache from threaded MPM to prefork for mod_php" @@ -65,18 +78,15 @@ configure_apache_mpm_for_php() { sed -i 's|^LoadModule mpm_event_module modules/mod_mpm_event.so|#LoadModule mpm_event_module modules/mod_mpm_event.so|' "$HTTPD_CONF" || true sed -i 's|^#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so|LoadModule mpm_prefork_module modules/mod_mpm_prefork.so|' "$HTTPD_CONF" || true - if ! grep -q "mpm_prefork_module" "$HTTPD_CONF"; then + if ! grep -Eq '^[[:space:]]*LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' "$HTTPD_CONF"; then echo 'LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' >> "$HTTPD_CONF" fi } -# ============================================================ -# FIX 2: ServerName warning -# ============================================================ configure_server_name() { log "Setting Apache ServerName" - if ! grep -q "^ServerName" "$HTTPD_CONF"; then + if ! grep -Eq '^[[:space:]]*ServerName[[:space:]]+' "$HTTPD_CONF"; then echo "ServerName localhost" >> "$HTTPD_CONF" fi } @@ -86,11 +96,21 @@ enable_php_module_httpd() { backup_file "$HTTPD_CONF" - sed -i 's|^#LoadModule php_module modules/libphp.so|LoadModule php_module modules/libphp.so|' "$HTTPD_CONF" || true + if grep -Eq '^[#[:space:]]*LoadModule php_module modules/libphp.so' "$HTTPD_CONF"; then + sed -i 's|^[#[:space:]]*LoadModule php_module modules/libphp.so|LoadModule php_module modules/libphp.so|' "$HTTPD_CONF" + elif ! grep -Eq '^[[:space:]]*LoadModule php_module modules/libphp.so' "$HTTPD_CONF"; then + echo 'LoadModule php_module modules/libphp.so' >> "$HTTPD_CONF" + fi append_if_missing "$HTTPD_CONF" "AddHandler php-script .php" append_if_missing "$HTTPD_CONF" "Include conf/extra/php_module.conf" append_if_missing "$HTTPD_CONF" "Include conf/extra/phpmyadmin.conf" + + ensure_block_if_missing "$HTTPD_CONF" "" ' + SetHandler application/x-httpd-php + + +DirectoryIndex index.php index.html' } configure_php() { @@ -98,8 +118,16 @@ configure_php() { backup_file "$PHP_INI" - sed -i 's|^;*extension=mysqli|extension=mysqli|' "$PHP_INI" || true - sed -i 's|^;*extension=pdo_mysql|extension=pdo_mysql|' "$PHP_INI" || true + sed -i 's|^[;[:space:]]*extension=mysqli|extension=mysqli|' "$PHP_INI" || true + sed -i 's|^[;[:space:]]*extension=pdo_mysql|extension=pdo_mysql|' "$PHP_INI" || true + + if ! grep -Eq '^[[:space:]]*extension=mysqli' "$PHP_INI"; then + echo 'extension=mysqli' >> "$PHP_INI" + fi + + if ! grep -Eq '^[[:space:]]*extension=pdo_mysql' "$PHP_INI"; then + echo 'extension=pdo_mysql' >> "$PHP_INI" + fi } configure_phpmyadmin_apache() { @@ -126,13 +154,22 @@ generate_blowfish_secret() { configure_phpmyadmin_main() { log "Configuring phpMyAdmin" + [[ -f "$PHPMYADMIN_MAIN_CONF" ]] || die "phpMyAdmin config not found at $PHPMYADMIN_MAIN_CONF" + backup_file "$PHPMYADMIN_MAIN_CONF" local blowfish blowfish="$(generate_blowfish_secret)" - echo "\$cfg['blowfish_secret'] = '${blowfish}';" >> "$PHPMYADMIN_MAIN_CONF" - echo "\$cfg['Servers'][\$i]['auth_type'] = 'cookie';" >> "$PHPMYADMIN_MAIN_CONF" + if ! grep -Fq "\$cfg['blowfish_secret']" "$PHPMYADMIN_MAIN_CONF"; then + echo "\$cfg['blowfish_secret'] = '${blowfish}';" >> "$PHPMYADMIN_MAIN_CONF" + fi + + if grep -Fq "\$cfg['Servers'][\$i]['auth_type']" "$PHPMYADMIN_MAIN_CONF"; then + sed -i "s|\$cfg\['Servers'\]\[\$i\]\['auth_type'\][[:space:]]*=.*|\$cfg['Servers'][\$i]['auth_type'] = 'cookie';|" "$PHPMYADMIN_MAIN_CONF" + else + echo "\$cfg['Servers'][\$i]['auth_type'] = 'cookie';" >> "$PHPMYADMIN_MAIN_CONF" + fi } initialize_mariadb() { @@ -166,6 +203,7 @@ secure_mariadb() { mariadb <" > "$INFO_FILE" } -install_packages() { - log "Installing packages" - pacman -Sy --needed --noconfirm mariadb apache php php-apache phpmyadmin openssl +print_summary() { + echo + echo "Done." + echo "phpMyAdmin: http://localhost/phpmyadmin" + echo "PHP test: http://localhost/info.php" + echo + echo "MariaDB root password: ${DB_ROOT_PASSWORD}" + echo + echo "Delete ${INFO_FILE} after testing." } main() { @@ -198,6 +242,7 @@ main() { start_enable_services secure_mariadb write_php_test_page + print_summary } main "$@" \ No newline at end of file