Управління програмним забезпеченням¶
Загальні положення¶
У системі 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.
-
команда
listlist перераховує пакети програмного забезпечення на основі різних опцій, що додаються до цієї команди. За замовчуванням відображається список усіх пакетів програмного забезпечення, доступних для встановлення в операційній системі (
dnf listеквівалентноdnf list --all).dnf list --installed– Перелік встановлених програмних пакетів для поточної операційної системиdnf list --updates– Перелік пакетів програмного забезпечення, які можна оновити
Конкретні параметри команди list такі:
Конкретні опції Опис --allпоказує всі пакети (за замовчуванням) --availableпоказує лише доступні пакети --installedпоказує лише встановлені пакети --extrasпоказує лише додаткові пакети --updatesпоказує лише пакети оновлень --upgradesпоказує лише пакети оновлень --autoremoveпоказує лише пакети автоматичного видалення --recentпоказує лише нещодавно змінені пакети -
Команда
searchПошук програмних пакетів у репозиторії за заданим рядком. Наприклад,
dnf search vim. -
Команда
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 -
Команда
infoПерегляд інформації про один або кілька програмних пакетів, таких як
dnf info wget tree -
Команда
deplistПерелічує залежності програмного пакета, який було вилучено. Будь ласка, використовуйте
dnf repoquery --deplist <Package-Name>як альтернативу. -
Команда
repolistВідображає інформацію, пов'язану з репозиторієм, за замовчуванням відображається увімкнений репозиторій (
dnf repolistеквівалентноdnf repolist --enabled)dnf repolist --all– Виводить список усіх репозиторіївdnf repolist -v– Відображає детальну інформацію про ввімкнені репозиторіїdnf repolist --disabled– Виводить список лише вимкнених репозиторіїв.
-
Команда
historyВідображає історію введених команд
dnf. За замовчуваннямdnf historyеквівалентнийdnf history list. Ви можете замінити «список» тут на будь-який зinfo,redo,replay,rollback,store,undoабоuserinstalled. -
Команда
providesПереглядає програмний пакет, до якого належить заданий файл. Наприклад,
dnf provides /usr/bin/systemctl. -
Команда
removeВидаляє один або кілька програмних пакетів з поточної операційної системи. За замовчуванням програма запитає, чи слід видалити пакет програмного забезпечення та відповідний пакет залежностей, і може автоматично відповісти «так» за допомогою параметра
-y. -
Команда
autoremoveАвтоматично видаляє пакети, які колись використовувалися як залежності, але більше не використовуються. Наприклад,
dnf -y autoremove. -
Команда
makecacheГенерує кеш для щойно доданих репозиторіїв або для застарілих метаданих.
-
Команда
updateабоupgradeОновлює один або декілька програмних пакетів в операційній системі. Наприклад, команда
dnf update -yоновить усі пакети програмного забезпечення, які можна оновити, в операційній системі. -
Команда
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Щоб уникнути неоднозначності, під час роботи з однією або кількома групами пакетів слід взяти назву окремої групи пакетів у подвійні лапки.
-
Команда
cleanОчищає кешовані дані. Ви можете очистити всі кеші даних за допомогою команди:
dnf clean all.Тип метаданих для очищення Опис allВидаляє всі тимчасові файли, створені для активованих репозиторіїв. dbcacheВидаляє файли кешу, згенеровані з метаданих репозиторію. expire-cacheПозначає метадані репозиторію як такі, що прострочені. metadataВидаляє метадані репозиторію. packagesВидаляє будь-які кешовані пакети з системи. -
Команда
downloadЗавантажує один або декілька програмних пакетів з репозиторію на локальний комп'ютер без їх встановлення.
Ви можете скористатися опціями
--destdir DESTDIRабо--downloaddir DESRDIR, щоб вказати шлях збереження, наприклад,dnf download tree --downloaddir /tmp/. -
Команда
repoqueryЗапитує відповідну інформацію за допомогою різних параметрів після команди, подібно до
rpm -q.dnf repoquery --deplist <Package-Name>- Переглядає залежностіdnf repoquery --list <Package-Name>– Переглядає список файлів після встановлення програмного пакета (незалежно від того, чи програмне забезпечення вже встановлено в операційній системі)
-
Команда
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 httpddnf -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.4dnf -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
Важливе повідомлення
Скидання модуля не змінить жодних встановлених програмних пакетів.
Перемикання¶
Ви можете переключитися на оновлену трансляцію. Для виконання цієї операції є дві передумови:
- Операційно система повністю оновлена
- Встановлені програмні пакети в операційній системі не новіші за програмні пакети, доступні в репозиторії
Ви можете скористатися командою dnf distro-sync для перемикання на новий потік.
Якщо для потоку модуля доступні оновлення, потрібно виконати такі дії:
dnf module reset <Module-Name> ...dnf module enable <Module-Name>:<New-Stream> ...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