Вопросы, связанные с пакетным менеджером и установкой пакетов

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

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

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

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

Можно ли устанавливать программы посредством 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 контейнера. Допускается создавать неограниченное их количество.

У меня в системе используется GDM, но я хочу заменить его на SDDM. Это возможно?

Установка SDDM:

sudo dnf install sddm

Отключение GDM и активация SDDM:

sudo systemctl -f enable sddm

Изменения вступят в силу при следующей загрузке системы.

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

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

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

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

Если произошёл какой-то конфликт, то рекомендуется очистить все кэши 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

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

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

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

sudo package-cleanup --cleandupes --noscripts

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

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

sudo rpm --rebuilddb

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

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

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

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

Необходимо открыть файл /etc/dnf/dnf.conf в любом текстовом редакторе и изменить значение переменной installonly_limit:

installonly_limit=2

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

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

Необходимо открыть файл /etc/dnf/dnf.conf в любом текстовом редакторе и изменить значение переменной proxy (при отсутствии добавить):

proxy=socks5://localhost:8080

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

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

Необходимо открыть файл /etc/dnf/dnf.conf в любом текстовом редакторе и изменить значение переменной install_weak_deps (при отсутствии добавить):

install_weak_deps=0

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

Необходимо открыть файл /etc/dnf/dnf.conf в любом текстовом редакторе и изменить значение переменной exclude (при отсутствии добавить):

exclude=kernel* PackageKit*

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

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

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

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 - это версия удаляемого ядра.

Как установить шрифты Microsoft в Fedora?

См. здесь.

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

См. здесь.

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

См. здесь.

Я хочу создать пакет для Fedora. Что мне следует знать?

См. здесь и здесь.

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

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

sudo dnf groupinstall multimedia

Я установил браузер Chromium из репозиториев, но он отказывается воспроизводить видео с большинства сайтов. Как исправить?

Из-за патентных ограничений браузер Chromium в репозиториях Fedora сильно кастрирован. Для восстановления полной функциональности необходимо подключить RPMFusion и установить пакет с кодеками для данного браузера:

sudo dnf install chromium-libs-media-freeworld

Как активировать все доступные кодеки в браузере Firefox?

Браузер Mozilla Firefox использует ffmpeg для работы с мультимедийным контентом, поэтому необходимо его установить из репозитория RPM Fusion:

sudo dnf install ffmpeg-libs

Как правильно установить драйверы NVIDIA?

См. здесь.

Как собрать RPM пакет в mock?

См. здесь.

Как правильно установить VirtualBox в Fedora?

Сначала нужно подключить репозиторий RPM Fusion, затем выполнить:

sudo dnf upgrade --refresh
sudo dnf install gcc kernel-devel kernel-headers akmod-VirtualBox VirtualBox

Для нормальной работы с USB устройствами и общими папками потребуется также добавить свой аккаунт в группу vboxusers и vboxsf:

sudo usermod -a -G vboxusers $(whoami)
sudo usermod -a -G vboxsf $(whoami)

Как правильно установить драйверы Wi-Fi модулей Broadcom?

Сначала нужно подключить RPM Fusion, затем выполнить:

sudo dnf upgrade --refresh
sudo dnf install gcc kernel-devel kernel-headers akmod-wl

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

См. здесь.

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

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

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

См. здесь.

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

Чтобы установить обновление из 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 9:

sudo dnf install java-9-openjdk

Java 11:

sudo dnf install java-11-openjdk

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

Для выбора дефолтной версии Java следует использовать систему альтернатив:

sudo update-alternatives --config java

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

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

sudo dnf repo-pkgs rpmfusion-free list

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

sudo dnf repo-pkgs rpmfusion-free list installed

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

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

sudo dnf -C list extras

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

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

sudo rm -rf /var/lib/dnf/history/*

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

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

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+F2 (для возврата в графический режим - 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?

Fedora Koji - это автоматизированная среда для сборки пакетов для Fedora.

Как скачать определённую сборку пакета из 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)

Хочу внести свои правки в пакет и пересобрать его для личных нужд. Как проще это сделать?

Установим утилиты fedpkg и mock:

sudo dnf install fedpkg mock

Скачаем исходники необходимого пакета foo-bar:

fedpkg clone -a foo-bar

Перейдём в каталог с загруженными исходниками и переключимся на ветку для конкретной версии Fedora (если нужна версия из Rawhide - следует использовать master):

cd foo-bar
fedpkg switch-branch f29

Внесём свои правки, сделаем коммит в репозиторий:

git add -A
git commit -m "Description of our changes."

Запустим автоматическую сборку в mock:

fedpkg mockbuild