Перейти до змісту

Управління програмним забезпеченням

Загальні положення

У системі Linux програмне забезпечення можна встановити двома способами:

  • Завантажити програмні пакети з репозиторію та встановити їх на локальний комп'ютер
  • Скомпілювати пакет вихідного коду проекту та встановити його на локальний комп'ютер

Примітка

У цьому документі не описано, як компілювати та встановлювати пакети вихідного коду на локальному комп'ютері. Зазвичай, вам слід отримати відповідний пакет програмного забезпечення з репозиторію, якщо тільки потрібного вам пакета програмного забезпечення немає в репозиторії. Це пояснюється тим, що система керування пакетами може допомогти користувачам вирішити проблеми із залежностями. Для початківців вирішення залежностей, необхідних для компіляції пакетів вихідного коду, може бути складним завданням.

Пакет: Розробники заздалегідь компілюють набір вихідних файлів на виконувану машинну мову та упаковують їх у двійкові файли певного формату. Якщо не зазначено інше, термін «програмний пакет» у Linux стосується бінарних програмних пакетів.

Вихідний файл: єдиний файл коду, який може читатися людиною (з розширеннями, такими як .c, .py, .java), що може бути лише фрагментом коду або модулем усього проекту, що потребує компіляції або інтерпретатора для запуску на комп’ютері.

Пакет вихідного коду: стиснутий архівний файл, який містить вихідні файли та пов'язані файли (такі як файли збірки, такі як Makefile та configure; файли документів, такі як README та LICENSE) усього проєкту. Суфікси файлів, такі як .tar.gz або .tar.xz, часто ідентифікують цей файл.

Огляд RPM

RPM (RedHat Package Manager) — система керування програмним забезпеченням. Можна встановити, видалити, оновити або перевірити програмне забезпечення, що міститься в пакетах.

RPM — це система керування пакетами, яка використовується всіма дистрибутивами Red Hat (Rocky Linux, Fedora, CentOS, SUSE, Mandriva тощо), причому пакети ідентифікуються за суфіксом файлу .rpm. Debian та його похідні використовують систему керування пакетами DPKG для керування програмними пакетами, причому пакети ідентифікуються за суфіксом файлу .deb.

Правила іменування для пакетів програмного забезпечення RPM:

Ілюстрація назви пакета

Пояснення термінології

Коли ми використовуємо слово "RPM" з великої літери, це стосується системи керування пакетами. Коли використовується нижня літера "rpm", у переважній більшості випадків це явно стосується команди rpm. Коли використовується .rpm, це стосується суфікса формату пакета. Читачі не повинні плутатися з ними під час читання документів.

Сучасна система керування пакетами RPM постійно оновлюється та повторюється, див. тут.

Локальний менеджер пакетів

Команда rpm: Інструмент командного рядка для керування локальними пакетами RPM у дистрибутивах Red Hat для основної та основної версій.

Повна назва пакета: Повна назва бінарного програмного пакета, наприклад tree-1.7.0-15.el8.x86_64.rpm.

Назва пакета: Назва програмного пакета, наприклад tree.

Якщо відповідний програмний пакет є новим для операційної системи (не встановлено), під час використання команди rpm слід використовувати «Повну назву пакета». Якщо відповідний програмний пакет не є новим для операційної системи (вже встановленим), під час використання команди rpm слід використовувати «Назва пакета». Це пояснюється тим, що rpm зберігає відповідну інформацію про пакет програмного забезпечення в каталозі бази даних /var/lib/rpm/.

Використання команди rpm виглядає наступним чином:

rpm [options] <Package-Name> | <Full-Package-Name>

Встановлення, оновлення та видалення програмних пакетів

Відповідні варіанти такі:

Опція Опис
-i <Full-Package-Name> Встановлює пакет.
-U <Full-Package-Name> Оновлює вже встановлений пакет.
-e <Package-Name> Видаляє пакет.
-h Відображає індикатор виконання.
-v Інформує про хід операції.
--test Перевіряє команду, не виконуючи її.
  • Встановіть один або декілька пакетів - rpm-ivh <Full-Package-Name> ...
  • Оновіть один або декілька пакетів - rpm-Uvh <Full-Package-Name> ...
  • Видаліть один або декілька пакетів - rpm -e <Package-Name> ...

Оскільки rpm є локальним менеджером пакетів, користувачам потрібно вирішувати проблеми із залежностями під час встановлення програмного забезпечення вручну. Якщо відповідні залежності відсутні, з’явиться повідомлення, наприклад, «не вдалося знайти залежності».

Розуміння залежності RPM-пакетів:

  • Зв'язок залежності дерева (a.rpm ---> b.rpm ---> c.rpm) - Під час встановлення a.rpm спочатку запитується обов'язкове встановлення b.rpm. Під час встановлення b.rpm спочатку пропонується встановити c.rpm. Цю проблему найлегше вирішити, об'єднавши інсталяції разом за допомогою: rpm -ivh a.rpm b.rpm c.rpm
  • Круговий зв'язок залежності (a.rpm ---> b.rpm ---> c.rpm ---> a.rpm) - rpm -ivh a.rpm b.rpm c.rpm
  • Залежність модуля – Перейдіть на цей вебсайт для пошуку

