diff --git a/installers/common.sh b/installers/common.sh index 28014b61..013018c7 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -149,21 +149,24 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in + 13) # Debian 13 trixie + php_package="php8.4-fpm" + phpiniconf="/etc/php/8.4/fpm/php.ini" ;; 23.05|12*) # Debian 12 & Armbian 23.05 php_package="php8.2-cgi" - phpcgiconf="/etc/php/8.2/cgi/php.ini" ;; + phpiniconf="/etc/php/8.2/cgi/php.ini" ;; 23.04) # Ubuntu Server 23.04 php_package="php8.1-cgi" - phpcgiconf="/etc/php/8.1/cgi/php.ini" ;; + phpiniconf="/etc/php/8.1/cgi/php.ini" ;; 22.04|20.04|18.04|19.10|11*) # Previous Ubuntu Server, Debian & Armbian distros php_package="php7.4-cgi" - phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; + phpiniconf="/etc/php/7.4/cgi/php.ini" ;; 10*|11*) php_package="php7.3-cgi" - phpcgiconf="/etc/php/7.3/cgi/php.ini" ;; + phpiniconf="/etc/php/7.3/cgi/php.ini" ;; 9*) php_package="php7.0-cgi" - phpcgiconf="/etc/php/7.0/cgi/php.ini" ;; + phpiniconf="/etc/php/7.0/cgi/php.ini" ;; 8) _install_status 1 "${DESC} and php5 are not supported. Please upgrade." exit 1 ;; @@ -272,6 +275,12 @@ function _install_dependencies() { echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent $php_package $dhcpcd_package $iw_package $rsync_package $network_tools $ifconfig_package vnstat qrencode jq isoquery || _install_status 1 "Unable to install dependencies" + + if [[ "$php_package" == *"-fpm" ]]; then + install_log "Enabling lighttpd fastcgi-php-fpm module for $php_package" + sudo lighty-enable-mod fastcgi-php-fpm || install_status 1 "Unable to enable fastcgi-php-fpm module" + fi + _install_status 0 } @@ -956,14 +965,14 @@ function _patch_system_files() { function _optimize_php() { if [ "$upgrade" == 0 ]; then _install_log "Optimize PHP configuration" - if [ ! -f "$phpcgiconf" ]; then + if [ ! -f "$phpiniconf" ]; then _install_status 2 "PHP configuration could not be found." return fi # Backup php.ini and create symlink for restoring. datetimephpconf=$(date +%F-%R) - sudo cp "$phpcgiconf" "$raspap_dir/backups/php.ini.$datetimephpconf" + sudo cp "$phpiniconf" "$raspap_dir/backups/php.ini.$datetimephpconf" sudo ln -sf "$raspap_dir/backups/php.ini.$datetimephpconf" "$raspap_dir/backups/php.ini" echo -n "Enable HttpOnly for session cookies (Recommended)? [Y/n]: " @@ -978,7 +987,7 @@ function _optimize_php() { if [ "$assume_yes" == 1 ] || [ "$php_session_cookie" == 1 ]; then echo "Php-cgi enabling session.cookie_httponly." - sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' "$phpcgiconf" + sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' "$phpiniconf" fi if [ "$php_package" = "php7.1-cgi" ]; then @@ -994,7 +1003,7 @@ function _optimize_php() { if [ "$assume_yes" == 1 ] || [ "$phpopcache" == 1 ]; then echo -e "Php-cgi enabling opcache.enable." - sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' "$phpcgiconf" + sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' "$phpiniconf" # Make sure opcache extension is turned on. if [ -f "/usr/sbin/phpenmod" ]; then sudo phpenmod opcache diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers index bd073f33..b7a8a589 100644 --- a/installers/raspap.sudoers +++ b/installers/raspap.sudoers @@ -87,5 +87,6 @@ www-data ALL=(ALL) NOPASSWD:/usr/bin/nmap --script=broadcast-dhcp-discover -e [a www-data ALL=(ALL) NOPASSWD:/usr/bin/vnstat * www-data ALL=(ALL) NOPASSWD:/usr/sbin/visudo -cf * www-data ALL=(ALL) NOPASSWD:/etc/raspap/plugins/plugin_helper.sh -www-data ALL=(ALL) NOPASSWD: /bin/systemctl start raspap-network-activity@*.service -www-data ALL=(ALL) NOPASSWD: /bin/systemctl stop raspap-network-activity@*.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl start raspap-network-activity@*.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop raspap-network-activity@*.service +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wpa_conf_* /etc/wpa_supplicant/wpa_supplicant.conf diff --git a/installers/raspbian.sh b/installers/raspbian.sh index 6f667147..c65a3568 100755 --- a/installers/raspbian.sh +++ b/installers/raspbian.sh @@ -308,7 +308,10 @@ function _check_internet() { tput civis # hide cursor # run check in background - ( curl -Is --connect-timeout 3 --max-time 15 https://github.com | head -n 1 | grep "HTTP/2 200" >/dev/null ) & + ( + curl -Is --connect-timeout 3 --max-time 15 https://github.com \ + | grep -q "^HTTP/2 200" + ) & local pid=$! # display spinner while curl runs @@ -318,8 +321,9 @@ function _check_internet() { done printf "\r" - # check exit status of curl - wait $pid || exit_code=$? + # capture exit status + wait "$pid" + exit_code=$? tput cnorm # restore cursor diff --git a/installers/uninstall.sh b/installers/uninstall.sh index 9ee7b929..0d68545d 100755 --- a/installers/uninstall.sh +++ b/installers/uninstall.sh @@ -48,21 +48,24 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in + 13) # Debian 13 trixie + php_package="php8.4-fpm" + phpiniconf="/etc/php/8.4/fpm/php.ini" ;; 23.05|12*) # Debian 12 & Armbian 23.05 php_package="php8.2-cgi" - phpcgiconf="/etc/php/8.2/cgi/php.ini" ;; + phpiniconf="/etc/php/8.2/cgi/php.ini" ;; 23.04) # Ubuntu Server 23.04 php_package="php8.1-cgi" - phpcgiconf="/etc/php/8.1/cgi/php.ini" ;; + phpiniconf="/etc/php/8.1/cgi/php.ini" ;; 22.04|20.04|18.04|19.10|11*) # Previous Ubuntu Server, Debian & Armbian distros php_package="php7.4-cgi" - phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; + phpiniconf="/etc/php/7.4/cgi/php.ini" ;; 10*|11*) php_package="php7.3-cgi" - phpcgiconf="/etc/php/7.3/cgi/php.ini" ;; + phpiniconf="/etc/php/7.3/cgi/php.ini" ;; 9*) php_package="php7.0-cgi" - phpcgiconf="/etc/php/7.0/cgi/php.ini" ;; + phpiniconf="/etc/php/7.0/cgi/php.ini" ;; 8) _install_error "${DESC} and php5 are unsupported." exit 1 ;; @@ -127,11 +130,11 @@ function _check_for_backups() { sudo cp "$raspap_dir/backups/dhcpcd.conf" /etc/dhcpcd.conf fi fi - if [ -f "$raspap_dir/backups/php.ini" ] && [ -f "$phpcgiconf" ]; then + if [ -f "$raspap_dir/backups/php.ini" ] && [ -f "$phpiniconf" ]; then echo -n "Restore the last php.ini file? [y/N]: " read answer if [[ $answer -eq 'y' ]]; then - sudo cp "$raspap_dir/backups/php.ini" "$phpcgiconf" + sudo cp "$raspap_dir/backups/php.ini" "$phpiniconf" fi fi fi diff --git a/src/RaspAP/Networking/Hotspot/WiFiManager.php b/src/RaspAP/Networking/Hotspot/WiFiManager.php index 316ba074..1c69e49e 100644 --- a/src/RaspAP/Networking/Hotspot/WiFiManager.php +++ b/src/RaspAP/Networking/Hotspot/WiFiManager.php @@ -313,6 +313,8 @@ class WiFiManager */ public function setKnownStationsWPA($networks) { + $this->ensureWpaSupplicant(); + $iface = escapeshellarg($_SESSION['wifi_client_interface']); $output = shell_exec("sudo wpa_cli -i $iface list_networks 2>&1"); @@ -475,5 +477,41 @@ class WiFiManager return false; } + /** + * Ensures /etc/wpa_supplicant/wpa_supplicant.conf exists with minimal safe contents + * Does not overwrite an existing file + * + * @throws \RuntimeException on permission or write failure + */ + public function ensureWpaSupplicant(): void + { + $confPath = '/etc/wpa_supplicant/wpa_supplicant.conf'; + + if (file_exists($confPath)) { + return; + } + + $contents = <<