DEB-пакети та управління ними через APT

В 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 працюють на вищому рівні, забезпечуючи завантаження, встановлення, оновлення і вирішення залежностей. Детальне розуміння цих інструментів і відповідних команд дозволяє ефективно управляти програмним забезпеченням, вирішувати конфлікти і підтримувати стабільність системи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *