Script postinst of package firmware-b43-installer is modified to load the classic firmware for broadcom-cards,

according to  note at https://wiki.archlinux.org/index.php/Broadcom_wireless#b43

Logic is added to also load the correct version, in case the firmware is unconditionally loaded.

New postinst and diff are attached, I hope.

I did not properly indent the postinst-file!

#!/bin/sh
set -e

#########################################################################

make_env()
{
if [ -n "$latest" ]; then
        VERSION="6.30.163.46"
        BROADCOM_WL="broadcom-wl-${VERSION}"
        WL_APSTA="${BROADCOM_WL}.wl_apsta.o"
        
SHA512SUM="0144894fbbb5e8ebab6c423d9bd0f3249be94f2f468a50b8bf721a3b17f1f6e57467c79e87abc8d136bfc92e701ed046885fead892e9a73efa5217d710311ae9"
else
        VERSION="5.100.138"
        BROADCOM_WL="broadcom-wl-${VERSION}"
        WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o"
        
SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b"
fi

DOWNLOAD="${BROADCOM_WL}.tar.bz2"

URL="https://www.lwfinger.com/b43-firmware/${DOWNLOAD}";

FIRMWARE_INSTALL_DIR="/lib/firmware"

B43="b43"
}

#########################################################################
# stable sections below, not updated for firmware updates               #
#########################################################################

. /usr/share/debconf/confmodule

install_firmware ()
{
make_env

tmp=$(mktemp -q -d)

cd $tmp

# use apt proxy
APT_PROXIES=$(apt-config shell \
http_proxy Acquire::http::Proxy \
https_proxy Acquire::https::Proxy \
ftp_proxy Acquire::ftp::Proxy \
)

if [ -n "$APT_PROXIES" ]; then
        eval export $APT_PROXIES
fi

if ! wget --timeout=60 "${URL}"; then
        echo "$0: Some problem occurred during the firmware download. Please 
check your internet connection." 1>&2
        exit 1
fi
if ! sha512sum -c /dev/stdin << EOF; then
${SHA512SUM}  ${DOWNLOAD}
EOF
        echo "$0: Downloaded firmware did not match known SHA512 checksum, 
aborting." 1>&2
        exit 1
fi
if [ "${DOWNLOAD}" != "${WL_APSTA}" ]; then
        if ! tar xvjf "${DOWNLOAD}" "${WL_APSTA}"; then
                echo "$0: Unpacking firmware file failed, unable to continue 
(is /tmp full?)." 1>&2
                exit 1
        fi
fi
catalog="${FIRMWARE_INSTALL_DIR}/${B43}/firmware-${B43}-installer.catalog"
if [ -f "${catalog}" ]; then
        echo "$0: Deleting old extracted firmware..." 1>&2
        xargs -r -0 -a "${catalog}" dpkg-query -S 2>&1 1>/dev/null | sed 
-es',[^/]\+,,' | xargs -r rm --
        rm "${catalog}"
fi
mkdir -p "${FIRMWARE_INSTALL_DIR}/${B43}"
retcode=0
b43-fwcutter -w "${FIRMWARE_INSTALL_DIR}" "${WL_APSTA}" | while read line
do      echo "${line}"
        file="${line#Extracting }"
        if [ "${file}" != "${line}" ]
        then    if [ "${retcode}" -ne 0 ]
                then    rm "${FIRMWARE_INSTALL_DIR}/${file}"

                elif [ -z "${FIRMWARE_INSTALL_DIR}/${file}" ] || \
                ! printf %s/%s\\000 "${FIRMWARE_INSTALL_DIR}" "${file}" >> 
"${catalog}"
                then    echo "$0: Failed during extraction of ${file} from 
${WL_APSTA}" 1>&2
                        echo "$0: Warning, manual removal/cleaning of 
${FIRMWARE_INSTALL_DIR}/${B43} may be needed!" 1>&2
                        rm "${FIRMWARE_INSTALL_DIR}/${file}"
                        retcode=1
                fi
        fi
done

rm -f "${DOWNLOAD}" "${WL_APSTA}"
rm -rf "${BROADCOM_WL}"

# otherwise can't delete things
cd /

rmdir $tmp || echo "$0: DEBUG: targeted cleaning failed" 1>&2

rm -rf $tmp
[ ${retcode} -eq 0 ] || exit ${retcode}
}

