15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
09.10.2024

apt проти yum: Управління пакетами Linux для системних адміністраторів

Управління пакетами Linux — це механізм, за допомогою якого програмне забезпечення встановлюється, оновлюється, налаштовується та видаляється в системі Linux. apt (Advanced Package Tool) обробляє `.deb` пакети в дистрибутивах на основі Debian, таких як Ubuntu та Linux Mint, тоді як yum (Yellowdog Updater Modified) керує `.rpm` пакетами в системах на основі Red Hat, включаючи CentOS та RHEL. Обидва інструменти абстрагують складність вирішення залежностей, взаємодії з репозиторіями та перевірки цілісності пакетів — але вони архітектурно відрізняються і не є взаємозамінними.

Розуміння того, який інструмент керує вашою системою, — це не опціональні знання. Це безпосередньо впливає на те, як ви налаштовуєте сервери, автоматизуєте розгортання, пишете скрипти управління конфігурацією (Ansible, Chef, Puppet) та підтримуєте цикли виправлень безпеки у виробничих середовищах.

Що таке менеджер пакетів Linux

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

База даних пакетів є критично важливою і часто недооціненою. У системах на основі Debian вона знаходиться за адресою `/var/lib/dpkg/`. У системах на основі RPM вона розміщена в `/var/lib/rpm/`. Обидві бази даних зберігають авторитетний запис про те, що встановлено, якої версії та з яким правом власності на файли — що робить їх основою аудиту системи та операцій відкату.

Менеджери пакетів взаємодіють із репозиторіями — віддаленими серверами, що містять кураторські колекції скомпільованих, підписаних пакетів. Метадані репозиторію (списки пакетів, контрольні суми, GPG-ключі) синхронізуються локально перед будь-яким встановленням, саме тому `apt update` або `yum check-update` повинні передувати командам встановлення в автоматизованих скриптах.

apt: Advanced Package Tool для систем на основі Debian

apt — це високорівневий інтерфейс командного рядка для управління пакетами в Debian, Ubuntu, Linux Mint, Pop!_OS та всіх похідних. Він працює поверх низькорівневого інструменту `dpkg`, який виконує фактичне встановлення пакетів `.deb`. Думайте про `dpkg` як про двигун, а про `apt` як про інтелектуального водія, який знає, де отримати паливо і в якому порядку його спалювати.

Інструментарій apt у деталях

Екосистема apt включає кілька бінарних файлів, що виконують різні функції:

  • `apt` — сучасний, рекомендований інтерактивний CLI (представлений в Ubuntu 14.04 / Debian 8)
  • `apt-get` — старіший, скриптований бекенд; кращий у shell-скриптах завдяки стабільному формату виводу
  • `apt-cache` — запитує локальний кеш пакетів для метаданих, описів та графів залежностей
  • `dpkg` — низькорівневий інсталятор пакетів; використовується безпосередньо при встановленні локального файлу `.deb` за допомогою `dpkg -i package.deb`
  • `apt-mark` — позначає пакети як утримувані, автоматично встановлені або встановлені вручну

Основні команди apt з технічним контекстом

Оновлення локального індексу пакетів:

“`bash

sudo apt update

“`

Це отримує оновлені метадані з усіх налаштованих репозиторіїв у `/etc/apt/sources.list` та `/etc/apt/sources.list.d/`. Це не встановлює і не оновлює нічого. Виконання цієї команди перед будь-якою операцією встановлення є обов’язковим — пропуск означає, що ви можете отримати застарілі версії пакетів або пропустити виправлення безпеки.

Оновлення встановлених пакетів:

“`bash

sudo apt upgrade

“`

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

“`bash

sudo apt full-upgrade

“`

`full-upgrade` (раніше `dist-upgrade`) встановить нові залежності та видалить конфліктуючі пакети за потреби. Використовуйте з обережністю на виробничих системах.

Встановлення пакету:

“`bash

sudo apt install package_name

“`

Для встановлення кількох пакетів в одній транзакції:

