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

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

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

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

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

Официально поддерживается лишь обновление с текущей на следующую версию. Если требуется осуществить прыжок через несколько версий, настоятельно рекомендуется обновлять систему последовательно (например 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 в любом текстовом редакторе и изменить значение переменной installonly_limit:

installonly_limit=2

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

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

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

proxy=socks5://localhost:8080

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

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

proxy_username=LOGIN
proxy_password=PASSWORD

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

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

Необходимо открыть файл /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?

См. здесь.

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

Для начала следует подключить репозиторий 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?

См. здесь.

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

Рекомендуется использовать KVM, т.к. её гипервизор и необходимые модули уже находятся в ядре Linux и не вызывают проблем.

Как правильно установить систему виртуализации KVM?

Установим KVM и графическую утилиту управления виртуальными машинами virt-manager:

sudo dnf group install Virtualization

Перезагрузим машину для вступления изменений в силу:

sudo systemctl reboot

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

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

sudo usermod -a -G libvirt $(whoami)

Как правильно установить 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 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 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?

Для начала установим клиент 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);
  • веб-браузеры и почтовые клиенты.

Откуда правильно устанавливать расширения для Gnome Shell?

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

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

Как разрешить установку расширений Gnome Shell из веб-браузера?

Для того, чтобы разрешить установку расширений Gnome Shell из браузеров, необходимо установить соответствующий пакет:

sudo dnf install gnome-shell-browser

Также данное дополнение можно установить и вручную:

Как разрешить установку расширений KDE Plasma из веб-браузера?

Для того, чтобы разрешить установку расширений оболочки KDE Plasma из браузеров, необходимо установить соответствующий пакет:

sudo dnf install plasma-browser-integration

Также данное дополнение можно установить и вручную:

Как вернуть классический системный лоток (трей) в Gnome Shell?

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

Восстановить трей можно посредством установки одного из расширений Gnome Shell. Самым популярным является TopIcons Plus.

Установка для всех пользователей в виде пакета из репозиториев Fedora:

sudo dnf install gnome-shell-extension-topicons-plus

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

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

dnf -C search foo