diff --git a/mysql_install.sh b/mysql_install.sh index cd92224..57874be 100644 --- a/mysql_install.sh +++ b/mysql_install.sh @@ -3,15 +3,9 @@ set -Eeuo pipefail # ============================================================ # Arch Linux: MariaDB + Apache + PHP + phpMyAdmin installer -# 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 -# +# Includes: +# - Apache prefork fix for mod_php +# - ServerName fix # ============================================================ DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-}" @@ -60,22 +54,30 @@ 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" - 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 + 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 -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 + if ! grep -q "mpm_prefork_module" "$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 + echo "ServerName localhost" >> "$HTTPD_CONF" fi } @@ -84,11 +86,7 @@ enable_php_module_httpd() { backup_file "$HTTPD_CONF" - 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 + sed -i 's|^#LoadModule php_module modules/libphp.so|LoadModule php_module modules/libphp.so|' "$HTTPD_CONF" || true append_if_missing "$HTTPD_CONF" "AddHandler php-script .php" append_if_missing "$HTTPD_CONF" "Include conf/extra/php_module.conf" @@ -100,16 +98,8 @@ configure_php() { backup_file "$PHP_INI" - 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 + sed -i 's|^;*extension=mysqli|extension=mysqli|' "$PHP_INI" || true + sed -i 's|^;*extension=pdo_mysql|extension=pdo_mysql|' "$PHP_INI" || true } configure_phpmyadmin_apache() { @@ -130,40 +120,19 @@ EOF } generate_blowfish_secret() { - 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 + openssl rand -base64 32 | tr -d '\n' } 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)" - 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" <> "$PHPMYADMIN_MAIN_CONF" + echo "\$cfg['Servers'][\$i]['auth_type'] = 'cookie';" >> "$PHPMYADMIN_MAIN_CONF" } initialize_mariadb() { @@ -172,7 +141,7 @@ initialize_mariadb() { if [[ ! -d "$MARIADB_DATA_DIR/mysql" ]]; then mariadb-install-db --user=mysql --basedir=/usr --datadir="$MARIADB_DATA_DIR" else - warn "MariaDB data directory already appears initialized; skipping mariadb-install-db" + warn "MariaDB already initialized" fi } @@ -182,94 +151,44 @@ test_httpd_config() { } start_enable_services() { - log "Enabling and starting MariaDB and Apache" + log "Enabling and starting services" systemctl enable --now mariadb systemctl enable --now httpd } secure_mariadb() { - log "Applying MariaDB hardening" + log "Securing MariaDB" if [[ -z "$DB_ROOT_PASSWORD" ]]; then - DB_ROOT_PASSWORD="$(tr -dc 'A-Za-z0-9!@#%^*_+=-' "$INFO_FILE" <<'EOF' -" > "$INFO_FILE" } install_packages() { - log "Installing required packages" - - pacman -Sy --needed --noconfirm \ - mariadb apache php php-apache phpmyadmin openssl -} - -print_summary() { - local ip - ip="$(hostname -I 2>/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." + log "Installing packages" + pacman -Sy --needed --noconfirm mariadb apache php php-apache phpmyadmin openssl } main() { require_root install_packages configure_apache_mpm_for_php + configure_server_name enable_php_module_httpd configure_php configure_phpmyadmin_apache @@ -279,7 +198,6 @@ main() { start_enable_services secure_mariadb write_php_test_page - print_summary } main "$@" \ No newline at end of file