З: Чому встановлення програмного пакета завжди має проблеми із залежностями?

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

Пакет запитів

Відповідні варіанти такі:

Опція Опис
-q Запитує, чи встановлено програмний пакет, наприклад, rpm -q tree-1.7.0-15.el8.x86_64.rpm
-a При використанні разом з опцією -q запитує всі встановлені rpm-пакети, такі як rpm -qa
-i Використовується разом з опцією -q для запиту детальної інформації про відповідний встановлений пакет rpm. Наприклад, rpm -qi bash
-l При використанні в поєднанні з опцією -q запитує список файлів, випущених відповідним встановленим пакетом rpm
-p Вказує невстановлені пакети програмного забезпечення, наприклад rpm -qip tree-1.7.0-15.el8.x86_64.rpm та rpm -qlp tree-1.7.0-15.el8.x86_64.rpm
-f При використанні разом з опцією -q запитує пакет програмного забезпечення, до якого належить інсталяційний файл, наприклад, rpm -qf /usr/bin/bash
-R При використанні разом з опцією -q запитує залежності встановлених rpm-пакетів. При використанні разом з опцією -p можна запитувати залежності невстановлених пакетів rpm, наприклад, rpm -qRp rpm -qRp mtr-0.92-3.el8.x86_64.rpm
--last перелік пакетів за часом встановлення, починаючи з найновіших

База даних RPM знаходиться в каталозі /var/lib/rpm/.

Деякі приклади:

sudo rpm -qa

sudo rpm -qilp zork-1.0.3-1.el8.x86_64.rpm tree-1.7.0-15.el8.x86_64.rpm

# list the last installed packages:
sudo rpm -qa --last | head
NetworkManager-config-server-1.26.0-13.el8.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl2030-firmware-18.168.6.1-101.el8.1.noarch  Mon 24 May 2021 02:34:00 PM CEST
iwl2000-firmware-18.168.6.1-101.el8.1.noarch  Mon 24 May 2021 02:34:00 PM CEST
iwl135-firmware-18.168.6.1-101.el8.1.noarch   Mon 24 May 2021 02:34:00 PM CEST
iwl105-firmware-18.168.6.1-101.el8.1.noarch   Mon 24 May 2021 02:34:00 PM CEST
iwl100-firmware-39.31.5.1-101.el8.1.noarch    Mon 24 May 2021 02:34:00 PM CEST
iwl1000-firmware-39.31.5.1-101.el8.1.noarch   Mon 24 May 2021 02:34:00 PM CEST
alsa-sof-firmware-1.5-2.el8.noarch            Mon 24 May 2021 02:34:00 PM CEST
iwl7260-firmware-25.30.13.0-101.el8.1.noarch  Mon 24 May 2021 02:33:59 PM CEST
iwl6050-firmware-41.28.5.1-101.el8.1.noarch   Mon 24 May 2021 02:33:59 PM CEST

# list the installation history of the kernel:
sudo rpm -qa --last kernel
kernel-4.18.0-305.el8.x86_64                  Tue 25 May 2021 06:04:56 AM CEST
kernel-4.18.0-240.22.1.el8.x86_64             Mon 24 May 2021 02:33:35 PM CEST

Поради щодо використання

Під час використання функції запиту (опція -q) відповідний програмний пакет має бути детермінованим. Іншими словами, ви не можете використовувати шаблони підстановки в командному рядку rpm для збігу з назвою пакета. Щоб відфільтрувати один або декілька пакетів, потрібно використовувати символ вертикальної лінії (|) та команду grep.

sudo rpm -qa | grep ^dbus
dbus-common-1.12.8-27.el8_10.noarch
dbus-glib-0.110-2.el8.x86_64
dbus-libs-1.12.8-27.el8_10.x86_64
dbus-daemon-1.12.8-27.el8_10.x86_64
dbus-tools-1.12.8-27.el8_10.x86_64
dbus-1.12.8-27.el8_10.x86_64

Перевірка підпису програмного пакета

Для завершення цієї операції необхідно скористатися параметром -K.

Коли ви завантажуєте бінарний пакет rpm з невідомого веб-сайту або ненадійного місця, ви не знаєте, чи був він підроблений. Тому користувачам потрібно перевірити підпис програмного пакета, щоб переконатися, що завантажений пакет є повним та не підробленим.

Перш ніж виконувати перевірку підпису в програмному пакеті, необхідно заздалегідь імпортувати необхідний відкритий ключ (зазвичай це робить системний адміністратор).

Починаючи з RHEL 8.x, ви можете використовувати команду dnf download для завантаження певних програмних пакетів. Наприклад, якщо вам потрібно завантажити пакет wget, використовуйте:

sudo dnf download wget

ls -l wget-1.19.5-12.el8_10.x86_64.rpm
-rw-r--r-- 1 root root 750748 Jan  3 17:29 wget-1.19.5-12.el8_10.x86_64.rpm

# Use the "-K" option to verify the signature of the corresponding software package
## You can also use the "-v" or "-vv" option to display more detailed information
sudo rpm -K wget-1.19.5-12.el8_10.x86_64.rpm
wget-1.19.5-12.el8_10.x86_64.rpm: digests signatures OK

