From 98d392d47351bd8169a8a353ee3dbb5ca9927f07 Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 19 May 2023 12:18:25 +0100 Subject: [PATCH 01/56] Implements nohook wpa_supplicant flag --- ajax/networking/get_netcfg.php | 2 ++ app/js/custom.js | 6 ++++++ includes/dhcp.php | 11 +++++++---- locale/en_US/LC_MESSAGES/messages.mo | Bin 33331 -> 33981 bytes locale/en_US/LC_MESSAGES/messages.po | 9 +++++++++ templates/dhcp/general.php | 13 +++++++++++++ 6 files changed, 37 insertions(+), 4 deletions(-) diff --git a/ajax/networking/get_netcfg.php b/ajax/networking/get_netcfg.php index aa207e1ee..aee8e702e 100644 --- a/ajax/networking/get_netcfg.php +++ b/ajax/networking/get_netcfg.php @@ -46,6 +46,7 @@ preg_match('/static\sdomain_name_server=(.*)/', $matched[0], $static_dns); preg_match('/fallback\sstatic_'.$interface.'/', $matched[0], $fallback); preg_match('/(?:no)?gateway/', $matched[0], $gateway); + preg_match('/nohook\swpa_supplicant/', $matched[0], $nohook_wpa_supplicant); $dhcpdata['Metric'] = $metric[1]; $dhcpdata['StaticIP'] = strpos($static_ip[1],'/') ? substr($static_ip[1], 0, strpos($static_ip[1],'/')) : $static_ip[1]; $dhcpdata['SubnetMask'] = cidr2mask($static_ip[1]); @@ -53,6 +54,7 @@ $dhcpdata['StaticDNS'] = $static_dns[1]; $dhcpdata['FallbackEnabled'] = empty($fallback) ? false: true; $dhcpdata['DefaultRoute'] = $gateway[0] == "gateway"; + $dhcpdata['NoHookWPASupplicant'] = $nohook_wpa_supplicant[0] == "nohook wpa_supplicant"; echo json_encode($dhcpdata); } diff --git a/app/js/custom.js b/app/js/custom.js index 40e181bc9..93e91c2ad 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -216,6 +216,12 @@ function loadInterfaceDHCPSelect() { $('#txtgateway').val(jsonData.StaticRouters); $('#chkfallback')[0].checked = jsonData.FallbackEnabled; $('#default-route').prop('checked', jsonData.DefaultRoute); + if (strInterface.startsWith("wl")) { + $('#nohook-wpa-supplicant').parent().parent().parent().show() + $('#nohook-wpa-supplicant').prop('checked', jsonData.NoHookWPASupplicant); + } else { + $('#nohook-wpa-supplicant').parent().parent().parent().hide() + } $('#txtrangestart').val(jsonData.RangeStart); $('#txtrangeend').val(jsonData.RangeEnd); $('#txtrangeleasetime').val(jsonData.leaseTime); diff --git a/includes/dhcp.php b/includes/dhcp.php index 9165e8ae3..40570bbb5 100755 --- a/includes/dhcp.php +++ b/includes/dhcp.php @@ -253,24 +253,27 @@ function updateDHCPConfig($iface,$status) { $cfg[] = '# RaspAP '.$iface.' configuration'; $cfg[] = 'interface '.$iface; - if (isset($_POST['StaticIP'])) { + if (isset($_POST['StaticIP']) && $_POST['StaticIP'] !== '') { $mask = ($_POST['SubnetMask'] !== '' && $_POST['SubnetMask'] !== '0.0.0.0') ? '/'.mask2cidr($_POST['SubnetMask']) : null; $cfg[] = 'static ip_address='.$_POST['StaticIP'].$mask; } - if (isset($_POST['DefaultGateway'])) { - $cfg[] = 'static routers='.$_POST['DefaultGateway']; + if (isset($_POST['DefaultGateway']) && $_POST['DefaultGateway'] !== '') { + $cfg[] = 'static routers='.$_POST['DefaultGateway']; } if ($_POST['DNS1'] !== '' || $_POST['DNS2'] !== '') { $cfg[] = 'static domain_name_server='.$_POST['DNS1'].' '.$_POST['DNS2']; } if ($_POST['Metric'] !== '') { - $cfg[] = 'metric '.$_POST['Metric']; + $cfg[] = 'metric '.$_POST['Metric']; } if ($_POST['Fallback'] == 1) { $cfg[] = 'profile static_'.$iface; $cfg[] = 'fallback static_'.$iface; } $cfg[] = $_POST['DefaultRoute'] == '1' ? 'gateway' : 'nogateway'; + if (( substr($iface, 0, 2) === "wl") && $_POST['NoHookWPASupplicant'] == '1') { + $cfg[] = 'nohook wpa_supplicant'; + } $dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG); if (!preg_match('/^interface\s'.$iface.'$/m', $dhcp_cfg)) { $cfg[] = PHP_EOL; diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index a534b42432dd25fa3bcd2b8f6a5b8ec7a562fe82..2e8e16f37499d0b5e8239a62349d1bf251eee7cc 100644 GIT binary patch delta 9334 zcmd_viC@=MzQ^$cii(H`2*{>CNO9jqaK~NTMa_Ld1VIpxMa}K!f~k`_DQcRIPMcO* zSxh$SRN7)rWiHJfm$b$*E6uXZZfZ66_2wM!!+ZaQ`9Ava{G9VWzq5Y7Kk!jSneXeX zeZ8NCRNZ8_cKR3-gLMOqY3XZBttizRb2#3ZCU^w%@haBFaSs^d!ECIBt1$vMV-0-K zm0!cbluzI=jA>|02(iKgNatb)5S4ELZqJc8Bn9ERg1)BwL=F#0qyrVoZ< z100KVZ02EIEJN00wj%$T-Tcr3j$;Jln+qhdRQ!aRNJxUU6>7kNsGUhiZOUTjR#ZoS zK~3~+=O^e#`KG&n8-pmTZSPW?^P0`8(F9>KZ!V=L^B$=D8;pe9s-UNv}|q$VE6xp)?}g~OZLh7(a8<{`&# zmg5B6g<7d^Giwdh%4(ywJ`S}*9Z?JIi~jg7>gY~1qgpGwM1^Mb9cm@Nqw1?QH>L%K zqRuu2)ov=XNK=S)a0~Xs=TJv=19LEt4+r2})P$C!p0O=h6SucuT3W$w*Wd-z4Bv7M zK14l?XHWxQ$1?m4bu`Ob+WV`qJ>{LK`j1fqpT|hNf;?WFg`IE$s(q4|qy|YYvS?F+ z+UlLCt=x}V+264~)@g0qw?>td(Su_!2m`zE2s$_!9YBYY3Tig#PII7 zYGX_(Y3sH$#%FL0j%{a5D(=Ivcn6blB-58`a5lb+I=Z9|b|O7c6B&j&qIA^5S%g~X zI%MHqbAUu!{1%4bS=5$YLv`SnXa|l!t+)`il0TwWxDB;q6{u(AeN?-v7>fQK?Sx`c zXWkMu;bg3)$MSg+o%zdH6%S!J9(MI-T=^1eg1?}SEFj5leO=Vb6H#a14a2YxYQXVW z3p1TXxR$aP6ByqFvX7d12j?hf3AUwvqbnapZQ&Kv3Vl2AieVgT0liTJ4?&%I2G+$Q z49AtI9o>OJxDUO$ahOC~bq2MvYuE&TLcQ;?o$UZAs1*)Gy)`3H?Z=?{nTi@Rs(h<54SWj_N24wR7W9 z1LQlGqXyW5{Ngh&VLkj9wXkndui;%Ui7$zNH#=Z0jHVoke8-qX)Iifv9nM6pXenyv zHlil}3~HxdMJ?a}>S*3UJ=Dih?M|Zx{v0)7?+p@dtzUQBFc=q54#!yBfa+);dhh^h z0_RcR3)fLQnAF1#+#R*TRMZ5=Vln2R7IG1_vtJ_pd(Dp|dYI~@*bj!II&6g6+7_6J zDX98gsP-@50Ia~?_$#V?N>97eQK$(_$5JeH_194C?qZYvL``PU>%Qea;(2q7D;K4ZEPuwijya2cbGnclQ@!JIc#30rz7BUc?~0 zh1Jn-xP6!dQ3Hjb7E&K|bnP%+@BdH|K4WIv3UdToP`>O89$`Pw9W}ss)I&KFHPAeF ze+jmsydC%Bajc4EoUbOh+W7>k{s8*x{eOdmFF|t*wMEr9Fm)X4j6`3`ahT}C_F@yt z<44(l5iQ5slz&7I`i!;@X*_D+)~Frr@5;lGQ#aW-Oz;1zBq8Ycpxvr^s4Z%URWJp^ zun(%k@u&$FVK~l54X_@A@p0^fd$9rjfI5QUG4`lqQ9IZUy^TmxNVI}1jKEUVcmG<{ zMD{q}!*I%9pkCWMsAnT$thF7gpCK556P+dKM|q9AzX5fWPmE>%wUU>q&<-4MH$Frj zRC58fvgYHg9Z(NxH>`zyP!Hh*wfQx zMxqya_Pk~*iDvvJ>H{ZHXI^!x{bdn|+UjJ~Rt`h0Y#P?b=TPmBx$-IWP`-hhU~szK z**Mfg*&cNSgD^mcFrGxOLl&lC2^t?B5-cS>HqHKvsC$O}7ts%xN`2~d`wx?HOs4#; zvr(q~2gYR7(Vaw1hGVZ1zkjqcN6uH|DMhMD+%DyT#NNE0e7Khe%yK8893Aa zi>M{){uGQxFKUI`Fb)r*KVCo$dYw1RZ3iHlGV$12nZ zx1uJt2epDjsMqy<48V_^=TXnd6;wZFmc1WVB(RcIXvsfghm;x{KTS}+RVbM8)YPFxDmAz&!SeoADiGISAQA1QvMOOm90zcLz;~G+(2xKW3f3dbN63F zE#xrj=uTh=o+)AfwMAE{&_r(GX!K)x9-M%h$U@Y6y%aU@Q>Y!=i|Y6Q>hs5N37$pu zJ8q7h;B?dk=b&EOGF1C@bJ%~~*x?%NMVw-NG$WaZ`aS)W^Dt_wE~3uEnVi^7#^}dJAvlD2I zdP};Z+Koj`Bp0=S`8WZ~uoM0ZhoU#?A^Ynz2m4a757Y2x9E7R!t(#CCUcw%D15>aK zuSP1)#&kS{Lojxs{Szw})o%rs;cXm=ix*Y?i^ywElV~Pw7u(lj3C^Va6HdY@9FeyE zb>|7x(Og1J=oZ$+s!QydMxwU1DMn!;HpJnmeo9e0x)N*Z{a;5CNyS#w2P;q=zKLr1 z57gOyg4+7asE+TT?uRY4e?!J#0_9;Cfpf6(AwwPI4%EZE3pLIj3}t-t8c8&MfcoX~ z6%NCi%WQc(>YHzo^LbSJGpGS>q8`dB%k4nHsQZ!F1`}~VW}zk!%QSPYhsncc*Aag9Cf*_bR$0RYoW+<(ET+A#h1eLst1Q{S1(fDfKMpq#-N?18k789q*HoV* z&Y9%V%A)h4`PUE)LCWb$Num^eVb%7?St<{FQ{CPZ`h zfxqG##QUy1ihF-2KSWG*b>cSB!}XzZFJd}n{dy}`g}a`>SBV&6H22f-F)v9e$#SA9 zq3f>2?BL!da$k%hJj4vjEpZc}YYh&zsd*1q6Z$4vLX05VaDNeYCQcEb60Z@u=5o*5 zj32uw=r_Pd@;KsS@=lmV=xT)HUH%Pay~w&o6Ymlyi4TbzM7e9X4E4>Ts{zrDm`q)F z-6s+xMKq+m7dyL8PbYtb(4~i{D>fvu z-Th*`rkh;ri3cdB6Bo!Axi;0YzE9p8?f$lD>OVmjh= zY>ZVyPf9rI10P3x?n=T#YG2 z46&BD|4J+GB{@UHzOnJL&d5pSq#5&6TT%DRly1W&61QATEq;3ZWVIAVX z$oCUViTkhLC=7QM9({FIp>ZN{@2XDHi5PNUo$hs^{EHH<4=j~`mAljo=l;Ja48s{j zd!h;DzQk7YM)-Mo&$tM0S4z5CIg7{>h=s%?>UQE3qBnUq_Q8?F3i1u8YYP5>*hKyb zv6Wax%p_hS{!HkKCe{-FRDtV?eIRT>KmF)r0ukh@LdoyH_PIh&e1ND+%qG^mc9G<7 z6S_Vl22wxI-5XF@%l94bA)+hmTl0KTm`j`{{Ha`tx~h@Cj7xDH_933FSP{QEpoM2{ zVfvKf(!#>LoQ(AR63_JPj6zR#K|!u3tDwkJlATlR$;mItEXqpH$gHT=D%{_j<$0)} z)H5qRKYd1~XKqeWW?p7-u_vP-KR+|0B&Q(1n97pu|KD#;NpWUgRttK}wB652f5?+j zl$lh%g~wA@9V^qIVUr}q_~x5lx9#+sE$3;bBfca1v1?K_R^}nXHsOv&KXHz h<xEq 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 HKlT3wOcd_) diff --git a/locale/en_US/LC_MESSAGES/messages.po b/locale/en_US/LC_MESSAGES/messages.po index 2a4672c81..89eb0f971 100644 --- a/locale/en_US/LC_MESSAGES/messages.po +++ b/locale/en_US/LC_MESSAGES/messages.po @@ -464,6 +464,15 @@ msgstr "This option adds dhcp-host entries to the dnsmasq configura msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." msgstr "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgid "This toggles the nohook wpa_supplicant option for this interface in the DHCPCD configuration." +msgstr "This toggles the nohook wpa_supplicant option for this interface in the DHCPCD configuration." + +msgid "Disable wpa_supplicant dhcp hook for this interface" +msgstr "Disable wpa_supplicant dhcp hook for this interface" + +msgid "If you manage wireless connections with wpa_supplicant itself, the hook may create unwanted connection events. This option disables the hook." +msgstr "If you manage wireless connections with wpa_supplicant itself, the hook may create unwanted connection events. This option disables the hook." + #: includes/hostapd.php msgid "Basic" msgstr "Basic" diff --git a/templates/dhcp/general.php b/templates/dhcp/general.php index 47c802f59..5f257c02e 100644 --- a/templates/dhcp/general.php +++ b/templates/dhcp/general.php @@ -67,6 +67,19 @@ +
+
+
+ + + +
+

+ nohook wpa_supplicant option for this interface in the DHCPCD configuration.") ?> +

+
+
+
DHCP options
From 47cbd520d0fa5e2bb0ad3cbf71fed082feeec8a9 Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 21 May 2023 15:46:08 +0100 Subject: [PATCH 02/56] Update BACKERS.md --- BACKERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BACKERS.md b/BACKERS.md index a13b2e38d..84d975320 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -24,7 +24,7 @@ The following features are currently available exclusively to sponsors. A tangib ✅ [MAC address cloning](https://docs.raspap.com/net-devices/#changing-the-mac-address) ✅ [Network diagnostics](https://docs.raspap.com/net-devices/#diagnostics) ✅ [WireGuard VPN kill switch](https://docs.raspap.com/wireguard/#kill-switch) - ⚙️ Dynamic DNS support (in progress) + ✅ [Dynamic DNS](https://docs.raspap.com/dynamicdns/) Look for the list above to grow as we add more exclusive features. Be sure to visit this page from time to time to learn about what's new, check the [Insiders docs page](https://docs.raspap.com/insiders/) and follow [@RaspAP on Twitter](https://twitter.com/rasp_ap) to stay updated. From 5ee8270f477f5e30066ec43a3c19ad420c9737d6 Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 2 Jun 2023 12:51:13 +0000 Subject: [PATCH 03/56] Fix fatal error in php8 parse_ini_file() --- config/hostapd.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hostapd.conf b/config/hostapd.conf index cdb2a881d..b88b54692 100644 --- a/config/hostapd.conf +++ b/config/hostapd.conf @@ -20,5 +20,5 @@ country_code=GB ## RaspAP wireless client AP mode #interface=uap0 -## RaspAP bridge AP mode (disabled by default) +## RaspAP bridge AP mode, disabled by default #bridge=br0 From 20414b9ef1338a019cd616fe6b6578e1be0ac3cf Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 2 Jun 2023 12:52:52 +0000 Subject: [PATCH 04/56] Detect latest distro releases + set php_package --- installers/common.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/installers/common.sh b/installers/common.sh index d7a046af1..4ed7d71af 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -140,7 +140,10 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in - 22.04|20.04|18.04|19.10|11*) # Ubuntu Server, Debian 11 & Armbian 22.05 + 23.05|23.04|12*) # Ubuntu Server 23.04, Debian 12 & Armbian 23.05 + php_package="php8.2-cgi" + phpcgiconf="/etc/php/8.2/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" ;; 10*|11*) From e3a9919af1eb3cbf85084014366e3caf0ec8fe66 Mon Sep 17 00:00:00 2001 From: billz Date: Sat, 3 Jun 2023 18:43:55 +0000 Subject: [PATCH 05/56] Set php_package for Ubuntu 23.04 --- installers/common.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/installers/common.sh b/installers/common.sh index 4ed7d71af..7bc2ce566 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -140,9 +140,12 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in - 23.05|23.04|12*) # Ubuntu Server 23.04, Debian 12 & Armbian 23.05 + 23.05|12*) # Debian 12 & Armbian 23.05 php_package="php8.2-cgi" phpcgiconf="/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" ;; 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" ;; From 5c9e8422441d4497696c6b558a4a111baef7bb35 Mon Sep 17 00:00:00 2001 From: billz Date: Sat, 3 Jun 2023 18:47:53 +0000 Subject: [PATCH 06/56] Fix php8 uncaught fatal error: ($value) must be of type Countable --- includes/dhcp.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/includes/dhcp.php b/includes/dhcp.php index 40570bbb5..726013749 100755 --- a/includes/dhcp.php +++ b/includes/dhcp.php @@ -187,12 +187,14 @@ function updateDnsmasqConfig($iface,$status) } // Static leases $staticLeases = array(); - for ($i=0; $i < count($_POST["static_leases"]["mac"]); $i++) { - $mac = trim($_POST["static_leases"]["mac"][$i]); - $ip = trim($_POST["static_leases"]["ip"][$i]); - $comment = trim($_POST["static_leases"]["comment"][$i]); - if ($mac != "" && $ip != "") { - $staticLeases[] = array('mac' => $mac, 'ip' => $ip, 'comment' => $comment); + if (isset($_POST["static_leases"]["mac"])) { + for ($i=0; $i < count($_POST["static_leases"]["mac"]); $i++) { + $mac = trim($_POST["static_leases"]["mac"][$i]); + $ip = trim($_POST["static_leases"]["ip"][$i]); + $comment = trim($_POST["static_leases"]["comment"][$i]); + if ($mac != "" && $ip != "") { + $staticLeases[] = array('mac' => $mac, 'ip' => $ip, 'comment' => $comment); + } } } // Sort ascending by IPs From a69bf2c6dddd16deefc514189a86a7dd458aecf1 Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 4 Jun 2023 12:26:15 +0000 Subject: [PATCH 07/56] Add _check_notify_ubuntu() --- installers/common.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/installers/common.sh b/installers/common.sh index 7bc2ce566..9f83ef573 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -171,6 +171,8 @@ function _set_php_package() { function _manage_systemd_services() { _install_log "Checking for systemd network services" + _check_notify_ubuntu + services=( "systemd-networkd" "systemd-resolved" ) for svc in "${services[@]}"; do # Prompt to disable systemd service @@ -195,6 +197,20 @@ function _manage_systemd_services() { _install_status 0 } +function _check_notify_ubuntu() { + if [ ${OS,,} = "ubuntu" ]; then + _install_status 2 "Ubuntu Server requires manual pre- and post-install steps. See https://docs.raspap.com/manual/" + echo -n "Proceed with installation? [Y/n]: " + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo "Installation aborted." + exit 0 + else + _install_status 0 + fi + fi +} + # Runs a system software update to make sure we're using all fresh packages function _install_dependencies() { _install_log "Installing required packages" From 6b01e6afaed0d0772a16a1743cfbf1407d7c8844 Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 4 Jun 2023 14:19:28 +0000 Subject: [PATCH 08/56] Fix php8 uncaught fatal error: Unsupported operand types string * int --- includes/functions.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/includes/functions.php b/includes/functions.php index 35d285cf6..7618eeb23 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -52,11 +52,15 @@ function mask2cidr($mask) */ function cidr2mask($cidr) { - $ta = substr ($cidr, strpos ($cidr, '/') + 1) * 1; - $netmask = str_split (str_pad (str_pad ('', $ta, '1'), 32, '0'), 8); - foreach ($netmask as &$element) - $element = bindec ($element); - return join ('.', $netmask); + $ipParts = explode('/', $cidr); + $ip = $ipParts[0]; + $prefixLength = $ipParts[1]; + + $ipLong = ip2long($ip); + $netmaskLong = bindec(str_pad(str_repeat('1', $prefixLength), 32, '0')); + $netmask = long2ip($netmaskLong); + + return $netmask; } /** From 186af54185ae6fe5a78d908bfb092e220dd85f2c Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 4 Jun 2023 15:11:25 +0000 Subject: [PATCH 09/56] Add iw_package when OS = ubuntu --- installers/common.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/installers/common.sh b/installers/common.sh index 9f83ef573..ade4e546d 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -197,6 +197,7 @@ function _manage_systemd_services() { _install_status 0 } +# Notifies Ubuntu users of pre-install requirements function _check_notify_ubuntu() { if [ ${OS,,} = "ubuntu" ]; then _install_status 2 "Ubuntu Server requires manual pre- and post-install steps. See https://docs.raspap.com/manual/" @@ -215,6 +216,8 @@ function _check_notify_ubuntu() { function _install_dependencies() { _install_log "Installing required packages" _set_php_package + + # OS-specific packages if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|18.04|19.10|11) ]]; then echo "Adding apt-repository ppa:ondrej/php" sudo apt-get install -y software-properties-common || _install_status 1 "Unable to install dependency" @@ -225,10 +228,14 @@ function _install_dependencies() { if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then dhcpcd_package="dhcpcd5" fi + if [ ${OS,,} = "ubuntu" ]; then + iw_package="iw" + fi + # Set dconf-set-selections 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 vnstat qrencode || _install_status 1 "Unable to install dependencies" + sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent $php_package $dhcpcd_package $iw_package vnstat qrencode || _install_status 1 "Unable to install dependencies" _install_status 0 } From da091b9142fe0ef174b975a03811dea3eba7cb3e Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 4 Jun 2023 15:27:54 +0000 Subject: [PATCH 10/56] Add system time to System > Basic tab --- app/lib/system.php | 6 ++++++ includes/system.php | 2 ++ locale/en_US/LC_MESSAGES/messages.mo | Bin 33981 -> 34021 bytes locale/en_US/LC_MESSAGES/messages.po | 3 +++ templates/system/basic.php | 3 +++ 5 files changed, 14 insertions(+) diff --git a/app/lib/system.php b/app/lib/system.php index 22f7255ad..a0aeb51d6 100644 --- a/app/lib/system.php +++ b/app/lib/system.php @@ -40,6 +40,12 @@ public function uptime() return $uptime; } + public function systime() + { + $systime = exec("date"); + return $systime; + } + public function usedMemory() { $used = shell_exec("free -m | awk 'NR==2{ total=$2 ; used=$3 } END { print used/total*100}'"); diff --git a/includes/system.php b/includes/system.php index 774745b9e..057359845 100755 --- a/includes/system.php +++ b/includes/system.php @@ -138,6 +138,7 @@ function DisplaySystem(&$extraFooterScripts) $cores = $system->processorCount(); $os = $system->operatingSystem(); $kernel = $system->kernelVersion(); + $systime = $system->systime(); // mem used $memused = $system->usedMemory(); @@ -207,6 +208,7 @@ function DisplaySystem(&$extraFooterScripts) "serverBind", "hostname", "uptime", + "systime", "cores", "os", "kernel", diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index 2e8e16f37499d0b5e8239a62349d1bf251eee7cc..376390db494c9463940aaa3f80639fffd30555ee 100644 GIT binary patch delta 7507 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 delta 7476 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 diff --git a/locale/en_US/LC_MESSAGES/messages.po b/locale/en_US/LC_MESSAGES/messages.po index 89eb0f971..67687e48d 100644 --- a/locale/en_US/LC_MESSAGES/messages.po +++ b/locale/en_US/LC_MESSAGES/messages.po @@ -737,6 +737,9 @@ msgstr "Pi Revision" msgid "Uptime" msgstr "Uptime" +msgid "System Time" +msgstr "System Time" + msgid "Memory Used" msgstr "Memory Used" diff --git a/templates/system/basic.php b/templates/system/basic.php index 887eeea73..e231c2161 100644 --- a/templates/system/basic.php +++ b/templates/system/basic.php @@ -24,6 +24,9 @@
+
+
+
From 51da8020eed302d65134ae2dbe0d8d6c3ee49517 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Fri, 9 Jun 2023 08:46:59 +0200 Subject: [PATCH 11/56] Update README.md w/ gitter badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05e1429c7..af8813a63 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![](https://i.imgur.com/xeKD93p.png) -[![Release 2.9.2](https://img.shields.io/badge/release-v2.9.2-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) [![Build Status](https://app.travis-ci.com/RaspAP/raspap-webgui.svg?branch=master)](https://app.travis-ci.com/RaspAP/raspap-webgui) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/) +[![Release 2.9.2](https://img.shields.io/badge/release-v2.9.2-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) [![Build Status](https://app.travis-ci.com/RaspAP/raspap-webgui.svg?branch=master)](https://app.travis-ci.com/RaspAP/raspap-webgui) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/) [![Join the chat at https://app.gitter.im/#/room/#RaspAP:gitter.im](https://img.shields.io/badge/chat-on%20gitter-brightgreen)](https://app.gitter.im/#/room/#RaspAP:gitter.im) RaspAP is feature-rich wireless router software that _just works_ on many popular [Debian-based devices](#supported-operating-systems), including the Raspberry Pi. Our popular [Quick installer](#quick-installer) creates a known-good default configuration for all current Raspberry Pis with onboard wireless. A fully responsive, mobile-ready interface gives you control over the relevant services and networking options. Advanced DHCP settings, WireGuard and OpenVPN support, [SSL certificates](https://docs.raspap.com/ssl-quick/), security audits, [captive portal integration](https://docs.raspap.com/captive/), themes and [multilingual options](https://docs.raspap.com/translations/) are included. From ebed27a0bd84ac2c9b4dead56e737feb6c839d8a Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 9 Jun 2023 16:00:39 +0000 Subject: [PATCH 12/56] Update about w/ Gitter link --- templates/about/general.php | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/about/general.php b/templates/about/general.php index 144bd51bb..e52644b78 100644 --- a/templates/about/general.php +++ b/templates/about/general.php @@ -15,6 +15,7 @@
GitHub RaspAP
Twitter @RaspAP
Reddit /r/raspap
+
License GPL-3.0
From 9c79bf2368e77f708a605e29ec553b1f80211fba Mon Sep 17 00:00:00 2001 From: billz Date: Sat, 10 Jun 2023 06:01:41 +0000 Subject: [PATCH 13/56] Update link to translations doc --- templates/about/general.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/about/general.php b/templates/about/general.php index e52644b78..2a6da8f3a 100644 --- a/templates/about/general.php +++ b/templates/about/general.php @@ -8,7 +8,7 @@ with the contributions of our developer community and language translators. Learn more about joining the project as a code contributor, - translator or financial sponsor with immediate access to exclusive features available to Insiders. + translator or financial sponsor with immediate access to exclusive features available to Insiders.
Project documentation is available at https://docs.raspap.com/