Обновление Fedora Linux с помощью системного плагина DNF

Michael Wu, Anthony McGlone, Команда документации Fedora Version F44 Last review: 2026-04-29

Команда dnf system-upgrade (встроенная в DNF5 и плагин dnf-plugin-system-upgrade для менеджера пакетов DNF4 ) используется для обновления вашей системы до текущего выпуска Fedora Linux. Для Fedora Silverblue и Fedora CoreOS, которые используют rpm-ostree, вы можете обратиться к документации rpm-ostree для получения подробностей.

Это рекомендуемый метод обновления из командной строки. Он работает следующим образом:

  1. Пакеты загружаются, пока система работает нормально

  2. Система перезагружается в специальную среду (реализованную как цель systemd) для их установки

  3. По завершении система перезагружается в новый выпуск Fedora Linux

Ознакомьтесь с примечаниями к выпуску

Прежде чем начать обновление, ознакомьтесь с примечаниями к выпуску Fedora Linux, до которого вы обновляетесь. Это гарантирует, что вы осведомлены о важных изменениях, новых функциях и любых потенциальных проблемах, которые могут повлиять на вашу систему.

См. новые примечания к выпуску по адресу: https://docs.fedoraproject.org/en-US/fedora/latest/release-notes/

Выполнение обновления системы

Сделайте резервную копию своих данных перед выполнением общесистемного обновления, так как каждое обновление системы потенциально рискованно. В качестве меры предосторожности скачайте Live-образ Fedora Workstation на случай, если что-то пойдёт не так.

  1. Чтобы обновить выпуск Fedora Linux из командной строки, выполните:

    $ sudo dnf upgrade --refresh

    и перезагрузите компьютер.

    Важно: Не пропускайте этот шаг. Системные обновления необходимы для получения ключей подписи выпусков с более высокими версиями, и они часто исправляют проблемы, связанные с процессом обновления.

  2. Загрузите обновлённые пакеты:

    $ sudo dnf system-upgrade download --releasever=44

    Измените число в --releasever=, если вы хотите обновиться до другого выпуска. Большинство людей захотят обновиться до последнего стабильного выпуска, который 44, но в некоторых случаях, например, когда вы сейчас работаете на более старом выпуске, чем 43, вы можете захотеть обновиться только до Fedora Linux 43. Обновление системы официально поддерживается и тестируется максимум через 2 выпуска (например, с 42 до 44). Если вам нужно обновиться через большее число выпусков, рекомендуется делать это несколькими меньшими шагами (подробнее).

    Вы также можете использовать 45 для обновления до выпуска Branched или rawhide для обновления до Rawhide. Обратите внимание, что ни один из этих двух не является стабильным выпуском. Подробности о процессе обновления и распространённых проблемах, связанных с этими двумя выпусками, пожалуйста, ищите в соответствующих разделах на указанных выше страницах.

  3. Если некоторые из ваших пакетов имеют неудовлетворённые зависимости, обновление откажется продолжаться, пока вы не запустите его снова с дополнительным параметром --allowerasing. Это часто случается с пакетами, установленными из сторонних репозиториев, для которых обновлённый репозиторий ещё не опубликован. Очень внимательно изучите вывод и проверьте, какие пакеты будут удалены. Ни один из них не должен быть существенным для функциональности системы, но некоторые из них могут быть важны для вашей продуктивности.

    • В случае неудовлетворённых зависимостей вы иногда можете увидеть больше подробностей, если добавите в командную строку параметр --best.

    • Если вы хотите вручную удалить/установить некоторые пакеты перед повторным запуском dnf system-upgrade download, целесообразно выполнить эти операции с параметром командной строки dnf --setopt=keepcache=1. В противном случае весь кэш пакетов будет удалён после вашей операции, и вам придётся заново загружать все пакеты.

  4. Когда импортируется новый ключ GPG, вас попросят проверить отпечаток ключа. Обратитесь к https://fedoraproject.org/security, чтобы сделать это.

  5. Запустите автономный процесс обновления при следующей загрузке:

$ sudo dnf offline reboot

Чтобы отменить обновление и удалить загруженные файлы:

$ sudo dnf offline clean

После завершения процесса обновления ваша система перезагрузится во второй раз в обновлённый выпуск Fedora Linux.

Если dnf сообщает, что dnf offline не является допустимой командой, что типично для Fedora 40 и более ранних с DNF 4, выполните

