Upgrading Fedora Linux Using DNF System Plugin

Michael Wu, Anthony McGlone, Dokumentační tým Fedory Verze F38, F39, F40 Last review: 2024-04-25

dnf-plugin-system-upgrade is a plugin for the DNF package manager and is used to upgrade your system to the current release of Fedora Linux. For Fedora Silverblue and Fedora CoreOS, which use rpm-ostree, you may refer to rpm-ostree documentation for details.

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. Upon completion, the system reboots into the new Fedora Linux release

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. To update your Fedora Linux release from the command-line do:

    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=40

    Change the --releasever= number if you want to upgrade to a different release. Most people will want to upgrade to the latest stable release, which is 40, but in some cases, such as when you’re currently running an older release than 39, you may want to upgrade just to Fedora Linux 39. System upgrade is only officially supported and tested over 2 releases at most (e.g. from 38 to 40). If you need to upgrade over more releases, it is recommended to do it in several smaller steps (read more).

    Rovněž můžete použít 41, 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. Once the upgrade process completes, your system will reboot a second time into the updated release version of Fedora Linux.

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

Systems with the BIOS firmware have the GRUB RPM packages updated. However, the installed or embedded bootloader is never updated automatically. It is a good idea to update it between Fedora Linux release versions.

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.

If you upgrade across one release (e.g. Fedora Linux 39 to 40), run the following commands:

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

If you upgrade across two releases (e.g. Fedora Linux 38 to 40), you must supply the old release version to remove-retired-packages:

$ sudo dnf install remove-retired-packages
$ remove-retired-packages 38
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?

Yes. The package signing keys for the newer Fedora Linux release are sent to older releases to allow DNF to verify the integrity of the downloaded packages. You can disable this function if needed, but is not recommended as you will be open to attacks from malicious software.

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

Yes, if they are configured like regular DNF repositories and the version numbers are not hard-coded in the repository file (usually found in /etc/yum.repos.d/). Commonly used third-party repositories like RPM Fusion should work. However, if attempting to upgrade prior to, or soon after, an official Fedora Linux release, they may not have updated their repository paths, and DNF may be unable to find their packages. Usually, this should not prevent the upgrade from running successfully. Also, you can update packages from the third-party repository later.

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.

Any upgrade from Fedora Linux 20 or earlier is done at your own risk as DNF was not the default package management tool. However, if you do have a release newer than Fedora Linux 20 that is EOL, you can attempt to do an upgrade, but this method is not supported. You may try to upgrade through intermediate releases until you reach a currently-supported release, or try to upgrade to a currently-supported release in a single operation. Again this is unsupported and is at your own risk.

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

Přechod na vedlejší vydání (např. z 39 na 40), stejně jako přechod přes jedno vydání (např. z 38 na 40) 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

(where N is the Fedora Linux version.)

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í.