I've been looking at how to improve the laptop experience, and one
common problem is the need for extra firmware for the wireless cards.

The process of finding and installing required firmware packages can
be automated, and the following is a draft script to do so.  I hope
eventually to have something similar integrated into the hw-detect
udeb used by debian-installer

Please test it and let me know if it worked on your laptop.  It is
slightly tested, but I have a limited set of test hardware. :)


#!/bin/sh
#
# Find missing firmware files requested by the kernel, and install the
# binary packages with the files from the non-free section.

tmpdir=$(mktemp -d)
cd $tmpdir || exit 1

dist=$(lsb_release -cs)
arch=$(dpkg --print-architecture)
mirror=http://cdn.debian.net/debian

# Find firmware files requested by kernel drivers
fwfiles=$(dmesg |grep "firmware: requesting"|rev|awk '{print $1}'|rev|sort -u)

if [ -z "$fwfiles" ] ; then
    echo "info: did not find any firmware files requested by the kernel in 
dmesg.  exiting"
    exit
fi

GET $mirror/dists/$dist/Contents-$arch.gz | gunzip | grep ^lib/firmware > 
Fw-Contents-$arch 

binpkginfos=""
binpkgs=""
for fwfile in $fwfiles ; do
    fwfilere=$(echo $fwfile | sed -e 's%/%\\/%g' -e 's/\./\\./g')
    binpkginfo="$(awk "/^lib\/firmware\/$fwfilere/ {print \$2}" 
Fw-Contents-$arch)"
    if [ -z "$binpkginfo" ] ; then
        # Special case for b43 where the firmware is undistributable
        # by Debian.
        # FIXME verify that this is the correct of the three firmware
        # packages for b43.
        if echo $fwfile |grep -q b43-open ; then
            binpkgs="firmware-b43-installer $binpkgs"
        fi
    else
        binpkginfos="$binpkginfos $binpkginfo"
    fi
done

binpkgs="$(
for binpkginfo in $binpkginfos ; do
    echo $binpkginfo |  while IFS=/ read section srcpkg binpkg ; do
        echo $binpkg
# Enable the non-free section if it is needed
        if [ non-free = "$section" ] ; then 
            cat <<EOF > /etc/apt/sources.list.d/auto-addfirmware.list
deb $mirror $dist non-free
deb-src $mirror $dist non-free
EOF
        fi
    done
done) $binpkgs"

# Fetch updated package lists
apt-get update

# Install firmware packages
apt-get install $binpkgs

cd /
rm -rf $tmpdir
-- 
Happy hacking
Petter Reinholdtsen


-- 
To UNSUBSCRIBE, email to debian-edu-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/2flehuzoo4d....@login1.uio.no

Reply via email to