В Debian та дистрибутивах на його базі (як-от Ubuntu, Linux Mint та ін.), багата історія управління програмним забезпеченням. Про одну з систем — snap можна прочитати тут. Сьогодні ж мова про DEB. Розглянемо як працюють інструменти dpkg, apt, apt-get і aptitude, а також дізнаємось трохи про залежності пакетів.
Що таке DEB
DEB – це формат пакетів, що використовується для розповсюдження програм у системах, побудованих на базі Debian. Він являє собою архів, що містить:
- Виконувані файли (бінарні файли програм),
- Конфігураційні файли,
- Скрипти (наприклад, preinst, postinst, prerm, postrm – які виконуються на різних стадіях встановлення або видалення),
- Метадані – це інформація про пакет (назва, версія, опис, розмір, розділи) та список залежностей – інших пакетів, які необхідні для коректної роботи даної програми.
DPKG
Основний «низькорівневий» інструмент для роботи з DEB-пакетами – це dpkg. Він відповідає за розпакування пакетів, встановлення файлів у потрібні директорії, облік встановлених пакетів у системній базі даних та їх видалення.
dpkg не займається вирішенням залежностей. Коли виконується команда:
sudo dpkg -i пакет.deb
То dpkg просто виконує встановлення пакету, не перевіривши, чи присутні у системі всі необхідні бібліотеки та інші програми потрібні для його роботи. Іноді це призводить до ситуацій, коли після встановлення програма не працює, бо не знайдено потрібних компонентів.
Синтаксис dpkg
Загальний синтаксис dpkg при роботі з DEB-пакетами:
dpkg [опції] [пакет.deb]
Або, якщо працюємо з вже встановленими пакетами:
dpkg [опції] [пакет]
dpkg не працює з репозиторіями — для встановлення пакету потрібно завантажити .deb-файл самостійно.
Основні опції dpkg
Встановлення пакету:
sudo dpkg -i файл_пакету.deb # -i, --install – встановлює .deb-пакет. # Приклад: sudo dpkg -i google-chrome-stable_current_amd64.deb
Видалення пакету:
sudo dpkg -r <пакет> # -r, --remove – видаляє пакет, але залишає його конфігураційні файли. # Приклад: sudo dpkg -r vlc
Якщо пакет використовується іншими програмами, dpkg попередить про це.
Повне видалення пакету (разом із конфігураціями)
sudo dpkg -P <пакет> # -P, --purge – повністю видаляє пакет, включно з його конфігураційними файлами. # Приклад: sudo dpkg -P vlc
Різниця між -r та -P:
-r видаляє тільки виконувані файли, але залишає конфігурації. -P видаляє все, що пов'язано з пакетом.
Перевірка, чи встановлений пакет:
dpkg -l | grep <пакет> # -l, --list – виводить список встановлених пакетів. # Приклад: dpkg -l | grep firefox
Щоб переглянути всі встановлені пакети:
dpkg -l
Перевірка вмісту встановленого пакету:
dpkg -L <пакет> # -L, --listfiles – показує список файлів, які встановив пакет. # Приклад: dpkg -L vlc
Перевірка вмісту .deb-файлу перед встановленням:
dpkg -c пакет.deb # -c, --contents – виводить список файлів, які містяться в .deb-файлі. # Приклад: dpkg -c google-chrome-stable_current_amd64.deb
Дізнатися, до якого пакету належить файл:
dpkg -S /шлях/до/файлу # -S, --search – визначає, який встановлений пакет містить цей файл. # Приклад: dpkg -S /usr/bin/vlc
Якщо файл належить пакету, dpkg покаже його назву.
Переконфігурація некоректно налаштованих пакетів:
sudo dpkg --configure -a
Ця команда завершить налаштування пакетів, що були встановлені, але не завершили процес конфігурації (наприклад, якщо встановлення переривалося).
Якщо потрібно переконфігурувати конкретний пакет:
sudo dpkg-reconfigure <пакет> # Приклад: sudo dpkg-reconfigure tzdata
Переналаштує часовий пояс у системі.
Залежності пакетів (Dependencies)
DEB-пакет містить файли програми, але для її коректної роботи часто потрібні додаткові компоненти. Ці додаткові пакети, які є необхідними для правильного функціонування програми, називаються залежностями-пакетів.
Існує кілька типів залежностей:
- Обов’язкові (Depends) – це основні залежності, без яких програма не може працювати. Вони мають бути встановлені для належного функціонування програми. Зазначено також можливість вказувати не лише сам пакет, але й необхідні версії чи діапазони версій.
- Рекомендовані (Recommends) – це пакети, які не критичні для роботи програми, але зазвичай бажані для покращення її функціональності. Наприклад, графічні бібліотеки, що покращують взаємодію з користувачем, та не є обов’язковими для роботи в командному рядку.
- Запропоновані (Suggests) – це пакети, які можуть бути корисними для деяких функцій програми, але не є необхідними для її основної роботи. Вони зазвичай додають додаткові можливості, як-от інструменти для розширених налаштувань або інтеграцію з іншими програмами.
Система залежностей допомагає підтримувати єдність та узгодженість програмного забезпечення, однак можуть виникати конфлікти, коли різні програми потребують різних версій однієї й тієї ж бібліотеки. Це може призвести до непередбачуваної поведінки системи. Хоча розробники намагаються уникати таких ситуацій, вони можливі, зокрема при встановленні програм з різних джерел.
Оскільки dpkg не має вбудованої підтримки для керування залежностями, для цього потрібні додаткові інструменти. У системах на основі Debian це здійснюється через APT.
Advanced Packaging Tool
APT (Advanced Package Tool) — це потужна система керування пакетами, яка широко використовується в операційних системах на базі Debian (та їх похідних, таких як Ubuntu). Вона спрощує процес встановлення, оновлення та видалення програмного забезпечення, автоматично піклуючись про залежності між пакетами та забезпечуючи безперебійну інтеграцію програм у систему.
APT відповідає за:
- Керування залежностями. При встановленні або оновленні пакету визначає які інші пакети потрібні для його коректної роботи, і встановлює їх.
- Завантаження пакетів з віддалених репозиторіїв. Взаємодіє з серверами репозиторіїв, завантажує актуальні списки пакетів і шукає необхідні оновлення.
- Інсталяцію, оновлення та видалення програмного забезпечення. Завдяки APT, користувач може легко керувати програмами через командний рядок або графічні інтерфейси, які використовують цей інструмент.
- Перевірку цілісності даних. APT забезпечує контроль за автентичністю та цілісністю завантажуваних пакетів, що підвищує безпеку системи.
APT складається з декількох ключових компонентів.
apt-get
apt-get – це одна з основних утиліт для керування пакетами. Вона надає набір команд для встановлення, оновлення, видалення та керування програмним забезпеченням за допомогою системи APT (Advanced Package Tool).
Основні команди apt-get
Оновлення списку пакетів:
sudo apt-get update
Завантажує найновіші списки доступних пакетів з репозиторіїв, що дозволяє системі знати про нові версії програмного забезпечення, доступні для інсталяції або оновлення.
Оновлення всіх встановлених пакетів:
sudo apt-get upgrade
Оновлює всі встановлені пакети до останніх доступних версій, якщо вони є в репозиторії, не змінюючи їхніх залежностей або не встановлюючи нових пакетів.
Оновлення системи з можливістю заміни пакетів:
sudo apt-get dist-upgrade
Оновлює систему, включаючи заміну старих версій пакетів на нові, що можуть мати нові залежності або конфлікти. Це дозволяє системі оновлювати не лише пакети, але й ядро, бібліотеки та інші важливі компоненти.
Встановлення пакету:
sudo apt-get install <пакет>
Встановлює новий пакет разом з усіма його залежностями.
Наприклад:
sudo apt-get install vim
Ця команда встановить текстовий редактор vim.
Видалення пакету:
sudo apt-get remove <пакет>
Видаляє вказаний пакет із системи, але залишає його конфігураційні файли. Якщо потрібно повністю прибрати пакет і його конфігураційні файли, використовують:
sudo apt-get purge <пакет>
Очищення непотрібних залежностей:
sudo apt-get autoremove
Видаляє пакети, що були автоматично встановлені для інших програм і більше не використовуються. Це допомагає звільнити місце на диску.
Очищення кешу пакетів:
sudo apt-get clean
Очищає локальний кеш пакетів, видаляючи всі завантажені файли .deb, що використовувалися під час інсталяції пакетів.
Перевірка стану пакетів:
sudo apt-get check
Перевіряє наявність пошкоджених або недорозпакованих пакетів у системі.
Параметри та опції apt-get
-s / --simulate #Симулює виконання операції без реального її виконання (показує, що було б зроблено). sudo apt-get -s upgrade -d / —download-only #Завантажує пакети без їх інсталяції. sudo apt-get -d install <пакет> -y / --assume-yes #Автоматично підтверджує всі запити, що зазвичай вимагають підтвердження користувача (наприклад, на підтвердження видалення або оновлення пакетів). sudo apt-get -y upgrade -f / --fix-broken #Спробує виправити пошкоджені залежності, якщо вони є. sudo apt-get -f install -q / --quiet #Запускає команду в тихому режимі, зменшуючи кількість виведених повідомлень. sudo apt-get -q upgrade -v / --verbose #Показує більш детальну інформацію про операцію, що виконується. sudo apt-get -v install <пакет> --no-upgrade #Якщо пакет уже встановлений, не оновлює його. sudo apt-get install <пакет> --no-upgrade --reinstall #Повторно інсталює вже встановлений пакет. sudo apt-get install --reinstall <пакет> --only-upgrade #Оновлює тільки вже встановлені пакети, а не інсталює нові. sudo apt-get install --only-upgrade <пакет>
apt-cache
apt-cache — це утиліта для роботи з кешем пакетів. Дозволяє шукати, переглядати та отримувати детальну інформацію про пакети, доступні в репозиторіях, а також взаємодіяти з кешем пакетів, що зберігається на комп’ютері.
Основні команди apt-cache
search – шукає пакети за назвою або описом:
apt-cache search <пошуковий_запит> # Наприклад, щоб знайти всі пакети, пов'язані з vim apt-cache search vim
show – показує детальну інформацію про конкретний пакет:
apt-cache show <пакет> # Наприклад, щоб отримати інформацію про пакет vim apt-cache show vim
Це покаже опис пакету, версію, залежності, розмір, архітектуру, репозиторій та іншу корисну інформацію.
showpkg – показує більш детальну інформацію про пакет, зокрема список доступних версій, залежності, конфлікти та інші пов’язані пакети:
apt-cache showpkg <пакет> # Наприклад: apt-cache showpkg vim
depends – показує список залежностей пакету:
apt-cache depends <пакет> # Наприклад: apt-cache depends vim
rdepends – показує список пакетів, які залежать від вказаного пакету:
apt-cache rdepends <пакет> # Наприклад: apt-cache rdepends vim
pkgnames – показує список всіх доступних пакетів в репозиторії:
# Приклад: apt-cache pkgnames
stats – показує статистику кешу APT, зокрема кількість доступних пакетів, репозиторіїв та інших метаданих:
# Приклад: apt-cache stats
policy – показує інформацію про політику версій для конкретного пакету, тобто, з яких джерел (репозиторіїв) та які версії доступні для встановлення:
apt-cache policy <пакет> # Наприклад: apt-cache policy vim
Параметри та опції apt-cache
-h / --help #Показує допомогу по команді та доступні параметри. apt-cache --help -q / --quiet #Використовується для тихого режиму. При цьому виведення обмежується мінімальними повідомленнями. apt-cache -q search vim -n / --no-all-versions #Показує тільки першу знайдену версію пакета при використанні команд на зразок show чи search. apt-cache show -n vim
apt
apt — це командний інтерфейс для роботи з пакетами. Він об’єднує функціональність кількох окремих утиліт, таких як apt-get і apt-cache, у зручний інтерфейс. Утиліта apt була створена для полегшення роботи з пакетами та надання більш простого та зручного інтерфейсу для користувачів.
Основні команди apt
update – оновлює список доступних пакетів з репозиторіїв:
# Приклад: sudo apt update
upgrade – оновлює всі встановлені пакети до останніх доступних версій:
# Приклад: sudo apt upgrade
dist-upgrade – оновлює систему, включаючи встановлення нових або видалення старих пакетів для оновлення всіх залежностей:
# Приклад: sudo apt dist-upgrade
install – встановлює новий пакет або кілька пакетів разом з їх залежностями:
sudo apt install <пакет> # Наприклад: sudo apt install vim
remove – видаляє вказаний пакет, але залишає його конфігураційні файли:
sudo apt remove <пакет> # Приклад: sudo apt remove vim
purge – видаляє вказаний пакет разом з усіма його конфігураційними файлами:
sudo apt purge <пакет> # Приклад: sudo apt purge vim
autoremove – видаляє непотрібні залежності, що більше не використовуються після видалення пакетів:
# Приклад: sudo apt autoremove
clean – очищає кеш пакетів, видаляючи завантажені .deb файли:
# Приклад: sudo apt clean
search – шукає пакети за ключовими словами в назві або описі:
apt search <пошуковий_запит> # Наприклад: apt search vim
show – показує детальну інформацію про пакет:
apt show <пакет> # Наприклад: apt show vim
list – переглядає список встановлених або доступних пакетів в репозиторії:
# Приклад: apt list --installed
policy – показує політику пакета, тобто звідки він був завантажений і які доступні версії:
apt policy <пакет> # Наприклад: apt policy vim
edit-sources – відкриває редактор для редагування файлу джерел репозиторіїв /etc/apt/sources.list:
# Приклад: sudo apt edit-sources
Параметри та опції apt
-y / --assume-yes #Автоматично відповідає "так" на всі запити, що зазвичай потребують підтвердження (наприклад, на видалення або оновлення пакетів). # Приклад: sudo apt upgrade -y -q / --quiet #Запускає команду в тихому режимі, зменшуючи кількість виведених повідомлень. # Приклад: sudo apt install vim -q -v / --verbose #Показує більш детальну інформацію про виконувану операцію. # Приклад: sudo apt install vim -v -d / --download-only #Завантажує пакети, але не інсталює їх. # Приклад: sudo apt install vim -d -s / --simulate #Симулює виконання операції без фактичного її виконання (наприклад, для перевірки, які пакети будуть оновлені). # Приклад: sudo apt upgrade -s -h / --help #Показує довідку з усіма доступними параметрами. # Приклад: apt --help
apt-config
apt-config – це інструмент у складі APT, який використовується для отримання конфігураційних параметрів системи керування пакетами. Він дозволяє переглядати значення змінних, які зберігаються у файлах конфігурації APT, а також виконувати налаштування безпосередньо з командного рядка.
Основні функції apt-config
- Перегляд поточної конфігурації APT;
- Отримання значень конкретних параметрів;
- Використання змінних конфігурації у скриптах;
- Динамічне налаштування параметрів APT.
Основні команди apt-config
Перегляд усіх конфігураційних параметрів:
apt-config dump
Виводить усі поточні налаштування APT у форматі ключ = значення. Використовується для налагодження та перевірки конфігурації.
Отримання значення конкретного параметру:
apt-config get <параметр>
Дозволяє отримати значення певного параметру з конфігурації. Наприклад, щоб дізнатися, де знаходяться файли списків пакетів:
apt-config get Dir::Etc::sourcelist
Виведе /etc/apt/sources.list.
Отримання значення змінної з файлу конфігурації:
apt-config shell <змінна> <параметр>
Використовується для роботи зі змінними у скриптах. Наприклад:
apt-config shell myvar Dir::Cache::Archives echo $myvar
Виведе шлях до кешу пакетів, за замовчуванням /var/cache/apt/archives/.
Файли конфігурації, які використовує apt-config
apt-config отримує параметри з наступних файлів:
- Головний конфігураційний файл APT: /etc/apt/apt.conf;
- Додаткові файли налаштувань: /etc/apt/apt.conf.d/*;
- Файл списку репозиторіїв: /etc/apt/sources.list.
Значення параметрів, отримані через apt-config, відповідають цим файлам.
signed-by
Параметр signed-by у конфігурації APT визначає ключ підпису (GPG), який використовується для перевірки достовірності пакетів з певного репозиторію. Це особливо корисно для додавання сторонніх репозиторіїв без зміни глобальних налаштувань.
Де використовується signed-by
- У файлі /etc/apt/sources.list;
- У файлах /etc/apt/sources.list.d/;
- У конфігураційних файлах APT (/etc/apt/apt.conf.d/);
- При додаванні репозиторіїв через add-apt-repository або echo.
Використання signed-by в sources.list
Зазвичай sources.list містить джерела пакетів, але без конкретного ключа підпису, наприклад:
deb [arch=amd64] http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu jammy main
За замовчуванням APT шукає ключі у файлі /etc/apt/trusted.gpg або в каталозі /etc/apt/trusted.gpg.d/.
Щоб явно вказати ключ для певного репозиторію, використовується signed-by:
deb [arch=amd64 signed-by=/usr/share/keyrings/graphics-drivers.gpg] http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu jammy main
Що тут відбувається:
- [arch=amd64] – задає архітектуру;
- [signed-by=/usr/share/keyrings/graphics-drivers.gpg] – використовується конкретний ключ підпису (GPG);
- http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu jammy main – URL репозиторію.
apt-mark
apt-mark – це утиліта, яка дозволяє змінювати статуси пакетів, визначаючи, як вони мають оновлюватися або видалятися.
Основні статуси пакетів у APT
- manual – пакет встановлено вручну, не видаляється при autoremove;
- auto – пакет встановлено як залежність, видаляється при autoremove, якщо не використовується;
- hold – пакет заблокований від оновлення;
- unhold – відновлення можливості оновлення пакета;
- showmanual – показує всі пакети, встановлені вручну;
- showauto – показує всі пакети, встановлені як залежності.
Використання apt-mark
Позначення пакета як встановленого вручну (manual) щоб APT не видалив пакет при виконанні sudo apt autoremove:
sudo apt-mark manual <пакет> # Приклад: sudo apt-mark manual curl
Тепер curl не буде автоматично видалений.
Позначення пакета як автоматично встановленого (auto), щоб APT вважав його залежністю:
sudo apt-mark auto <пакет> # Приклад: sudo apt-mark auto curl
Якщо curl не використовується іншими пакетами, його можна буде видалити через sudo apt autoremove.
Блокування оновлення пакету (hold):
sudo apt-mark hold <пакет> # Приклад: sudo apt-mark hold firefox
Тепер firefox не оновиться при sudo apt upgrade.
Перевірка заблокованих пакетів:
apt-mark showhold
Розблокування оновлення пакету (unhold):
sudo apt-mark unhold <пакет> # Приклад: sudo apt-mark unhold firefox
Тепер firefox оновиться при sudo apt upgrade.
Перегляд встановлених вручну пакетів (showmanual):
apt-mark showmanual
Виведе список усіх пакетів, які були встановлені вручну.
Перегляд автоматично встановлених пакетів (showauto):
apt-mark showauto
Виведе всі пакети, які були встановлені як залежності.
Конфігураційні файли APT
APT використовує набір конфігураційних файлів для керування джерелами пакетів, параметрами кешу, правилами оновлення та іншими налаштуваннями.
Основні конфігураційні файли APT
- /etc/apt/sources.list – основний файл списку репозиторіїв, звідки завантажуються пакети;
- /etc/apt/sources.list.d/ – додаткові файли з репозиторіями (можна створювати власні);
- /etc/apt/apt.conf – основний файл конфігурації APT;
- /etc/apt/apt.conf.d/ – директорія з окремими конфігураційними файлами для гнучких налаштувань;
- /etc/apt/preferences – налаштування пріоритетів для різних джерел пакетів;
- /etc/apt/preferences.d/ – директорія для кастомних правил пріоритетів пакетів;
- /etc/apt/trusted.gpg – файл з довіреними ключами для перевірки підписів репозиторіїв;
- /etc/apt/trusted.gpg.d/ – директорія з додатковими ключами для перевірки підписів;
- /var/lib/apt/lists/ – збережені списки пакетів, отримані з репозиторіїв;
- /var/cache/apt/ – кеш завантажених пакетів.
Різниця між apt та apt-get
Обидві команди використовуються для керування пакетами в системах на базі Debian/Ubuntu, але apt є новішою і зручнішою альтернативою apt-get.
Ключові відмінності: apt та apt-get
- Дати релізу. apt-get було випущено в 1998 році разом із дистрибутивом Debian 2.0 (Hamm). apt з’явився лише в 2014 році разом із Debian 8 (Jessie). Після цього apt замінив apt-get як основний інструмент для керування пакетами в усіх дистрибутивах Linux на базі Debian;
- Можливості пошуку. За допомогою команди apt search <пакет> можна шукати пакети за їх назвою. Ця команда надає детальний опис усіх пакетів, імена яких містять вказану рядкову строку. У apt-get такої можливості не було, і для подібних завдань використовувалась команда apt-cache;
- Обробка залежностей. І apt, і apt-get обробляють залежності між пакетами, але apt робить це значно краще. apt розпізнає складні ланцюги залежностей, завжди встановлює пакети в правильному порядку й надає рекомендації щодо встановлення додаткових пакетів;
- Версії пакетів у файловій системі. За замовчуванням команда apt upgrade видаляє старі версії встановлених або оновлених пакетів, які більше не потрібні, що допомагає звільнити місце на диску. У свою чергу, команда apt-get upgrade цього не робить, і старі версії пакетів залишаються на диску;
- Виведення інформації в термінал. Обидві команди виводять у термінал інформацію про стан виконуваних операцій, яка дозволяє користувачеві зрозуміти реакцію системи на введену команду. Вивід з apt є більш деталізованим і включає індикатор виконання кожного завдання, що робить процес взаємодії більш інтуїтивно зрозумілим для користувача.
Aptitude
Ще одним інструментом для керування DEB-пакетами в aptitude. Він надає текстовий інтерфейс (TUI) та розширені можливості порівняно з apt або apt-get.
Головні особливості aptitude:
- Покращений механізм вирішення залежностей;
- Інтерактивний текстовий інтерфейс;
- Детальніший аналіз змін при встановленні або видаленні пакетів;
- Підтримка командного рядка (CLI) аналогічно apt/apt-get.
Встановлення aptitude
На сьогодні aptitude не такий популярний, як apt, і в більшості дистрибутивів не встановлений за замовчуванням, тому, для використання, його потрібно встановити:
sudo apt update sudo apt install aptitude -y
Після цього можна використовувати як командний режим (aptitude install), так і інтерфейс TUI (aptitude).
Висновок
Система управління пакетами в Debian-подібних дистрибутивах побудована на використанні DEB-пакетів із чітко описаними метаданими і залежностями, що дозволяє автоматизувати процес встановлення програм. dpkg відповідає за базову обробку DEB-файлів, тоді як apt-get, apt та aptitude працюють на вищому рівні, забезпечуючи завантаження, встановлення, оновлення і вирішення залежностей. Детальне розуміння цих інструментів і відповідних команд дозволяє ефективно управляти програмним забезпеченням, вирішувати конфлікти і підтримувати стабільність системи.