# If the software package you downloaded has been tampered with, the following information will be displayed:
echo  "change content" >> /root/wget-1.19.5-12.el8_10.x86_64.rpm
sudo rpm -K wget-1.19.5-12.el8_10.x86_64.rpm
wget-1.19.5-12.el8_10.x86_64.rpm: DIGESTS SIGNATURES NOT OK

Якщо підпис програмного пакета не проходить перевірку, вам не слід продовжувати використовувати цей пакет.

Перевірте зміни файлів після встановлення програмного пакета

Для завершення цієї операції потрібно скористатися параметром -V.

Після встановлення програмного пакета RPM база даних RPM записує початкові та змінені характеристики відповідних файлів, щоб визначити, чи були вони зловмисно змінені.

sudo rpm -q chrony
chrony-4.5-2.el8_10.x86_64

rpm -V chrony
S.5....T.  c /etc/chrony.conf

Вивід розбивається на 3 окремі стовпці.

  • Перший стовпець (S.5....T.)

    Використовуйте 9 полів для представлення дійсної інформації файлу після встановлення програмного пакета RPM. Будь-яке поле або характеристика, що пройшла певну перевірку/тест, позначається символом ".".

    Ці 9 різних полів або перевірок:

    • S: Чи є зміни у розмірі файлу.
    • M: Чи є зміна типу файлу або прав доступу до файлу (rwx).
    • 5: Чи є зміна контрольної суми MD5 файлу.
    • D: Чи є зміни в кількості пристроїв.
    • L: Чи змінено шлях до файлу.
    • U: Чи було змінено власника файлу.
    • G: Чи є модифікація групи, до якої належить файл.
    • T: Чи є модифікація mTime (часу зміни) файлу.
    • P: Чи є модифікація функції програми.
  • Другий стовпець (c)

    c: Вказує на зміни у файлі конфігурації. Це також можуть бути такі значення:

    • d: файл документації
    • g: файл-привид. Дуже мало хто може побачити
    • l: файл ліцензії
    • r: файл readme
  • Третій стовпець (/etc/chrony.conf)

    • /etc/chrony.conf:Представляє шлях до зміненого файлу.

Менеджер пакетів DNF

DNF (Dandified Yum) — менеджер пакетів програмного забезпечення, наступник YUM (Yyellow dog Updater ** M**odified).

Команда dnf: Ця команда дозволяє керувати бінарними пакетами програмного забезпечення, взаємодіючи з репозиторієм. Для найпоширеніших команд функціональних елементів їх використання таке ж, як і для команди yum. Для деяких новіших дистрибутивів (таких як Rocky Linux 10.x або Fedora 43) є оновлення для інструмента командного рядка dnf. Наприклад, у Rocky Linux 10.x користувачі можуть вибірково встановлювати dnf5 з репозиторію.

Дистрибутиви на базі Red Hat, такі як Rocky Linux, Fedora та CentOS, використовують інструмент командного рядка dnf. Його еквівалентом у світі Debian є apt (Aadvanced Packaging Tool) інструмент командного рядка.

Функціональні команди елемента dnf

Синтаксис команди dnf наступний:

dnf [options] <command> [<args>...]

