Пакетный менеджер и установка пакетов

Какой менеджер пакетов используется в настоящее время?

Dnf, являющийся, в свою очередь, форком Yum.

Могу ли я использовать Yum в Fedora?

Начиная с Fedora 24 yum присутствует в Fedora лишь как символическая ссылка на dnf, сохранённая для обратной совместимости.

Что такое Flatpak пакеты?

Flatpak - это современный прогрессивный формат самодостаточных пакетов для GNU/Linux. Он поддерживает рантаймы, изоляцию внутри песочниц, установку без наличия прав суперпользователя и многое другое.

Какие преимущества и недостатки у Flatpak пакетов?

Преимущества:

  • поддерживает динамическую линковку с большим количеством библиотек из рантаймов, что решает проблемы с лицензированием, их поддержкой в актуальном состоянии и исправлением в них ошибок, а также уязвимостей;
  • библиотеки, для которых нет рантаймов, могут быть упакованы непосредственно внутрь флатпака и подгружаться по мере необходимости;
  • Flatpak позволяет установить разные версии приложений одновременно;
  • для установки не требуются права суперпользователя;
  • поддерживается контейнерная изоляция приложения внутри собственной песочницы;
  • приложению могут быть выданы только необходимые права доступа и разрешения;
  • могут использоваться на любом дистрибутиве GNU/Linux без перекомпиляции и перекомпоновки;
  • лёгкое создание и хостинг собственных репозиториев.

Недостатки:

  • из-за того, что Flatpak пакеты по определению должны запускаться на разных дистрибутивах, они содержат в себе все зависимости либо в виде рантаймов, либо внутри флатпака;
  • в публичных репозиториях (например Flathub) мейнтейнеры не занимаются обновлением своих пакетов до актуальных рантаймов, из-за чего уже при установке нескольких приложений в системе появится куча различных версий одних и тех же рантаймов, что тратит очень много места на диске впустую;
  • из-за использования разных рантаймов полноценно не используется разделяемая память библиотек, т.е. каждое приложение загружает все свои зависимости в собственное адресное пространство;
  • отсутствует возможность использования общесистемных настроек среды для контейнеризированных приложений;
  • отсутствует возможность использования уже установленных в системе библиотек.

Можно ли устанавливать программы посредством make install?

Категорически не рекомендуется, ибо:

  1. make install порождает в системе кучу никем и ничем не отслеживаемых файлов: бинарников, конфигов, прочих файлов. Это в большинстве случаев приведёт к множеству проблем при обновлении или удалении;
  2. make install не учитывает файлы других пакетов и может запросто перезаписать или удалить в системе что-то важное, т.к. действие выполняется с правами суперпользователя;
  3. make install не ведёт никакого журнала действий, поэтому всё, что оно произвело, невозможно полноценно откатить;
  4. установленные через make install приложения очень часто невозможно удалить вообще, т.к. многие разработчики не делают правило make uninstall, что, в принципе, верно ибо оно не нужно большинству, а если и делают, то оно способно лишь удалить скопированные файлы. Изменения конфигов, других файлов и пр. откатить оно не способно.

Установка пакетов штатным пакетным менеджеров имеет множество преимуществ:

  1. при установке пакетный менеджер разрешает все зависимости, добавляет нужные, устраняет конфликты;
  2. перед выполнением установки пакетный менеджер проверяет, чтобы устанавливаемый пакет не вмешивался в работу других, а также самой системы. Если это так, он не будет установлен;
  3. во время установки все изменения, сделанные пакетом, вносятся в специальную базу данных пакетного менеджера и при удалении или обновлении будут учтены;
  4. при удалении пакета производится полный откат действий, предпринятых при установке (даже если были изменены какие-то конфиги, эти действия будут откачены полностью, т.к. хранится diff внутри базы ПМ);
  5. при обновлении перезаписываются только изменённые файлы. Более того, может быть скачан и установлен только дифф. изменений;
  6. если при обновлении пакета возникает конфликт какого-то конфига, он не будет молча перезаписан, а будет применён патч на существующий, либо, если это невозможно, будет запрошено действие у пользователя.

Можно ли использовать PIP или NPM для установки программ и модулей?

