# Інструменти для керування пакунками Debian

## Які програми пропонує Debian для керування пакунками?

Для керування пакунками Debian існують численні утиліти, від графічних та псевдографічних інтерфейсів до низькорівневих інструментів, що використовуються для встановлення пакунків. Всі доступні утиліти базуються на низькорівневих інструментах та перераховуються тут по мірі зростання їхньої складності.

Важливо зрозуміти, що інструменти вищого рівня, як `aptitude` чи `dselect` залежать від `apt`, котра, у свою чергу, залежить від `dpkg`.

Перегляньте APT HOWTO, якщо бажаєте дізнатись більше про інструменти керування пакунками Debian. Цей документ є доступним різними мовами та в різних форматах, зверніться до запису про APT HOWTO на сторінці проекту документації Debian Огляд підручників для користувачів.

### dpkg

Це основна програма керування пакунками. `dpkg` можна викликати з великою кількістю опцій. Найчастіше вживаються такі:

- Отримати список опцій: `dpkg --help`.

- Надрукувати файл control (та іншу інформацію) для заданого пакунку: `dpkg --info foo_VVV-RRR.deb`

- Встановити пакунок (включаючи розпакування та конфігурування) у файлову систему на жорсткому диску: `dpkg --install foo_VVV-RRR.deb`.

- Розпакувати (але не конфігурувати) архівний файл Debian у файлову систему на жорсткому диску: `dpkg --unpack foo_VVV-RRR.deb`. Зауважте, що ця команда не обов'язково робить пакунок готовим до вжитку; деякі файли можуть потребувати наступного налаштування для правильного запуску. Ця команда видаляє вже встановлену версію програми та запускає зв'язаний з пакунком сценарій preints (див. maintscripts).

- Конфігурувати пакунок, що був попередньо розпакований: `dpkg --configure foo`. Окрім іншого, ця команда запускає сценарій postinst (див. maintscripts). Вона також оновлює файли, перелічені у `conffiles`. Зауважте, що операція configure приймає в якості аргументу назву пакунку, а не назву архівного файлу Debian (для прикладу, правильно буде вказувати foo, а не foo_VVV-RRR.deb).

- Видобути файл "blurf" (або групу файлів "blurf*") з архівного файлу Debian: `dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*`.

- Видалити пакунок (але не його конфігураційні файли): `dpkg --remove foo`.

- Видалити пакунок (включно з конфігураційними файлами): `dpkg --purge foo`.

- Перелічити стан встановлення пакунків, що містять послідовність символів (чи регулярний вираз) foo*: `dpkg --list 'foo*'`.

### APT

APT — це вдосконалений пакунковий інструмент (Advanced Package Tool), що постачає програму `apt-get`. `apt-get` забезпечує простий шлях для отримання та встановлення пакунків з декількох джерел за допомогою командного рядка. На відміну від `dpkg`, `apt-get` працює не з .deb-файлами, а з назвами пакунків і може встановлювати їх лише з місць, котрі перелічені у файлі `/etc/apt/sources.list`. `apt-get` викликає `dpkg` відразу після завантаження архівного .deb-файлу з сконфігурованих джерел.

Зверніть увагу, що існують портування, котрі дозволяють використовувати цю утиліту з іншими системами управління пакунками, наприклад, менеджером пакунків Red Hat, відомого як `rpm`

.

Ось деякі стандартні методи використання `apt-get`:

- Щоб оновити список пакунків, відомих системі, запустіть:

      apt-get update

  (вам потрібно запускати цю команду регулярно для оновлення списку пакунків)

- Щоб оновити всі пакунки у вашій системі, наберіть:

      apt-get upgrade

- Щоб встановити пакунок `foo` разом з усіма залежностями, виконайте:

      apt-get install foo

- Щоб видалити пакунок foo з вашої системи, введіть:

      apt-get remove foo

- Щоб видалити пакунок foo разом з його конфігураційними файлами, наберіть:

      apt-get --purge remove foo

- Щоб оновити всі пакунки у вашій системі до нової версії Debian GNU/Linux, запустіть:

      apt-get dist-upgrade

Зверніть увагу, що ви повинні бути зареєстровані як root щоб мати можливість виконувати будь-які команди, котрі змінюють системні пакунки.

Набір інструментів apt включає також утиліту `apt-cache` для запитів списків пакунків. Ви можете використовувати її щоб знайти пакунки, котрі відповідають певним вимогам за допомогою простих текстових запитів чи регулярних виразів, або ж запитів щодо залежностей у системі керування пакунками. Ось деякі типові способи використання `apt-cache`:

- Знайти пакунки, чий опис містить `слово`:

      apt-cache search слово

- Роздрукувати детальну інформацію про пакунок:

      apt-cache show назва_пакунка

- Вивести список пакунків, від котрих залежить даний пакунок:

      apt-cache depends назва_пакунка

