Přechod na vyšší verzi Fedory pomocí zásuvného modulu DNF systému

Michael Wu, Anthony McGlone, Dokumentační tým Fedory Version F38, F39 Last review: 2023-11-07

dnf-plugin-system-upgrade je zásuvný modul správce balíčků DNF a používá se k povýšení verze vašeho systému na současně aktuální vydání Fedory. Podrobné informace k Fedoře Silverblue a Fedoře CoreOS, které používají rpm-ostree, viz dokumentace rpm-ostree.

Jedná se o doporučenou metodu přechodu na vyšší verzi z příkazové řádky. Funguje následovně:

  1. Balíčky jsou staženy, zatímco systém lze používat stále normálně

  2. Systém je restartován do speciálního prostředí (implementované jako cíl systemd), aby se balíčky nainstalovaly

  3. Po dokončení instalace je systém (opět) restartován do nového vydání Fedory

Provedení přechodu na vyšší verzi systému

Zazálohujte si svá data před provedením přechodu, neboť každý přechod na vyšší verzi systému je potenciálně rizikový. Preventivně si stáhněte spustitelný obraz Fedory Workstation pro případ, že by nastaly nějaké problémy.

  1. Chcete-li povýšit vydání Fedory z příkazové řádky, proveďte následující:

    sudo dnf upgrade --refresh

    a restartujte počítač.

    Důležité: Nevynechejte tento krok. Aktualizace systému jsou nezbytné pro získání podpisových klíčů vydání s vyšší verzí a často odstraní problémy související s procesem přechodu na vyšší verzi.

  2. Nainstalujte balíček dnf-plugin-system-upgrade, není-li již nainstalován:

    sudo dnf install dnf-plugin-system-upgrade
  3. Stáhněte aktualizované balíčky:

    sudo dnf system-upgrade download --releasever=39

    Číslo --releasever= lze změnit, chcete-li přejít na jiné vydání. Většina lidí chce přejít na nejnovější stabilní vydání, kterým je 39, ale v některých případech, jako např. pokud používáte starší vydání než 38, můžete nejdříve přejít na Fedoru 38. Přechod systému je podporován a testován oficiálně pouze maximálně přes 2 vydání (např. z 37 na 39). Přejete-li si přejít mezi vzdálenějšími verzemi, doporučuje se provést přechod v několika menších krocích (čtěte zde).

    Rovněž můžete použít 40, abyste přešli na vydání jiné větve, nebo rawhide, abyste přešli na Rawhide. Uvědomte si, že ani jedno z těchto vydání není stabilní. Pro podrobnosti o procesu přechodu a známé problémy se vztahem k těmto dvěma vydání se, prosíme, podívejte na příslušné oddíly na jejich uvedených stránkách.

  4. Nemá-li některý z balíčků vyřešeny závislosti, proces přechodu na vyšší verzi odmítne pokračovat, dokud ho nespustíte znovu s přidanou volbou --allowerasing. Nejčastěji se tak děje s balíčky instalovanými z repozitářů třetích stran, pro které zatím nebyl publikován aktualizovaný repozitář. Zobrazený výstup si pečlivě prostudujte a zjistěte, které balíčky budou odstraněny. Žádný z nich by neměl být významný pro funkci systému, ale některé mohou být důležité z hlediska vaší produktivity.

    • V případě nevyřešených závislostí lze někdy získat více podrobností, přidáte-li do příkazu volbu --best.

    • Chcete-li odstranit/nainstalovat některé balíčky ručně před novým spuštěním dnf system-upgrade download, doporučuje se provést tyto operace s volbou dnf --setopt=keepcache=1 na příkazovém řádku. Jinak celá cache balíčků bude po skončení operace odstraněna a bude nutné všechny balíčky opět stáhnout.

  5. Při importu nového klíče GPG budete požádáni o ověření jeho otisku. Další informace viz https://fedoraproject.org/security.

  6. Spusťte proces přechodu na vyšší verzi. Váš počítač bude restartován (ihned!, bez odpočítávání či potvrzování, zavřete proto předtím ostatní programy a uložte si svou práci) do procesu povýšení běžícím v konzolovém terminálu:

    sudo dnf system-upgrade reboot
  7. Po dokončení procesu povýšení se váš systém restartuje podruhé do vyšší verze vydání Fedory.

Volitelné úkony po provedeném přechodu

Zde jsou některé úlohy, které lze provést po úspěšném přechodu systému na vyšší verzi.

Aktualizace konfiguračních souborů systému