«Команда» в синтаксисі представляє команду функціонального елемента dnf. Деякі команди вбудовані, тоді як інші потребують підтримки сторонніх плагінів. Ви можете побачити використання кожної функціональної команди за допомогою опції --help, наприклад, dnf list --help.

  1. команда list

    list перераховує пакети програмного забезпечення на основі різних опцій, що додаються до цієї команди. За замовчуванням відображається список усіх пакетів програмного забезпечення, доступних для встановлення в операційній системі (dnf list еквівалентно dnf list --all).

    • dnf list --installed – Перелік встановлених програмних пакетів для поточної операційної системи
    • dnf list --updates – Перелік пакетів програмного забезпечення, які можна оновити

    Конкретні параметри команди list такі:

    Конкретні опції Опис
    --all показує всі пакети (за замовчуванням)
    --available показує лише доступні пакети
    --installed показує лише встановлені пакети
    --extras показує лише додаткові пакети
    --updates показує лише пакети оновлень
    --upgrades показує лише пакети оновлень
    --autoremove показує лише пакети автоматичного видалення
    --recent показує лише нещодавно змінені пакети
  2. Команда search

    Пошук програмних пакетів у репозиторії за заданим рядком. Наприклад, dnf search vim.

  3. Команда install

    Встановлення одного або декілька програмних пакетів з репозиторію. Наприклад, dnf -y install wget tree. Параметр -y вказує, що автоматична відповідь — «так». Коли ви встановлюєте пакети таким чином, dnf автоматично обробляє розв'язання залежностей.

    Окрім встановлення програмних пакетів з репозиторію, ви також можете встановити програмні пакети з вказаної URL-адреси або локального пакета RPM, такого як dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm, dnf install /tmp/mtr-0.92-3.el8.x86_64.rpm

  4. Команда info

    Перегляд інформації про один або кілька програмних пакетів, таких як dnf info wget tree

  5. Команда deplist

    Перелічує залежності програмного пакета, який було вилучено. Будь ласка, використовуйте dnf repoquery --deplist <Package-Name> як альтернативу.

  6. Команда repolist

    Відображає інформацію, пов'язану з репозиторієм, за замовчуванням відображається увімкнений репозиторій (dnf repolist еквівалентно dnf repolist --enabled)

    • dnf repolist --all – Виводить список усіх репозиторіїв
    • dnf repolist -v – Відображає детальну інформацію про ввімкнені репозиторії
    • dnf repolist --disabled – Виводить список лише вимкнених репозиторіїв.
  7. Команда history

    Відображає історію введених команд dnf. За замовчуванням dnf history еквівалентний dnf history list. Ви можете замінити «список» тут на будь-який з info, redo, replay, rollback, store, undo або userinstalled.

  8. Команда provides

    Переглядає програмний пакет, до якого належить заданий файл. Наприклад, dnf provides /usr/bin/systemctl.

  9. Команда remove

    Видаляє один або кілька програмних пакетів з поточної операційної системи. За замовчуванням програма запитає, чи слід видалити пакет програмного забезпечення та відповідний пакет залежностей, і може автоматично відповісти «так» за допомогою параметра -y.

  10. Команда autoremove

    Автоматично видаляє пакети, які колись використовувалися як залежності, але більше не використовуються. Наприклад, dnf -y autoremove.

  11. Команда makecache

    Генерує кеш для щойно доданих репозиторіїв або для застарілих метаданих.

  12. Команда update або upgrade

    Оновлює один або декілька програмних пакетів в операційній системі. Наприклад, команда dnf update -y оновить усі пакети програмного забезпечення, які можна оновити, в операційній системі.

  13. Команда grouplist, groupinstall, groupremove або groupinfo

    Об'єктами цих команд є групи пакетів, які є наборами програмних пакетів, підготовлених для певного сценарію або середовища.

    У Rocky Linux 8.x є такі групи пакетів:

    sudo dnf grouplist
    Available Environment Groups:
       Server with GUI
       Server
       Workstation
       KDE Plasma Workspaces
       Virtualization Host
       Custom Operating System
    Installed Environment Groups:
       Minimal Install
    Available Groups:
       Container Management
       .NET Core Development
       RPM Development Tools
       Development Tools
       Graphical Administration Tools
       Headless Management
       Legacy UNIX Compatibility
       Network Servers
       Scientific Support
       Security Tools
       Smart Card Support
       System Tools
       Fedora Packager
       Xfce
    

    Щоб уникнути неоднозначності, під час роботи з однією або кількома групами пакетів слід взяти назву окремої групи пакетів у подвійні лапки.

  14. Команда clean

    Очищає кешовані дані. Ви можете очистити всі кеші даних за допомогою команди: dnf clean all.

    Тип метаданих для очищення Опис
    all Видаляє всі тимчасові файли, створені для активованих репозиторіїв.
    dbcache Видаляє файли кешу, згенеровані з метаданих репозиторію.
    expire-cache Позначає метадані репозиторію як такі, що прострочені.
    metadata Видаляє метадані репозиторію.
    packages Видаляє будь-які кешовані пакети з системи.
  15. Команда download

    Завантажує один або декілька програмних пакетів з репозиторію на локальний комп'ютер без їх встановлення.

    Ви можете скористатися опціями --destdir DESTDIR або --downloaddir DESRDIR, щоб вказати шлях збереження, наприклад, dnf download tree --downloaddir /tmp/.

  16. Команда repoquery

    Запитує відповідну інформацію за допомогою різних параметрів після команди, подібно до rpm -q.

    • dnf repoquery --deplist <Package-Name> - Переглядає залежності
    • dnf repoquery --list <Package-Name> – Переглядає список файлів після встановлення програмного пакета (незалежно від того, чи програмне забезпечення вже встановлено в операційній системі)
  17. Команда config-manager

    Керує репозиторіями через командний рядок, включаючи додавання, видалення, ввімкнення та вимкнення репозиторіїв.

    • dnf config-manager --add-repo <URL> - Додає єдиний абсолютно новий репозиторій
    • dnf config-manager --set-disabled devel - Остаточно вимикає окремий репозиторій
    • dnf config-manager --set-enabled devel - Постійно активує єдиний репозиторій

Ви можете переглянути доступні команди плагіна, виконавши команду dnf --help:

sudo dnf --help
...
List of Plugin Commands:

builddep                  Install build dependencies for package or spec file
changelog                 Show changelog data of packages
config-manager            manage dnf configuration options and repositories
copr                      Interact with Copr repositories.
debug-dump                dump information about installed rpm packages to file
debug-restore             restore packages recorded in debug-dump file
debuginfo-install         install debuginfo packages
download                  Download package to current directory
groups-manager            create and edit groups metadata file
needs-restarting          determine updated binaries that need restarting
offline-distrosync        Prepare offline distrosync of the system
offline-upgrade           Prepare offline upgrade of the system
playground                Interact with Playground repository.
repoclosure               Display a list of unresolved dependencies for repositories
repodiff                  List differences between two sets of repositories
repograph                 Output a full package dependency graph in dot format
repomanage                Manage a directory of rpm packages
reposync                  download all packages from remote repo
system-upgrade            Prepare system for upgrade to a new release
...

Підказка

Якщо ці команди плагіна відсутні, будь ласка, встановіть пакет dnf-plugins-core. Більше інформації дивіться тут: https://dnf-plugins-core.readthedocs.io/en/latest/index.html

