Aktualizácia systému Raspbian na verziu 11 Bullseye

Cieľ

Chcem aktualizovať serverový operačný systém Raspbian z verzie 10 Buster na novšiu verziu 11 Bullseye. Aktualizáciu chcem uskutočniť počas normálnej prevádzky serveru, bez odstávky, respektíve s minimálnym časom nedostupnosti jednotlivých služieb.

Raspbian 11 „Bullseye“ (postavený na Debiane 11) bol vydaný 3. decembra 2021, posledná aktualizácia – Raspbian 11.10 bola uvoľnená 12. marca 2024.

Názov operačného systému bol zmenený z pôvodného Raspbian na Raspberry Pi OS.

Upozornenie

Proces povýšenia operačného systému je delikátna záležitosť zložená z viacerých po sebe nasledujúcich krokov. Je veľmi dôležité úplne porozumieť jednotlivým krokom a dodržať ich presné poradie.

Nesprávne alebo nepresne zadané príkazy, či príkazy zadané v nesprávnom poradí môžu viesť až k úplnému odstaveniu či znefunkčneniu celého serveru.

Riešenie

Tento postup som použil konkrétne na Raspberry Pi 3 Model B Rev 1.2.

Bežná aktualizáciu systému

Pred samotnou aktualizáciou operačného systému na novšiu verziu vykonám tradičnú aktualizáciu všetkých nainštalovaných súčastí.

sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt full-upgrade

Odstránim všetky skôr nainštalované, ale už nepotrebné balíčky a ich súčasti a odstránim aj všetky pred tým stiahnuté balíčky.

sudo apt autoremove
sudo apt autoclean

Skontrolujem či v systéme neostali predsa zvyšky po predchádzajúcich aktualizáciách, kópie konfiguračných súborov a tak podobne.

sudo find /etc -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error'

Ak som s výsledkom spokojný, reštartujem počítač, aby sa všetky vykonané zmeny naplno prejavili.

sudo systemctl reboot

Aktualizácia jadra/firmvéru - voliteľne

Na vlastne riziko môžem použiť nastroj rpi-update určený na aktualizáciu firmvéru a jadra Linuxu.

Tento krok obzvlášť môže spôsobiť nečakané problémy, keďže novšie verzie ovládačov alebo jadra môžu priniesť aj nové problémy. Je vhodné vykonať zálohu.

Samotný krok je jednoduchý, ako administrátor zavolám utilitu a odsúhlasím pokračovanie.

sudo rpi-update

Po úspešnej aktualizácii reštartujem počítač, aby sa novy firmvér aj jadro začali používať.

sudo systemctl reboot

Na mojom obstarožnom Raspberry Pi 3 to prebehlo našťastie bez problémov a z jadra 5.14 som sa posunul rovno na radu 6.6, konkrétne verzia 6.6.39-v7+.

Kontrola stavu pred povýšením

Skontrolujem stav jednotlivých nainštalovaných balíčkov a ich pripravenosť na aktualizáciu. Výstup nasledujúceho príkazu zobrazí všetky balíčky, ktoré sa nepodarilo správne nainštalovať (majú príznaky ako napr. Half-Installed alebo Failed-Config).

sudo dpkg --audit

Skontrolujem či nemajú niektoré balíčky nastavený príznak hold (pozdržať pred aktualizáciou).

sudo dpkg --get-selections | grep 'hold$'
sudo apt-mark showhold

Záloha

Vykonám zálohu podľa najlepšieho vedomia a svedomia.

Aktualizácia repozitárov

Vytvorím záložné kópie zoznamov zdrojov softwaru.

mkdir ~/aptbackup
sudo cp -v /etc/apt/sources.list ~/aptbackup
sudo cp -rv /etc/apt/sources.list.d/ ~/aptbackup

