Spring naar hoofdtekst

Bejaarde laptop met secure boot en Debian

Geplaatst op door .
Laatste aanpassing op .

Inleiding

Dezer dagen kreeg ik een laptop op leeftijd als patiënt onder handen: een Lenovo IdeaPad G700 uit 2015. Hij was nog helemaal origineel; met accu van 9 jaar oud, een traditionele harde schijf en een besturingssysteem dat binnenkort niet meer wordt ondersteund. De eigenaar gaf mij toestemming om al die euvels te verhelpen.

Hardware

Een nieuwe accu was 1-2-3 geregeld via een welbekende webshop. Ook een vervanging voor de harde schijf (HDD) in de vorm van een veel snellere solid state drive (SSD) was zó in huis. Dankzij een filmpje op Youtube was het openen van de laptop en de daadwerkelijke upgrade een fluitje van een cent.

Toen ik het apparaat tóch open had, besloot ik ook maar meteen de CMOS-batterij te controleren. Met deze knoopcel onthoudt de computer zijn basis instellingen en de huidige datum-tijd. Ze bleek, ondanks haar leeftijd, nog netjes 3 Volt.

Besturingssysteem

De keuze voor GNU/Linux als besturingssysteem sprak voor zich, maar welke distributie zou het moeten worden? Zelf gebruik ik Fedora Workstation, maar de eigenaar was vooral op zoek naar een veilig en betrouwbaar systeem zonder veel toeters en bellen. Laat dat nou de voornaamste eigenschappen van Debian 12 ("Bookworm") zijn!

De installatie verliep vlotjes; ik koos voor de juiste taal (Nederlands), de juiste toetsenbordindeling (VS internationaal met dode toetsen) en richtte tot slot de gebruikersaccount in. Daarna volgde een aantal GNOME extensies zoals Dash to Dock en AppIndicator and KStatusNotifierItem Support.

Shell aanpassingen

De desktopomgeving mag best in het Nederlands. Datum-, tijd- en getalnotatie zijn zo in het verwachte formaat. Bijvoorbeeld dd-mm-jjjj voor het jaar, een 24-uurs klok en de komma als decimaal scheidingsteken. Daarnaast hebben de standaard mappen voor de gebruiker ook nederlandse namen ("Documenten", "Afbeeldingen", etc.).

Een nadeel van deze volledige localizatie is, dat in de terminal en tekstconsole ook alle teksten en (fout-)meldingen in het Nederlands zijn. Dat is niet echt handig bij het vragen van hulp; de voertaal op internet is nou eenmaal Engels. Om in de terminal en tekstconsole de taal te wijzigen kun je gebruik maken van de LANG omgevingsvariabele, bijvoorbeeld met export LANG=C.UTF-8 in ~/.bashrc.

In plaats van elke aanpassing aan ~/.bashrc handmatig toe te voegen, kun je er ook voor kiezen om de eigen aanpassingen in één of meerdere bestanden te groeperen en deze samen in te lezen. Met dank aan Quentin ADAM voor de tip. Daartoe voeg je eenmalig een stukje code toe. Daarna kun je met eigen .bashrc-bestanden je shell heel overzichtelijk naar wens maken:

# Make directory to contain custom .bashrc files
mkdir -p ~/.bashrc.d
chmod 700 ~/.bashrc.d