опис конфігураційного файлу

Ви можете знайти всі файли конфігурації репозиторію (розділ яких закінчується на .repo) у каталозі /etc/yum.repos .d/</1>. Кожен файл .repo може містити один або кілька репозиторіїв, і користувачі можуть вибірково вмикати або вимикати їх залежно від конкретної ситуації.

ls -l /etc/yum.repos.d/
total 72
-rw-r--r--  1 root root 1919 Sep 13  2024 docker-ce.repo
-rw-r--r--  1 root root 1680 Aug 31  2024 epel-modular.repo
-rw-r--r--  1 root root 1332 Aug 31  2024 epel.repo
-rw-r--r--  1 root root 1779 Aug 31  2024 epel-testing-modular.repo
-rw-r--r--  1 root root 1431 Aug 31  2024 epel-testing.repo
-rw-r--r--. 1 root root  710 Jun  7  2024 Rocky-AppStream.repo
-rw-r--r--. 1 root root  695 Jun  7  2024 Rocky-BaseOS.repo
-rw-r--r--  1 root root 1773 Jun  7  2024 Rocky-Debuginfo.repo
-rw-r--r--. 1 root root  360 Jul 11  2024 Rocky-Devel.repo
-rw-r--r--. 1 root root  695 Jun  7  2024 Rocky-Extras.repo
-rw-r--r--. 1 root root  731 Jun  7  2024 Rocky-HighAvailability.repo
-rw-r--r--. 1 root root  680 Jun  7  2024 Rocky-Media.repo
-rw-r--r--. 1 root root  680 Jun  7  2024 Rocky-NFV.repo
-rw-r--r--. 1 root root  690 Jun  7  2024 Rocky-Plus.repo
-rw-r--r--. 1 root root  715 Mar 29 17:39 Rocky-PowerTools.repo
-rw-r--r--. 1 root root  746 Jun  7  2024 Rocky-ResilientStorage.repo
-rw-r--r--. 1 root root  681 Jun  7  2024 Rocky-RT.repo
-rw-r--r--  1 root root 2335 Jun  7  2024 Rocky-Sources.repo

Формат вмісту окремого репозиторію в кожному файлі .repo фіксований, наприклад:

[baseos]
name=Rocky Linux $releasever - BaseOS
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

Опис контенту:

  • Використовуйте "[ ]", щоб включити ідентифікатор репозиторію, який має бути унікальним.
  • Під "[ ]" знаходяться параметри репозиторію.
  • Опція "name" – вказує детальну назву репозиторію.
  • Опція "mirrorlist" – URL-адреса списку дзеркал репозиторію. URL-адреси підтримують кілька протоколів, таких як https, http, ftp, file, NFS тощо. Символ "$" у значенні позначає відповідну змінну репозиторію.
  • Опція "baseurl" – Список URL-адрес репозиторію. URL-адреси підтримують кілька протоколів, таких як https, http, ftp, file, NFS тощо. Символ "$" у значенні позначає відповідну змінну репозиторію.
  • Рядки, що починаються з "#", є рядками коментарів.
  • Опція "gpgcheck" – чи слід виконувати перевірку підпису GPG для пакетів, знайдених у цьому репозиторії. Значення за замовчуванням — False(0).
  • Опція "enabled" – включає цей репозиторій як джерело пакета. Значення за замовчуванням — True(1).
  • Опція "countme" – завантажує анонімні дані статистики використання. Значення за замовчуванням — False(0).
  • Опція "gpgkey" – шлях до відкритого ключа GPG.

Для отримання додаткової інформації зверніться до man 5 yum.conf.

Потоки застосунків

Потоки програм у RL 8.x та RL 9.x:: Rocky Linux 8.x та 9.x використовують нову модульну технологію, що дозволяє репозиторіям розміщувати кілька версій програм та їхніх залежностей. Через використання модульної архітектури, потоки програм у цих двох операційних системах також називаються "потоками модулів". Системні адміністратори можуть вибрати певну версію, яка забезпечує більшу гнучкість. Якщо системним адміністраторам потрібно керувати потоками програм, вони часто використовують команду dnf module.

Потоки програм у RL 10.x: Починаючи з Rocky Linux 10.x, системні адміністратори все ще можуть використовувати потоки програм, але вони більше не надаються в модульній формі. Іншими словами, у версії 10.x команда dnf module більше не існує, і системні адміністратори можуть керувати різними версіями програм традиційним способом. У цій версії операційної системи термін "Потоки програм" не дорівнює "Потокам модулів".

Кожен потік застосунків має різний життєвий цикл. Будь ласка, перейдіть за наступним посиланням:

  • https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel8_application_streams
  • https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel9_application_streams
  • https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel10_dependent_application_streams

У цьому документі автор в основному пояснює потоки застосувань модульної архітектури.

Потоки модулів

Важливе зауваження:

  • Щоб використовувати потоки програм модульної архітектури в RL 8.x та RL 9.x, спочатку потрібно ввімкнути репозиторій AppStream. У репозиторії Appstream модулі представляють собою набір програмних пакетів для логічних одиниць, які збираються, тестуються та публікуються разом. Один модуль може містити кілька потоків (версій) однієї й тієї ж програми.
  • Кожен модуль отримує оновлення окремо.
  • Після ввімкнення одного модуля користувачі можуть використовувати лише один потік (версію) цього модуля.
  • Кожен модуль може мати власний потік за замовчуванням (версію за замовчуванням), позначений символом "[d]".
  • Потік за замовчуванням активний, якщо ви не вимкнете модуль або не ввімкнете інший потік для модуля.

