Розділ 7. Інструменти для керування пакунками Debian

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

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

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

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 (дивись параграф 6.6).
  • конфігурувати пакунок, що був попередньо встановлений: dpkg --configure foo. Окрім іншого, ця команда запускає сценарій postinst (дивись параграф 6.6). Вона також оновлює файли, перелічені у conffiles. Зауважте, що операція 'configure' приймає аргументом ім'я пакунку, а не ім'я архіву Debian.
  • видобути файл "blurf" або групу файлів "blurf*" з архіву Debian: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*
  • видалити пакунок (але не конфігураційні файли): dpkg --remove foo.
  • видалити пакунок (включно з конфігураційними файлами): dpkg --purge foo
  • перелічити стан встановлення пакунків, що містять ланцюжок (чи регулярний вираз) foo*: dpkg --list 'foo*'.

АРТ

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

Ось деякі стандартні способи використання 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 package
    

Щоб отримати детальнішу інформацію, встановіть пакунок 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 забезпечує доступ до всіх версії пакунку
  • веде журнал своїх дій у файлі /var/log/aptitude.
  • aptitude полегшує відслідковування застарілого програмного забезпечення ведучи список "Застарілі та локальні пакунки" ("Obsolete and Locally Created Packages").
  • aptitude є достатньо потужною системою для пошуку окремих пакунків та виводу короткої інформації про них. Користувачі, котрі знайомі з mutt, швидко засвоять і її, оскільки синтаксис виразів взято саме з нього.
  • aptitude відслідковує, які саме пакунки було встановлено завдяки залежностям та видаляє їх, якщо пакунки, які залежали від них, були видалені з системи.
  • aptitude може автоматично встановлювати рекомендовані пакунки.
  • у повноекранному режимі aptitude має вбудовану функціональність суперкористувача та може запускатись звичайним користувачем. Вона викличе програму su (та запитає пароль суперкористувача, звісно) якщо вам справді знадобляться привілеї системного адміністратора.

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

aptitude install foo.

Зверніть увагу, що для встановлення та/або оновлення вашої системи Debian рекомендує саме aptitude. Для додаткової інформації прочитайте сторінку підручника aptitude(8) та встановіть пакунок aptitude-doc-en.

dselect

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

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). Коли користувач покине вікно довідки, він побачить розділений надвоє екран, де він зможе обрати пакунки для встановлення (чи видалення).

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

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

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

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

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

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

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

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

    Ви також можете розширити значення міток нагорі екрану натиснувши клавішу 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 назва_файлу

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

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

zgrep foo Contents-ARCH.gz

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

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