“`bash

sudo apt install nginx curl git

“`

Об’єднання встановлень в одну команду є більш ефективним, оскільки apt вирішує повний граф залежностей один раз, а не повторно.

Видалення пакету (зберегти файли конфігурації):

“`bash

sudo apt remove package_name

“`

Повне видалення пакету (видалити бінарні файли та файли конфігурації):

“`bash

sudo apt purge package_name

“`

Завжди надавайте перевагу `purge` над `remove` при виведенні сервісу з експлуатації. Залишені файли конфігурації після `remove` можуть спричинити несподівану поведінку, якщо пакет буде встановлено знову пізніше.

Видалення осиротілих залежностей:

“`bash

sudo apt autoremove

“`

Це часто ігнорується і з часом призводить до роздування залежностей. Включіть це у свій регулярний робочий процес обслуговування.

Пошук пакету:

“`bash

apt search package_name

“`

Перегляд деталей пакету перед встановленням:

“`bash

apt show package_name

“`

Це показує версію пакету, розмір після встановлення, залежності та супровідника — корисно перед підключенням незнайомого пакету.

Утримання пакету на поточній версії (критично для стабільності виробництва):

“`bash

sudo apt-mark hold package_name

“`

Це запобігає торканню пакету з боку `apt upgrade`. Необхідно, коли ви використовуєте конкретну версію ядра або закріплений реліз програми.

Реальний приклад використання apt: Налаштування веб-сервера на Ubuntu

“`bash

sudo apt update

sudo apt install -y nginx certbot python3-certbot-nginx

sudo systemctl enable nginx

sudo systemctl start nginx

“`

Прапорець `-y` пригнічує запит підтвердження, що необхідно для неінтерактивних скриптів налаштування. Завжди поєднуйте це з `apt update` в тому ж блоці скрипту, щоб гарантувати встановлення з актуальних метаданих репозиторію.

yum: Yellowdog Updater Modified для систем на основі RPM

yum — це менеджер пакетів для Red Hat Enterprise Linux (RHEL), CentOS 7 та старіших релізів Fedora. Він керує пакетами `.rpm` та працює поверх бази даних RPM. Як apt над dpkg, yum забезпечує вирішення залежностей та управління репозиторіями поверх сирої команди `rpm`.

Критична архітектурна примітка: На CentOS 8+, RHEL 8+ та всіх сучасних релізах Fedora, yum був замінений dnf (Dandified YUM). На цих системах команда `yum` зазвичай є символічним посиланням або псевдонімом на `dnf`. Якщо ви керуєте будь-якою системою під управлінням RHEL/CentOS 8 або пізнішої версії, вам слід писати команди `dnf`. Синтаксис команд здебільшого сумісний, але dnf пропонує значно кращий дозвіл залежностей, чистіший API та підтримку модульних репозиторіїв.

Основні команди yum з технічним контекстом

Перевірка доступних оновлень без їх застосування:

“`bash

sudo yum check-update

“`

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

Застосування всіх доступних оновлень:

“`bash

sudo yum update

“`

На відміну від `apt upgrade`, `yum update` також встановить нові пакети залежностей за потреби. Немає окремого еквівалента `full-upgrade` — yum обробляє це за замовчуванням.

Встановлення пакету:

“`bash

sudo yum install package_name

“`

Видалення пакету:

“`bash

sudo yum remove package_name

“`

Примітка: операція видалення yum іноді може каскадно видаляти залежні пакети. Завжди переглядайте зведення транзакції перед підтвердженням.

Пошук пакету:

“`bash

yum search package_name

“`

Перегляд інформації про пакет:

“`bash

yum info package_name

“`

Список встановлених пакетів:

“`bash

yum list installed

“`

Очищення локального кешу:

“`bash

sudo yum clean all

“`

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

Утримання пакету на поточній версії:

“`bash

sudo yum versionlock add package_name

“`