V pôvodných zoznamoch zdrojov /etc/apt nahradím repozitáre pre Raspbian 10 Buster repozitármi pre novší Raspbian 11 Bullseye. Mohol by som to vykonať aj hromadne, napríklad sed -i 's/buster/bullseye/g' /etc/apt/sources.list.d/*, no pre istotu budem upravovať každý záznam zvlášť a ručne.

sudo vi /etc/apt/sources.list
sudo vi /etc/apt/sources.list.d/caddy-fury.list
sudo vi /etc/apt/sources.list.d/raspi.list
sudo vi /etc/apt/sources.list.d/php.list
sudo vi /etc/apt/sources.list.d/ansible.list
sudo vi /etc/apt/sources.list.d/expressvpn.list
sudo vi /etc/apt/sources.list.d/vscode.list

Na záver tohto kroku vykonám aktualizáciu repozitárov, ale už pre Raspberry Pi OS 11 Bullseye.

sudo apt update

Povýšenie systému na Raspberry Pi OS 11 Bullseye

Pred samotným povýšením je ešte potrebne nainštalovať ďalšie balíky, bez nich by proces neprebehol úspešne.

sudo apt install libgcc-8-dev gcc-8-base

Po doinštalovaní vykonám povýšenie operačného systému, ale bez reštartovania systému.

sudo apt full-upgrade

Úprava konfiguračných súborov a reštart

Skôr než Raspberry Pi reštartujem, upravím ešte konfiguračný súbor pre DHCP, bez tejto úpravy by som s veľkou pravdepodobnosťou nezískal IP adresu a nevedel by som sa ku Pi pripojiť pomocou ssh. Skontrolujem či daný konfiguračný súbor existuje.

sudo stat /etc/systemd/system/dhcpcd.service.d/wait.conf

Ak existuje, tak ho upravím, zmením cestu ku dhcpcd.

sudo vi /etc/systemd/system/dhcpcd.service.d/wait.conf

V Raspbian 10 bol cesta ku dhcp klientovi /usr/lib/dhcpcd5/dhcpcd, no v Raspbian 11 sa zmenila na /usr/sbin/dhcpcd. Takže správne upravený riadok ma vyzerať takto:

ExecStart=/usr/sbin/dhcpcd -q -w

V prípade, že túto opravu nevykonám a systém reštartujem, s veľkou pravdepodobnosťou sa ku systému nebudem vedieť pripojiť cez sieť. Budem sa musieť teda pripojiť lokálne a vykonať opravu:

sudo vi /etc/systemd/system/dhcpcd.service.d/wait.conf
sudo systemctl start systemd-networkd
networkctl list
sudo networkctl up enxb827eb553d7f
sudo systemctl start dhcpcd

Ďalej je možné zapnúť KMS. Toto som nevykonal.

sudo sed -i 's/dtoverlay=vc4-fkms-v3d/#dtoverlay=vc4-fkms-v3d/g' /boot/config.tx
sudo sed -i 's/\[all\]/\[all\]\ndtoverlay=vc4-kms-v3d/' /boot/config.txt

Na záver môžem systém reštartovať, musím dúfať, že nabehne v poriadku.

sudo systemctl reboot

Odstránenie nepotrebných balíčkov

Po vydarenom povýšení systému môžem odstrániť skôr nainštalované, ale ďalej už nie potrebné balíčky. Odstránim aj všetky stiahnuté balíčky.

sudo apt --purge autoremove
sudo apt autoclean

Príprava na ďalšie vydanie - voliteľne

Na záver môžem ešte vykonať kontrolu, nechám si vypísať zoznam odstránených balíčkov po ktorých mohlo v systéme niečo ostať (napr. konfiguračné súbory a podobne).

sudo dpkg -l | awk '/^rc/ { print $2 }'

Ak mi je jasné o aké balíčky ide a som si istý, že ich môžem kompletne so všetkým odstrániť, vykonám to:

sudo apt purge $(dpkg -l | awk '/^rc/ { print $2 }')

Ešte posledný reštart.

sudo systemctl reboot

Zdroj