- Показати детальну інформацію про доступні версії даного пакунку та пакунків, від котрих він залежить:

      apt-cache showpkg назва_пакунка

Щоб отримати детальнішу інформацію, встановіть пакунок `apt` та прочитайте

apt-get

8,

sources.list

5, встановіть пакунок `apt-doc` та прочитайте `/usr/share/doc/apt-doc/guide.html/index.html`.

### aptitude

`aptitude` — це керівник пакунків для системи Debian GNU/Linux, що являє собою зовнішній інтерфейс до інфраструктури керування пакунками apt. `aptitude` — це програма з псевдографічним інтерфейсом, що базується на бібліотеці curses, вона може використовуватись для швидкого й зручного керування пакунками.

`aptitude` забезпечує функціональність `dselect` і `apt-get` та багато додаткових можливостей, котрих немає у жодній іншій прогамі:

- `aptitude` забезпечує доступ до всіх версії пакунку.

- `aptitude` веде журнал своїх дій у файлі `/var/log/aptitude`.

- `aptitude` полегшує відслідковування застарілого програмного забезпечення ведучи список „Застарілих та локальних пакунків“ (Obsolete and Locally Created Packages).

- `aptitude` є достатньо потужною системою для пошуку окремих пакунків та виводу короткої інформації про них. Користувачі, котрі знайомі з `mutt`, швидко засвоять і її, оскільки синтаксис виразів взято саме звідти.

- `aptitude` відслідковує, які саме пакунки було встановлено завдяки залежностям та видаляє їх, якщо пакунки, які залежали від них, були видалені з системи.

- `aptitude` може автоматично встановлювати рекомендовані (Recommended:) пакунки

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

  .

- В повноекранному режимі `aptitude` має вбудовану функціональність суперкористувача та може запускатись звичайним користувачем. Вона викличе програму `su` (та запитає пароль суперкористувача, звісно) якщо вам справді знадобляться привілеї системного адміністратора.

Ви можете працювати з `aptitude` як через візуальний інтерфейс (просто запустивши `aptitude`) так і напряму з командного рядка. Синтаксис командного рядка дуже подібний до синтаксису `apt-get`. Наприклад, щоб встановити пакунок `foo`, вам потрібно запустити `aptitude install `foo``.

Зверніть увагу, що для встановлення та/або оновлення вашої системи Debian рекомендує саме `aptitude`.

Для додаткової інформації прочитайте сторінку підручника

aptitude

8 та встановіть пакунок `aptitude-doc-en`.

### dselect

Ця програма являє собою керований у режимі меню інтерфейс до системи керування пакунками Debian. Вона є особливо зручною для першого встановлення. Деякі користувачі можуть почувати себе зручніше у `aptitude`, котра також рекомендується для масштабних оновлень. Щоб отримати додаткову інформацію про aptitude див. aptitude.

`dselect` може:

- бути провідником для користувача, котрий вирішив встановити чи видалити котрийсь із пакунків; перевірити, чи не було встановлено пакунків, що конфліктують з іншими та чи встановлено всі пакунки, котрі необхідні для роботи даного пакунка;

- попередити користувача про суперечливість чи несумісність його вибору;

- визначити порядок встановлення пакунків;

- автоматично виконати встановлення чи видалення;

- провести користувача через будь-який конфігураційний процес, необхідний для встановлення пакунку.

`dselect` розпочинає свою роботу з представлення користувачеві меню з 7 елементів, кожен з котрих є наперед визначеною дією. Користувач може обрати будь-яку з них за допомогою стрілок, пересуваючи підсвітлений рядок та натиснувши <Enter> щоб вибрати підсвітлену дію.

Що користувач побачить на наступному екрані залежить від дії, котру він обрав. Якщо він обрав будь-яку з опцій окрім `Access` чи `Select`, `dselect` просто перейде до виконання заданої дії: наприклад, якщо користувач вибрав `Remove`, dselect спробує видалити всі файли, що вибрані для видалення користувачем при попередньому відвідуванні екрану `Select`.

Елементи меню `Access` та `Select` виводять додаткові підменю. В обидвох випадках меню представлені у вигляді розділеного екрану: у верхній частині знаходиться прокручуваний список можливостей вибору, а в нижній — коротке пояснення для кожного з елементів верхьої частини.

Додаткова довідка доступна після натиснення в будь-який момент клавіші '?'.

Порядок, в котрому представлені пункти початкового меню `dselect` аналогічний порядку дій користувача коли він хоче встановити нові пакунки. Проте користувач може вибирати будь-який елемент меню стільки разів, скільки вважатиме за потрібне (в залежності від того, що він хоче зробити).

