Just found I'd goofed in the last revision. Updated patches demonstrating my request attached.
-- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sig...@m5p.com PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
>From 558c9c2069bc381609b0fa8184ff4d0217d3d667 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 17:40:07 -0700 Subject: [PATCH 02/10] Introduce variables for many magic constants Introduce variables for many of the likely to change magic constants. Notably the version of the upstream firmware tarball, the exact filename within the tarball, and the base URL for upstream. Take advantage of the object file name (${WL_APSTA}) to only extract the relevant object file from the upstream tarball. This potentially saves a lot of storage space during extraction, fixes bug #819129. --- debian/firmware-b43-installer.postinst | 34 +++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index ed95591..c8d307f 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -1,15 +1,36 @@ #!/bin/sh +######################################################################### +#$Id$ # +######################################################################### + +VERSION="5.100.138" + +BROADCOM_WL="broadcom-wl-${VERSION}" + +WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o" + +TARBALL="${BROADCOM_WL}.tar.bz2" + +URL="http://www.lwfinger.com/b43-firmware/${TARBALL}" + +FIRMWARE_INSTALL_DIR="/lib/firmware" + +######################################################################### +# stable sections below, not updated for firmware updates # +######################################################################### + set -e . /usr/share/debconf/confmodule -tmp=`mktemp -q -d` - latest_firmware () { +umask 027 + +tmp=`mktemp -q -d` + cd $tmp -export FIRMWARE_INSTALL_DIR="/lib/firmware" # use apt proxy APT_PROXIES=$(apt-config shell \ @@ -22,12 +43,11 @@ if [ -n "$APT_PROXIES" ]; then eval export $APT_PROXIES fi -if ! wget --timeout=60 http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2 ; then +if ! wget --timeout=60 "${URL}"; then echo "Some problem occurred during the firmware download. Please check your internet connection." exit 0 fi -tar xvjf broadcom-wl-5.100.138.tar.bz2 -cd broadcom-wl-5.100.138/linux +tar xvjf "${TARBALL}" "${WL_APSTA}" if [ -d "${FIRMWARE_INSTALL_DIR}/b43" ]; then echo "Deleting old extracted firmware..." xargs -r -0 -a "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" dpkg-query -S 2>&1 1>/dev/null | sed -es',[^/]\+,,' | xargs -r rm -- @@ -36,7 +56,7 @@ fi mkdir "${FIRMWARE_INSTALL_DIR}/b43" || true catalog="${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" retcode=0 -b43-fwcutter -w "${FIRMWARE_INSTALL_DIR}" wl_apsta.o | while read line +b43-fwcutter -w "${FIRMWARE_INSTALL_DIR}" "${WL_APSTA}" | while read line do echo "${line}" file="${line#Extracting }" if [ "${file}" != "${line}" ] -- 1.7.10.4
>From a41cc81f1b2158e4a2b69c43976e71e5817ddfeb Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 17:45:32 -0700 Subject: [PATCH 03/10] Need to get out of temporary directory before removal ...otherwise the removal WILL fail (minor, unreported bug). Also implement targeted cleaning that should get rid of all the intermediate files without the sledgehammer of `rm -rf`. --- debian/firmware-b43-installer.postinst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index c8d307f..1cc0ccc 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -72,6 +72,15 @@ do echo "${line}" fi fi done + +rm "${TARBALL}" "${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} } -- 1.7.10.4
>From 715a201d7c0d0a9b02a232dc320535c85b7e28b5 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 17:50:17 -0700 Subject: [PATCH 04/10] Check return codes of all commands, flag errors better Errors on various commands were being ignored. Notably failures by `wget` wouldn't tell `dpkg` that installation had failed. Other commands weren't explicitly checked or flagged. The report of this accidentally ended up attached to bug #756664. --- debian/firmware-b43-installer.postinst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index 1cc0ccc..8e09ea7 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -44,12 +44,15 @@ if [ -n "$APT_PROXIES" ]; then fi if ! wget --timeout=60 "${URL}"; then - echo "Some problem occurred during the firmware download. Please check your internet connection." - exit 0 + echo "$0: Some problem occurred during the firmware download. Please check your internet connection." 1>&2 + exit 1 +fi +if ! tar xvjf "${TARBALL}" "${WL_APSTA}"; then + echo "$0: Unpacking firmware file failed, unable to continue (is /tmp full?)." 1>&2 + exit 1 fi -tar xvjf "${TARBALL}" "${WL_APSTA}" if [ -d "${FIRMWARE_INSTALL_DIR}/b43" ]; then - echo "Deleting old extracted firmware..." + echo "$0: Deleting old extracted firmware..." 1>&2 xargs -r -0 -a "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" dpkg-query -S 2>&1 1>/dev/null | sed -es',[^/]\+,,' | xargs -r rm -- rm "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" fi -- 1.7.10.4
>From 50b565cfb763240919336b92476915b2331589ca Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 18:11:46 -0700 Subject: [PATCH 05/10] Add checking of SHA512 checksum of downloaded tarball Most of the programs invoked on the firmware should be fairly resistant to attacks, but implement some additional protection. This should also guard against corrupted downloads. Fixes #756664. --- debian/firmware-b43-installer.postinst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index 8e09ea7..7174f2f 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -10,6 +10,8 @@ BROADCOM_WL="broadcom-wl-${VERSION}" WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o" +SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b" + TARBALL="${BROADCOM_WL}.tar.bz2" URL="http://www.lwfinger.com/b43-firmware/${TARBALL}" @@ -47,6 +49,12 @@ 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} ${TARBALL} +EOF + echo "$0: Downloaded firmware did not match known SHA512 checksum, aborting." 1>&2 + exit 1 +fi if ! tar xvjf "${TARBALL}" "${WL_APSTA}"; then echo "$0: Unpacking firmware file failed, unable to continue (is /tmp full?)." 1>&2 exit 1 -- 1.7.10.4
>From f04ef5716ced5ba5352fea992a29c688a74e25a8 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 19:10:14 -0700 Subject: [PATCH 06/10] Break firmware installation into separate script (that can be run by hand) This package now features the `firmware-b43-install` script. This script can be run by hand to install firmware unconditionally. Firmware will still be installed by the postinst script, but this is done via this script. --- debian/firmware-b43-installer.dirs | 3 +- debian/firmware-b43-installer.postinst | 85 +---------------------- debian/rules | 2 + firmware-b43-install | 117 ++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 85 deletions(-) create mode 100755 firmware-b43-install diff --git a/debian/firmware-b43-installer.dirs b/debian/firmware-b43-installer.dirs index 5eeb6b9..b732776 100644 --- a/debian/firmware-b43-installer.dirs +++ b/debian/firmware-b43-installer.dirs @@ -1 +1,2 @@ -/lib/firmware/b43/ +/lib/firmware/ +/usr/sbin/ diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index 7174f2f..1c6e250 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -4,96 +4,13 @@ #$Id$ # ######################################################################### -VERSION="5.100.138" - -BROADCOM_WL="broadcom-wl-${VERSION}" - -WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o" - -SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b" - -TARBALL="${BROADCOM_WL}.tar.bz2" - -URL="http://www.lwfinger.com/b43-firmware/${TARBALL}" - -FIRMWARE_INSTALL_DIR="/lib/firmware" - -######################################################################### -# stable sections below, not updated for firmware updates # -######################################################################### - set -e . /usr/share/debconf/confmodule latest_firmware () { -umask 027 - -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} ${TARBALL} -EOF - echo "$0: Downloaded firmware did not match known SHA512 checksum, aborting." 1>&2 - exit 1 -fi -if ! tar xvjf "${TARBALL}" "${WL_APSTA}"; then - echo "$0: Unpacking firmware file failed, unable to continue (is /tmp full?)." 1>&2 - exit 1 -fi -if [ -d "${FIRMWARE_INSTALL_DIR}/b43" ]; then - echo "$0: Deleting old extracted firmware..." 1>&2 - xargs -r -0 -a "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" dpkg-query -S 2>&1 1>/dev/null | sed -es',[^/]\+,,' | xargs -r rm -- - rm "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" -fi -mkdir "${FIRMWARE_INSTALL_DIR}/b43" || true -catalog="${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" -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\\x00 "${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 "${TARBALL}" "${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} + /usr/sbin/firmware-b43-install || exit 1 } # check environment diff --git a/debian/rules b/debian/rules index dfd8ff2..3d6d76e 100755 --- a/debian/rules +++ b/debian/rules @@ -27,3 +27,5 @@ override_dh_installchangelogs: override_dh_auto_install: $(INSTALL) b43-fwcutter $(CURDIR)/debian/b43-fwcutter/usr/bin + $(INSTALL) firmware-b43-install $(CURDIR)/debian/firmware-b43-installer/usr/sbin + diff --git a/firmware-b43-install b/firmware-b43-install new file mode 100755 index 0000000..92d21c8 --- /dev/null +++ b/firmware-b43-install @@ -0,0 +1,117 @@ +#!/bin/sh + +######################################################################### +#$Id$ # +######################################################################### + +VERSION="5.100.138" + +BROADCOM_WL="broadcom-wl-${VERSION}" + +WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o" + +SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b" + +TARBALL="${BROADCOM_WL}.tar.bz2" + +URL="http://www.lwfinger.com/b43-firmware/${TARBALL}" + +FIRMWARE_INSTALL_DIR="/lib/firmware" + +######################################################################### +# stable sections below, not updated for firmware updates # +######################################################################### + +set -e + +if [ $# -gt 2 ] +then echo "$0: Too many arguments" 1>&2 + exit 1 +elif [ $# -eq 1 ] +then if [ "$1" = "-h" -o "$1" = "--help" ] + then echo "$0 <output directory>" 1>&2 + exit 0 + elif [ "${1#-}" != "$1" ] + then echo "$0: No options other than -h are supported" 1>&2 + exit 1 + fi + + if [ "${1#/}" = "$1" ] + then FIRMWARE_INSTALL_DIR="`pwd`/$1" + else FIRMWARE_INSTALL_DIR="$1" + fi +fi + + +umask 027 + +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} ${TARBALL} +EOF + echo "$0: Downloaded firmware did not match known SHA512 checksum, aborting." 1>&2 + exit 1 +fi +if ! tar xvjf "${TARBALL}" "${WL_APSTA}"; then + echo "$0: Unpacking firmware file failed, unable to continue (is /tmp full?)." 1>&2 + exit 1 +fi +if [ -d "${FIRMWARE_INSTALL_DIR}/b43" ]; then + echo "$0: Deleting old extracted firmware..." 1>&2 + xargs -r -0 -a "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" dpkg-query -S 2>&1 1>/dev/null | sed -es',[^/]\+,,' | xargs -r rm -- + rm "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" + rmdir "${FIRMWARE_INSTALL_DIR}/b43" || exit 1 +fi +mkdir "${FIRMWARE_INSTALL_DIR}/b43" || true +catalog="${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" +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\\x00 "${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 "${TARBALL}" "${WL_APSTA}" +rm -rf "${BROADCOM_WL}" + +# otherwise can't delete things +cd / + +rmdir $tmp || echo "$0: DEBUG: targeted cleaning failed" 1>&2 + +# this line *should* now be redundant, but leave it alone for now +rm -rf $tmp + +exit ${retcode} + -- 1.7.10.4
>From 745b098eaa9f9768754e85ac9c91252b0ef52c66 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Thu, 31 Mar 2016 19:42:08 -0700 Subject: [PATCH 07/10] Implement package building script These changes now create the script `firmware-b43-buildpackage`, which will download the b43 firmware and turn it into a Debian package. This package can then be installed on single or multiple systems, which do not need any development tools installed. --- debian/control | 3 ++- debian/firmware-b43-installer.postinst | 2 ++ debian/rules | 5 +++++ firmware-b43-buildpackage.control | 27 +++++++++++++++++++++++++++ firmware-b43-buildpackage.dirs | 1 + firmware-b43-buildpackage.footer | 16 ++++++++++++++++ firmware-b43-buildpackage.header | 20 ++++++++++++++++++++ firmware-b43-buildpackage.preinst | 24 ++++++++++++++++++++++++ firmware-b43-buildpackage.rules | 18 ++++++++++++++++++ 9 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 firmware-b43-buildpackage.control create mode 100644 firmware-b43-buildpackage.dirs create mode 100644 firmware-b43-buildpackage.footer create mode 100644 firmware-b43-buildpackage.header create mode 100644 firmware-b43-buildpackage.preinst create mode 100755 firmware-b43-buildpackage.rules diff --git a/debian/control b/debian/control index e1030bf..715c119 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: b43-fwcutter Section: contrib/utils Priority: optional Maintainer: Daniel Echeverry <epsilo...@gmail.com> -Build-Depends: debhelper (>= 9), po-debconf, debconf +Build-Depends: debhelper (>= 9), po-debconf, debconf, sharutils Standards-Version: 3.9.5 Homepage: http://wireless.kernel.org/en/users/Drivers/b43 Vcs-Git: git://anonscm.debian.org/collab-maint/b43-fwcutter.git @@ -22,6 +22,7 @@ Package: firmware-b43-installer Section: contrib/kernel Architecture: all Depends: b43-fwcutter (>= ${source:Version}), bzip2, wget, ${misc:Depends} +Suggests: dpkg-dev, debhelper, fakeroot Replaces: firmware-b43-lpphy-installer (<= 1:015-14) Breaks: firmware-b43-lpphy-installer (<= 1:015-14) Description: firmware installer for the b43 driver diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index 1c6e250..aecffcc 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -10,6 +10,8 @@ set -e latest_firmware () { + # indicates presence of firmware-b43 ? + [ -d /lib/firmware/b43 ] || exit 0 /usr/sbin/firmware-b43-install || exit 1 } diff --git a/debian/rules b/debian/rules index 3d6d76e..f130f42 100755 --- a/debian/rules +++ b/debian/rules @@ -17,6 +17,10 @@ sed -e s/"("// -e s/")"// | cut -d"-" -f1) override_dh_auto_build: dh_auto_build -- CFLAGS="$(CFLAGS) $(CPPFLAGS) -std=c99 -fomit-frame-pointer -pedantic -D_BSD_SOURCE \ -DFWCUTTER_VERSION_=`echo $(version) | cut -d: -f2`" + shar debian/compat debian/source firmware-b43-buildpackage.[cdpr]* \ + | sed -es',firmware-b43-buildpackage\.\(control\|rules\),debian/\1,g' \ + -es',\(firmware-b43\)-buildpackage\.\(dirs\|preinst\),debian/\1.\2,g' \ + | head -n -1 | cat firmware-b43-buildpackage.header /dev/stdin firmware-b43-buildpackage.footer > firmware-b43-buildpackage override_dh_auto_clean: rm -f b43-fwcutter @@ -28,4 +32,5 @@ override_dh_installchangelogs: override_dh_auto_install: $(INSTALL) b43-fwcutter $(CURDIR)/debian/b43-fwcutter/usr/bin $(INSTALL) firmware-b43-install $(CURDIR)/debian/firmware-b43-installer/usr/sbin + $(INSTALL) firmware-b43-buildpackage $(CURDIR)/debian/firmware-b43-installer/usr/sbin diff --git a/firmware-b43-buildpackage.control b/firmware-b43-buildpackage.control new file mode 100644 index 0000000..393dc14 --- /dev/null +++ b/firmware-b43-buildpackage.control @@ -0,0 +1,27 @@ +Source: b43-fwcutter +Section: contrib/utils +Priority: optional +Maintainer: Daniel Echeverry <epsilo...@gmail.com> +Build-Depends: debhelper (>= 9), po-debconf, debconf, firmware-b43-installer +Standards-Version: 3.9.5 +Homepage: http://wireless.kernel.org/en/users/Drivers/b43 +Vcs-Git: git://anonscm.debian.org/collab-maint/b43-fwcutter.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/b43-fwcutter.git + +Package: firmware-b43 +Section: contrib/kernel +Architecture: all +Depends: ${misc:Depends} +Conflicts: firmware-b43-installer (<= 1:019-2) +Description: firmware installer for the b43 driver + This package installs the firmware needed by the b43 kernel driver for some + Broadcom 43xx wireless network cards. + . + Supported chipsets: + * BCM4306/3; + * BCM4311; + * BCM4318; + * BCM4321; + * BCM4322 (only 14e4:432b); + * BCM4312 (with Low-Power a.k.a. LP-PHY). + diff --git a/firmware-b43-buildpackage.dirs b/firmware-b43-buildpackage.dirs new file mode 100644 index 0000000..e146a72 --- /dev/null +++ b/firmware-b43-buildpackage.dirs @@ -0,0 +1 @@ +/lib/firmware/ diff --git a/firmware-b43-buildpackage.footer b/firmware-b43-buildpackage.footer new file mode 100644 index 0000000..5e00b7e --- /dev/null +++ b/firmware-b43-buildpackage.footer @@ -0,0 +1,16 @@ +######################################################################### +# .shar file above, do not edit, regenerate from build script # +######################################################################### + +gunzip -c /usr/share/doc/firmware-b43-installer/changelog.Debian.gz > debian/changelog + +dpkg-buildpackage -b + +cd .. + +rm b43-fwcutter_*_*.changes + +if [ -z "${DEBUG}" -o "${DEBUG}" -le 0] +then rm -rf firmware-b43 +fi + diff --git a/firmware-b43-buildpackage.header b/firmware-b43-buildpackage.header new file mode 100644 index 0000000..0c92bb7 --- /dev/null +++ b/firmware-b43-buildpackage.header @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +for util in dpkg-dev debhelper fakeroot +do + if [ ! -s "/var/lib/dpkg/info/${util}.list" ] + then + echo "$0: utilit(ies) needed missing, notably ${util}" + exit 1 + fi +done + +mkdir firmware-b43 +cd firmware-b43 + +######################################################################### +# .shar file below, do not edit, regenerate from build script # +######################################################################### + diff --git a/firmware-b43-buildpackage.preinst b/firmware-b43-buildpackage.preinst new file mode 100644 index 0000000..8238310 --- /dev/null +++ b/firmware-b43-buildpackage.preinst @@ -0,0 +1,24 @@ +#!/bin/sh + +######################################################################### +#$Id$ # +######################################################################### + +FIRMWARE_INSTALL_DIR="/lib/firmware" + +######################################################################### +# stable sections below, not updated for firmware updates # +######################################################################### + + +set -e + +# remove firmware installed by firmware-b43-install +if [ -e "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43.catalog" ]; then + echo "$0: Deleting installed firmware..." 1>&2 + xargs -r -0 -a "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43-installer.catalog" dpkg-query -S 2>&1 1>/dev/null | sed -es',[^/]\+,,' | xargs -r rm -- + rm "${FIRMWARE_INSTALL_DIR}/b43/firmware-b43.catalog" + # something else /could/ have placed files there... + rmdir "${FIRMWARE_INSTALL_DIR}/b43" || sleep 10 || true +fi + diff --git a/firmware-b43-buildpackage.rules b/firmware-b43-buildpackage.rules new file mode 100755 index 0000000..0f99890 --- /dev/null +++ b/firmware-b43-buildpackage.rules @@ -0,0 +1,18 @@ +#!/usr/bin/make -f + +#export DH_VERBOSE=1 + +%: + dh $@ + +override_dh_auto_build: + /usr/sbin/firmware-b43-install . + rm b43/firmware-b43-installer.catalog + +override_dh_auto_clean: + rm -rf $(CURDIR)/debian/firmware-b43 + +override_dh_auto_install: + cp -rp b43 $(CURDIR)/debian/firmware-b43/lib/firmware + cp -p /usr/share/doc/firmware-b43-installer/copyright $(CURDIR)/debian + -- 1.7.10.4
>From c729927150ac1b747b7af82ca00e3e44edf85e7e Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Sat, 26 Mar 2016 19:18:52 -0700 Subject: [PATCH 08/10] Update lists of known to be supported chips This updates the packages to list all PCI chips currently listed on: https://wireless.wiki.kernel.org/en/users/Drivers/b43 The package descriptions are also updated to list these chips. A pseudo entry was added for the BCM4716, where the supported chip isn't actually on the PCI bus, but does have a bus that can be detected. This also adjusts the postinst detection script to allow for a system which has both supported and unsupported chips. --- debian/control | 19 ++++-- debian/firmware-b43-installer.postinst | 105 ++++++++++++++++---------------- firmware-b43-buildpackage.control | 19 ++++-- 3 files changed, 79 insertions(+), 64 deletions(-) diff --git a/debian/control b/debian/control index 715c119..10ab3ee 100644 --- a/debian/control +++ b/debian/control @@ -30,12 +30,21 @@ Description: firmware installer for the b43 driver kernel driver for some Broadcom 43xx wireless network cards. . Supported chipsets: - * BCM4306/3; - * BCM4311; + * BCM4306/3 (chip revision 3 only); + * BCM4311 (NOT PCI Id 14e4:4313); + * BCM4312; + * BCM43131; * BCM4318; - * BCM4321; - * BCM4322 (only 14e4:432b); - * BCM4312 (with Low-Power a.k.a. LP-PHY). + * BCM4321 (only partial support, not all versions tested); + * BCM43217; + * BCM4322 (only partial support for some versions, not all versions tested); + * BCM43222 (not all versions tested); + * BCM43224 (not all versions tested); + * BCM43225; + * BCM43227; + * BCM43228; + * BCM4331; + * BCM47xx (detection not reliable, may not support all versions). Package: firmware-b43legacy-installer Section: contrib/kernel diff --git a/debian/firmware-b43-installer.postinst b/debian/firmware-b43-installer.postinst index aecffcc..3d0596a 100644 --- a/debian/firmware-b43-installer.postinst +++ b/debian/firmware-b43-installer.postinst @@ -45,66 +45,63 @@ if [ "$RET" = "true" ] ; then exit 0 fi -# Fix for BCM4306/3 [14e4:4320] (rev 03) -chip=`lspci -n | grep -o "14e4:4320 (rev 03)"` || true -if [ "$chip" ] ; then - echo "Your card is BCM4306/3 [14e4:4320] (rev 03), firwmare 5.100.138 will be used" - latest_firmware - exit 0 -fi - -# Fix for BCM4306/3 [14e4:4324] (rev 03) -chip=`lspci -n | grep -o "14e4:4324 (rev 03)"` || true -if [ "$chip" ] ; then - echo "Your card is BCM4306/3 [14e4:4324] (rev 03), firwmare 5.100.138 will be used" - latest_firmware - exit 0 -fi - # check chip -pci=`lspci -n | grep -o "14e4:[1234567890abcdef]\+"` || true - -if [ -n "$pci" ]; then - for device in $pci; do - device_id=`echo $device | cut -d: -f2` - case $device_id in - 4301 | 4306 | 4320 |4324 | 4325) - legacy=1 - ;; - 4307 | 4311 | 4312 | 4315 | 4318 | 4319 | 4321 | 4328 | 4329 | 432b | 432c | 4331 | 4353 | 4357 | 5354) - latest=1 - ;; - 4322 | 4358 | 4365 | 4727 | a8d8) - # b43 upstream says 3.6+ for a8d8 - unsupported="$unsupported $device_id" - ;; - 0576 | 4313 | 432a | 432d | 4358 | 4359 | 435a | a99d) - nottested=1 - ;; - *) - ;; - esac - done -fi +pci=`lspci -n -d 14e4: | grep -o "14e4:[1234567890abcdef]\+"` || true -if [ "$legacy" ]; then - echo "An unsupported BCM4301, BCM4306 or BCM4306/2 device was found." - echo "Use b43legacy firmware (firmware-b43legacy-installer package) instead." +if [ -z "$pci" ]; then + echo "No known supported Broadcom 802.11 chips found, not installing firmware." + echo echo "Aborting." exit 0 -elif [ "$unsupported" ]; then +fi + +for device in $pci; do + device_id=${device#14e4:} + case $device_id in + 430[16] | 4325) + legacy=1 + ;; + 432[04]) + chip=`lspci -n -d ${device}` + if [ "${chip}" != "${chip%${device} (rev 03)}" ] ; then + latest=1 + else + legacy=1 + fi + ;; + 4307 | 431[12589] | 432[1289bc] | 4331 | 435[03789] | 43a[9a] | 4716 | a8d8 | a8db | 5354) + latest=1 + ;; + 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 + +if [ -n "$unsupported" ]; then echo -n "Unsupported device(s) found: PCI id " - for device_id in $unsupported; do echo -n "14e4:$device_id "; done + for device_id in $unsupported; do echo -n " * 14e4:$device_id "; done echo - echo "Aborting." - exit 0 -elif [ "$nottested" ]; then - echo "This card is actually not tested. Please install the driver manually." - exit 0 -elif [ "$latest" ]; then - echo "This card work with newer 5.100.138 firmware. Trying to install it." - latest_firmware - exit 0 +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" ]; then + echo "A card known to work was found. Trying to install firmware." + latest_firmware +elif [ -n "$nottested" ]; then + echo "An untested card was found. Please install the driver manually." fi #DEBHELPER# diff --git a/firmware-b43-buildpackage.control b/firmware-b43-buildpackage.control index 393dc14..01e1a07 100644 --- a/firmware-b43-buildpackage.control +++ b/firmware-b43-buildpackage.control @@ -18,10 +18,19 @@ Description: firmware installer for the b43 driver Broadcom 43xx wireless network cards. . Supported chipsets: - * BCM4306/3; - * BCM4311; + * BCM4306/3 (chip revision 3 only); + * BCM4311 (NOT PCI Id 14e4:4313); + * BCM4312; + * BCM43131; * BCM4318; - * BCM4321; - * BCM4322 (only 14e4:432b); - * BCM4312 (with Low-Power a.k.a. LP-PHY). + * BCM4321 (only partial support, not all versions tested); + * BCM43217; + * BCM4322 (only partial support for some versions, not all versions tested); + * BCM43222 (not all versions tested); + * BCM43224 (not all versions tested); + * BCM43225; + * BCM43227; + * BCM43228; + * BCM4331; + * BCM47xx (detection not reliable, may not support all versions). -- 1.7.10.4
>From 4aa19b8b4a81cd2dd2490e18fb46f734b8ab0fb2 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Sat, 26 Mar 2016 19:27:03 -0700 Subject: [PATCH 09/10] Add updated constants for driver v6.30.163.46 This solves bug #810161, getting a newer version of the driver firmware. --- firmware-b43-install | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware-b43-install b/firmware-b43-install index 92d21c8..95714ec 100755 --- a/firmware-b43-install +++ b/firmware-b43-install @@ -4,13 +4,13 @@ #$Id$ # ######################################################################### -VERSION="5.100.138" +VERSION="6.30.163.46" BROADCOM_WL="broadcom-wl-${VERSION}" -WL_APSTA="${BROADCOM_WL}/linux/wl_apsta.o" +WL_APSTA="${BROADCOM_WL}.wl_apsta.o" -SHA512SUM="02487e76e3eca7fe97ce2ad7dc9c5d39fac82b8d5f7786cce047f9c85e2426f5b7ea085d84c7d4aae43e0fe348d603e3229211bab601726794ef633441d37a8b" +SHA512SUM="0144894fbbb5e8ebab6c423d9bd0f3249be94f2f468a50b8bf721a3b17f1f6e57467c79e87abc8d136bfc92e701ed046885fead892e9a73efa5217d710311ae9" TARBALL="${BROADCOM_WL}.tar.bz2" -- 1.7.10.4
>From ee74ffcd14caef4abc1011b3eb91a3299c2cdeb7 Mon Sep 17 00:00:00 2001 From: Elliott Mitchell <ehem+deb...@drgnwing.com> Date: Sat, 26 Mar 2016 19:37:25 -0700 Subject: [PATCH 10/10] Simplify debian/rules I'm sure these lines evolved this way for some reason, but that reason doesn't look too applicable today. This also reduces the number of shell processes involved and so should make building faster. --- debian/rules | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/debian/rules b/debian/rules index f130f42..9ac23d2 100755 --- a/debian/rules +++ b/debian/rules @@ -8,15 +8,14 @@ INSTALL := install -o root -g root -m 755 CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) -version=$(shell dpkg-parsechangelog | grep urgency | awk '{ print $$2; }'| \ -sed -e s/"("// -e s/")"// | cut -d"-" -f1) +version=$(filter-out Version:,$(shell dpkg-parsechangelog | grep ^Version:\ )) %: dh $@ override_dh_auto_build: dh_auto_build -- CFLAGS="$(CFLAGS) $(CPPFLAGS) -std=c99 -fomit-frame-pointer -pedantic -D_BSD_SOURCE \ - -DFWCUTTER_VERSION_=`echo $(version) | cut -d: -f2`" + -DFWCUTTER_VERSION_=$(word 2,$(subst -, ,$(subst :, ,$(version))))" shar debian/compat debian/source firmware-b43-buildpackage.[cdpr]* \ | sed -es',firmware-b43-buildpackage\.\(control\|rules\),debian/\1,g' \ -es',\(firmware-b43\)-buildpackage\.\(dirs\|preinst\),debian/\1.\2,g' \ -- 1.7.10.4
Spam detection software, running on the system "mattapan.m5p.com", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see The administrator of that system for details. Content preview: Just found I'd goofed in the last revision. Updated patches demonstrating my request attached. -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sig...@m5p.com PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445 [...] Content analysis details: (5.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP 2.3 MANGLED_LIST BODY: mangled list 0.1 TW_DP BODY: Odd Letter Triples with DP 0.1 TW_FW BODY: Odd Letter Triples with FW 0.6 MEGALONGWORD BODY: Uses really overlong words 0.1 TW_VJ BODY: Odd Letter Triples with VJ 0.3 LONGWORD BODY: Uses overlong words 0.1 TW_XV BODY: Odd Letter Triples with XV -1.5 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 2.6 FAKE_REPLY_C FAKE_REPLY_C 1.5 IMPRONONCABLE_2 Too much mixed numbers and lower-case letters