# check environment
if [ "$(stat -c %d/%i /)" != "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
 then
    echo "A chroot environment has been detected."
    echo "Remember this firmware needs kernel >= 2.6.25."
    unconditional=1
 else 
    echo "No chroot environment found. Starting normal installation"
fi
     

if [ -z "$unconditonal" ]; then
# check kernel version
if dpkg --compare-versions 2.6.25 gt `uname -r | cut -d- -f1`; then
        echo "Kernel too old. This firmware needs >= 2.6.25!."
        echo "Aborting!"
        exit 0
fi

# install firmware unconditional if the corresponding debconf value is true
# this is usefull for live-systems or similar systems that should work on
# changing hardware
db_get b43-fwcutter/install-unconditional
if [ "$RET" = "true" ] ; then
    unconditional=1
fi
fi

# check chip
pci=`lspci -n -d 14e4: | grep -o "14e4:[1234567890abcdef]\+"` || true

if [ -z "$pci$unconditional" ]; then
        echo "No known supported Broadcom 802.11 chips found, not installing 
firmware."
        echo
        echo "Aborting."
        exit 0
fi

if [ -n "$pci" ] ; then
for device in $pci; do
        device_id=${device#14e4:}
        case $device_id in
        4301 | 4325)
                legacy=1
        ;;
        4306 | 432[04])
                chip=`lspci -n -d ${device}`
                if [ "${chip}" != "${chip%${device} (rev 03)}" ] ; then
                   latest=1
                else
                   legacy=1
                fi
        ;;
        4307 | 431[59] | 432[1289bc] | 4331 | 435[03789] | 43a[9a] | 4716 | 
a8d8 | a8db | 5354)
                latest=1
        ;;
        431[12])
                classic=1
        ;;
        4318)
                chip=`lspci -n -d ${device}`
                if [ "${chip}" != "${chip%${device} (rev 02)}" ] ; then
                   classic=1
                else
                   latest=1
                fi
        ;;
        4322 | 4358 | 436[05] | 43a0 | 43b1 | 4727)
                unsupported="$unsupported $device_id"
        ;;
        4313)
                # need to distinguish BCM4311 (untested) from BCM4313 (not 
supported)
                nottested=1
        ;;
        0576 | 432[ad] | 435[89a] | a8d6 | a99d)
                nottested=1
        ;;
        *)
        ;;
        esac
done
fi

if [ -n "$unconditonal" ]; then
        if [ -z "$latest$classic" ]; then
           # default latest firmware if unconditional
           latest=1
        fi
        install_firmware
        exit 0
fi

if [ -n "$unsupported" ]; then
        echo -n "Unsupported device(s) found: PCI id "
        for device_id in $unsupported; do echo -n " * 14e4:$device_id "; done
        echo
fi
if [ -n "$legacy" ]; then
        echo "An unsupported BCM4301, BCM4306 or BCM4306/2 device was found."
        echo "Please install b43legacy firmware (firmware-b43legacy-installer 
package)."
        echo
fi
if [ -n "$latest$classic" ]; then
        echo "A card known to work was found. Trying to install firmware."
        install_firmware
elif [ -n "$nottested" ]; then
        echo "An untested card was found. Please install the driver manually."
fi

#DEBHELPER#
--- firmware-b43-installer.postinst_org 2020-04-11 11:42:37.000000000 +0200
+++ firmware-b43-installer.postinst     2020-04-29 15:35:39.477170391 +0200
@@ -3,21 +3,28 @@
 
 #########################################################################
 