Většina konfiguračních souborů se nachází v adresáři /etc. Pokud jste upravili konfigurační soubory balíčku, RPM vytvoří nové soubory s příponou .rpmnew (nový výchozí konfigurační soubor) nebo .rpmsave (záloha vašeho konfiguračního souboru). Tyto soubory lze vyhledat, nebo využijte nástroj rpmconf, který tento proces zjednoduší. Nainstalovat rpmconf lze příkazem:

sudo dnf install rpmconf

Po dokončení instalace zadejte příkaz:

sudo rpmconf -a

Některé balíčky třetích stran umístí upravené konfigurační soubory do /etc/yum.repos.d/ a navrácení těchto souborů do jejich původních verzí může mít za následek nemožnost aktualizace softwaru. Prosíme, pamatujte na pečlivou kontrolu konfiguračních souborů v tomto adresáři.

Více informací lze nalézt v manuálových stránkách (man rpmconf).

Použijete-li rpmconf pro povýšení konfiguračních souborů systému s povýšenými balíčky, pak některé konfigurační soubory mohou doznat změn. Po provedení povýšení byste měli ověřit, že /etc/ssh/sshd_config, /etc/nsswitch.conf, /etc/ntp.conf a další soubory mají očekávaný obsah. Například, je-li povýšen OpenSSH, pak sshd_config byl změněn zpět na výchozí konfiguraci balíčku. Výchozí konfigurace balíčku neumožňuje autentizaci pomocí veřejných klíčů, ale umožňuje autentizaci pomocí hesla.

Aktualizace zavaděče GRUB na systémech s BIOS

Systémy s BIOS firmwarem mají RPM balíčky GRUBu aktualizované. Avšak nainstalovaný nebo vestavěný zaváděcí program se nikdy neaktualizuje automaticky. Není vůbec od věci ho mezi verzemi vydání Fedory zaktualizovat.

Vyhledejte uzel zařízení, kde je umístěn adresář /boot/:

$ sudo mount | grep "/boot "
/dev/sda4 on /boot type ext4 (rw,relatime,seclabel)

Uzel zařízení je /dev/sda4. Přeinstalujte zaváděcí program uvedením uzlu zařízení bez čísla:

$ sudo grub2-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

Vyčištění od opuštěných balíčků

S každým vydáním opouští Fedora několik málo balíčků. Existují pro to různé důvody; balíčky zastaraly, vývoj v dodavatelském (upstream) projektu ustal, nebo správce balíčku odstoupil. Fedora tyto balíčky dále nešíří; ačkoliv se stále nacházejí na vašem systému. Tyto balíčky neobdrží žádné aktualizace. Silně se doporučuje, aby se odstranily.

Přešli jste-li výše o jednu verzi (např. z Fedory 38 na 39), proveďte následující příkazy:

$ sudo dnf install remove-retired-packages
$ remove-retired-packages

Přešli jste-li přes dvě vydání (např. z Fedory 37 na 39), musíte do příkazu `remove-retired-packages`zadat verzi staršího vydání:

$ sudo dnf install remove-retired-packages
$ remove-retired-packages 37
Přechod na vyšší verzi přes více než dvě vydání není podporován.

Vyčištění starých balíčků

Seznam balíčků s rozbitými závislostmi lze zobrazit zadáním příkazu:

sudo dnf repoquery --unsatisfied

Seznam by měl být prázdný, pokud však je tomu naopak, zvažte jejich odstranění, neboť pravděpodobně nebudou fungovat.

Zobrazit duplicitní balíčky (nainstalované balíčky s různými verzemi) lze příkazem:

sudo dnf repoquery --duplicates

A odstranit:

sudo dnf remove --duplicates

Nejdříve spusťte příkaz`sudo dnf upgrade`, neboť tento seznam je platný pouze pokud je systém zcela aktuální. Jinak uvidíte seznam nainstalovaných balíčků, které se v repozitářích již nenachází, protože je k dispozici jejich aktualizace. Seznam může rovněž obsahovat balíčky instalované z repozitářů třetích stran, které své repozitáře ještě neaktualizovaly.

Z oficiálních repozitářů by měly být nainstalovány nejaktuálnější verze. Ačkoliv některé balíčky, které se stále nachází na vašem systému, se již v repozitářích nacházet nemusejí. Zobrazit seznam těchto balíčků lze příkazem:

sudo dnf list extras

Uvidíte-li balíčky, které nepotřebujete nebo nepoužíváte, lze je odstranit příkazem:

sudo dnf remove $(sudo dnf repoquery --extras --exclude=kernel,kernel-\*)

Bezpečně odstranit balíčky, které se již nepoužívají, lze příkazem:

sudo dnf autoremove