Вимагає плагін `yum-plugin-versionlock`. Еквівалент `apt-mark hold`, це необхідно для підтримки стабільних виробничих середовищ, де конкретна версія пакету не повинна торкатися автоматизованими оновленнями.

Реальний приклад використання yum: Розгортання Apache на CentOS 7

“`bash

sudo yum install -y httpd

sudo systemctl enable httpd

sudo systemctl start httpd

sudo firewall-cmd –permanent –add-service=http

sudo firewall-cmd –reload

“`

Поширена помилка — встановити Apache і забути відкрити брандмауер. На системах CentOS/RHEL `firewalld` активний за замовчуванням і мовчки блокуватиме HTTP-трафік, навіть якщо сервіс запущено.

apt проти yum: Пряме порівняння

Функціяapt (Debian/Ubuntu)yum / dnf (RHEL/CentOS/Fedora)
Формат пакету`.deb``.rpm`
Базовий інструмент`dpkg``rpm`
Основні дистрибутивиDebian, Ubuntu, Mint, Pop!_OSRHEL, CentOS, Fedora, AlmaLinux, Rocky Linux
Наступник / сучасний CLI`apt` (замінив `apt-get` для інтерактивного використання)`dnf` (замінив `yum` на RHEL 8+)
Вирішення залежностейАвтоматичне, обробляє конфліктиАвтоматичне; dnf є більш надійним, ніж yum
Налаштування репозиторію`/etc/apt/sources.list`, `/etc/apt/sources.list.d/``/etc/yum.repos.d/*.repo`
Механізм утримання пакету`apt-mark hold``yum versionlock` (потрібен плагін)
Встановлення локального пакету`dpkg -i file.deb``rpm -i file.rpm` або `yum localinstall`
Управління кешем`apt clean`, `apt autoclean``yum clean all`
Видалення осиротілих пакетів`apt autoremove``yum autoremove` (dnf обробляє це краще)
Історія транзакційОбмеженаПовна історія транзакцій з відкатом через `yum history`
Потоки модулівНе підтримується нативноПідтримується в dnf (Application Streams)
Перевірка GPG-підписуТакТак
Прапорець для скриптів`-y` (неінтерактивний)`-y` (неінтерактивний)

dnf: Сучасний наступник yum

Якщо ви керуєте будь-якою системою RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux або Fedora, dnf — ваш менеджер пакетів. Перехід від yum до dnf не є косметичним — dnf вирішує ряд давніх архітектурних проблем у yum:

  • Вирішення залежностей: dnf використовує бібліотеку `libsolv`, яка значно швидша та точніша, ніж вирішувач yum
  • Стабільність API: dnf надає стабільний Python API для скриптування та автоматизації
  • Потоки модулів: dnf підтримує Application Streams, дозволяючи кільком версіям одного програмного забезпечення (наприклад, PHP 7.4 та PHP 8.1) співіснувати в репозиторіях
  • Відкат транзакцій: `dnf history undo <id>` дозволяє відкотити конкретну транзакцію — можливість, що не має прямого еквівалента в apt

Ключові команди dnf, що відрізняються від yum:

“`bash

Install a module stream (e.g., PHP 8.1)

sudo dnf module enable php:8.1

sudo dnf install php

Roll back the last transaction

sudo dnf history undo last

Check which package provides a specific file

sudo dnf provides /usr/bin/python3

“`

Управління репозиторіями: Критично важлива операційна навичка

І apt, і yum/dnf є корисними рівно настільки, наскільки корисні репозиторії, які вони налаштовані використовувати. Неправильно налаштовані або ненадійні репозиторії є значним ризиком безпеки.

На Debian/Ubuntu, безпечне додавання стороннього репозиторію:

“`bash

Import the GPG key

curl -fsSL https://example.com/gpg.key | sudo gpg –dearmor -o /usr/share/keyrings/example-archive-keyring.gpg

Add the repository with key reference

echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

“`

На RHEL/CentOS, додавання репозиторію:

“`bash

sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo

Or manually create /etc/yum.repos.d/example.repo

“`