-VERSION="6.30.163.46"
-
-BROADCOM_WL="broadcom-wl-${VERSION}"
-
-WL_APSTA="${BROADCOM_WL}.wl_apsta.o"
+make_env()
+{
+if [ -n "$latest" ]; then
+        VERSION="6.30.163.46"
+        BROADCOM_WL="broadcom-wl-${VERSION}"
+        WL_APSTA="${BROADCOM_WL}.wl_apsta.o"
+        
SHA512SUM="0144894fbbb5e8ebab6c423d9bd0f3249be94f2f468a50b8bf721a3b17f1f6e57467c79e87abc8d136bfc92e701ed046885fead892e9a73efa5217d710311ae9"
+else
+        VERSION="5.100.138"
+        BROADCOM_WL="broadcom-wl-${VERSION}"
+        WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o"
+       
SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b"
+fi
 
 DOWNLOAD="${BROADCOM_WL}.tar.bz2"
 
 URL="https://www.lwfinger.com/b43-firmware/${DOWNLOAD}";
 
-SHA512SUM="0144894fbbb5e8ebab6c423d9bd0f3249be94f2f468a50b8bf721a3b17f1f6e57467c79e87abc8d136bfc92e701ed046885fead892e9a73efa5217d710311ae9"
-
 FIRMWARE_INSTALL_DIR="/lib/firmware"
 
 B43="b43"
+}
 
 #########################################################################
 # stable sections below, not updated for firmware updates              #
@@ -25,8 +32,10 @@
 
 . /usr/share/debconf/confmodule
 
-latest_firmware ()
+install_firmware ()
 {
+make_env
+
 tmp=$(mktemp -q -d)
 
 cd $tmp
@@ -100,15 +109,13 @@
  then
     echo "A chroot environment has been detected."
     echo "Remember this firmware needs kernel >= 2.6.25."
-    latest_firmware
-    exit 0
+    unconditional=1
  else 
     echo "No chroot environment found. Starting normal installation"
 fi
      
 
-
-
+if [ -z "$unconditonal" ]; then
 # check kernel version
 if dpkg --compare-versions 2.6.25 gt `uname -r | cut -d- -f1`; then
        echo "Kernel too old. This firmware needs >= 2.6.25!."
@@ -121,27 +128,28 @@
 # changing hardware
 db_get b43-fwcutter/install-unconditional
 if [ "$RET" = "true" ] ; then
-    latest_firmware
-    exit 0
+    unconditional=1
+fi
 fi
 
 # check chip
 pci=`lspci -n -d 14e4: | grep -o "14e4:[1234567890abcdef]\+"` || true
 
-if [ -z "$pci" ]; then
+if [ -z "$pci$unconditional" ]; then
        echo "No known supported Broadcom 802.11 chips found, not installing 
firmware."
        echo
        echo "Aborting."
        exit 0
 fi
 
+if [ -n "$pci" ] ; then
 for device in $pci; do
        device_id=${device#14e4:}
        case $device_id in
-       430[16] | 4325)
+       4301 | 4325)
                legacy=1
        ;;
-       432[04])
+       4306 | 432[04])
                chip=`lspci -n -d ${device}`
                if [ "${chip}" != "${chip%${device} (rev 03)}" ] ; then
                   latest=1
@@ -149,9 +157,20 @@
                   legacy=1
                fi
        ;;
-       4307 | 431[12589] | 432[1289bc] | 4331 | 435[03789] | 43a[9a] | 4716 | 
a8d8 | a8db | 5354)
+       4307 | 431[59] | 432[1289bc] | 4331 | 435[03789] | 43a[9a] | 4716 | 
a8d8 | a8db | 5354)
                latest=1
        ;;
+        431[12])
+                classic=1
+        ;;
+        4318)
+                chip=`lspci -n -d ${device}`
+                if [ "${chip}" != "${chip%${device} (rev 02)}" ] ; then
+                   classic=1
+                else
+                   latest=1
+                fi
+        ;;
        4322 | 4358 | 436[05] | 43a0 | 43b1 | 4727)
                unsupported="$unsupported $device_id"
        ;;
@@ -166,6 +185,16 @@
        ;;
        esac
 done
+fi
+
+if [ -n "$unconditonal" ]; then
+        if [ -z "$latest$classic" ]; then
+           # default latest firmware if unconditional
+           latest=1
+        fi
+        install_firmware
+        exit 0
+fi
 
 if [ -n "$unsupported" ]; then
        echo -n "Unsupported device(s) found: PCI id "
@@ -177,9 +206,9 @@
        echo "Please install b43legacy firmware (firmware-b43legacy-installer 
package)."
        echo
 fi
-if [ -n "$latest" ]; then
+if [ -n "$latest$classic" ]; then
        echo "A card known to work was found. Trying to install firmware."
-       latest_firmware
+       install_firmware
 elif [ -n "$nottested" ]; then
        echo "An untested card was found. Please install the driver manually."
 fi

Reply via email to