$ sudo dnf system-upgrade reboot

Примечание: это перезагрузит вашу машину немедленно в специальную среду обновления.

Сначала закройте все программы и сохраните свою работу.

Обратный отсчёт или подтверждение не предоставляются.

Необязательные задачи после обновления

Вот некоторые задачи, которые вы можете выполнить после успешного обновления.

Обновите системные файлы конфигурации

Большинство файлов конфигурации хранятся в папке /etc. Если вы изменили файлы конфигурации пакета, RPM создаёт новые файлы с расширением .rpmnew (новый файл конфигурации по умолчанию) или .rpmsave (резервная копия вашего старого файла конфигурации). Вы можете найти эти файлы или использовать инструмент rpmconf, который упрощает этот процесс. Чтобы установить rpmconf, введите:

$ sudo dnf install rpmconf

После завершения установки введите:

$ sudo rpmconf -a

Некоторые сторонние пакеты помещают изменённые файлы конфигурации в /etc/yum.repos.d/, и возврат этих файлов к исходным версиям может отключить обновления для программного обеспечения. Пожалуйста, не забудьте внимательно просмотреть файлы конфигурации в этом каталоге.

Дополнительную информацию см. на страницах руководства (man rpmconf).

Если вы используете rpmconf для обновления системных файлов конфигурации, поставляемых с обновлёнными пакетами, то некоторые файлы конфигурации могут измениться. После обновления вам следует проверить /etc/ssh/sshd_config, /etc/nsswitch.conf, /etc/ntp.conf и другие на соответствие ожидаемому. Например, если OpenSSH обновлён, то sshd_config возвращается к конфигурации пакета по умолчанию. Конфигурация пакета по умолчанию не включает аутентификацию по открытому ключу и допускает аутентификацию по паролю.

Обновите загрузчик GRUB в системах BIOS

В системах с прошивкой BIOS RPM-пакеты GRUB обновляются. Однако установленный или встроенный загрузчик никогда не обновляется автоматически. Хорошей идеей является обновление его между версиями выпусков Fedora Linux.

Найдите узел устройства, на котором расположен каталог /boot/:

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

Узел устройства — /dev/sda4. Переустановите загрузчик, указав узел устройства без номера:

$ sudo grub2-install /dev/sda

Правильный вывод должен быть таким:

Installing for i386-pc platform.
Installation finished. No error reported.

Очистка выведенных из обращения пакетов

С каждым выпуском Fedora выводит из обращения несколько пакетов. Причины различны: пакеты устаревают, у них мёртвый upstream или сопровождающий уходит с должности. Fedora больше не распространяет эти пакеты; однако они всё ещё есть в вашей системе. Эти пакеты не будут получать обновления. Настоятельно рекомендуется удалить их.

Если вы обновляетесь через один выпуск (например, с Fedora Linux 43 до 44), выполните следующие команды:

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

Если вы обновляетесь через два выпуска (например, с Fedora Linux 42 до 44), вы должны указать старую версию выпуска в remove-retired-packages:

$ sudo dnf install remove-retired-packages
$ remove-retired-packages 42
Обновления через более чем два выпуска не поддерживаются.

Очистка старых пакетов

Вы можете увидеть дублирующиеся пакеты (пакеты с несколькими установленными версиями) с помощью:

$ sudo dnf repoquery --duplicates

И вы можете удалить их с помощью:

$ sudo dnf remove --duplicates

Сначала выполните sudo dnf upgrade, так как этот список действителен только в том случае, если ваша система полностью обновлена. В противном случае вы увидите список установленных пакетов, которых больше нет в репозиториях, потому что доступно обновление. Этот список также может содержать пакеты, установленные из сторонних репозиториев, которые, возможно, не обновили свои репозитории.

Для пакетов из официальных репозиториев должна быть установлена последняя версия. Однако некоторые пакеты, которые всё ещё есть в вашей системе, могут больше не быть в репозиториях. Чтобы увидеть список этих пакетов, выполните:

$ sudo dnf list --extras

Если вы видите пакет, который вам не нужен или которым вы не пользуетесь, вы можете удалить его с помощью:

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

Вы можете безопасно удалить неиспользуемые пакеты с помощью:

$ sudo dnf autoremove