Принцип безпеки: Ніколи не додавайте репозиторій без незалежної перевірки його GPG-ключа. Скомпрометований репозиторій може надсилати шкідливі пакети, які будуть встановлені з правами root.

Вибір правильного менеджера пакетів для вашого серверного середовища

Менеджер пакетів, який ви використовуєте, визначається вашим дистрибутивом Linux — ви не обираєте apt або yum незалежно. Те, що ви обираєте, — це ваш дистрибутив, і це рішення має наслідки для доступності пакетів, корпоративних контрактів підтримки, частоти виправлень безпеки та сумісності інструментів.

  • Ubuntu LTS (apt): Найкращий вибір для загальних робочих навантажень VPS Хостингу, веб-серверів та середовищ розробників. Релізи з довгостроковою підтримкою отримують 5 років оновлень безпеки, що можна розширити до 10 з Ubuntu Pro.
  • RHEL / AlmaLinux / Rocky Linux (dnf): Стандарт для корпоративних виробничих середовищ, особливо при роботі на Виділених Серверах, що вимагають сертифікованих програмних стеків, фреймворків відповідності (PCI-DSS, HIPAA) або розгортань програм з підтримкою ISV.
  • Debian Stable (apt): Надзвичайно консервативні версії пакетів, що робить його ідеальним для серверів, де стабільність має пріоритет над передовим програмним забезпеченням. Зазвичай використовується для довготривалих серверів баз даних та поштових серверів.
  • CentOS Stream / Fedora (dnf): Підходить для середовищ розробки та тестування, де ви хочете відстежувати зміни upstream RHEL до їх потрапляння у стабільні релізи.

При розгортанні панелі керування, такої як cPanel, базовий менеджер пакетів має значення. cPanel офіційно підтримує AlmaLinux, Rocky Linux та CloudLinux — всі на основі dnf. Якщо ви використовуєте VPS з cPanel, ви будете працювати в середовищі dnf на сучасних розгортаннях.

Для середовищ, де вам потрібен графічний або веб-інтерфейс для управління пакетами та конфігурацією сервера без переходу до командного рядка, ознайомтеся з Панелями керування VPS, які абстрагують управління пакетами в інтерфейс користувача, при цьому використовуючи apt або dnf під капотом.

Зміцнення безпеки через управління пакетами

Менеджери пакетів є основною поверхнею атаки для атак на ланцюжок постачання. Ці практики є обов’язковими на будь-якому сервері, підключеному до Інтернету:

  • Увімкніть автоматичні оновлення безпеки — На Ubuntu: пакет `unattended-upgrades`. На RHEL/CentOS: `dnf-automatic` з `apply_updates = yes` у `/etc/dnf/automatic.conf`.
  • Перевіряйте GPG-підписи — Ніколи не вимикайте перевірку GPG (`–nogpgcheck` у yum/dnf або `–allow-unauthenticated` у apt) поза ізольованими лабораторними середовищами.
  • Регулярно перевіряйте встановлені пакети — Використовуйте `dpkg -l` або `rpm -qa` для створення повного маніфесту пакетів. Порівнюйте це з відомою базовою лінією.
  • Видаляйте непотрібні пакети — Кожен встановлений пакет є поверхнею атаки. Запускайте `apt autoremove` або `dnf autoremove` після великих розгортань.
  • Закріплюйте критичні пакети — Використовуйте `apt-mark hold` або `dnf versionlock` для запобігання ненавмисним оновленням пакетів, таких як ядро, OpenSSL або рушії баз даних на виробничих системах.

Якщо ви запускаєте поштовий сервер або хостите поштову інфраструктуру, підтримання актуальності пакетів, таких як Postfix, Dovecot та їхніх TLS-залежностей, є особливо критичним. Поєднуйте ретельне управління пакетами з правильно налаштованими SSL Сертифікатами для підтримки безпеки зашифрованого транспорту. Аналогічно, середовища веб-хостингу, що керуються через платформи Спільного Веб-Хостингу, отримують вигоду від того, що хостинг-провайдер підтримує безпеку базових пакетів, але розуміння рівня пакетів залишається цінним для налагодження та користувацького налаштування.