# Add command to execute all custom .bashrc files to existing ~/.bashrc
cat << EOF >> ~/.bashrc
# Execute custom .bashrc files
for file in ~/.bashrc.d/*.bashrc; do
  source "$file";
done
EOF

# Create a custom .bashrc file to set default console language
cat << EOF > ~/.bashrc.d/custom.bashrc 
# Set console language to C (English, locale independent)
export LANG=C.UTF-8
EOF

Wifi

Gedurende de hele installatie had ik de LAN-kabel aangesloten om niet tijdens de setup al met mijn 63 tekens tellend Wifi-wachtwoord te moeten goochelen. Toen ik na het installeren de WLAN functies ging testen, bleek er iets mis. Ik zag geen enkele mogelijkheid om een netwerk te kiezen. Het kopje 'Wifi' ontbrak zelfs volledig. En nu dan?

In de output van dmesg en journalctl werd veelvuldig melding gemaakt van ontbrekende firmware voor de Broadcom BCM4314 wifi-chip. Zou er een stuurprogramma ontbreken? Gelukkig had Debian een uitgebreide documentatie voor de installatie van de kernel module genaamd wl.

# Add non-free sources to system
sudo vim /etc/apt/sources.list
# ...
sudo apt update

# Install kernel headers and Broadcom DKMS package,
# build the new module named 'wl'
sudo apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

# Remove any loaded conflicting kernel module
sudo modprobe -r b44 b43 b43legacy ssb brcmsmac bcma

# Load freshly built module 'wl'
sudo modprobe wl

Volgens de instructies zouden vanaf dat moment alle draadloze netwerken in de buurt zichtbaar moeten worden en zou NetworkManager het daarmee verbinden moeten aanbieden. Maar nee; het blokje 'wifi' ontbrak nog steeds. Een keertje opnieuw opstarten, onder het motto: "Wenn's nicht tut, hilft reboot"? Nee dus…

Secure Boot

Opnieuw schoot journalctl --follow mij te hulp. Bij de poging om de module te laden en zo wifi in te schakelen, bleek dat een bepaalde sleutel werd geweigerd:

modprobe: ERROR: could not insert 'wl': Key was rejected by service

Sleutels bij het laden van modules? Wacht eens even… Zou dit kunnen samenhangen met Secure Boot, een garantie dat alle geladen programmacode vertrouwd en legitiem is? Ik wist, dat hierbij gebruik wordt gemaakt van certificaten, ondertekeningen en, jawel, cryptografische sleutels.

Ik vond uiteindelijk Debians documentatie voor het ondertekenen van zelfgebouwde kernel modules:

# Check secure boot state (is it enabled?)
sudo mokutil --sb-state

# Check already enrolled keys
sudo mokutil --list-enrolled 

# Create a folder to contain the new key
sudo mkdir -p /var/lib/shim-signed/mok/
cd /var/lib/shim-signed/mok/

# Generate a new key
sudo openssl req -nodes -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=FWieP/"
sudo openssl x509 -inform der -in MOK.der -out MOK.pem

# Prepare the new key for enrolment (addition to the Secure Boot system)
# This will ask you to provide a one-time password
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
sudo reboot

Bij het herstarten vroeg de BIOS om het zojuist gekozen wachtwoord. Vervolgens werd de zelf gegenereerde sleutel aan het Secure Boot systeem toegevoegd.

# Check whether the new key was acutally enrolled (added)
sudo mokutil --test-key /var/lib/shim-signed/mok/MOK.der

# Add automatic signing to the DKMS build steps
cat << EOF | sudo tee -a /etc/dkms/framework.conf.d/fwiep-mok.conf
mok_signing_key="/var/lib/shim-signed/mok/MOK.priv"
mok_certificate="/var/lib/shim-signed/mok/MOK.der"
sign_tool="/etc/dkms/sign_helper.sh"
EOF

# Add DKMS signing helper script
cat << EOF | sudo tee -a /etc/dkms/sign_helper.sh
/lib/modules/"$1"/build/scripts/sign-file sha512 /root/.mok/client.priv /root/.mok/client.der "$2"
EOF

# Rebuild the module, from now on with automatic signature
sudo dpkg-reconfigure broadcom-sta-dkms 

# Check whether the new module is signed with the correct key
sudo modinfo wl

Na nóg een keer opnieuw opstarten werd de wl-module zonder problemen geladen en werkte de wifi-functies eindelijk naar behoren. Uit nieuwsgierigheid wilde ik weten hoe de Linux-kernel zichzelf zou bestempelen na deze lokale aanbouw. In /proc/sys/kernel/tainted stond de waarde 4097. Met behulp van de Linux kernel documentatie bleek deze bitwaarde te staan voor:

1    proprietary module was loaded
4096 externally-built ("out-of-tree") module was loaded

Bluetooth

In de output van journalctl vond ik ook nog onderstaande meldingen. De Bluetooth functie van de laptop bleek uitgeschakeld door het ontbreken van de passende firmware.

kernel: Bluetooth: hci0: BCM: features 0x06
kernel: Bluetooth: hci0: BCM43142A
kernel: Bluetooth: hci0: BCM43142A0 (001.001.011) build 0000
kernel: bluetooth hci0: firmware: failed to load brcm/BCM43142A0-105b-e065.hcd (-2)
kernel: bluetooth hci0: firmware: failed to load brcm/BCM-105b-e065.hcd (-2)
kernel: Bluetooth: hci0: BCM: firmware Patch file not found, tried:
kernel: Bluetooth: hci0: BCM: 'brcm/BCM43142A0-105b-e065.hcd'
kernel: Bluetooth: hci0: BCM: 'brcm/BCM-105b-e065.hcd'

Met dank aan Azamat Hackimov en zijn project broadcom-bt-firmware kon ik de Bluetooth functies toch werkend krijgen. Ik downloadde het meest recente .deb-bestand en installeerde het met sudo dpkg -i .... Nog één keer herstarten en klaar.

Conclusie

Het voelt goed om een maatschappelijk afgeschreven apparaat een nieuw leven te kunnen geven. Door een relatief kleine financiële investering (circa € 90,-) en een paar uurtjes enthousiast stoeien kan deze 9-jaar oude laptop weer jaren mee.

Debian beschouwt zichzelf op deze machine als 'tainted' (besmet). Maar daardoor kan wel alle ingebouwde hardware worden gebruikt. Dat is een morele overweging die elke keer opnieuw mag worden gemaakt. Voor dit moment ben ik tevreden, en de eigenaar ook :).

Terug naar boven

Inhoudsopgave

Delen

Met de deel-knop van uw browser, of met onderstaande koppelingen deelt u deze pagina via sociale media of e-mail.

Atom-feed van FWiePs weblog

Artikelen


Categorieën

Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.


Terug naar boven