DNF решает, что пакет больше не нужен, если вы явно не просили его установить и ничего другого его не требует. Однако это не означает, что пакет бесполезен или что вы им не пользуетесь. Удаляйте только то, в чём вы уверены, что не нуждаетесь.

Очистка старых ядер

После загрузки в последнее ядро и проверки системы вы можете удалить предыдущие ядра. Старые ядра остаются даже после dnf autoremove, чтобы избежать непреднамеренных удалений.

Один из более простых способов удалить старые ядра — использовать сценарий, который сохраняет последнее ядро. Приведённый ниже сценарий работает всякий раз, когда Fedora обновляет ядро, и не зависит от обновления системы.

#!/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

Очистка старых ключей, доверенных для подписи RPM-пакетов

Ключи от более старых выпусков Fedora и сторонних репозиториев со временем накапливаются в базе данных RPM. Вы можете удалить ключи, больше не упоминаемые в /etc/yum.repos.d/, с помощью:

$ sudo dnf install clean-rpm-gpg-pubkey
$ sudo clean-rpm-gpg-pubkey

После обновления в файловой системе могут остаться висячие символические ссылки. Вы можете очистить висячие ссылки, установив утилиту symlinks и удалив старые ссылки.

$ sudo dnf install symlinks

После установки утилиты вы можете проверить наличие сломанных символических ссылок, как показано ниже. -r означает рекурсивно.

$ sudo symlinks -r /usr | grep dangling

После проверки списка сломанных символических ссылок вы можете удалить их, как показано ниже. -d означает удалить.

$ sudo symlinks -r -d /usr

Обновите спасательное ядро

Спасательное ядро и initramfs генерируются Anaconda во время установки системы. initramfs будет обновлён при обновлении ядра, но спасательное ядро может и не быть. Обновляется ли спасательное ядро, зависит от конфигурации системы.

Если спасательное ядро устарело, выполните следующие команды, чтобы перегенерировать его.

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

Процесс перегенерации спасательного ядра можно автоматизировать, установив пакет dracut-config-rescue.

sudo dnf install dracut-config-rescue

После установки спасательное ядро будет перегенерироваться до тех пор, пока dracut является генератором initrd. Подробности см. в /usr/lib/kernel/install.d/51-dracut-rescue.install.

Решение проблем после обновления

Следуйте этим шагам только в том случае, если вы столкнулись с проблемами в своей обновлённой системе.

Пересборка базы данных RPM

Если вы видите предупреждения при работе с инструментами RPM/DNF, ваша база данных может быть повреждена. Её можно пересобрать, чтобы проверить, решает ли это ваши проблемы. Всегда сначала делайте резервную копию /usr/lib/sysimage/rpm. Чтобы пересобрать базу данных, выполните:

$ sudo rpm --rebuilddb

Использование distro-sync для решения проблем с зависимостями

Инструмент обновления системы по умолчанию использует dnf distro-sync. Если ваша система частично обновлена или вы видите некоторые проблемы с зависимостями пакетов, попробуйте вручную запустить ещё один distro-sync, чтобы проверить, устраняет ли это проблему. Это попытается привести установленные пакеты к той же версии, что и в ваших включённых в настоящее время репозиториях, даже если придётся понизить версию некоторых пакетов:

$ sudo dnf distro-sync

Вы также можете использовать параметр --allowerasing, который удалит пакеты с зависимостями, которые не могут быть удовлетворены. Всегда проверяйте, какие пакеты будут удалены, перед подтверждением этого:

$ sudo dnf distro-sync --allowerasing

Перемаркировка файлов с последней политикой SELinux

Если вы сталкиваетесь с какими-либо предупреждениями относительно политик SELinux, некоторые файлы могут иметь неправильные разрешения SELinux. Это может произойти, если SELinux был отключён в прошлом. Чтобы перемаркировать SELinux в системе, выполните следующую команду, а затем перезагрузитесь:

$ sudo fixfiles -B onboot

Процесс загрузки, вероятно, займёт много времени, так как он проверяет и исправляет метки разрешений SELinux для всех файлов в вашей системе.

Часто задаваемые вопросы

Как мне сообщить о проблемах с обновлением?

  1. См. типичные ошибки, чтобы проверить, является ли это известной проблемой, о которой сообщество уже осведомлено.

  2. Поищите в Bugzilla существующий отчёт об ошибке, поданный против DNF5 или плагина DNF4.