DNF považuje balíček za nepotřebný, pokud jste výslovně nepožádali o jeho instalaci a není ničím dále vyžadován. Přesto to nemusí znamenat, že balíček nemá užitek nebo že ho nepoužíváte. Odstraňte pouze to, čím jste si jisti, že nepotřebujete.

Vyčištění starých jader

Až spustíte počítač s nejnovějším jádrem a systém otestujete, je možné odstranit předchozí jádra. Stará jádra jsou ponechána i po dnf autoremove, aby se předešlo nechtěnému odstranění.

Jedním z nejsnadnějších způsobů odstranění starých jader je pomocí skriptu, který ponechává nejaktuálnější jádro. Skript uvedený níže funguje kdykoliv Fedora zaktualizuje jádro a nezávisí na přechodu na vyšší verzi systému.

#!/usr/bin/env bash

old_kernels=($(dnf repoquery --installonly --latest-limit=-1 -q))
if [ "${#old_kernels[@]}" -eq 0 ]; then
    echo "No old kernels found"
    exit 0
fi

if ! dnf remove "${old_kernels[@]}"; then
    echo "Failed to remove old kernels"
    exit 1
fi

echo "Removed old kernels"
exit 0

V systému se mohou po přechodu na vyšší verzi nacházet neplatné symbolické odkazy. Ty lze pročistit tak, že nainstalujete pomocný program symlinks a staré odkazy odstraníte.

sudo dnf install symlinks

Když je pomocný program nainstalován, lze prověřit neplatné symlinky příkazem níže. -r znamená pozpátku (rekurzivně).

sudo symlinks -r /usr | grep dangling

Po prověření seznamu neplatných symlinků je lze odstranit příkazem uvedeným níže. -d znamená odstranit (delete).

sudo symlinks -r -d /usr

Aktualizace záchranného jádra

Záchranné jádro a soubor initramfs jsou vytvořeny instalačním programem Anaconda během instalace. initramfs je aktualizován, když je aktualizováno jádro, ale záchranné jádro aktualizované být nemusí. Zda je záchranné jádro aktualizováno záleží na nastavení systému.

Je-li záchranné jádro neaktualizované, zadejte následující příkazy pro aktualizaci.

