Програми, встановлені у вашій системі, залежать від кількох факторів. Основний фактор залежить від груп програмних пакетів, вибраних під час встановлення операційної системи. Інший фактор залежить від того, що було зроблено з системою з моменту її використання.
Ви побачите, що одним із ваших рутинних завдань як системного адміністратора є керування програмним забезпеченням. Це часто включає:
встановлення нового програмного забезпечення
видалення програмного забезпечення
оновлення вже встановленого програмного забезпечення
Програмне забезпечення можна встановити в системах на базі Linux кількома способами. Ви можете встановити з вихідного коду або попередньо скомпільованих двійкових файлів. Останній спосіб є найпростішим, але він також найменш настроюваний. Більшість роботи вже зроблено за вас, коли ви встановлюєте з попередньо скомпільованих двійкових файлів. Тим не менш, ви повинні знати назву та де знайти потрібне програмне забезпечення.
Майже все програмне забезпечення спочатку надходить у вигляді вихідних файлів мови програмування C або "C++". Вихідні програми зазвичай розповсюджуються як архіви вихідних файлів. Зазвичай файли tar або gzip d, або bzip2. Це означає, що вони надходять у стисненому вигляді або як єдиний пучок.
Більшість розробників зробили свій вихідний код відповідним до стандартів GNU, що полегшило обмін. Це також означає, що пакунки будуть скомпільовані на будь-якій UNIX або UNIX-подібній системі (наприклад, Linux).
RPM є основним інструментом для керування програмами (пакетами) у дистрибутивах на основі Red Hat, таких як Rocky Linux, Fedora, Red Hat Enterprise Linux (RHEL), openSuSE, Mandrake тощо.
Програми, які використовуються для керування програмним забезпеченням у дистрибутивах Linux, називаються менеджерами пакетів. Прикладами є:
The Red Hat Package Manager (rpm). Пакунки мають суфікс «.rpm»
The Debian package management system (dpkg). Пакунки мають суфікс «.deb»
Далі наведено деякі популярні параметри командного рядка та синтаксис для команди RPM:
У цій лабораторній роботі ви дізнаєтеся, як використовувати систему RPM і встановити зразок програми у вашій системі.
Підказка
У вас є багато варіантів, звідки отримати пакети Rocky Linux. Ви можете вручну завантажити їх із надійних [або ненадійних] сховищ. Ви можете отримати їх із дистрибутива ISO. Ви можете отримати їх із централізованого спільного розташування за допомогою таких протоколів, як - nfs, git, https, ftp, smb, cifs тощо. Якщо вам цікаво, ви можете переглянути наступний офіційний веб-сайт і переглянути відповідне сховище для потрібного пакета:
https://download.rockylinux.org/pub/rocky/8.8/
Давайте заглибимося глибше та дізнаємося більше про один із пакетів, встановлених у системі. Ми розглянемо NetworkManager. Ми будемо використовувати параметри --query (-q) і --info (-i) з командою rpm. Впишіть:
Скажімо, нас цікавить лише поле «Підсумок» попередньої команди. Ми можемо використовувати опцію --queryformat rpm, щоб фільтрувати інформацію, яку ми отримуємо з опції запиту.
Наприклад, щоб переглянути лише поле Summary, введіть:
rpm-q--queryformat'%{summary}\n'NetworkManager
Назва поля нечутлива до регістру.
Щоб переглянути поля Version та Summary встановленого типу пакета NetworkManager:
Введіть команду, щоб переглянути інформацію про пакет bash, встановлений у системі.
rpm-qibash
!!! note "Примітка"
Попередні вправи стосувалися запитів і роботи з пакетами, уже встановленими в системі. У наступних вправах ми почнемо працювати з пакетами, які ще не встановлено. Ми будемо використовувати програму DNF для завантаження пакетів, які використовуватимемо в наступних кроках.
По-перше, переконайтеся, що програму wget ще не встановлено в системі. Впишіть:
rpm-qwget
packagewgetisnotinstalled
Схоже, wget не встановлено в нашій демонстраційній системі.
Починаючи з Rocky Linux 8.x, команда dnf download дозволить вам отримати останній пакет rpm для wget. Впишіть:
dnfdownloadwget
Використовуйте команду ls, щоб переконатися, що пакет завантажено у ваш поточний каталог. Впишіть:
ls-lhwg*
Використовуйте команду rpm, щоб отримати інформацію про завантажений wget-*.rpm. Впишіть:
Виходячи з результатів попереднього кроку, що саме таке пакет `wget`? Підказка: ви можете використовувати параметр формату запиту `rpm`, щоб переглянути поле опису пакета завантаження.
Якщо вас цікавить пакет wget files-.rpm, ви можете перелічити всі файли, включені до пакета, ввівши:
Повна назва пакета: коли ви завантажуєте пакет із надійного джерела (наприклад, веб-сайт постачальника, сховище розробника), ім’я завантаженого файлу є повним ім’ям пакета, наприклад -- htop-3.2.1- 1.el8.x86_64.rpm. Під час використання команди rpm для встановлення/оновлення цього пакунка об’єкт, керований командою, має бути повною назвою (або відповідним символом узагальнення) пакунка, наприклад:
rpm-ivhhtop-3.2.1-1.el8.x86_64.rpm
rpm-Uvhhtop-3.2.1-1.*.rpm
rpm-qiphtop-3.*.rpm
rpm-qlpwget-1.19.5-11.el8.x86_64.rpm
Повна назва пакета відповідає умовам іменування, подібним до цього —— [Package_Name]-[Version]-[Release].[OS].[Arch].rpm or [Package_Name]-[Version]-[Release].[OS].[Arch].src.rpm
Назва пакета: оскільки RPM використовує базу даних для керування програмним забезпеченням, база даних матиме відповідні записи після завершення встановлення пакета. Наразі робочий об’єкт команди rpm потребує лише введення імені пакета. як от:
Повідомлення «digests signatures OK» у вихідних даних показує, що з пакетом все гаразд.
Давайте проявимо зловмисність і навмисно змінимо завантажений пакет. Це можна зробити, додавши будь-що до оригінального пакету або вилучивши щось із нього. Будь-що, що змінює пакунок у спосіб, який не передбачали вихідні пакувачі, пошкодить пакунок. Ми змінимо файл за допомогою команди echo, щоб додати рядок «haha» до пакета. Впишіть:
echohaha>>wget-1.19.5-10.el8.x86_64.rpm
Тепер спробуйте ще раз перевірити цілісність пакета за допомогою параметра -K rpm.
Зараз це зовсім інше повідомлення. Висновок «DIGESTS SIGNATURES NOT OK» чітко попереджає, що вам не слід намагатися використовувати або інсталювати пакет. Більше не варто довіряти.
Використовуйте команду rm, щоб видалити пошкоджений файл пакета wget і завантажити нову копію за допомогою dnf. Впишіть:
rmwget-*.rpm&&dnfdownloadwget
Ще раз перевірте, чи нещодавно завантажений пакет пройшов перевірку цілісності RPM.
Під час інсталяції програмного забезпечення у вашій системі ви можете наштовхнутися на проблеми «невдалих залежностей». Це особливо часто трапляється під час використання низькорівневої утиліти RPM для ручного керування програмами в системі.
Наприклад, якщо ви спробуєте встановити пакет «abc.rpm», інсталятор RPM може скаржитися на деякі невдалі залежності. Він може сказати вам, що для пакета «abc.rpm» спочатку потрібно встановити інший пакет «xyz.rpm». Проблема залежностей виникає через те, що програми майже завжди залежать від іншого програмного забезпечення чи бібліотеки. Якщо необхідної програми або спільної бібліотеки ще немає в системі, перед установкою цільової програми потрібно виконати цю передумову.
Утиліта RPM низького рівня часто знає про взаємозалежності між програмами. Але зазвичай він не знає, як і де отримати програму чи бібліотеку, необхідну для вирішення проблеми. Іншими словами, RPM знає що і як, але не має вбудованої можливості відповісти на запитання де. Тут сяють такі інструменти, як dnf, yum тощо.
Відразу - проблема залежності! Зразок результату показує, що wget потребує якогось файлу бібліотеки під назвою "libmetalink.so.3"
!!! note "Примітка"
Відповідно до результатів тесту вище, для пакета wget-*.rpm потрібно встановити пакет libmetalink-*.rpm. Іншими словами, libmetalink є необхідною умовою для встановлення wget-*.rpm. Ви можете примусово встановити пакет wget-*.rpm за допомогою параметра «nodeps», якщо знаєте, що робите, але це, як правило, ПОГАНА практика.
RPM дав нам підказку про те, чого не вистачає. Ви пам’ятаєте, що rpm знає, що і як, але не обов’язково знає, де. Скористаємося утилітою dnf, щоб визначити назву пакета, який надає відсутню бібліотеку. Впишіть:
З результату нам потрібно завантажити пакет libmetalink, який надає відсутню бібліотеку. Зокрема, нам потрібна 64-розрядна версія бібліотеки. Викличмо окрему утиліту (dnf), щоб допомогти нам знайти та завантажити пакет для нашої демонстраційної 64-розрядної (x86_64) архітектури. Впишіть:
dnfdownload--archx86_64libmetalink
Тепер у вашому робочому каталозі має бути принаймні 2 пакети rpm. Використовуйте команду ls, щоб підтвердити це.
Встановіть відсутню залежність libmetalink. Впишіть:
sudorpm-ivhlibmetalink-*.rpm
З установленою залежністю ми можемо повернутися до нашої початкової мети встановлення пакета wget. Впишіть:
sudorpm-ivhwget-*.rpm
!!! note "Примітка"
RPM підтримує транзакції. У попередніх вправах ми могли виконати одну транзакцію rpm, яка включала оригінальний пакет, який ми хотіли встановити, і всі пакети та бібліотеки, від яких він залежав. Було б достатньо однієї такої команди, як наведена нижче:
```bash
rpm -Uvh wget-*.rpm libmetalink-*.rpm
```
Момент істини зараз. Спробуйте запустити програму wget без будь-яких опцій, щоб перевірити, чи вона встановлена. Впишіть:
wget
Давайте подивимося на wget в дії. Використовуйте wget, щоб завантажити файл з Інтернету з командного рядка. Впишіть:
wgethttps://kernel.org
Це завантажить стандартний index.html з веб-сайту kernel.org!
Використовуйте rpm, щоб переглянути список усіх файлів у програмі wget.
Використовуйте rpm, щоб переглянути будь-яку документацію, що міститься в wget.
Використовуйте rpm, щоб переглянути список усіх бінарних файлів, встановлених разом з пакетом wget.
Вам потрібно було встановити пакет libmetalink, щоб встановити wget. Спробуйте запустити або виконати libmetalink з командного рядка. Впишіть:
libmetalink
-bash:libmetalink:commandnotfound
Увага
Що це дає? Чому ви не можете запустити або виконати `libmetalink`?
Ключі GPG, які використовуються для підпису пакетів, що використовуються в проекті Rocky Linux, можна отримати з різних джерел, таких як веб-сайт проекту, сайт FTP, носії розповсюдження, локальні джерела тощо. На випадок, якщо відповідний ключ відсутній у зв’язку ключів вашої системи RL, ви можете використати параметр `rpm` `--import` для імпорту відкритого ключа Rocky Linux з вашої локальної системи RL, виконавши: `sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY- rockyofficial`
Питання
Яка різниця між `rpm -Uvh` і `rpm -ivh` під час встановлення пакетів? Зверніться до сторінки довідки щодо `rpm`.
Видаліть пакет libmetalink з вашої системи. Впишіть:
sudorpm-elibmetalink
!!! question "Питання"
Поясніть, чому не вдалося зняти пакет?
Чистим і правильним способом видалення пакетів за допомогою RPM є видалення пакетів разом із їхніми залежностями. Щоб видалити пакет libmetalink, ми також повинні видалити пакет wget, який залежить від нього. Впишіть:
sudorpm-elibmetalinkwget
!!! note "Примітка"
Якщо ви хочете зламати пакунок, який покладається на libmetalink, і *примусово* видалити пакунок із вашої системи, ви можете скористатися параметром rpm `--nodeps` так: `$ sudo rpm -e --nodeps libmetalink`.
**i.** Параметр «nodeps» означає відсутність залежностей. Тобто ігнорувати всі залежності.
**ii.** Вище показано, як примусово видалити пакет із системи. Іноді це потрібно робити, але зазвичай це *не дуже добре*.
**iii.** Примусове видалення пакета «xyz», на який покладається інший встановлений пакет «abc», фактично робить пакет «abc» непридатним для використання або дещо зламаним.
DNF — це менеджер пакетів для дистрибутивів Linux на основі RPM. Це наступник популярної утиліти YUM. DNF підтримує сумісність з YUM. Обидві утиліти мають схожі параметри командного рядка та синтаксис.
DNF є одним із багатьох інструментів для керування програмним забезпеченням на основі RPM, таким як Rocky Linux. Порівняно з rpm, ці інструменти вищого рівня допомагають спростити встановлення, видалення та запити пакетів. Важливо зазначити, що ці інструменти використовують базову структуру, надану системою RPM. Ось чому корисно зрозуміти, як використовувати RPM.
DNF (та інші інструменти, подібні до нього) діє як обгортка навколо RPM і надає додаткові функції, яких не пропонує RPM. DNF знає, як працювати із залежностями пакетів і бібліотек, а також знає, як використовувати налаштовані репозиторії для автоматичного вирішення більшості проблем.
Загальні параметри, які використовуються з утилітою dnf:
Якщо припустити, що ви видалили утиліту wget із вправи, ми використаємо DNF для встановлення пакета в наступних кроках. Процес із 2-3 кроків, який нам був потрібний раніше, коли ми встановлювали wget через rpm, слід скоротити до одноетапного процесу з використанням dnf. dnf тихо вирішить будь-які залежності.
По-перше, давайте переконаємося, що wget і libmetalink видалено з системи. Впишіть:
sudorpm-ewgetlibmetalink
Після видалення, якщо ви спробуєте запустити wget з CLI, ви побачите повідомлення на зразок wget: command not found
Тепер використовуйте dnf, щоб встановити wget. Впишіть:
Параметр "-y", використаний у попередній команді, пригнічує підказку "[y/N]" для підтвердження дії, яку збирається виконати `dnf`. Це означає, що всі дії підтвердження (або інтерактивні відповіді) будуть «так» (у).
DNF надає параметр «Група середовища», який спрощує додавання нового набору функцій до системи. Щоб додати цю функцію, зазвичай потрібно інсталювати декілька пакунків окремо, але використовуючи dnf, все, що вам потрібно знати, це назва або опис потрібної функції. Використовуйте dnf, щоб відобразити список усіх доступних груп. Впишіть:
dnfgrouplist
Нас цікавить група/функція "Інструменти розробки". Давайте дізнаємося більше про цю групу. Впишіть:
dnfgroupinfo"Development Tools"
Пізніше нам знадобляться деякі програми з групою «Development Tools». Встановіть групу «Development Tools» за допомогою dnf, виконавши:
DNF може перевірити та встановити останню версію окремих пакетів, доступних у сховищах. Його також можна використовувати для встановлення певних версій пакетів.
Використовуйте опцію списку з dnf, щоб переглянути доступні у вашій системі версії програми wget. Впишіть:
dnflistwget
Якщо ви хочете лише побачити, чи доступні оновлені версії для пакета, скористайтеся опцією перевірки оновлення з dnf. Наприклад, для типу пакета wget:
dnfcheck-updatewget
Тепер перерахуйте всі доступні версії пакета ядра для вашої системи. Впишіть:
sudodnflistkernel
Тепер перевірте, чи доступні оновлені пакети для встановленого пакета ядра. Впишіть:
dnfcheck-updatekernel
Оновлення пакетів можуть відбуватися через виправлення помилок, нові функції або виправлення безпеки. Щоб переглянути, чи є будь-які оновлення безпеки для пакета ядра, введіть:
DNF можна використовувати для перевірки та встановлення останніх версій усіх пакетів, встановлених у системі. Періодична перевірка наявності оновлень є важливим аспектом адміністрування системи.
Щоб перевірити наявність оновлень для пакетів, які ви зараз інсталювали у своїй системі, введіть:
$sudodnf-yremovewget
Щоб перевірити наявність оновлень безпеки для всіх пакетів, встановлених у вашій системі, введіть:
$sudodnf-yremovewget
Щоб оновити всі пакети, встановлені у вашій системі, до найновіших версій, доступних для вашого дистрибутива:
Створення програмного забезпечення з вихідного коду¶
Усе програмне забезпечення/програми/пакети походять із звичайних текстових файлів, які можна прочитати людиною. Файли спільно відомі як вихідний код. Пакети RPM, які встановлюються в дистрибутивах Linux, створюються з вихідного коду.
У цій вправі ви завантажите, скомпілюєте та встановите приклад програми з її вихідних файлів. Для зручності вихідні файли зазвичай поширюються як один стиснутий файл, який називається tar-ball (вимовляється як tar-dot-gee-zee).
Наступні вправи базуватимуться на відомому вихідному коді проекту Hello. hello — це проста програма командного рядка, написана мовою C++, яка лише друкує «hello» на терміналі. Ви можете дізнатися більше про проект тут
Використовуйте команду ls, щоб переглянути вміст вашого pwd.
Новий каталог під назвою hello-2.12 повинен був бути створений для вас під час де-тарування.
Перейдіть до цього каталогу та перегляньте його вміст. Впишіть:
cdhello-2.12;ls
Перегляд будь-яких спеціальних інструкцій зі встановлення, які можуть постачатися з вихідним кодом, завжди є хорошою практикою. Ці файли зазвичай мають такі назви: INSTALL, README тощо.
Використовуйте пейджер, щоб відкрити файл INSTALL і прочитати його. Впишіть:
lessINSTALL
Вийдіть із пейджера, коли завершите перегляд файлу.
Більшість програм мають функції, які користувач може ввімкнути або вимкнути. Це одна з переваг доступу до вихідного коду та встановлення з нього. Ви можете контролювати настроювані функції програми. Це на відміну від прийняття всього, що встановлює менеджер пакетів із попередньо скомпільованих двійкових файлів.
Сценарій, який зазвичай дозволяє налаштувати програмне забезпечення, зазвичай має влучну назву «configure»
Порада
Переконайтеся, що ви встановили групу пакетів «Інструменти розробки» перед виконанням наступних вправ.
```bash
sudo dnf -y group install "Development Tools"
```
Скористайтеся командою ls ще раз, щоб переконатися, що у вас справді є файл з назвою configure у вашому pwd.
Щоб побачити всі параметри, ви можете ввімкнути або вимкнути тип програми hello:
./configure--help
!!! question "Питання"
З результатів команди, що робить параметр «--prefix»?
Якщо ви задоволені стандартними параметрами, які пропонує сценарій налаштування. Впишіть:
./configure
!!! note "Примітка"
Сподіваюся, етап налаштування пройшов гладко, і ви можете перейти до етапу компіляції.
Якщо ви отримуєте деякі помилки під час етапу налаштування, вам слід уважно переглянути кінцеву частину виводу, щоб побачити джерело помилки. Помилки *іноді* зрозумілі самі за себе, і їх легко виправити. Наприклад, ви можете побачити таку помилку:
configure: error: no acceptable C compiler found in $PATH
Наведена вище помилка просто означає, що у вас не встановлено компілятор C (наприклад, `gcc`) у системі або компілятор інстальовано десь не у вашій змінній PATH.
Ви створите програму hello, виконавши наступні кроки. Ось де деякі програми, які ви встановили за допомогою групи Development Tools за допомогою DNF, стають у нагоді.
Використовуйте команду make, щоб скомпілювати пакет після запуску сценарію “configure”. Впишіть:
Серед інших службових завдань останній крок інсталяції передбачає копіювання будь-яких двійкових файлів програми та бібліотек у відповідні папки.
Щоб установити програму hello, виконайте команду make install. Впишіть:
sudomakeinstall
Це встановить пакет у місце, указане аргументом префікса за замовчуванням (--prefix), який раніше використовувався у сценарії «configure». Якщо не було встановлено жодного --prefix, буде використано стандартний префікс /usr/local/.
Використовуйте команду whereis, щоб побачити, де у вашій системі знаходиться програма hello. Впишіть:
whereishello
Спробуйте запустити програму hello, щоб побачити, що вона робить. Впишіть:
hello
Знову запустіть hello з опцією --help, щоб побачити інші речі, які він може робити.
Тепер за допомогою sudo знову запустіть hello як суперкористувач. Впишіть:
sudohello
Вихід
sudo:hello:commandnotfound
!!! Question "Питання"
Дослідіть, що викликає помилку, коли ви намагаєтесь запустити `hello` за допомогою sudo. Виправте проблему та переконайтеся, що програму `hello` можна використовувати з sudo.
!!! tip "Підказка"
Тестування програми як звичайного користувача є хорошою практикою, щоб переконатися, що звичайні користувачі можуть використовувати програму. Дозволи для двійкового файлу можуть бути встановлені неправильно, тому лише суперкористувач може використовувати програми. Це, звичайно, припускає, що ви дійсно хочете, щоб звичайні користувачі могли використовувати програму.
Перевірка цілісності файлу після встановлення пакета¶
Після встановлення відповідних пакетів у деяких випадках нам потрібно визначити, чи були пов’язані файли змінені, щоб запобігти зловмисним змінам іншими.
Візьміть програму синхронізації часу chrony як приклад, щоб проілюструвати значення її виводу.
Щоб продемонструвати, як працює перевірка пакету rpm, змініть файл конфігурації chrony - /etc/chrony.conf. (Передбачається, що ви встановили Chrony). Додайте 2 символи нешкідливого коментаря ## у кінець файлу. Впишіть:
echo-e"##"|sudotee-a/etc/chrony.conf
Тепер запустіть команду rpm з опцією --verify. Впишіть:
rpm-Vchrony
Вихід
S.5....T.c/etc/chrony.conf
Результат розбивається на 3 окремі стовпці.
Перший стовпець (S.5....T.)
Зразок вихідних даних - 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: Представляє шлях до зміненого файлу.
Author: Wale Soyinka
Contributors: Steven Spencer, tianci li, Ganna Zhyrnova