Практична матриця рішень та ключові висновки

Перед виконанням будь-якої команди управління пакетами на виробничій системі, пройдіть цей контрольний список:

Контрольний список перед операцією:

  • Підтвердіть, який дистрибутив та версію ви використовуєте: `cat /etc/os-release`
  • Підтвердіть правильний менеджер пакетів: `which apt` або `which dnf` або `which yum`
  • На системах apt: завжди запускайте `sudo apt update` перед `apt install` або `apt upgrade`
  • На системах yum/dnf: `sudo yum check-update` або `sudo dnf check-update` перед оновленнями
  • Переглядайте зведення транзакції перед підтвердженням будь-якої операції встановлення або видалення
  • Для виробничих серверів: спочатку тестуйте оновлення пакетів у тестовому середовищі
  • Після великих оновлень: перевіряйте статус сервісу за допомогою `systemctl status <service>`
  • Після видалення пакетів: запускайте `apt autoremove` або `dnf autoremove` для очищення осиротілих пакетів

Архітектурні рішення:

  • Використовуйте `apt full-upgrade` замість `apt upgrade` лише тоді, коли ви розумієте та приймаєте, що пакети можуть бути видалені
  • Використовуйте `dnf` замість `yum` на будь-якій системі під управлінням RHEL 8 / CentOS 8 або пізнішої версії
  • Використовуйте `apt-get` (не `apt`) у shell-скриптах та CI/CD-конвеєрах для стабільного, придатного для аналізу виводу
  • Використовуйте `yum versionlock` або `apt-mark hold` перед тим, як будь-який автоматизований конвеєр оновлення торкнеться виробничого сервера
  • Ніколи не додавайте сторонні репозиторії без імпорту та перевірки їхніх GPG-ключів

FAQ

У чому різниця між apt та apt-get?

`apt` — це сучасна, орієнтована на користувача команда, представлена для об’єднання `apt-get` та `apt-cache` в єдиний інструмент з чистішим виводом та індикатором прогресу. `apt-get` залишається доступним і є кращим у скриптах, оскільки його формат виводу гарантовано стабільний у різних версіях. Для інтерактивного використання в терміналі `apt` є поточним стандартом.

Чи можу я використовувати apt на сервері CentOS або RHEL?

Ні. apt призначений виключно для систем на основі Debian та керує пакетами `.deb`. CentOS та RHEL використовують формат пакетів RPM, яким керують yum або dnf. Формати пакетів та бази даних є архітектурно несумісними — рівня конвертації не існує.

Який еквівалент apt autoremove у yum?

`sudo yum autoremove` або `sudo dnf autoremove` видаляє пакети, які були встановлені як залежності, але більше не потрібні жодному явно встановленому пакету. Реалізація dnf є більш надійною, ніж застаріла версія yum.

Як запобігти оновленню конкретного пакету за допомогою apt або yum?

На системах на основі apt: `sudo apt-mark hold package_name`. На системах yum/dnf: встановіть плагін `yum-plugin-versionlock` та запустіть `sudo yum versionlock add package_name`, або на dnf: `sudo dnf versionlock add package_name`. Обидва механізми зберігаються після команд `upgrade` та `update` до явного звільнення.

Чи є yum актуальним у 2024 році?

Для систем CentOS 7 та RHEL 7, що ще перебувають у виробництві, так — yum залишається менеджером пакетів. Однак CentOS 7 досяг кінця терміну підтримки у червні 2024 року. Будь-яка система, що все ще працює на CentOS 7, повинна бути перенесена на AlmaLinux 8/9 або Rocky Linux 8/9, обидва з яких використовують dnf. Написання нових скриптів автоматизації, що орієнтуються виключно на yum, більше не є доцільним.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати