From 81790ba305f34ba6fad56dc41982f50cebfd1be0 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 7 Jan 2022 03:47:39 -0500 Subject: [PATCH] Clarify RPi WiFi firmware capacity options --- roles/firmware/tasks/install.yml | 16 ++-- roles/firmware/tasks/main.yml | 15 ++-- roles/firmware/templates/iiab-check-firmware | 78 +++++++------------ .../firmware/templates/iiab-firmware-warn.sh | 15 ++-- 4 files changed, 53 insertions(+), 71 deletions(-) diff --git a/roles/firmware/tasks/install.yml b/roles/firmware/tasks/install.yml index 3b3b78e9a..c0fcfa532 100644 --- a/roles/firmware/tasks/install.yml +++ b/roles/firmware/tasks/install.yml @@ -3,9 +3,9 @@ when: firmware_downloaded is undefined # SEE ALSO firmware_installed below -# Set 2 symlinks for RPi 3 B+ and 4 +# Set 2 symlinks for RPi 3 B+ and 4 (43455) -- name: Populate rpi3bplus_rpi4_wifi_firmwares dictionary (lookup table for 43455 .bin and .clm_blob files in /lib/firmware/brcm) +- name: Populate rpi3bplus_rpi4_wifi_firmwares dictionary (lookup table for operator-chosen .bin and .clm_blob files in /lib/firmware/brcm) set_fact: rpi3bplus_rpi4_wifi_firmwares: # Dictionary keys (left side) are always strings, e.g. "19" os: @@ -21,14 +21,14 @@ - brcmfmac43455-sdio.bin_2015-03-01_7.45.18.0_ub19.10.1 - brcmfmac43455-sdio.clm_blob_2018-02-26_rpi -- name: Symlink brcmfmac43455-sdio.bin.iiab -> {{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][0] }} (as rpi3bplus_rpi4_wifi_firmware is "{{ rpi3bplus_rpi4_wifi_firmware }}") +- name: Symlink /lib/firmware/brcm/brcmfmac43455-sdio.bin.iiab -> {{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][0] }} (as rpi3bplus_rpi4_wifi_firmware is "{{ rpi3bplus_rpi4_wifi_firmware }}") file: src: "{{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][0] }}" path: /lib/firmware/brcm/brcmfmac43455-sdio.bin.iiab state: link force: yes -- name: Symlink brcmfmac43455-sdio.clm_blob.iiab -> {{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][1] }} (as rpi3bplus_rpi4_wifi_firmware is "{{ rpi3bplus_rpi4_wifi_firmware }}") +- name: Symlink /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.iiab -> {{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][1] }} (as rpi3bplus_rpi4_wifi_firmware is "{{ rpi3bplus_rpi4_wifi_firmware }}") file: src: "{{ rpi3bplus_rpi4_wifi_firmwares[rpi3bplus_rpi4_wifi_firmware][1] }}" path: /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.iiab @@ -36,9 +36,9 @@ force: yes -# Set 2 symlinks for RPi Zero W and 3 +# Set 2 symlinks for RPi Zero W and 3 (43430) -- name: Populate rpizerow_rpi3_wifi_firmwares dictionary (lookup table for 43430 .bin and .clm_blob files in /lib/firmware/brcm) +- name: Populate rpizerow_rpi3_wifi_firmwares dictionary (lookup table for operator-chosen .bin and .clm_blob files in /lib/firmware/brcm) set_fact: rpizerow_rpi3_wifi_firmwares: os: @@ -48,14 +48,14 @@ - brcmfmac43430-sdio.bin_2018-09-11_7.45.98.65 - brcmfmac43430-sdio.clm_blob_2018-09-11_7.45.98.65 -- name: Symlink brcmfmac43430-sdio.bin.iiab -> {{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][0] }} (as rpizerow_rpi3_wifi_firmware is "{{ rpizerow_rpi3_wifi_firmware }}") +- name: Symlink /lib/firmware/brcm/brcmfmac43430-sdio.bin.iiab -> {{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][0] }} (as rpizerow_rpi3_wifi_firmware is "{{ rpizerow_rpi3_wifi_firmware }}") file: src: "{{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][0] }}" path: /lib/firmware/brcm/brcmfmac43430-sdio.bin.iiab state: link force: yes -- name: Symlink brcmfmac43430-sdio.clm_blob.iiab -> {{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][1] }} (as rpizerow_rpi3_wifi_firmware is "{{ rpizerow_rpi3_wifi_firmware }}") +- name: Symlink /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.iiab -> {{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][1] }} (as rpizerow_rpi3_wifi_firmware is "{{ rpizerow_rpi3_wifi_firmware }}") file: src: "{{ rpizerow_rpi3_wifi_firmwares[rpizerow_rpi3_wifi_firmware][1] }}" path: /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.iiab diff --git a/roles/firmware/tasks/main.yml b/roles/firmware/tasks/main.yml index a199f2630..3543c5993 100644 --- a/roles/firmware/tasks/main.yml +++ b/roles/firmware/tasks/main.yml @@ -1,14 +1,17 @@ -# Please set 'wifi_hotspot_capacity_rpi_fix: True' in /etc/iiab/local_vars.yml -# to restore support for 30-32 WiFi client devices on most Raspberry Pis that -# have internal WiFi. This installs firmware 7.45.98.65 for Zero W and RPi 3 -# and firmware 7.45.18.0 for RPi 3 B+ and RPi 4. Capacity testing writeup: -# https://github.com/iiab/iiab/issues/823#issuecomment-662285202 +# Please set 'rpi3bplus_rpi4_wifi_firmware' and 'rpizerow_rpi3_wifi_firmware' in +# /etc/iiab/local_vars.yml to increase (or modify) the number of student WiFi +# client devices that can access your Raspberry Pi's internal WiFi hotspot. + +# If IIAB's already installed, you should then run 'cd /opt/iiab/iiab' +# followed by 'sudo ./runrole firmware' + +# Background: https://github.com/iiab/iiab/issues/823#issuecomment-662285202 - name: Install firmware (for RPi internal WiFi) include_tasks: install.yml #when: firmware_installed is undefined -# Two variable are placed in /etc/iiab/iiab_state.yml: +# Two variables are placed in /etc/iiab/iiab_state.yml: # # - firmware_downloaded (set in download.yml) is used in install.yml # diff --git a/roles/firmware/templates/iiab-check-firmware b/roles/firmware/templates/iiab-check-firmware index 024a074b7..6b798ccf1 100644 --- a/roles/firmware/templates/iiab-check-firmware +++ b/roles/firmware/templates/iiab-check-firmware @@ -1,6 +1,5 @@ #!/bin/bash -WARN=false DATE=$(date +%F-%T) # 2021-08-18: bash scripts using default_vars.yml &/or local_vars.yml @@ -10,53 +9,36 @@ DATE=$(date +%F-%T) # https://github.com/iiab/maps/blob/master/osm-source/pages/viewer/scripts/iiab-install-map-region#L25-L34 # https://github.com/iiab/iiab/blob/master/roles/openvpn/templates/iiab-support READS AND WRITES, INCL NON-BOOLEAN -if grep -q '^wifi_hotspot_capacity_rpi_fix:\s\+[fF]alse\b' /etc/iiab/local_vars.yml ; then - echo "'wifi_hotspot_capacity_rpi_fix: False' found in /etc/iiab/local_vars.yml" - echo "...so WiFi firmware will NOT be checked or replaced." - exit 0 -fi +if ! grep -q '^rpi3bplus_rpi4_wifi_firmware:\s\+os\b' /etc/iiab/local_vars.yml ; then + if ! cmp -s /lib/firmware/brcm/brcmfmac43455-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43455-sdio.bin ; then + mv /lib/firmware/brcm/brcmfmac43455-sdio.bin /lib/firmware/brcm/brcmfmac43455-sdio.bin.$DATE + ln -sf brcmfmac43455-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43455-sdio.bin + echo "Replaced /lib/firmware/brcm/brcmfmac43455-sdio.bin" + touch /tmp/.fw_replaced + fi -echo -e "'wifi_hotspot_capacity_rpi_fix: True' presumed..." -echo -e "...in /etc/iiab/local_vars.yml (or /opt/iiab/iiab/vars/default_vars.yml ?)\n" - -if ! cmp -s /lib/firmware/brcm/brcmfmac43455-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43455-sdio.bin ; then - mv /lib/firmware/brcm/brcmfmac43455-sdio.bin /lib/firmware/brcm/brcmfmac43455-sdio.bin.$DATE - ln -sf brcmfmac43455-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43455-sdio.bin - echo "Replaced /lib/firmware/brcm/brcmfmac43455-sdio.bin" - WARN=true -fi - -if ! cmp -s /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob ; then - mv /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.$DATE - ln -sf brcmfmac43455-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob - echo "Replaced /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob" - WARN=true -fi - -if ! cmp -s /lib/firmware/brcm/brcmfmac43430-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43430-sdio.bin ; then - mv /lib/firmware/brcm/brcmfmac43430-sdio.bin /lib/firmware/brcm/brcmfmac43430-sdio.bin.$DATE - ln -sf brcmfmac43430-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43430-sdio.bin - echo "Replaced /lib/firmware/brcm/brcmfmac43430-sdio.bin" - WARN=true -fi - -if ! cmp -s /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob ; then - mv /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.$DATE - ln -sf brcmfmac43430-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob - echo "Replaced /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob" - WARN=true -fi - -if $($WARN); then - echo -e "\n \e[41;1mWiFi Firmware has been replaced, per iiab/iiab#823.\e[0m" - echo -e " \e[41;1mReboot is required to activate.\e[0m\n" - touch /.fw_replaced - #echo "rebooting..." - #reboot -else - echo -e " WiFi Firmware check \e[42;1mPASSED\e[0m, per iiab/iiab#823." # Or \e[92m for green on black - echo -e " (Assuming you've rebooted since it was replaced!)\n" - if [ -f /.fw_replaced ]; then - rm /.fw_replaced + if ! cmp -s /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob ; then + mv /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob.$DATE + ln -sf brcmfmac43455-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob + echo "Replaced /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob" + touch /tmp/.fw_replaced fi fi + +if ! grep -q '^rpizerow_rpi3_wifi_firmware:\s\+os\b' /etc/iiab/local_vars.yml ; then + if ! cmp -s /lib/firmware/brcm/brcmfmac43430-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43430-sdio.bin ; then + mv /lib/firmware/brcm/brcmfmac43430-sdio.bin /lib/firmware/brcm/brcmfmac43430-sdio.bin.$DATE + ln -sf brcmfmac43430-sdio.bin.iiab /lib/firmware/brcm/brcmfmac43430-sdio.bin + echo "Replaced /lib/firmware/brcm/brcmfmac43430-sdio.bin" + touch /tmp/.fw_replaced + fi + + if ! cmp -s /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob ; then + mv /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob.$DATE + ln -sf brcmfmac43430-sdio.clm_blob.iiab /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob + echo "Replaced /lib/firmware/brcm/brcmfmac43430-sdio.clm_blob" + touch /tmp/.fw_replaced + fi +fi + +bash < /etc/profile.d/iiab-firmware-warn.sh diff --git a/roles/firmware/templates/iiab-firmware-warn.sh b/roles/firmware/templates/iiab-firmware-warn.sh index 55120ffbd..4d4d1c965 100644 --- a/roles/firmware/templates/iiab-firmware-warn.sh +++ b/roles/firmware/templates/iiab-firmware-warn.sh @@ -1,12 +1,9 @@ #!/bin/bash -if [ -f /.fw_replaced ]; then - echo -e "\n \e[41;1mWiFi Firmware has been replaced, per iiab/iiab#823.\e[0m" - if grep -q '^wifi_hotspot_capacity_rpi_fix:\s\+[fF]alse\b' /etc/iiab/local_vars.yml ; then - echo -e " \e[100;1mIf you want these warnings to stop, run:\e[0m" - echo - echo -e " \e[100;1msudo rm /.fw_replaced\e[0m\n" - else - echo -e " \e[41;1mReboot is required to activate.\e[0m\n" - fi +if [ -f /tmp/.fw_replaced ]; then + echo -e "\n\e[41;1mWiFi Firmware has been replaced, per iiab/iiab#823.\e[0m" + echo -e "\e[41;1mReboot is required to activate.\e[0m" + echo + echo -e "\e[100;1mIf you want these warnings to stop, run:\e[0m" + echo -e "\e[100;1msudo rm /tmp/.fw_replaced\e[0m\n" fi