Если вы не видите отчёт, соответствующий вашим симптомам, вы можете подать новый отчёт со страницы поиска. Пожалуйста, следуйте инструкциям по подаче отчётов об ошибках, упомянутым в README из репозитория GitHub.

Если после обновления вы столкнётесь с какими-либо проблемами с конкретным пакетом, подайте отчёт об ошибке против пакета, с которым у вас проблемы.

Проверяет ли DNF System Upgrade программное обеспечение, которое он запускает или устанавливает во время обновления?

Да. Ключи подписи пакетов для более нового выпуска Fedora Linux отправляются в более старые выпуски, чтобы позволить DNF проверить целостность загруженных пакетов. Вы можете отключить эту функцию при необходимости, но это не рекомендуется, так как вы будете открыты для атак вредоносного программного обеспечения.

Будут ли обновлены пакеты из сторонних репозиториев?

Да, если они настроены как обычные репозитории DNF и номера версий не жёстко закодированы в файле репозитория (обычно находится в /etc/yum.repos.d/). Обычно используемые сторонние репозитории, такие как RPM Fusion, должны работать. Однако при попытке обновления до или вскоре после официального выпуска Fedora Linux они могут не обновить свои пути репозиториев, и DNF может быть не в состоянии найти их пакеты. Обычно это не должно мешать успешному выполнению обновления. Кроме того, вы можете обновить пакеты из стороннего репозитория позже.

Могу ли я обновиться с выпуска с истёкшим сроком поддержки (EOL)?

Настоятельно рекомендуется обновить выпуск с истёкшим сроком поддержки в любой производственной системе или любой системе, подключённой к публичному интернету.

Любое обновление с Fedora Linux 20 или более ранней выполняется на ваш собственный риск, так как DNF не был инструментом управления пакетами по умолчанию. Однако, если у вас есть выпуск новее Fedora Linux 20 с истёкшим сроком поддержки, вы можете попытаться выполнить обновление, но этот метод не поддерживается. Вы можете попробовать обновиться через промежуточные выпуски, пока не достигнете текущего поддерживаемого выпуска, или попытаться обновиться до текущего поддерживаемого выпуска одной операцией. Опять же, это не поддерживается и выполняется на ваш собственный риск.

Могу ли я выполнить одно обновление через множество выпусков (например, 30→34)?

Обновления до непосредственно следующего выпуска (например, с 43 до 44), а также обновления с пропуском одного выпуска (например, с 42 до 44) поддерживаются. Однако настоятельно рекомендуется выполнить обновление до того, как ваш выпуск достигнет конца срока поддержки (EOL). Это происходит примерно через месяц после выпуска N+2 (когда вы сейчас на выпуске N). Жизненный цикл выпусков Fedora специально разработан, чтобы обеспечить этот приблизительный одномесячный «льготный период», позволяющий пользователям выбирать обновление своих систем ежегодно, то есть раз в два выпуска. Вы можете изучить Выпуски, чтобы увидеть текущий статус и расписание выпусков. Примерно через месяц после выхода нового выпуска предпоследний выпуск достигает конца срока поддержки (EOL). Обновление, вероятно, будет успешно работать после того, как выпуск достигнет EOL, но период времени после нового выпуска может быть неопределённым.

Обновления через более чем два выпуска не поддерживаются, и проблемы, возникшие при таких обновлениях, могут не считаться значительными ошибками.

При обновлении через более чем два выпуска вам может потребоваться импортировать ключ GPG для выпуска, до которого вы хотите обновиться. Вы можете сделать это с помощью:

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

(где N — версия Fedora Linux.)

Могу ли я использовать DNF System Upgrade для обновления до предварительного выпуска (например, бета-версии)?

Да, но это подвержено временным поломкам, как и любой другой аспект предварительного выпуска.

Почему автономное обновление не удаётся в системах, в которых отсутствуют аппаратные часы реального времени (RTC)?

В некоторых системах, таких как Raspberry Pi, отсутствуют аппаратные часы реального времени (RTC). Это приводит к тому, что система находится на неверном году во время ранней загрузки, особенно до загрузки сети. Проверка подписи GPG не удаётся, когда время неверно. Это приводит к сбою обновления после выполнения sudo dnf offline reboot.

Предлагаемое исправление — включить systemd-timesyncd до начала процесса обновления (dnf system-upgrade download).

$ sudo systemctl enable --now systemd-timesyncd