Нет. Глобальная установка чего-либо через pip (pip2, pip3) либо npm по своей деструктивности аналогична make install.

Нужной Python библиотеки нет в репозиториях. Как можно безопасно использовать PIP?

В таком случае рекомендуется либо локальная установка модулей посредством pip с параметром --user, либо использование Python Virtual Environment:

pip3 --user install foo-bar

Установленные таким способом модули будут размещены в домашнем каталоге пользователя и не помешают работе системы.

Как правильно применять Python Virtual Environment?

Установим пакеты python3-virtualenv и python3-setuptools:

sudo dnf install python3-setuptools python3-virtualenv

Создадим виртуальное окружение:

python3 -m venv foo-bar

Запустим его:

source foo-bar/bin/activate

Теперь внутри него допускается использовать любые механизмы установки пакетов Python: pip, install.py и т.д.

Здесь foo-bar - название venv контейнера. Допускается создавать неограниченное их количество.

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

Fedora поддерживает два вида обновлений: через консоль средствами пакетного менеджера dnf, либо через графические менеджеры, основанные на PackageKit.

Обновление системы средствами dnf:

sudo dnf upgrade --refresh

При этом настоятельно не рекомендуется запускать процесс в эмуляторах терминала графической среды.

Как часто следует устанавливать обновления системы?

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

Мы рекомендуем устанавливать обновления системы ежедневно.

Можно ли автоматизировать установку критических обновлений?

Да. Установим специальный сервис для автоматической проверки и установки обновлений:

sudo dnf install dnf-automatic

Активируем systemd-таймер:

sudo systemctl enable dnf-automatic.timer

Все параметры могут быть тонко настроены в конфигурационном файле /etc/dnf/automatic.conf.

Как мне обновить Fedora до новой версии?

Процесс обновления стандартен и максимально безопасен:

Fedora 28 и более ранние версии:

sudo dnf upgrade --refresh
sudo dnf install dnf-plugin-system-upgrade
sudo dnf system-upgrade download --releasever=$(($(rpm -E %fedora) + 1))
sudo dnf system-upgrade reboot

Fedora 29 и новее:

sudo dnf upgrade --refresh
sudo dnf install dnf-plugin-system-upgrade
sudo dnf system-upgrade download --releasever=$(($(rpm -E %fedora) + 1)) --setopt=module_platform_id=platform:f$(($(rpm -E %fedora) + 1))
sudo dnf system-upgrade reboot

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

Если произошёл какой-то конфликт, то рекомендуется очистить все кэши dnf:

sudo dnf clean all

Как мне обновить Fedora до Rawhide?

Допускается обновление с любой поддерживаемой версии Fedora до Rawhide. Следует помнить, что это действие необратимо. Пути назад на стабильный выпуск без полной переустановки системы уже не будет.

sudo dnf upgrade --refresh
sudo dnf install dnf-plugin-system-upgrade
sudo dnf system-upgrade download --releasever=rawhide
sudo dnf system-upgrade reboot

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

Можно ли обновляться через несколько версий?

Официально поддерживается лишь обновление с текущей на следующую версию. Если требуется осуществить прыжок через несколько версий, настоятельно рекомендуется обновлять систему последовательно (например F27 -> F28 -> F29 -> F30).

Когда лучше выполнять обновление при выходе новой версии дистрибутива?

Рекомендуется обновлять систему до новой версии Fedora в течение месяца после её официального релиза.

При обновлении dnf ругается на дубликаты пакетов.

Установим утилиту package-cleanup:

sudo dnf install dnf-utils

Удалим дубликаты и повреждённые пакеты:

sudo package-cleanup --cleandupes

База RPM оказалась повреждена. Как восстановить?

Для запуска пересборки базы данных RPM следует выполнить:

sudo rpm --rebuilddb

Настоятельно рекомендуется сделать резервную копию каталога /var/lib/rpm перед этим действием.

Dnf сохраняет старые ядра. Это нормально?

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

Как можно уменьшить количество сохраняемых ядер?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной installonly_limit:

installonly_limit=2

Минимально допустимое значение - 2 (будут сохраняться два ядра: текущее и предыдущее).

Как настроить работу dnf через прокси?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной proxy (при отсутствии добавим):

proxy=socks5://localhost:8080

Поддерживаются HTTP, HTTPS и SOCKS.

Если используемый прокси-сервер требует проверки подлинности (аутентификации), то укажем также и авторизационные данные для подключения:

proxy_username=LOGIN
proxy_password=PASSWORD

Здесь LOGIN - логин пользователя на прокси-сервере, а PASSWORD - его пароль.

Как отключить установку слабых зависимостей?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной install_weak_deps (при отсутствии добавим):

install_weak_deps=0

Как мне запретить установку обновлений для ряда пакетов?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной exclude (при отсутствии добавим):

exclude=kernel* PackageKit*

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

Что такое Delta RPM?

Технология Delta RPM позволяет сократить расход трафика при регулярной установке обновлений за счёт того, что скачиваться будет не новая версия целиком, а лишь разница между ней и установленной в системе.

К сожалению, на медленных устройствах: HDD, eMMC, SD и т.д., это значительно замедляет процесс установки обновлений, поэтому функцию можно отключить.

Как отключить использование Delta RPM?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной deltarpm (при отсутствии добавим):

deltarpm=0

Как можно вручную удалить старое ядро?

Для ручного удаления старого ядра можно выполнить:

sudo dnf remove kernel-4.10.14* kernel-core-4.10.14* kernel-modules-4.10.14* kernel-devel-4.10.14*

Здесь 4.10.14 - это версия удаляемого ядра.

Какие сторонние репозитории лучше всего подключать?

См. здесь.

Как работать с Flatpak пакетами в Fedora?

См. здесь.

В системе нет кодеков мультимедиа. Как их установить?

Для начала следует подключить репозиторий RPM Fusion, после чего установить кодеки из группы multimedia и sound-and-video:

sudo dnf groupupdate multimedia sound-and-video

Как отключить автообновление кэшей dnf?

См. здесь.

Что лучше: dkms или akmods?

Конечно akmods, т.к. он автоматически собирает и устанавливает полноценные RPM пакеты.

Каким способом можно обновить пакет из тестовых репозиториев?

Чтобы установить обновление из Fedora Testing, необходимо временно подключить соответствующий репозиторий:

sudo dnf upgrade --refresh foo-bar* --enablerepo=updates-testing

Репозиторий updates-testing подключается однократно только для данного сеанса работы dnf.

Как получить список файлов установленного пакета?

sudo dnf repoquery -l foo-bar

Как узнать в каком пакете находится конкретный файл?

Для этого можно воспользоваться плагином dnf repoquery:

sudo dnf repoquery -f */имя_файла

Для поиска бинарников и динамических библиотек можно применять альтернативный метод:

sudo dnf provides */имя_бинарника

Можно ли установить несколько версий Java в систему?

Да, это возможно. В настоящее время поддерживаются следующие версии Java. Допускается их одновременная установка.

Java 8:

sudo dnf install java-1.8.0-openjdk

Java 11:

sudo dnf install java-11-openjdk

Java 12 (preview):

sudo dnf install java-latest-openjdk

После установки укажем необходимую версию Java по умолчанию.

Как вывести список пакетов из определённого репозитория?

Вывод полного списка пакетов из репозитория (на примере rpmfusion-free):

sudo dnf repo-pkgs rpmfusion-free list

Вывод полного списка установленных пакетов из репозитория (также на примере rpmfusion-free):

sudo dnf repo-pkgs rpmfusion-free list installed

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

Выполним в терминале:

sudo dnf list extras

Как очистить журнал транзакций dnf?

Для очистки журнала транзакций dnf history, выполним:

sudo rm -f /var/lib/dnf/history.sql*

Как сохранить список установленных пакетов, чтобы легко установить их после переустановки системы?

Экспортируем список установленных вручную пакетов:

sudo dnf repoquery --qf "%{name}" --userinstalled > ~/packages.lst

Копируем любым способом получившийся файл ~/packages.lst на другое устройство.

Устанавливаем отсутствующие пакеты:

sudo dnf install $(cat ~/packages.lst)

Можно ли скачать, но не устанавливать пакет из репозитория?

Скачивание пакета foo-bar в текущий рабочий каталог:

dnf download foo-bar

Скачивание пакета foo-bar в текущий рабочий каталог вместе со всеми его зависимостями, отсутствующими в системе в настоящий момент:

dnf download --resolve foo-bar

Скачивание пакета foo-bar вместе со всеми зависимостями в указанный каталог:

dnf download --resolve foo-bar --downloaddir ~/mypkg

Для работы плагина dnf-download права суперпользователя не требуются.

Как правильно включать или отключать репозитории?

Включить репозиторий постоянно (на примере foo-bar):

sudo dnf config-manager --set-enabled foo-bar

Отключить репозиторий постоянно:

sudo dnf config-manager --set-disabled foo-bar

Временно подключить репозиторий и установить пакет из него:

sudo dnf install --refresh foo-bar --enablerepo=foo-bar

Опциональный параметр --refresh добавляется для принудительного обновления кэшей dnf.

Что такое модульные репозитории?

Репозитории Fedora Modular позволяют установить в систему несколько различных версий определённых пакетов. Они включены по умолчанию начиная с Fedora 29.

Вывод списка доступных модулей:

sudo dnf module list

Установка пакета в виде модуля (на примере nodejs):

dnf module install nodejs:6/default

Более подробную информацию о модулях можно найти здесь.

Мне не нужна поддержка модулей. Как их можно отключить?

Отключение репозитория с модулями:

sudo dnf config-manager --set-disabled fedora-modular
sudo dnf config-manager --set-disabled updates-modular

Повторное включение поддержки модулей:

sudo dnf config-manager --set-enabled fedora-modular
sudo dnf config-manager --set-enabled updates-modular

Можно ли устанавливать обновления через dnf из графического режима?

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

Для установки обновлений посредством dnf рекомендуется два варианта:

  • переключение в консоль фреймбуфера посредством нажатия комбинации Ctrl+Alt+F3 (для возврата в графический режим - Ctrl+Alt+F1), выполнение в ней нового входа в систему и запуск процесса обновления;
  • использование screen сессии. Тогда, в случае падения эмулятора терминала, процесс не будет прерван.

Безопасно ли использовать основанные на PackageKit модули обновления из графического режима?

Да, использование Gnome Software, Apper, Discover и других, основанных на PackageKit, для обновления системы из графического режима полностью безопасно, т.к. они сначала скачивают файлы обновлений в свой кэш, а для непосредственной установки уже используют специальный сервис. В случае падения GUI приложения, никаких повреждений не будет.

Как правильно тестировать новые версии пакетов в Fedora?

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

По результатам тестирования следует перейти в Fedora Bodhi, выбрать соответствующее обновление и либо добавить ему карму (работает исправно), либо отнять (возникли какие-то проблемы), а также опционально составить краткий отчёт (особенно если обновление работает не так, как ожидалось).

Также для упрощения работы тестировщиков была создана утилита Fedora Easy Karma, позволяющая работать с Bodhi из командной строки.

Как проще установить определённое обновление из тестового репозитория?

Проще всего найти данное обновление в Bodhi, затем выполнить:

sudo dnf upgrade --refresh --enablerepo=updates-testing --advisory=FEDORA-2018-XXXXXXXXX

Здесь FEDORA-2018-XXXXXXXXX - уникальный идентификатор обновления из Bodhi.

Как скачать определённую сборку пакета из Koji?

Для начала установим клиент Koji:

sudo dnf install koji

Выведем список всех успешно завершённых сборок пакета kernel за последнюю неделю:

koji list-builds --package=kernel --after=$(($(date +%s) - 604800)) --state=COMPLETE

Скачаем выбранную сборку для используемой архитектуры:

koji download-build kernel-4.19.7-300.fc29 --arch=$(uname -m)

Почему некоторые пакеты в Fedora не обновляют до новейших версий?

Согласно Fedora updates policy, запрещается обновлять пакеты в пределах стабильного выпуска Fedora до новых мажорных версий кроме тех, для которых было выдано специальное разрешение от FESCo.

Какие пакеты разрешено обновлять до новых версий в пределах стабильного выпуска?

В настоящее время определён список пакетов, для которых разрешены обновления до новых версий в пределах стабильного выпуска Fedora:

  • ядро Linux;
  • весь KDE стек (включая Qt);
  • веб-браузеры и почтовые клиенты.

При запуске dnf без прав суперпользователя он заново загружает и обновляет кэши. Это нормально?

Да. Если необходимо, чтобы dnf использовал глобальные общесистемные кэши репозиториев, следует применять параметр -C, например:

dnf -C search foo

Как удалить все установленные в системе 32-битные пакеты?

Удаление всех 32-битных пакетов из системы:

sudo dnf remove "*.i686"

Можно ли создать собственное зеркало репозиториев Fedora?

Да, см. здесь.

Безопасно ли устанавливать обновления через небезопасные соединения?

Да. Все пакеты в репозиториях Fedora подписываются цифровыми подписями GnuPG, которые в обязательном порядке проверяются перед установкой и обновлением.

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

Как превратить RFRemix в Fedora и наоборот?

Для превращения Fedora в RFRemix необходимо и достаточно подключить репозиторий russianfedora-branding, а чтобы вернуть всё назад - отключить его.

После подключения/отключения необходимо выполнить синхронизацию:

sudo dnf swap rfremix-release fedora-release --allowerasing
sudo dnf distro-sync --allowerasing

Безопасно ли использовать COPR репозитории?

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

Перед подключением мы рекомендуем проверить является ли владелец репозитория мейнтейнером Fedora или нет и, если нет, отказаться от этого.

Можно ли использовать в Fedora Snap пакеты?

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

Безопасно ли устанавливать и удалять пакеты группами?

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

Вывод списка доступных групп:

sudo dnf grouplist

Как установить группу пакетов?

Установка группы Fedora Workstation:

sudo dnf groupinstall 'Fedora Workstation'

Как удалить группу пакетов?

Удаление группы Fedora Workstation:

sudo dnf groupremove 'Fedora Workstation'

Настоятельно не рекомендуется удалять группы таким способом.

Как автоматически удалить не нужные более пакеты?

Dnf автоматически удаляет зависимости, не нужные более для работы установленных пакетов, однако этот процесс можно инициировать и вручную:

sudo dnf autoremove

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

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

Как отметить пакет в качестве установленного пользователем?

Отметим пакет foo-bar в качестве установленного пользователем:

sudo dnf mark install foo-bar

После этого пакет не будет автоматически помечаться в качестве кандидата на удаление.

Как запретить автоматически удалять не нужные более зависимости?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной clean_requirements_on_remove (при отсутствии добавим):

clean_requirements_on_remove=True

Как однократно передать dnf параметр?

Для однократной передачи параметра воспользуемся опцией --setopt.

Например в качестве примера удалим пакет foo-bar, сохранив при этом его зависимости:

sudo dnf remove foo-bar --setopt=clean_requirements_on_remove=True

Как dnf определяет зеркала, с которых будет загружать пакеты?

По умолчанию в актуальных версиях Fedora применяется технология metalink, при помощи которой на основе внешнего IP-адреса сервер определяет ближайшие зеркала по географическому признаку и отдаёт результат в виде отсортированного списка с указанием приоритетов.

Также существует альтернативная реализация в виде плагина fastestmirror, который определяет самое быстрое зеркало локально при помощи ICMP PING. Реальных замеров скорости при этом не производится, поэтому их качество остаётся на достаточно низком уровне.

Как включить в dnf использование плагина fastestmirror?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной fastestmirror (при отсутствии добавим):

fastestmirror=1

Как очистить кэш плагина dnf fastestmirror?

Удалим файл с кэшем плагина fastestmirror:

sudo rm -f /var/cache/dnf/fastestmirror.cache

Почему dnf не проверяет подписи локально устанавливаемых пакетов?

По умолчанию это отключено, т.к. предполагается, что большинство локально собранных RPM пакетов не имеют GnuPG подписей.

При необходимости данная функция может быть включена.

Как включить проверку подписей для локально устанавливаемых пакетов?

Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:

sudoedit /etc/dnf/dnf.conf

Изменим значение переменной localpkg_gpgcheck (при отсутствии добавим):

localpkg_gpgcheck=1

Какой вид самодостаточных пакетов является лучшим?

См. здесь.