From 0ba3e22dddc470525ca550e81ebc1982cb7df37c Mon Sep 17 00:00:00 2001 From: RomanNum3ral Date: Tue, 7 Apr 2026 12:50:53 +0000 Subject: [PATCH] Update mysql_install.sh --- mysql_install.sh | 154 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 118 insertions(+), 36 deletions(-) diff --git a/mysql_install.sh b/mysql_install.sh index 57874be..cd92224 100644 --- a/mysql_install.sh +++ b/mysql_install.sh @@ -3,9 +3,15 @@ set -Eeuo pipefail # ============================================================ # Arch Linux: MariaDB + Apache + PHP + phpMyAdmin installer -# Includes: -# - Apache prefork fix for mod_php -# - ServerName fix +# Fixes Apache threaded MPM issue by switching to prefork +# ============================================================ +# +# Usage: +# sudo bash install_mariadb_phpmyadmin_arch.sh +# +# Optional: +# sudo DB_ROOT_PASSWORD='yourpassword' bash install_mariadb_phpmyadmin_arch.sh +# # ============================================================ DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-}" @@ -54,30 +60,22 @@ append_if_missing() { grep -Fqx "$line" "$file" 2>/dev/null || echo "$line" >> "$file" } -# ============================================================ -# FIX 1: Apache MPM (required for mod_php) -# ============================================================ configure_apache_mpm_for_php() { log "Switching Apache from threaded MPM to prefork for mod_php" backup_file "$HTTPD_CONF" - 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 - echo 'LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' >> "$HTTPD_CONF" + if grep -Eq '^[[:space:]]*LoadModule mpm_event_module modules/mod_mpm_event.so' "$HTTPD_CONF"; then + sed -i 's|^[[:space:]]*LoadModule mpm_event_module modules/mod_mpm_event.so|#LoadModule mpm_event_module modules/mod_mpm_event.so|' "$HTTPD_CONF" fi -} -# ============================================================ -# FIX 2: ServerName warning -# ============================================================ -configure_server_name() { - log "Setting Apache ServerName" - - if ! grep -q "^ServerName" "$HTTPD_CONF"; then - echo "ServerName localhost" >> "$HTTPD_CONF" + if grep -Eq '^[#[:space:]]*LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' "$HTTPD_CONF"; then + sed -i 's|^[#[:space:]]*LoadModule mpm_prefork_module modules/mod_mpm_prefork.so|LoadModule mpm_prefork_module modules/mod_mpm_prefork.so|' "$HTTPD_CONF" + elif ! grep -Eq '^[[:space:]]*LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' "$HTTPD_CONF"; then + sed -i '/mod_unixd.so/a LoadModule mpm_prefork_module modules/mod_mpm_prefork.so' "$HTTPD_CONF" || true + 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 fi } @@ -86,7 +84,11 @@ 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" @@ -98,8 +100,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 '^extension=mysqli' "$PHP_INI"; then + echo 'extension=mysqli' >> "$PHP_INI" + fi + + if ! grep -Eq '^extension=pdo_mysql' "$PHP_INI"; then + echo 'extension=pdo_mysql' >> "$PHP_INI" + fi } configure_phpmyadmin_apache() { @@ -120,19 +130,40 @@ EOF } generate_blowfish_secret() { - openssl rand -base64 32 | tr -d '\n' + if command -v openssl >/dev/null 2>&1; then + openssl rand -base64 32 | tr -d '\n' + else + head -c 32 /dev/urandom | base64 | tr -d '\n' + fi } 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 -Eq "auth_type" "$PHPMYADMIN_MAIN_CONF"; then + sed -i "s|\(\$cfg\['Servers'\]\[\$i\]\['auth_type'\][[:space:]]*=[[:space:]]*\).*|\1'cookie';|" "$PHPMYADMIN_MAIN_CONF" || true + else + cat >> "$PHPMYADMIN_MAIN_CONF" <> "$PHPMYADMIN_MAIN_CONF" <" > "$INFO_FILE" + cat > "$INFO_FILE" <<'EOF' +/dev/null | awk '{print $1}')" + + echo + echo "============================================================" + echo "INSTALL COMPLETE" + echo "============================================================" + echo + echo "Services:" + echo " - MariaDB: systemctl status mariadb" + echo " - Apache : systemctl status httpd" + echo + echo "phpMyAdmin:" + echo " - Local: http://localhost/phpmyadmin" + if [[ -n "${ip:-}" ]]; then + echo " - LAN : http://${ip}/phpmyadmin" + fi + echo + echo "PHP test page:" + echo " - Local: http://localhost/info.php" + if [[ -n "${ip:-}" ]]; then + echo " - LAN : http://${ip}/info.php" + fi + echo + echo "MariaDB root password:" + echo " ${DB_ROOT_PASSWORD}" + echo + echo "phpMyAdmin login:" + echo " Username: root" + echo " Password: ${DB_ROOT_PASSWORD}" + echo + echo "Important files:" + echo " - Apache config : ${HTTPD_CONF}" + echo " - PHP config : ${PHP_INI}" + echo " - phpMyAdmin Apache : ${PHPMYADMIN_APACHE_CONF}" + echo " - phpMyAdmin main conf: ${PHPMYADMIN_MAIN_CONF}" + echo + warn "Delete ${INFO_FILE} after testing; it exposes PHP configuration details." } main() { require_root install_packages configure_apache_mpm_for_php - configure_server_name enable_php_module_httpd configure_php configure_phpmyadmin_apache @@ -198,6 +279,7 @@ main() { start_enable_services secure_mariadb write_php_test_page + print_summary } main "$@" \ No newline at end of file