Профілі модулів

Профілі модулів: Набір списків програмних пакетів, об'єднаних для конкретних сценаріїв використання. Наприклад:

sudo dnf module list nginx
Last metadata expiration check: 10:04:05 ago on Wed 07 Jan 2026 01:42:24 PM CST.
Rocky Linux 8 - AppStream
Name                      Stream                       Profiles                       Summary
nginx                     1.14 [d]                     common [d]                     nginx webserver
nginx                     1.16                         common [d]                     nginx webserver
nginx                     1.18                         common [d]                     nginx webserver
nginx                     1.20                         common [d]                     nginx webserver
nginx                     1.22                         common [d]                     nginx webserver
nginx                     1.24                         common [d]                     nginx webserver

sudo sudo dnf module install nginx:1.14
Last metadata expiration check: 10:04:31 ago on Wed 07 Jan 2026 01:42:24 PM CST.
Dependencies resolved.
========================================================================================================================
 Package                            Architecture  Version                                        Repository        Size
========================================================================================================================
Installing group/module packages:
 nginx                              x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream        566 k
 nginx-all-modules                  noarch        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         22 k
 nginx-filesystem                   noarch        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         23 k
 nginx-mod-http-image-filter        x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         34 k
 nginx-mod-http-perl                x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         45 k
 nginx-mod-http-xslt-filter         x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         32 k
 nginx-mod-mail                     x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         63 k
 nginx-mod-stream                   x86_64        1:1.14.1-9.module+el8.4.0+542+81547229         appstream         84 k
Installing dependencies:
 dejavu-fonts-common                noarch        2.35-7.el8                                     baseos            73 k
 dejavu-sans-fonts                  noarch        2.35-7.el8                                     baseos           1.5 M
 fontconfig                         x86_64        2.13.1-4.el8                                   baseos           273 k
 fontpackages-filesystem            noarch        1.44-22.el8                                    baseos            15 k
 gd                                 x86_64        2.2.5-7.el8                                    appstream        143 k
 jbigkit-libs                       x86_64        2.1-14.el8                                     appstream         54 k
 libX11                             x86_64        1.6.8-9.el8_10                                 appstream        611 k
 libX11-common                      noarch        1.6.8-9.el8_10                                 appstream        157 k
 libXau                             x86_64        1.0.9-3.el8                                    appstream         36 k
 libXpm                             x86_64        3.5.12-11.el8                                  appstream         58 k
 libjpeg-turbo                      x86_64        1.5.3-14.el8_10                                appstream        156 k
 libtiff                            x86_64        4.0.9-36.el8_10                                appstream        190 k
 libwebp                            x86_64        1.0.0-11.el8_10                                appstream        273 k
 libxcb                             x86_64        1.13.1-1.el8                                   appstream        228 k
Installing module profiles:
 nginx/common
Enabling module streams:
 nginx                                            1.14

Transaction Summary
========================================================================================================================
Install  22 Packages

Total download size: 4.5 M
Installed size: 14 M
Is this ok [y/N]:

Кожен потік модулів може мати будь-яку кількість профілів (або взагалі жодного), і ви можете позначити профілі потоків модулів символом "[d]", щоб вказати "модуль за замовчуванням" або вибраний модуль.

У наведеному вище прикладі, коли користувачеві потрібно встановити nginx, еквівалентною є наступна команда:

sudo dnf install nginx

sudo dnf install nginx:1.14

sudo dnf install nginx:1.14/common

Потоки модуля управління

Використана команда — dnf module, яка має кілька підкоманд для функціональних елементів.

Поради щодо використання

Коли однорядкова операція команди dnf module стосується модулів, дозволено використовувати кілька імен модулів, наприклад, dnf module enable nginx httpd:2.4 або dnf module list nodejs:10 perl.

Перегляд

Ви можете використовувати підкоманди елементів функцій list або info для виконання відповідних операцій.

  • dnf module list - Отримує список усіх доступних модулів.
  • dnf module list <Module-Name> або dnf module list <Module-Name>:<Stream> - Перелічує всі доступні потоки (версії) для поточного модуля. Виводить інформацію про один потік модулів. Наприклад, dnf module list postgresql або dnf module list postgresql:15.
  • dnf module list --enabled - Перелічує увімкнені потоки модулів.
  • dnf module info <Module-Name> або dnf module info info <Module-name>:<Stream> - Відображає інформацію про потік модуля. Якщо ввести лише назву модуля без потоку, буде відображено всю інформацію про потік для цього модуля. Наприклад, dnf module info ruby або dnf module info ruby:2.6.
  • dnf moudle --info --profile <Module-Name> або dnf moudle --info --profile <Module-Name>:<Stream> - Перелічує інформацію профілю потоку модуля. Якщо ввести лише назву модуля без потоку, буде відображено всю інформацію профілю потоку для цього модуля.

Встановлення