- Розпочніть з вибору методу доступу (Access Method). Тут вибирається спосіб, у котрий користувач планує отримувати пакунки Debian; наприклад, деякі користувачі мають пакунки на компакт-диску, тоді як інші планують отримувати їх з FTP. Вибір методу доступу зберігається по завершенню роботи з `dselect`, отож вам не потрібно буде вибирати його знову.

- Далі оновіть (Update) список доступних пакунків. Щоб зробити це, `dselect` зчитує файл „Packages.gz“ , котрий повинен знаходитись в теці, де зберігаються пакунки Debian (Але якщо його там не виявиться, `dselect` зможе створити його для вас).

- Виберіть (Select), які пакунки ви хочете встановити до системи. Після вибору цього пункту меню користувачу спочатку виводиться повноекранна довідка (при умові, що програма запущена без опції '--expert'). Коли користувач покине вікно довідки, він побачить розділений надвоє екран, де він зможе обрати пакунки для встановлення (чи видалення).

  Верхня частина екрану — це порівняно вузьке вікно зі списком 42551 пакунків Debian; нижня містить опис вибраного (підсвітленого) пакунку чи групи пакунків.

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

  для встановлення:

- Це досягається натисненням клавіші '+'.

для видалення:

- Пакунки можна видаляти двома способами:

  - видаляючи (remove): видаляються більшість файлів, пов'язаних з пакунком, але залишаються файли, відмічені як конфігураційні (див. conffile) та конфігураційна інформація про пакунок. Це досягається натисненням клавіші '-'.

  - очищуючи (purged): видаляються всі файли, котрі відносяться до пакунку. Це досягається натисненням клавіші '_'

  Зверніть увагу, що всі пакунки („All Packages“) видалити неможливо. Якщо ви спробуєте зробити це, у вашій системі залишаться базові пакунки.

для фіксації:

- Це досягається натисненням клавіші '=' і вказує `dselect` не оновлювати пакунок навіть якщо його новіші версії є в сховищах пакунків Debian, котрі ви використовуєте (це було визначено, коли ви вибрали метод доступу до пакунків та оновились, обравши відповідний пункт меню).

  Точно так само ви можете відмінити фіксування пакунку, натиснувши ':'. В цьому випадку `dselect` може оновити пакунок, якщо буде доступна його новіша версія. Така поведінка є стандартною.

Ви можете вибирати різний порядок сортування пакунків, натискаючи клавішу 'o' для циклічного перемикання між різними представленнями. Зазвичай пакунки сортуються за пріоритетом; всередині пріоритету пакунки сортуються за теками (секціями) архіву, у котрому вони зберігаються. В такому порядку деякі пакунки, скажімо, з секції A можуть бути представлені першими, далі йтимуть якісь пакунки з секції B, а після них — інші пакунки з секції A з нижчим пріоритетом.

Ви також можете розширити значення міток вгорі екрану натиснувши клавішу 'v' (verbose — детально). Ця дія виведе купу тексту, який швидше за все не поміститься на екрані. Щоб його побачити, натисніть праву стрілку; щоб повернутись назад — ліву.

Якщо ви вибрали пакунок для встановлення чи видалення, наприклад `foo.deb` і цей пакунок залежить (або рекомендує) інший пакунок, наприклад `blurf.deb`, тоді `dselect` виведе допоміжне вікно поверх головного. Там ви побачите список залежних пакунків і зможете приймати запропоновані дії (встановлювати чи ні) або ж відкидати їх. Для останнього натисніть Shift-D; щоб повернутись до попереднього, натисніть Shift-U. В будь-якому випадку, ви можете зберегти свій вибір та повернутись до головного вікна вибору, натиснувши Shift-Q.

- Повернувшись до головного меню, користувач може обрати пункт „Встановлення“ (Install), щоб розпакувати та сконфігурувати вибрані пакунки. Відповідно, користувач, котрий хоче видалити пакунки, повинен вибрати пункт меню „Видалити“ (Remove). І в будь-якому випадку ви можете вибрати „Вихід“ (Quit), щоб завершити роботу з `dselect`; при цьому все, що ви вибрали (для встановлення, видалення і т.д.), зберігається.

### Інші інструменти для керування пакунками

#### dpkg-deb

Ця програма маніпулює архівними (`.deb`) файлами Debian. Ось її деякі стандартні опції:

- Вивести повний список опцій: `dpkg-deb --help`.

- Отримати список файлів у архівному файлі: `dpkg-deb --contents foo_VVV-RRR.deb`

- Видобути файли з заданого архіву в теку, визначену користувачем: `dpkg-deb --extract foo_VVV-RRR.deb tmp` розпаковує всі файли з архіву `foo_VVV-RRR.deb` до теки `tmp/`. Це зручно при перевірці вмісту пакунка в локальному каталозі без необхідності встановлення його в кореневу файлову систему.

Зауважте, що всі пакунки, що були лише розпаковані за допомогою `dpkg-deb --extract` не є коректно встановленими, натомість вам потрібно використовувати `dpkg --install`.