sudo rm /boot/*rescue*
sudo kernel-install add "$(uname -r)" "/lib/modules/$(uname -r)/vmlinuz"

Obnovovací proces záchranného jádra lze zautomatizovat nainstalováním balíčku dracut-config-rescue.

sudo dnf install dracut-config-rescue

Po nainstalování je záchranné jádro obnovováno dokud je dracut generátorem initrd. Podrobnosti viz /usr/lib/kernel/install.d/51-dracut-rescue.install.

Řešení problémů po přechodu na vyšší verzi

Podle těchto kroků postupujte, pokud zaznamenáte problémy s povýšeným systémem.

Opětovné sestavení databáze RPM

Uvidíte-li při práci s nástroji RPM/DNF varování, může být poškozena databáze. Je možné ji opět sestavit a zjistit tak, zda došlo k vyřešení problémů. Vždy si nejprve zazálohujte /var/lib/rpm/. Pro opětovné sestavení databáze spusťte příkaz:

sudo rpm --rebuilddb

Použití distro-sync k vyřešení problémů se závislostmi

Nástroj system upgrade používá standardně dnf distro-sync. Je-li váš systém aktualizovaný částečně nebo pokud se zobrazují problémy s některými závislostmi balíčků, zkuste spustit další distro-sync ručně a uvidíte, zda došlo k odstranění problémů. Příkaz se pokusí sladit verze nainstalovaných balíčků s jejich verzemi ve vámi povolených repozitářích, i kdyby to znamenalo jejich ponížení (instalaci nižší verze):

sudo dnf distro-sync

Lze rovněž použít volbu --allowerasing, kdy budou odstraněny balíčky se závislostmi, které nelze uspokojit. Vždy před potvrzením zkontrolujte balíčky, které se odstraní:

sudo dnf distro-sync --allowerasing

Přeznačkování souborů s nejaktuálnější politikou SELinuxu

Zaznamenáte-li nějaké varování ohledně politik SElinuxu, některé soubory mohou mít vadná oprávnění SELinux. Může se tak stát, pokud byl SELinux v minulosti vypnut. Chcete-li přeštítkovat SELinux na systému, spusťte následující příkaz a poté restartujte počítač:

sudo fixfiles -B onboot

Proces spuštění počítače pravděpodobně zabere delší čas, neboť bude kontrolovat a opravovat štítky oprávnění SELinuxu na všech souborech systému.

Časté dotazy

Jak mám nahlásit problém s přechodem na vyšší verzi systému?

  1. Podívejte se na Obvyklé chyby a zkontrolujte, zda se jedná o známý problém, kterého si je komunita již vědoma.

  2. Prohlédněte si Bugzillu s hlášeními o chybách, které byly podány proti zásuvnému modulu system-upgrade.

Pokud nenaleznete hlášení, které odpovídá vašim příznakům, můžete ze stránky vyhledávání podat nové hlášení. Prosíme, dodržte pokyny pro hlášení chyb uvedených v souboru README v repozitáři na GitHubu nebo v man dnf.plugin.system-upgrade.

Zaznamenáte-li problém po přechodu na vyšší verzi systému s konkrétním balíčkem, podejte hlášení o chybě pro dotčený balíček.

Ověřuje DNF System Upgrade software, který spouští nebo instaluje během přechodu na vyšší verzi systému?

Ano. Podpisové klíče balíčků pro novější vydání Fedory jsou zasílány do starších vydání Fedory, aby se umožnilo DNF ověřit neporušenost stažených balíčků. Tuto funkci lze v případě potřeby vypnout, ale není to doporučeno, neboť zůstanete vystaveni útokům od škodlivého softwaru.

Budou balíčky v repozitářích třetích stran povýšeny na novou verzi?

Ano, pokud mají nastavení jako běžné repozitáře DNF a číslo verze není tvrdě zakódováno v souboru repozitáře (obvykle nalezen v /etc/yum.repos.d/). Běžně používané repozitáře třetích stran, jako např. RPM Fusion by měly fungovat. Nicméně, pokusíte-li se přejít na vyšší verzi před nebo někdy brzy po oficiálním vydání Fedory, nemusejí mít aktualizované své repozitářové cesty a DNF nemusí být schopen nelézt jejich balíčky. Toto by zpravidla nemělo být překážkou úspěšného přechodu na vyšší verzi systému. Balíčky z repozitářů třetích stran lze také aktualizovat někdy později.

Mohu přejít na novou verzi systému z vydání, jehož životní cyklus je ukončen (End-of-Life(EOL))?

Naléhavě se doporučuje přejít na novou verzi z vydání EOL na kterémkoliv produkčním systému, nebo kterémkoliv systému připojenému k veřejnému internetu.

Přechod z Fedory 20 nebo dřívější provádíte na vlastní riziko, neboť DNF nebyl výchozím nástrojem správy balíčků. Pokud máte vydání Fedory novější než Fedora 20, které je EOL, můžete se o přechod na novou verzi systému pokusit, ale tato metoda není podporována. Lze se pokusit o přechod na novou verzi systému pomocí dalšího sice staršího, ale novějšího vydání (mezivydání), dokud nepřejdete na v současnosti podporované vydání, a nebo se lze pokusit o přechod na v současnosti podporované vydání v jediné operaci. Opět se jedná o nepodporovanou úlohu a je na vlastní riziko.

Mohu provést přechod přes několik vydání (např. 30→34) najednou?

Přechod na vedlejší vydání (např. z 38 na 39), stejně jako přechod přes jedno vydání (např. z 37 na 39) je podporován. Naproti tomu se velmi doporučuje provést přechod předtím, než vaše vydání dosáhne ukončení životního cyklu (EOL). Ukončení nastává přibližně za jeden měsíc od zveřejnění vydání N+2 (když provozujete vydání N). Životní cyklus vydání Fedory je navržen konkrétně tak, aby poskytl toto přibližně jedno měsíční "přechodné období" (odklad), aby se poskytla uživatelům možnost přecházet na vyšší verzi jejich systémů na ročním základu, tzn. ob jedno vydání. Stav současného vydání a jeho harmonogram lze prostudovat na Vydání. Asi měsíc po zveřejnění nového vydání je druhému staršímu (předpředposlednímu) vydání ukončen životní cyklus (End of Live (EOL)). Přechod na nové vydání proběhne pravděpodobně úspěšně poté, kdy vydání dosáhne EOL, ale po jak dlouho dobu po uveřejnění nového vydání není zcela jisté.

Přechod na vyšší verzi systému přes více než dvě vydání není podporován a zaznamenané problémy s takovým přechodem nemusejí být shledány za významné chyby.

Při přechodu přes více než dvě vydání, budete pravděpodobně potřebovat naimportovat klíč GPG pro vydání, na které chcete přejít. Naimportujte klíč příkazem:

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-N-primary

(kde N znamená verzi Fedory.)

Mohu použít DNF System Upgrade k přechodu na předvydání (např. Beta)?

Ano, ale toto je předmětem dočasných chyb, stejně jako s jinými aspekty předvydání.