Перш ніж встановлювати певний потік модуля, вам потрібно ввімкнути цей потік. Використаний синтаксис такий:

dnf moudle enable <Module-Name>:<Stream> ...

Наприклад:

dnf -y module enable httpd:2.4

Знову наголосити

Потік за замовчуванням активний, якщо ви не вимкнете модуль або не ввімкнете інший потік для модуля.

Прийнятні такі способи встановлення:

  • dnf -y module install <Module-Name> - Використовує потік за замовчуванням та профіль за замовчуванням одного модуля (якщо такий існує). Наприклад, dnf -y install httpd
  • dnf -y install <Module-Name>:<Stream>/<Profile> - Використання певного потоку та профілю одного модуля. Наприклад, dnf -y install httpd:2.4:/minimal. Якщо є кілька профілів, ви можете використовувати * для позначення всіх них, наприклад dnf module install httpd:2.4/*

Видалення

Ви можете використовувати наступний синтаксис для видалення::

  • dnf -y module remove --all <Module-name>:<Stream> ... - Видаляє всі пакети з одного потоку в одному модулі. Наприклад, dnf -y module remove --all httpd:2.4
  • dnf -y module remove --all <Module-name>:<Stream>/<Profile> ... - Видаляє всі пакети, пов'язані з певним профілем, використовуючи * для позначення всіх профілів. Наприклад, dnf -y module remove httpd:2.4/*

Скидання

Ви можете скористатися командою reset, щоб скинути модуль до початкового стану. Відповідний синтаксис такий:

  • dnf -y module reset <Module-Name> ... - Наприклад dnf -y module reset httpd

Важливе повідомлення

Скидання модуля не змінить жодних встановлених програмних пакетів.

Перемикання

Ви можете переключитися на оновлену трансляцію. Для виконання цієї операції є дві передумови:

  1. Операційно система повністю оновлена
  2. Встановлені програмні пакети в операційній системі не новіші за програмні пакети, доступні в репозиторії

Ви можете скористатися командою dnf distro-sync для перемикання на новий потік.

Якщо для потоку модуля доступні оновлення, потрібно виконати такі дії:

  1. dnf module reset <Module-Name> ...
  2. dnf module enable <Module-Name>:<New-Stream> ...
  3. dnf distro-sync

Якщо потік встановлення для певного модуля знаходиться в операційній системі, ви також можете скористатися командою «switch to» для оновлення або зниження версії програмного пакета. Синтаксис:

dnf module switch-to <Module-Name>:<Stream>

Вимикання

Синтаксис:

dnf module disable <Module-Name> ...

Налаштування за допомогою YAML-файлу

Системні адміністратори можуть налаштувати потік за замовчуванням та профіль за замовчуванням, створивши YAML-файл у каталозі /etc/dnf/modules.defaults.d/.

Взявши за приклад модуль PostgreSQL, ви можете побачити з вихідної інформації, що його потік за замовчуванням — 10, а профіль за замовчуванням — "сервер":

sudo dnf module list postgresql
Name                   Stream             Profiles                       Summary
postgresql             9.6                client, server [d]             PostgreSQL server and client module
postgresql             10 [d]             client, server [d]             PostgreSQL server and client module
postgresql             12                 client, server [d]             PostgreSQL server and client module
postgresql             13                 client, server [d]             PostgreSQL server and client module
postgresql             15                 client, server [d]             PostgreSQL server and client module
postgresql             16                 client, server [d]             PostgreSQL server and client module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Встановіть 15 як потік за замовчуванням та встановіть профіль за замовчуванням для postgresql:12 на "client":

sudo vim /etc/dnf/modules.defaults.d/postgresql.yaml
---
document: modulemd-defaults
version: 1
data:
        module: postgresql
        stream: "15"
        profiles:
                "9.6": [server]
                "10": [server]
                "12": [client]
                "13": [server]
                "15": [server]
...

sudo dnf module list postgresql
Last metadata expiration check: 0:41:35 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name                   Stream             Profiles                       Summary
postgresql             9.6                client, server [d]             PostgreSQL server and client module
postgresql             10                 client, server [d]             PostgreSQL server and client module
postgresql             12                 client [d], server             PostgreSQL server and client module
postgresql             13                 client, server [d]             PostgreSQL server and client module
postgresql             15 [d]             client, server [d]             PostgreSQL server and client module
postgresql             16                 client, server                 PostgreSQL server and client module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Повний приклад

Візьмемо, наприклад, модуль nodejs:

sudo dnf module list nodejs
Last metadata expiration check: 0:44:38 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name                Stream              Profiles                                          Summary
nodejs              10 [d]              common [d], development, minimal, s2i             Javascript runtime
nodejs              12                  common [d], development, minimal, s2i             Javascript runtime
nodejs              14                  common [d], development, minimal, s2i             Javascript runtime
nodejs              16                  common [d], development, minimal, s2i             Javascript runtime
nodejs              18                  common [d], development, minimal, s2i             Javascript runtime
nodejs              20                  common [d], development, minimal, s2i             Javascript runtime
nodejs              22                  common, development, minimal, s2i                 Javascript runtime
nodejs              24                  common, development, minimal, s2i                 Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

sudo dnf -y module enable nodejs:18

sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:46:01 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name                Stream              Profiles                                          Summary
nodejs              18 [e]              common [d], development, minimal, s2i             Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

sudo dnf -y module install nodejs:18/minimal

sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:47:26 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name               Stream             Profiles                                             Summary
nodejs             18 [e]             common [d], development, minimal [i], s2i            Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

sudo dnf -y module install nodejs:18/common

sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:48:34 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name              Stream            Profiles                                                Summary
nodejs            18 [e]            common [d] [i], development, minimal [i], s2i           Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

sudo dnf -y module remove --all nodejs:18/*

sudo dnf -y module reset nodejs

sudo dnf module list nodejs
Last metadata expiration check: 0:50:03 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name                Stream              Profiles                                          Summary
nodejs              10 [d]              common [d], development, minimal, s2i             Javascript runtime
nodejs              12                  common [d], development, minimal, s2i             Javascript runtime
nodejs              14                  common [d], development, minimal, s2i             Javascript runtime
nodejs              16                  common [d], development, minimal, s2i             Javascript runtime
nodejs              18                  common [d], development, minimal, s2i             Javascript runtime
nodejs              20                  common [d], development, minimal, s2i             Javascript runtime
nodejs              22                  common, development, minimal, s2i                 Javascript runtime
nodejs              24                  common, development, minimal, s2i                 Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Використання репозиторію EPEL

З: Що таке EPEL і як його використовують?

EPEL (Extra Packages for Enterprise Linux) – це безкоштовний репозиторій з відкритим кодом, що підтримується EPEL Fedora Special Interest Group. Цей ресурс надає набір додаткових пакетів RHEL (а також CentOS, Rocky Linux та інших) з вихідних кодів Fedora.

Незалежно від того, чи використовують Rocky Linux 8.x/9.x/10.x окремі особи чи компанії, зазвичай рекомендується ввімкнути репозиторій EPEL.

Ви можете встановити репозиторій EPEL такими способами:

sudo dnf install epel-release

Перегляньте відповідну інформацію та перевірте успішне встановлення:

sudo dnf info epel-release
Last metadata expiration check: 1 day, 23:02:38 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Installed Packages
Name         : epel-release
Version      : 8
Release      : 22.el8
Architecture : noarch
Size         : 34 k
Source       : epel-release-8-22.el8.src.rpm
Repository   : @System
From repo    : epel
Summary      : Extra Packages for Enterprise Linux repository configuration
URL          : http://download.fedoraproject.org/pub/epel
License      : GPLv2
Description  : This package contains the Extra Packages for Enterprise Linux (EPEL) repository
             : GPG key as well as configuration for yum.

rpm -qa | grep epel
epel-release-8-14.el8.noarch

sudo dnf repolist
repo id            repo name
...
epel                                      Extra Packages for Enterprise Linux 8 - x86_64
...

Тут ви можете бачити, що пакет не містить виконуваних файлів, бібліотек чи інших файлів, а лише файли конфігурації та ключі GPG, необхідні для налаштування репозиторію.

Пов’язані файли .repo:

ls -lh /etc/yum.repos.d/epel*
-rw-r--r-- 1 root root 1.7K Apr 23  2025 /etc/yum.repos.d/epel-modular.repo
-rw-r--r-- 1 root root 1.4K Apr 23  2025 /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 1.8K Apr 23  2025 /etc/yum.repos.d/epel-testing-modular.repo
-rw-r--r-- 1 root root 1.4K Apr 23  2025 /etc/yum.repos.d/epel-testing.repo

За замовчуванням увімкнено лише репозиторії з ідентифікатором epel у файлі epel.repo.

cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
...

Перелічіть усі доступні програмні пакети з ідентифікатором репозиторію epel:

dnf --repoid epel list --available 

Якщо у вашій операційній системі є інші репозиторії, але ви хочете встановлювати пакети лише з EPEL:

sudo dnf --disablerepo="*" --enablerepo="epel" install nmon
Last metadata expiration check: 0:08:13 ago on Mon 12 Jan 2026 09:34:25 PM CST.
Dependencies resolved.
========================================================================================================================
 Package                   Architecture                Version                          Repository                 Size
========================================================================================================================
Installing:
 nmon                      x86_64                      16p-5.el8                        epel                       80 k

Transaction Summary
========================================================================================================================
Install  1 Package

Total download size: 80 k
Installed size: 161 k
Is this ok [y/N]:

Дружнє нагадування

Коли ввімкнено кілька репозиторіїв, один і той самий програмний пакет може мати різні версії, і за замовчуванням новіша версія має найвищий пріоритет. Це також є причиною використання опцій --disablerepo та --enablrepo.

!!! attention «Підтримка розгляду»

EPEL — це проєкт, ініційований волонтерами спільноти Fedora, тому Red Hat не підтримує його комерційно. Як і сама Fedora, Red Hat розміщує інфраструктуру проєкту, а інженери Red Hat беруть участь як супроводжуючі та керівники, але Red Hat не укладає жодних комерційних контрактів на підтримку чи угод про рівень обслуговування для пакетів в EPEL.

Щоб переглянути поширені запитання щодо EPEL, див. Поширені запитання щодо EPEL проекту Fedora тут.

Author: Antoine Le Morvan

Contributors: Colussi Franco, Steven Spencer, Ganna Zhyrnova, tianci li