Більше ви зможете дізнатись, переглянувши сторінку довідки

dpkg-deb

1.

#### dpkg-split

Ця програма ділить великі файли пакунків на менші (наприклад, для запису на дискети) та об'єднує набір маленьких файлів назад у один великий файл. Вона може використовуватись лише в Debian-системі (точніше, в системі, що містить пакунок `dpkg`), оскільки вона викликає програму `dpkg-deb`, щоб розділити пакунок Debian на складові частини.

Наприклад, щоб розділити великий „.deb“-файл на N частин,

- Запустіть команду `dpkg-split --split foo.deb`. Вона створить N файлів довжиною приблизно 460 КБайт в поточному каталозі.

- Скопіюйте ці файли на дискети.

- Скопіюйте вміст дискет на жорсткий диск на іншій машині.

- Об'єднайте шматки файлу командою `dpkg-split --join "foo*"`.

## Debian стверджує, що може оновити запущену програму; яким чином він це робить?

Ядро (файлова система) в Debian GNU/Linux підтримує заміну файлів, що використовуються.

Ми також постачаємо програму під назвою `start-stop-daemon`, котра використовується для запуску демонів під час завантаження системи, чи їх зупинки під час зміни рівня запуску ядра (наприклад, від багатокористувацього режиму в однокористувацький чи ж при вимкненні). Та ж сама програма використовується встановлювальними сценаріями, коли встановлюється новий пакунок, що містить демона: при зупинці запущених демонів та їх перевантаженні у разі необхідності.

## Як мені дізнатись, які пакунки встановлено в системі?

Щоб взнати стан всіх встановлених пакунків у Debian-системі, виконайте команду

    dpkg --list

Вона виведе однорядкове резюме для кожного пакунку, включаючи 2-літерний код стану встановлення (пояснюється у заголовку), назву пакунку, встановлену версію та короткий опис.

Щоб дізнатись про стан встановлення пакунків, чиї назви збігаються з набором літер або виразом, запустіть команду:

    dpkg --list 'foo*'

Для отримання детальнішого звіту про певний пакунок, наберіть команду:

    dpkg --status packagename

## Як мені дізнатись, що за пакунок встановив котрийсь файл?

Щоб взнати назву пакунку, що встановив певний файл виконайте:

- `dpkg --search filename`

  Вона шукає файл `filename` серед встановлених пакунків (на даний момент це еквівалентно пошуку серед файлів з розширенням `.list` в теці `/var/lib/dpkg/info` та виводу тих назв пакунків, котрі містять заданий файл).

  Швидшою альтернативою є використання утиліти `dlocate`.

- `zgrep foo Contents-ARCH.gz`

  Ця команда шукає файли, що містять підланцюжок `foo` в своій повній назві. Файли `Contents-ARCH.gz` (де ARCH — це назва архітектури) розташовані у основних каталогах (main, non-free, contrib) на FTP-сайті Debian (наприклад, в `/debian/dists/stretch`). Файли `Contents` містять дані лише про ті пакунки, котрі розташовані у їх підтеці. Таким чином користувачеві може знадобитись здійснювати пошук не в одному файлі `Contents`, щоб знайти пакунок, котрий містить файл `foo`.

  Цей метод має ту перевагу перед `dpkg --search`, бо пошук здійснюється навіть у пакунках, котрі не встановлені у вашій системі

- `apt-file search `foo``

  Подібно до вищенаведеного, шукаються файли, що містять ланцюжок чи регулярний вираз `foo` в повній назві. Перевага над попереднім прикладом полягає в тому, що вам не потрібно отримувати файли `Contents-ARCH.gz`, оскільки вони оновлюються автоматично для всіх джерел, перелічених у `/etc/apt/sources.list` під час запуску (як root) `apt-file update`.

## Чому не видаляється foo-data під час видалення foo? Як мені очистити систему від старих пакунків, що вже не використовуються?

Деякі пакунки розділені на власне програму (foo) та дані (foo-data). Це справедливо для багатьох ігор, мультимедійних додатків та словників і введено в Debian з тих пір, коли користувачі захотіли мати доступ до даних не встановлюючи програму, або ж до програми, котра б запускалась без даних, роблячи їх необов'язковими.

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

В цьому випадку foo-data не залежить від foo, отож, якщо ви видаляєте пакунок foo, foo-data не буде автоматично видалено більшістю інструментів для керування пакунками. Це саме відбувається при використанні пакунків з бібліотеками. Це необхідно ще й для того, щоб уникнути циклічних залежностей. Якщо ви використовуєте `aptitude` (див. aptitude) у якості керівника пакунками, він, окрім іншого, може відслідковувати автоматично встановлені пакунки та видаляти їх, якщо в системі не залишилось пакунків, що їх потребують.