Differences between revisions 1 and 4 (spanning 3 versions)
Revision 1 as of 2011-02-14 20:04:49
Size: 1988
Editor: PaulRufous
Comment:
Revision 4 as of 2011-02-14 20:27:45
Size: 51463
Editor: PaulRufous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:


== Базові налаштування ==

=== Файл /etc/apt/sources.list ===

Щоб забезпечити виконання однієї зі своїх задач, APT використовує список джерел, з котрих пакунки можуть бути завантажені. Це — файл /etc/apt/sources.list.

Зазвичай, записи в цьому файлі мають такий вигляд:
{{{
    deb http://host/debian збірка розділ1 розділ2 розділ3
    deb-src http://host/debian збірка розділ1 розділ2 розділ3
}}}
Звісно, наведені вище рядки є лише прикладом і не повинні використовуватись насправді. Перше слово кожного рядка, deb чи deb-src, вказує тип архіву: це або двійкові пакунки (deb), наперед-скомпільовані, які ми, як правило, і використовуємо, або джерельні пакунки (deb-src), котрі містять оригінали джерельних кодів програм і, додатково, керуючий файл Debian (.dsc) та diff.gz-архів з необхідними для „дебіанізації“ програми змінами.

Зазвичай, в стандартному файлі sources.list можна знайти такі рядки:
{{{
    # See sources.list(5) for more information, especially
    # Remember that you can only use http, ftp or file URIs
    # CDROMs are managed through the apt-cdrom tool.
    deb http://http.us.debian.org/debian stable main contrib non-free
    deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
    deb http://security.debian.org stable/updates main contrib non-free
    
    # Uncomment if you want the apt-get source function to work
    #deb-src http://http.us.debian.org/debian stable main contrib non-free
    #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
}}}
Ці рядки потрібні для базового встановлення Debian. Перший рядок deb вказує на офіційний архів пакунків, другий — на не-США архів, третій — на архів Debian, що призначений для оновлень безпеки.

Два останні рядки закоментовано (починаються з символу '#'), тому apt-get їх проігнорує. Ці deb-src рядки вказують на джерельні пакунки Debian. Якщо ви часто завантажуєте джерельні коди програм, з метою тестування або для рекомпіляції, просто розкоментуйте їх.

В файлі /etc/apt/sources.list можуть міститись декілька типів рядків. Наскільки мені відомо, APT вміє працювати з такими типами архівів як http, ftp, file (локальні файли; наприклад, тека з примонтованою файловою системою ISO9660) та ssh.

Не забудьте виконати apt-get update після внесення змін до файлу /etc/apt/sources.list. Це робиться для того, щоб змусити APT оновити списки пакунків з вказаних вами джерел.

=== Як використовувати APT локально ===

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

Для цього вам потрібно створити теку та помістити в неї .deb-файли, які ви хочете проіндексувати. Наприклад:

{{{ # mkdir /root/debs }}}
Для вашого сховища ви можете напряму змінити набір значень, вказаних в файлі control кожного з пакунків, використовуючи файл override. Всередині цього файлу ви, якщо хочете, можете визначити деякі опції, котрі перекриють відповідні значення з файлів пакунків. Це виглядає приблизно так:

    package priority section

package — це назва пакунка, priority може набувати таких значень як low, medium чи high, а section — це назва розділу, в якому знаходиться відповідний пакунок. До назви файлу не ставиться жодних вимог, ви будете вказувати її пізніше в якості аргументу до dpkg-scanpackages. Якщо ви не хочете створювати файл override, тоді при запуску dpkg-scanpackages просто використовуйте /dev/null.

Далі, перебуваючи в теці /root, виконайте:

{{{ # dpkg-scanpackages debs file | gzip > debs/Packages.gz }}}
У наведеному рядку слово file — це файл override. Команда генерує файл Packages.gz, котрий містить різноманітну інформацію про пакунки, яка буде використана APT. Нарешті, щоб почати використання пакунків, додайте:

{{{ deb file:/root debs/ }}}
Після всього цього, просто використовуйте APT, як звичайно. Ви можете створювати також і джерельні сховища. Для цього повторіть ті ж самі кроки, але пам'ятайте, що вам потрібно у відповідній теці мати файли .orig.tar.gz, .dsc та .diff.gz і замість Packages.gz генерувати файл Sources.gz. Для цього також використовується інша програма. Це — dpkg-scansources. Командний рядок повинен виглядати приблизно так

{{{ # dpkg-scansources debs | gzip > debs/Sources.gz }}}
Зверніть увагу, що для dpkg-scansources не потрібен файл override. Рядок для sources.list виглядає так:

{{{ deb-src file:/root debs/ }}}

=== Визначення найкращого джерела для використання в файлі sources.list: netselect, netselect-apt ===

Дуже часто, переважно від нових користувачів, можна почути питання: „яке дзеркало Debian включати до sources.list?“. Існує багато методів визначення такого дзеркала. Експерти, ймовірно, мають скрипт, що вимірює та порівнює час відгуку від декількох джерел. Однак є програма, що зробить це і для нас: netselect.

Як звичайно, щоб встановити netselect:

{{{ # apt-get install netselect }}}
При запуску її без параметрів відображається довідка. З списком дзеркал, розділених пробілами, вона поверне оцінку і один з вузлів. При визначенні цієї оцінки береться до уваги приблизний час відгуку, кількість „стрибків“ (вузлів, через які мережевий запит пройде перед тим, як потрапити до заданої цілі) та обернено пропорційна швидкість завантаження; отже, чим менше оцінка, тим краще. Програма повертає назву дзеркала, що має найнижчу оцінку (повний список оцінок можна побачити, додавши опцію -vv). Ознайомтесь з таким прикладом:

{{{ # netselect ftp.debian.org http.us.debian.org download.unesp.br ftp.debian.org.br
      365 ftp.debian.org.br }}}
    
Це означає, що з дзеркал, вказаних в якості параметрів до netselect, найкращим виявилось ftp.debian.org.br з оцінкою 365. (Увага!! Оскільки команда виконувалась на моєму комп'ютері, а топографія мережі дуже сильно відрізняється в залежності від точки входу, ця цифра не обов'язково буде правильним значенням швидкості для інших машин).

Тепер просто помістіть найшвидше дзеркало, знайдене за допомогою netselect, у файл /etc/apt/sources.list (див. Файл /etc/apt/sources.list, розділ 2.1) та виконуйте наведені у відповідному розділі вказівки (див. Керування пакунками, Глава 3).

Зверніть увагу: список дзеркал завжди можна знайти в файлі http://www.debian.org/mirror/mirrors_full.

Починаючи з версії 0.3.ds1, джерельний пакунок netselect створює двійковий пакунок netselect-apt, котрий виконує всі наведені вище дії автоматично. Просто введіть гілку збірки в якості параметру (за замовчанням stable) і програма згенерує файл sources.list з найкращими загальними та не-США дзеркалами, після чого збереже його в поточній теці. Наступний приклад генерує sources.list для стабільної збірки:

{{{
    # ls sources.list
    ls: sources.list: File or directory not found
    # netselect-apt stable
    (...)
    # ls -l sources.list
    sources.list
}}}
Нагадуємо: файл sources.list генерується в поточній теці і його потрібно перемістити до теки /etc/apt.

Далі виконуйте вказівки наведені у відповідному розділі (див. Керування пакунками, Глава 3).

=== Додавання CD-ROM'у до файлу sources.list ===

У випадку, коли ви використовуєте переважно CD-ROM для встановлення пакунків чи оновлення вашої системи за допомогою APT, ви можете додати його до вашого sources.list. Для цього можна скористайтися програмою apt-cdrom приблизно так:

{{{ # apt-cdrom add }}}
попередньо помістивши компакт-диск Debian до приводу. Ця команда підмонтує КД і, якщо це справжній компакт-диск Debian, оновить інформацію про пакунки, переглянувши його вміст. Якщо ваш КД дещо незвичної конфігурації, ви також можете використати такі опції:

    -h - Довідка програми
    -d directory - Точка монтування CD-ROM'у
    -r - Змінити назву розпізнаного CD-ROM'у
    -m - Не монтувати
    -f - Швидкий режим, не перевіряти файли пакунків
    -a - Режим ретельного пошуку
Наприклад:

{{{ # apt-cdrom -d /home/kov/mycdrom add }}}
Ви також можете ідентифікувати CD-ROM, не додаючи його до вашого списку:

{{{ # apt-cdrom ident }}}
Зауважте, що ця програма працює лише в тому випадку, коли ваш КД зконфігуровано правильно і відповідний запис міститься в системному файлі /etc/fstab.



== Керування пакунками ==
=== Оновлення списку наявних пакунків ===

Система керування пакунками використовує свою власну базу даних для відслідковування вже встановлених, не встановлених та доступних для встановлювання пакунків. Програма apt-get використовує цю базу даних як джерело інформації про пакунки, вказані користувачем в запиті на встановлення, та з'ясування, які додаткові пакунки є необхідними, щоб вибраний пакунок працював належним чином.

Для оновлення цієї бази ви можете скористатись командою apt-get update. Ця команда переглядає списки пакунків в архівах, вказаних в /etc/apt/sources.list; див. Файл /etc/apt/sources.list, розділ 2.1, щоб дізнатись більше про цей файл.

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

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

Нарешті, те, чого всі так довго чекали! Коли ваш sources.list готовий і список доступних пакунків оновлено, вам залишається лише запустити apt-get, щоб встановити бажаний пакунок. Наприклад, ви можете виконати:

{{{ # apt-get install xchat }}}
APT спробує знайти в базі даних найсвіжішу версію цього пакунку та завантажити його з відповідного архіву, визначеного в sources.list. У випадку, коли цей пакунок залежить від іншого — як наведено нижче — APT перевірить залежності та встановить всі потрібні пакунки. Наприклад:
{{{
    # apt-get install nautilus
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 17.2MB will be used.
    Do you want to continue? [Y/n]
}}}
Пакунок nautilus залежить від вказаних бібліотек спільного користування, тому APT також завантажить їх з архіву. Якщо ви вкажете їх назви в командному рядку при запуску apt-get, APT не буде запитувати, чи хочете ви продовжувати, а автоматично прийме рішення, що ви бажаєте встановити всі ті пакунки.

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

Наступні параметри apt-get можуть стати в нагоді:

    -h Текст довідки.
    -d Тільки завантажити — НЕ встановлювати і НЕ розпаковувати пакунки
    -f Продовжувати, навіть якщо перевірка цілісності завершилась невдачею
    -s Не виконувати реальних дій, імітувати їх виконання
    -y Вважати Yes відповіддю на всі запитання, не виводити їх
    -u Також показувати список оновлених пакунків
В одному рядку можна вказувати декілька пакунків для встановлення. Завантажені з мережі файли поміщаються в теку /var/cache/apt/archives для подальшого встановлення.

Також, в тому ж командному рядку ви можете вказати пакунки, які потрібно видалити. Просто помістіть знак '-' одразу ж після назви обраного для видалення пакунка, наприклад:
{{{
    # apt-get install nautilus gnome-panel-
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0
    The following packages will be REMOVED:
      gnome-applets gnome-panel gnome-panel-data gnome-session
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]
}}}
Перегляньте Видалення пакунків, розділ 3.3, щоб детальніше ознайомитись з видаленням пакунків.

Якщо ви якимсь чином пошкодили встановлений пакунок чи просто хочете перевстановити файли з пакунка більш нової доступної версії, можете скористатись параметром --reinstall, ось так:
{{{
    # apt-get --reinstall install gdm
    Reading Package Lists... Done
    Building Dependency Tree... Done
    0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
    Need to get 0B/182kB of archives. After unpacking 0B will be used.
    Do you want to continue? [Y/n]
}}}
=== Видалення пакунків ===

Якщо ви більше не бажаєте використовувати пакунок, ви можете видалити його з вашої системи за допомогою APT. Для цього просто наберіть apt-get remove пакунок. Наприклад:
{{{
    # apt-get remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      gnome-applets gnome-panel gnome-panel-data gnome-session
    0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]
}}}
Як можна побачити в прикладі вище, APT також турбується про видалення тих пакунків, які залежать від пакунка, вибраного для видалення. Видалити пакунок, не видаляючи при цьому тих пакунків, які залежать від нього, за допомогою APT неможливо.

Запуск apt-get так, як показано вище, видалить пакунки, однак їх конфігураційні файли, якщо такі існують, залишаться в системі неушкодженими. Для повного видалення пакунку виконайте:
{{{
    # apt-get --purge remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
    0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]
}}}
Зверніть увагу на символ '*' після назв пакунків. Це вказує на те, що конфігураційні файли кожного з цих пакунків також будуть видалені.

Як і у випадку методу install, ви можете скористатись спеціальним символом при remove, щоб інвертувати його дію для конкретного пакунка. У випадку видалення, якщо ви додаєте знак '+' одразу після назви пакунка, то такий пакунок буде встановлений, а не видалений.
{{{
    # apt-get --purge remove gnome-panel nautilus+
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus
    The following packages will be REMOVED:
      gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]
}}}
Зауважте, що apt-get виводить список додаткових пакунків, котрі будуть встановлені (таких, чиє встановлення є необхідною умовою для правильного функціонування пакунків, вказаних у початковому запиті на встановлення), пакунків, котрі будуть видалені, та загалом пакунків, котрі будуть встановлені (включаючи і додаткові пакунки також).

=== Оновлення пакунків ===

Оновлення пакунків — визначне досягнення системи APT. Це можна робити за допомогою однієї-єдиної команди: apt-get upgrade. Ви можете використовувати її і для оновлення пакунків з однієї і тієї ж збірки, і у випадку переходу до збірки нової, хоча, для останнього рекомендується використовувати apt-get dist-upgrade (див. Оновлення до нового випуску, розділ 3.5, щоб дізнатись про це більше).

Доцільно запускати цю команду з опцією -u. За її використання APT виводить повний список пакунків, котрі будуть оновлені. Без неї ви будете оновлюватись всліпу. APT завантажить останні версії кожного з пакунків та встановить їх в правильному порядку. Перед оновленням пакунків завжди важливо виконувати apt-get update. Перегляньте Оновлення списку наявних пакунків, розділ 3.1. Наприклад:
{{{
    # apt-get -u upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages have been kept back
      cpp gcc lilo
    The following packages will be upgraded
      adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
      ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
      libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
      libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
    29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
    Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
    Do you want to continue? [Y/n]
}}}
Процес є дуже простим. Відзначте, що в одному з перших рядків apt-get вказує на те, що деякі пакунки були kept back. Це означає, що є нові версії цих пакунків, але вони не можуть бути встановлені з деяких причин. Можливими причинами можуть бути неправильні залежності (вказану версію пакунка, від якого залежить даний, неможливо завантажити) або нові залежності (остання версія даного пакунка залежить від нового пакунка).

Для першого випадку не існує прозорого вирішення проблеми. В другому випадку доцільно запустити apt-get install, вказавши відповідний пакунок, що призведе до завантаження його залежностей. Більш прозорим рішенням буде використання dist-upgrade. Перегляньте Оновлення до нового випуску, розділ 3.5.

=== Оновлення до нового випуску ===

Ця можливість APT дозволяє вам оновлювати одразу всю систему Debian, або через Інтернет, або з нового компакт-диску (придбаного чи завантаженого як ISO-образ).

Це також використовується, коли зміни торкаються взаємозв'язків між встановленими пакунками. При використанні apt-get upgrade такі пакунки залишились би незайманими (kept back).

Наприклад, припустимо, що ви використовуєте редакцію 0 стабільної версії Debian та купуєте компакт з редакцією 3. Ви можете скористатись APT для оновлення вашої системи з нового КД. Для цього скористайтесь apt-cdrom (див. Додавання CD-ROM'у до файлу sources.list, розділ 2.4), щоб додати ваш КД до файлу /etc/apt/sources.list і запустіть apt-get dist-upgrade.

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

В прикладі в одному з попередніх розділів (див. Оновлення пакунків, розділ 3.4) ми бачили, що деякі пакунки були kept back. Зараз ми вирішимо цю проблему за допомогою методу dist-upgrade:
{{{
    # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following NEW packages will be installed:
      cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
      libpcre2 logrotate mailx
    The following packages have been kept back
      lilo
    The following packages will be upgraded
      adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
      indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
      libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
      liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
      procps psmisc
    31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
    Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
    Do you want to continue? [Y/n]
}}}
Зверніть увагу, що пакунки буде оновлено і, крім цього, також буде встановлено нові пакунки (нові залежності). Зауважте також, що lilo все ще залишається kept back. Він, ймовірно, має серйознішу проблему, ніж нова залежність. Ми можемо її з'ясувати, виконавши:
{{{
    # apt-get -u install lilo
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx
    The following packages will be REMOVED:
      debconf-tiny
    The following NEW packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx
    The following packages will be upgraded
      lilo
    1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
    Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
    Do you want to continue? [Y/n]
}}}
Як з'ясувалось, lilo конфліктує з пакунком debconf-tiny, а отже не може бути встановленим (чи оновленим) без видалення debconf-tiny.

Щоб дізнатись, яким чином приймається рішення про збереження або видалення пакунка, спробуйте:
{{{
    # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Starting
    Starting 2
    Investigating python1.5
    Package python1.5 has broken dep on python1.5-base
      Considering python1.5-base 0 as a solution to python1.5 0
      Holding Back python1.5 rather than change python1.5-base
    Investigating python1.5-dev
    Package python1.5-dev has broken dep on python1.5
      Considering python1.5 0 as a solution to python1.5-dev 0
      Holding Back python1.5-dev rather than change python1.5
     Try to Re-Instate python1.5-dev
    Done
    Done
    The following packages have been kept back
      gs python1.5-dev
    0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
}}}
Таким чином, легко помітити, що пакунок python1.5-dev не може бути встановленим через незадоволену залежність: python1.5.

=== Видалення непотрібних файлів пакунків: apt-get clean та autoclean ===

Коли ви встановлюєте пакунок, APT завантажує потрібні файли з джерел, вказаних в /etc/apt/sources.list, записує їх в локальне сховище (/var/cache/apt/archives/) і потім встановлює, як описано вище (див. Встановлення пакунків, розділ 3.2).

З часом локальне сховище може вирости і зайняти багато дискового простору. На щастя, APT забезпечує інструменти для керування локальним сховищем: методи apt-get — clean та autoclean.

apt-get clean видаляє все, за виключенням lock-файлів з /var/cache/apt/archives/ і /var/cache/apt/archives/partial/. Тому, у випадку перевстановлення пакунка, APT повинен буде завантажувати його знову.

{{{ apt-get autoclean }}} — тільки ті файли пакунків, як більше не можна завантажити.

Наступний приклад демонструє роботу apt-get:
{{{
    # ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm*
    logrotate_3.5.9-7_i386.deb
    logrotate_3.5.9-8_i386.deb
    gpm_1.19.6-11_i386.deb
}}}
В теці /var/cache/apt/archives є два файли пакунка logrotate та один файл пакунка gpm.
{{{
    # apt-show-versions -p logrotate
    logrotate/stable uptodate 3.5.9-8
    # apt-show-versions -p gpm
    gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12
}}}
apt-show-versions показує, що logrotate_3.5.9-8_i386.deb забезпечує поточну версію logrotate, отже logrotate_3.5.9-7_i386.deb більше не потрібен. Також gpm_1.19.6-11_i386.deb є непотрібним, оскільки є можливість завантажити більш нову версію цього пакунка.
{{{
    # apt-get autoclean
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Del gpm 1.19.6-11 [145kB]
    Del logrotate 3.5.9-7 [26.5kB]
}}}
Отже, apt-get autoclean видаляє тільки застарілі файли. Щоб отримати більше інформації про apt-show-versions перегляньте Яким чином оновлювати пакунки зі специфічних версій Debian, розділ 3.9.

=== Використання APT з dselect ===

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

Однією з особливостей dselect є її вміння враховувати те, що пакунки Debian можуть „рекомендувати“ і „пропонувати“ інші пакунки під час встановлення. Для використання програми запустіть dselect в якості користувача root. Оберіть apt в якості методу доступу. Насправді, це не обов'язково, але якщо ви не використовуєте компакт-диски і хочете завантажувати пакунки з Інтернету, це найкращий спосіб використання dselect.

Щоб краще зрозуміти, як працює dselect, прочитайте відповідну документацію. Її можна знайти на сторінці Debian http://www.debian.org/doc/ddp.

Після того, як ви за допомогою dselect вибрали пакунки, використовуйте

{{{ # apt-get -u dselect-upgrade }}}
як показано в прикладі нижче:
{{{
    # apt-get -u dselect-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      lbxproxy
    The following NEW packages will be installed:
      bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
      gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
      libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
      libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
      util-linux-locales vacation xbill xplanet-images
    The following packages will be upgraded
      debian-policy
    1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
    Need to get 7140kB of archives. After unpacking 16.3MB will be used.
    Do you want to continue? [Y/n]
}}}
Порівняйте це з виводом apt-get dist-upgrade на цій же системі:
{{{
    # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following packages will be upgraded
      debian-policy
    1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    Need to get 421kB of archives. After unpacking 25.6kB will be freed.
    Do you want to continue? [Y/n]
}}}
Зауважте, що багато пакунків з наведеного вище прикладу були встановлені тому, що інші пакунки „пропонують“ або „рекомендують“ їх. Інші були встановлені або видалені (наприклад, lbxproxy) в результаті вибору, який ми зробили за допомогою інтерфейсу dselect. Dselect може бути потужним інструментом, якщо використовується разом з APT.

=== Як підтримувати змішану систему ===

Іноді люди бажають використовувати одну з версій Debian в якості головного дистрибутиву системи та один чи декілька пакунків з іншої гілки.

Щоб вказати, яка версія Debian є головною, необхідно відредагувати файл /etc/apt/apt.conf (зазвичай його немає, в такому випадку створіть його), помістивши в нього такий рядок:

{{{ APT::Default-Release "версія"; }}}
Де версія — це версія Debian, котру ви хочете використовувати в якості головної збірки. Можна вказувати такі значення як stable, testing та unstable. Далі, щоб встановити пакунки з інших версій, ви повинні використовувати APT в такий спосіб

{{{ # apt-get -t збірка install пакунок }}}
Проте, що це працювало, вам потрібно мати як мінімум один рядок в /etc/apt/sources.list з джерелом APT для відповідної збірки і на цьому джерелі повинні бути необхідні пакунки.

Ви також можете здійснити запит щодо конкретної версії пакунка, скориставшись наступним синтаксисом:

{{{ # apt-get install пакунок=версія }}}
Наприклад, при виконанні вказаної нижче команди встановиться пакунок nautilus з версією 2.2.4-1.

{{{ # apt-get install nautilus=2.2.4-1 }}}
ВАЖЛИВО: збірка unstable — це збірка, до якої найновіші версії пакунків Debian потрапляють в першу чергу. Через цю збірку проходять всі ті зміни, котрих зазнають пакунки. І невеликі пакунки, і дуже важливі, від роботи яких залежать інші пакунки або система в цілому. З цієї причина, ця версія збірки не повинна використовуватись недосвідченими користувачами або тими, хто ставить стабільність системи на перше місце.

Збірка testing не обов'язково краща за unstable, оскільки не отримує оновлень безпеки за короткий час. Для серверів та інших виробничих систем завжди необхідно використовувати stable. 3.9 Яким чином оновлювати пакунки зі специфічних версій Debian

apt-show-versions забезпечує користувачів змішаних збірок безпечним способом для оновлення їх системи без отримання з менш стабільної збірки більшого, ніж вони мали на увазі. Наприклад, можна оновити лише ваші пакунки з unstable, виконавши, попередньо встановивши пакунок apt-show-versions,

{{{ # apt-get install `apt-show-versions -u -b | grep unstable | cut -d ' ' -f 1` }}}
=== Як зберегти встановленими конкретні версії пакунків (складний метод) ===

Можливо, сталось так, що ви змінили дещо в пакунку, але не маєте часу або не хочете вносити ці зміни до нової версії програми. Чи, наприклад, вам просто потрібно оновити вашу збірку Debian до 3.0, але є бажання продовжувати використовувати деякі версії пакунків зі збірки Debian 2.2. Ви можете „приколоти“ (pin) версію, котру ви використовуєте так, щоб вона більш не оновлювалась.

Використовувати цю можливість просто. Необхідно лише відредагувати файл /etc/apt/preferences.

Формат простий:
{{{
    Package: <package>
    Pin: <pin-означення>
    Pin-Priority: <pin-пріоритет>
}}}
Кожен запис повинен відділятись від інших порожнім рядком. Наприклад, щоб зберегти версію 0.4.99 пакунка sylpheed, в котрий я додав можливість reply-to-list, я вказую:
{{{
    Package: sylpheed
    Pin: version 0.4.99*
}}}
Зверніть увагу, що я використав символ * (зірочка). Це „маска“, вона означає, що я хочу, щоб цей pin стосувався всіх версій, що починаються з 0.4.99. Це зроблено з тієї причини, що до версії в пакунках Debian додається номер „редакції Debian“ і я не хочу відміняти встановлення цих редакцій. Отже, наприклад, версії 0.4.99-1 та 0.4.99-10 будуть встановлені, як тільки стануть доступними. Зауважте, що якщо ви модифікували пакунок, такий метод вам не підійде.

Pin-пріоритет допомагає визначити чи оновлювати пакунок, що задовольняє вимогам в рядках Packages: та Pin:, вищий пріоритет збільшує шанси того, що відповідний пакунок буде встановлено. Ви можете прочитати apt_preferences(7), щоб ознайомитись зі всебічним обговоренням пріоритетів, але декілька прикладів допоможуть зрозуміти основну ідею. Далі описуються ефекти від встановлення різних значень поля Pin-Priority: для пакунку sylpheed з наведеного вище прикладу.

1001

   Apt ніколи не замінить sylpheed, версії 0.4.99. Якщо буде потрібно, apt встановить версію 0.4.99, замінивши нею пакунок з більш високою версією. Тільки пакунки з пріоритетом, вищим ніж 1000 зможуть „понизити“ існуючий пакунок.
1000

   Ефект такий самий, як і у випадку пріоритету 1001, за винятком того, що apt не буде знижувати версію вже встановленого пакунка до 0.4.99.
990

   Версію 0.4.99 зможе замінити лише пакунок вищої версії зі збірки, котра визначена як переважаюча, шляхом використання змінної APT::Default-Release (див. Як підтримувати змішану систему, розділ 3.8 вище).
500

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

   Вищі доступні версії sylpheed з будь-якої збірки будуть мати перевагу над версією 0.4.99, також будь які встановлені вищі версії slypheed; тобто 0.4.99 встановиться лише в тому випадку, якщо не встановлено жодної іншої версії. Це — пріоритет встановлених пакунків.
-1

   Від'ємні значення також є прийнятними і забороняють встановлення 0.4.99.
„Приколювання“ пакунка може здійснюватись за такими критеріями як його версія (version), випуск (release) чи походження (origin) пакунка.

Фіксування за версією (version), як ми бачили, підтримує літерні номери версій і, крім цього, „маски“ з можливістю вибору декількох версій одночасно.

Опція release залежить від файлу Release зі сховища APT або з компакт-диску. Ця опція може не використовуватись у тому випадку, коли всі ваші сховища пакунків такого файлу не забезпечують. Вміст ваших файлів Release можна переглянути, відвідавши теку /var/lib/apt/lists/. Параметрами до release є: a (archive, архів), c (components, компоненти), v (version, версія), o (origin, походження) та l (label, мітка).

Наприклад:
{{{
    Package: *
    Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
    Pin-Priority: 1001
}}}
В цьому прикладі ми обираємо версію Debian 2.2* (що може бути 2.2r2, 2.2r3 — це „точковий випуск“, що, зазвичай, містить виправлення безпеки та інші дуже важливі оновлення), сховище stable, розділ main (на противагу contrib чи non-free) та походження і мітку Debian. Походження (o=) визначає, хто створив цей файл Release, мітка (l=) — назва дистрибутиву: Debian для власне Debian, Progeny для Progeny, і т.д. Приклад файлу Release:
{{{
    $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
    Archive: stable
    Version: 2.2r3
    Component: main
    Origin: Debian
    Label: Debian
    Architecture: i386
}}}

Translation(s): Українська

Вступ

Спочатку був .tar.gz. Користувачі повинні були компілювати кожну програму, котру вони хотіли використовувати на власних системах GNU/Linux. Коли створювався Debian, виникла потреба у включенні до системи інструменту керування пакунками, встановленими на машині. Його назвали dpkg. Цей знаменитий „пакунок“ першим з'явився в GNU/Linux ще до того, як Red Hat вирішила створити свою власну систему rpm.

Досить швидко нова дилема постала в думках розробників GNU/Linux. Їм був потрібен швидкий, практичний та ефективний шлях для встановлення пакунків, з автоматичною обробкою залежностей та збереженням конфігураційних файлів під час оновлення. Знову ж таки, Debian виявився лідером та породив систему APT, Advanced Packaging Tool, котра в подальшому була портована фірмою Conectiva для використання з rpm та пристосована також до деяких інших дистрибутивів.

В цьому підручнику не описується apt-rpm (портування Conectiva відоме саме під такою назвою), але „латки“ до цього документу з цього приводу завжди радо вітаються.

Базові налаштування

Файл /etc/apt/sources.list

Щоб забезпечити виконання однієї зі своїх задач, APT використовує список джерел, з котрих пакунки можуть бути завантажені. Це — файл /etc/apt/sources.list.

Зазвичай, записи в цьому файлі мають такий вигляд:

    deb http://host/debian збірка розділ1 розділ2 розділ3
    deb-src http://host/debian збірка розділ1 розділ2 розділ3

Звісно, наведені вище рядки є лише прикладом і не повинні використовуватись насправді. Перше слово кожного рядка, deb чи deb-src, вказує тип архіву: це або двійкові пакунки (deb), наперед-скомпільовані, які ми, як правило, і використовуємо, або джерельні пакунки (deb-src), котрі містять оригінали джерельних кодів програм і, додатково, керуючий файл Debian (.dsc) та diff.gz-архів з необхідними для „дебіанізації“ програми змінами.

Зазвичай, в стандартному файлі sources.list можна знайти такі рядки:

    # See sources.list(5) for more information, especially
    # Remember that you can only use http, ftp or file URIs
    # CDROMs are managed through the apt-cdrom tool.
    deb http://http.us.debian.org/debian stable main contrib non-free
    deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
    deb http://security.debian.org stable/updates main contrib non-free
    
    # Uncomment if you want the apt-get source function to work
    #deb-src http://http.us.debian.org/debian stable main contrib non-free
    #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

Ці рядки потрібні для базового встановлення Debian. Перший рядок deb вказує на офіційний архів пакунків, другий — на не-США архів, третій — на архів Debian, що призначений для оновлень безпеки.

Два останні рядки закоментовано (починаються з символу '#'), тому apt-get їх проігнорує. Ці deb-src рядки вказують на джерельні пакунки Debian. Якщо ви часто завантажуєте джерельні коди програм, з метою тестування або для рекомпіляції, просто розкоментуйте їх.

В файлі /etc/apt/sources.list можуть міститись декілька типів рядків. Наскільки мені відомо, APT вміє працювати з такими типами архівів як http, ftp, file (локальні файли; наприклад, тека з примонтованою файловою системою ISO9660) та ssh.

Не забудьте виконати apt-get update після внесення змін до файлу /etc/apt/sources.list. Це робиться для того, щоб змусити APT оновити списки пакунків з вказаних вами джерел.

Як використовувати APT локально

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

Для цього вам потрібно створити теку та помістити в неї .deb-файли, які ви хочете проіндексувати. Наприклад:

    # mkdir /root/debs  Для вашого сховища ви можете напряму змінити набір значень, вказаних в файлі control кожного з пакунків, використовуючи файл override. Всередині цього файлу ви, якщо хочете, можете визначити деякі опції, котрі перекриють відповідні значення з файлів пакунків. Це виглядає приблизно так:

  • package priority section

package — це назва пакунка, priority може набувати таких значень як low, medium чи high, а section — це назва розділу, в якому знаходиться відповідний пакунок. До назви файлу не ставиться жодних вимог, ви будете вказувати її пізніше в якості аргументу до dpkg-scanpackages. Якщо ви не хочете створювати файл override, тоді при запуску dpkg-scanpackages просто використовуйте /dev/null.

Далі, перебуваючи в теці /root, виконайте:

    # dpkg-scanpackages debs file | gzip > debs/Packages.gz  У наведеному рядку слово file — це файл override. Команда генерує файл Packages.gz, котрий містить різноманітну інформацію про пакунки, яка буде використана APT. Нарешті, щоб почати використання пакунків, додайте:

    deb file:/root debs/  Після всього цього, просто використовуйте APT, як звичайно. Ви можете створювати також і джерельні сховища. Для цього повторіть ті ж самі кроки, але пам'ятайте, що вам потрібно у відповідній теці мати файли .orig.tar.gz, .dsc та .diff.gz і замість Packages.gz генерувати файл Sources.gz. Для цього також використовується інша програма. Це — dpkg-scansources. Командний рядок повинен виглядати приблизно так

    # dpkg-scansources debs | gzip > debs/Sources.gz  Зверніть увагу, що для dpkg-scansources не потрібен файл override. Рядок для sources.list виглядає так:

    deb-src file:/root debs/ 

Визначення найкращого джерела для використання в файлі sources.list: netselect, netselect-apt

Дуже часто, переважно від нових користувачів, можна почути питання: „яке дзеркало Debian включати до sources.list?“. Існує багато методів визначення такого дзеркала. Експерти, ймовірно, мають скрипт, що вимірює та порівнює час відгуку від декількох джерел. Однак є програма, що зробить це і для нас: netselect.

Як звичайно, щоб встановити netselect:

    # apt-get install netselect  При запуску її без параметрів відображається довідка. З списком дзеркал, розділених пробілами, вона поверне оцінку і один з вузлів. При визначенні цієї оцінки береться до уваги приблизний час відгуку, кількість „стрибків“ (вузлів, через які мережевий запит пройде перед тим, як потрапити до заданої цілі) та обернено пропорційна швидкість завантаження; отже, чим менше оцінка, тим краще. Програма повертає назву дзеркала, що має найнижчу оцінку (повний список оцінок можна побачити, додавши опцію -vv). Ознайомтесь з таким прикладом:

{{{ # netselect ftp.debian.org http.us.debian.org download.unesp.br ftp.debian.org.br

  • 365 ftp.debian.org.br }}}

Це означає, що з дзеркал, вказаних в якості параметрів до netselect, найкращим виявилось ftp.debian.org.br з оцінкою 365. (Увага!! Оскільки команда виконувалась на моєму комп'ютері, а топографія мережі дуже сильно відрізняється в залежності від точки входу, ця цифра не обов'язково буде правильним значенням швидкості для інших машин).

Тепер просто помістіть найшвидше дзеркало, знайдене за допомогою netselect, у файл /etc/apt/sources.list (див. Файл /etc/apt/sources.list, розділ 2.1) та виконуйте наведені у відповідному розділі вказівки (див. Керування пакунками, Глава 3).

Зверніть увагу: список дзеркал завжди можна знайти в файлі http://www.debian.org/mirror/mirrors_full.

Починаючи з версії 0.3.ds1, джерельний пакунок netselect створює двійковий пакунок netselect-apt, котрий виконує всі наведені вище дії автоматично. Просто введіть гілку збірки в якості параметру (за замовчанням stable) і програма згенерує файл sources.list з найкращими загальними та не-США дзеркалами, після чого збереже його в поточній теці. Наступний приклад генерує sources.list для стабільної збірки:

    # ls sources.list
    ls: sources.list: File or directory not found
    # netselect-apt stable
    (...)
    # ls -l sources.list
    sources.list

Нагадуємо: файл sources.list генерується в поточній теці і його потрібно перемістити до теки /etc/apt.

Далі виконуйте вказівки наведені у відповідному розділі (див. Керування пакунками, Глава 3).

Додавання CD-ROM'у до файлу sources.list

У випадку, коли ви використовуєте переважно CD-ROM для встановлення пакунків чи оновлення вашої системи за допомогою APT, ви можете додати його до вашого sources.list. Для цього можна скористайтися програмою apt-cdrom приблизно так:

    # apt-cdrom add  попередньо помістивши компакт-диск Debian до приводу. Ця команда підмонтує КД і, якщо це справжній компакт-диск Debian, оновить інформацію про пакунки, переглянувши його вміст. Якщо ваш КД дещо незвичної конфігурації, ви також можете використати такі опції:

  • -h - Довідка програми -d directory - Точка монтування CD-ROM'у -r - Змінити назву розпізнаного CD-ROM'у -m - Не монтувати -f - Швидкий режим, не перевіряти файли пакунків -a - Режим ретельного пошуку

Наприклад:

    # apt-cdrom -d /home/kov/mycdrom add  Ви також можете ідентифікувати CD-ROM, не додаючи його до вашого списку:

    # apt-cdrom ident  Зауважте, що ця програма працює лише в тому випадку, коли ваш КД зконфігуровано правильно і відповідний запис міститься в системному файлі /etc/fstab.

Керування пакунками

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

Система керування пакунками використовує свою власну базу даних для відслідковування вже встановлених, не встановлених та доступних для встановлювання пакунків. Програма apt-get використовує цю базу даних як джерело інформації про пакунки, вказані користувачем в запиті на встановлення, та з'ясування, які додаткові пакунки є необхідними, щоб вибраний пакунок працював належним чином.

Для оновлення цієї бази ви можете скористатись командою apt-get update. Ця команда переглядає списки пакунків в архівах, вказаних в /etc/apt/sources.list; див. Файл /etc/apt/sources.list, розділ 2.1, щоб дізнатись більше про цей файл.

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

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

Нарешті, те, чого всі так довго чекали! Коли ваш sources.list готовий і список доступних пакунків оновлено, вам залишається лише запустити apt-get, щоб встановити бажаний пакунок. Наприклад, ви можете виконати:

    # apt-get install xchat  APT спробує знайти в базі даних найсвіжішу версію цього пакунку та завантажити його з відповідного архіву, визначеного в sources.list. У випадку, коли цей пакунок залежить від іншого — як наведено нижче — APT перевірить залежності та встановить всі потрібні пакунки. Наприклад:

    # apt-get install nautilus
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0 
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus 
    0 packages upgraded, 4 newly installed, 0 to remove and 1  not upgraded.
    Need to get 8329kB of archives. After unpacking 17.2MB will be used.
    Do you want to continue? [Y/n]

Пакунок nautilus залежить від вказаних бібліотек спільного користування, тому APT також завантажить їх з архіву. Якщо ви вкажете їх назви в командному рядку при запуску apt-get, APT не буде запитувати, чи хочете ви продовжувати, а автоматично прийме рішення, що ви бажаєте встановити всі ті пакунки.

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

Наступні параметри apt-get можуть стати в нагоді:

  • -h Текст довідки. -d Тільки завантажити — НЕ встановлювати і НЕ розпаковувати пакунки -f Продовжувати, навіть якщо перевірка цілісності завершилась невдачею -s Не виконувати реальних дій, імітувати їх виконання -y Вважати Yes відповіддю на всі запитання, не виводити їх -u Також показувати список оновлених пакунків

В одному рядку можна вказувати декілька пакунків для встановлення. Завантажені з мережі файли поміщаються в теку /var/cache/apt/archives для подальшого встановлення.

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

    # apt-get install nautilus gnome-panel-       
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0 
    The following packages will be REMOVED:
      gnome-applets gnome-panel gnome-panel-data gnome-session 
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus 
    0 packages upgraded, 4 newly installed, 4 to remove and 1  not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]

Перегляньте Видалення пакунків, розділ 3.3, щоб детальніше ознайомитись з видаленням пакунків.

Якщо ви якимсь чином пошкодили встановлений пакунок чи просто хочете перевстановити файли з пакунка більш нової доступної версії, можете скористатись параметром --reinstall, ось так:

    # apt-get --reinstall install gdm
    Reading Package Lists... Done
    Building Dependency Tree... Done
    0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1  not upgraded.
    Need to get 0B/182kB of archives. After unpacking 0B will be used.
    Do you want to continue? [Y/n]

Видалення пакунків

Якщо ви більше не бажаєте використовувати пакунок, ви можете видалити його з вашої системи за допомогою APT. Для цього просто наберіть apt-get remove пакунок. Наприклад:

    # apt-get remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      gnome-applets gnome-panel gnome-panel-data gnome-session 
    0 packages upgraded, 0 newly installed, 4 to remove and 1  not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]

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

Запуск apt-get так, як показано вище, видалить пакунки, однак їх конфігураційні файли, якщо такі існують, залишаться в системі неушкодженими. Для повного видалення пакунку виконайте:

    # apt-get --purge remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 
    0 packages upgraded, 0 newly installed, 4 to remove and 1  not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]

Зверніть увагу на символ '*' після назв пакунків. Це вказує на те, що конфігураційні файли кожного з цих пакунків також будуть видалені.

Як і у випадку методу install, ви можете скористатись спеціальним символом при remove, щоб інвертувати його дію для конкретного пакунка. У випадку видалення, якщо ви додаєте знак '+' одразу після назви пакунка, то такий пакунок буде встановлений, а не видалений.

    # apt-get --purge remove gnome-panel nautilus+
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus 
    The following packages will be REMOVED:
      gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 
    The following NEW packages will be installed:
      bonobo libmedusa0 libnautilus0 nautilus 
    0 packages upgraded, 4 newly installed, 4 to remove and 1  not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]

Зауважте, що apt-get виводить список додаткових пакунків, котрі будуть встановлені (таких, чиє встановлення є необхідною умовою для правильного функціонування пакунків, вказаних у початковому запиті на встановлення), пакунків, котрі будуть видалені, та загалом пакунків, котрі будуть встановлені (включаючи і додаткові пакунки також).

Оновлення пакунків

Оновлення пакунків — визначне досягнення системи APT. Це можна робити за допомогою однієї-єдиної команди: apt-get upgrade. Ви можете використовувати її і для оновлення пакунків з однієї і тієї ж збірки, і у випадку переходу до збірки нової, хоча, для останнього рекомендується використовувати apt-get dist-upgrade (див. Оновлення до нового випуску, розділ 3.5, щоб дізнатись про це більше).

Доцільно запускати цю команду з опцією -u. За її використання APT виводить повний список пакунків, котрі будуть оновлені. Без неї ви будете оновлюватись всліпу. APT завантажить останні версії кожного з пакунків та встановить їх в правильному порядку. Перед оновленням пакунків завжди важливо виконувати apt-get update. Перегляньте Оновлення списку наявних пакунків, розділ 3.1. Наприклад:

    # apt-get -u upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages have been kept back
      cpp gcc lilo 
    The following packages will be upgraded
      adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
      ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
      libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
      libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 
    29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
    Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
    Do you want to continue? [Y/n]

Процес є дуже простим. Відзначте, що в одному з перших рядків apt-get вказує на те, що деякі пакунки були kept back. Це означає, що є нові версії цих пакунків, але вони не можуть бути встановлені з деяких причин. Можливими причинами можуть бути неправильні залежності (вказану версію пакунка, від якого залежить даний, неможливо завантажити) або нові залежності (остання версія даного пакунка залежить від нового пакунка).

Для першого випадку не існує прозорого вирішення проблеми. В другому випадку доцільно запустити apt-get install, вказавши відповідний пакунок, що призведе до завантаження його залежностей. Більш прозорим рішенням буде використання dist-upgrade. Перегляньте Оновлення до нового випуску, розділ 3.5.

Оновлення до нового випуску

Ця можливість APT дозволяє вам оновлювати одразу всю систему Debian, або через Інтернет, або з нового компакт-диску (придбаного чи завантаженого як ISO-образ).

Це також використовується, коли зміни торкаються взаємозв'язків між встановленими пакунками. При використанні apt-get upgrade такі пакунки залишились би незайманими (kept back).

Наприклад, припустимо, що ви використовуєте редакцію 0 стабільної версії Debian та купуєте компакт з редакцією 3. Ви можете скористатись APT для оновлення вашої системи з нового КД. Для цього скористайтесь apt-cdrom (див. Додавання CD-ROM'у до файлу sources.list, розділ 2.4), щоб додати ваш КД до файлу /etc/apt/sources.list і запустіть apt-get dist-upgrade.

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

В прикладі в одному з попередніх розділів (див. Оновлення пакунків, розділ 3.4) ми бачили, що деякі пакунки були kept back. Зараз ми вирішимо цю проблему за допомогою методу dist-upgrade:

    # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following NEW packages will be installed:
      cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
      libpcre2 logrotate mailx 
    The following packages have been kept back
      lilo 
    The following packages will be upgraded
      adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
      indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
      libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
      liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
      procps psmisc 
    31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
    Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
    Do you want to continue? [Y/n]

Зверніть увагу, що пакунки буде оновлено і, крім цього, також буде встановлено нові пакунки (нові залежності). Зауважте також, що lilo все ще залишається kept back. Він, ймовірно, має серйознішу проблему, ніж нова залежність. Ми можемо її з'ясувати, виконавши:

    # apt-get -u install lilo
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx 
    The following packages will be REMOVED:
      debconf-tiny 
    The following NEW packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx 
    The following packages will be upgraded
      lilo 
    1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
    Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
    Do you want to continue? [Y/n]

Як з'ясувалось, lilo конфліктує з пакунком debconf-tiny, а отже не може бути встановленим (чи оновленим) без видалення debconf-tiny.

Щоб дізнатись, яким чином приймається рішення про збереження або видалення пакунка, спробуйте:

    # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Starting
    Starting 2
    Investigating python1.5
    Package python1.5 has broken dep on python1.5-base
      Considering python1.5-base 0 as a solution to python1.5 0
      Holding Back python1.5 rather than change python1.5-base
    Investigating python1.5-dev
    Package python1.5-dev has broken dep on python1.5
      Considering python1.5 0 as a solution to python1.5-dev 0
      Holding Back python1.5-dev rather than change python1.5
     Try to Re-Instate python1.5-dev
    Done
    Done
    The following packages have been kept back
      gs python1.5-dev 
    0 packages upgraded, 0 newly installed, 0 to remove and 2  not upgraded.

Таким чином, легко помітити, що пакунок python1.5-dev не може бути встановленим через незадоволену залежність: python1.5.

Видалення непотрібних файлів пакунків: apt-get clean та autoclean

Коли ви встановлюєте пакунок, APT завантажує потрібні файли з джерел, вказаних в /etc/apt/sources.list, записує їх в локальне сховище (/var/cache/apt/archives/) і потім встановлює, як описано вище (див. Встановлення пакунків, розділ 3.2).

З часом локальне сховище може вирости і зайняти багато дискового простору. На щастя, APT забезпечує інструменти для керування локальним сховищем: методи apt-get — clean та autoclean.

apt-get clean видаляє все, за виключенням lock-файлів з /var/cache/apt/archives/ і /var/cache/apt/archives/partial/. Тому, у випадку перевстановлення пакунка, APT повинен буде завантажувати його знову.

 apt-get autoclean  — тільки ті файли пакунків, як більше не можна завантажити.

Наступний приклад демонструє роботу apt-get:

    # ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm*
    logrotate_3.5.9-7_i386.deb
    logrotate_3.5.9-8_i386.deb
    gpm_1.19.6-11_i386.deb

В теці /var/cache/apt/archives є два файли пакунка logrotate та один файл пакунка gpm.

    # apt-show-versions -p logrotate
    logrotate/stable uptodate 3.5.9-8
    # apt-show-versions -p gpm
    gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12

apt-show-versions показує, що logrotate_3.5.9-8_i386.deb забезпечує поточну версію logrotate, отже logrotate_3.5.9-7_i386.deb більше не потрібен. Також gpm_1.19.6-11_i386.deb є непотрібним, оскільки є можливість завантажити більш нову версію цього пакунка.

    # apt-get autoclean
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Del gpm 1.19.6-11 [145kB]
    Del logrotate 3.5.9-7 [26.5kB]

Отже, apt-get autoclean видаляє тільки застарілі файли. Щоб отримати більше інформації про apt-show-versions перегляньте Яким чином оновлювати пакунки зі специфічних версій Debian, розділ 3.9.

Використання APT з dselect

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

Однією з особливостей dselect є її вміння враховувати те, що пакунки Debian можуть „рекомендувати“ і „пропонувати“ інші пакунки під час встановлення. Для використання програми запустіть dselect в якості користувача root. Оберіть apt в якості методу доступу. Насправді, це не обов'язково, але якщо ви не використовуєте компакт-диски і хочете завантажувати пакунки з Інтернету, це найкращий спосіб використання dselect.

Щоб краще зрозуміти, як працює dselect, прочитайте відповідну документацію. Її можна знайти на сторінці Debian http://www.debian.org/doc/ddp.

Після того, як ви за допомогою dselect вибрали пакунки, використовуйте

    # apt-get -u dselect-upgrade  як показано в прикладі нижче:

    # apt-get -u dselect-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
      lbxproxy 
    The following NEW packages will be installed:
      bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
      gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
      libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
      libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
      util-linux-locales vacation xbill xplanet-images 
    The following packages will be upgraded
      debian-policy 
    1 packages upgraded, 30 newly installed, 1 to remove and 0  not upgraded.
    Need to get 7140kB of archives. After unpacking 16.3MB will be used.
    Do you want to continue? [Y/n]

Порівняйте це з виводом apt-get dist-upgrade на цій же системі:

    # apt-get -u dist-upgrade   
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following packages will be upgraded
      debian-policy 
    1 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.
    Need to get 421kB of archives. After unpacking 25.6kB will be freed.
    Do you want to continue? [Y/n]

Зауважте, що багато пакунків з наведеного вище прикладу були встановлені тому, що інші пакунки „пропонують“ або „рекомендують“ їх. Інші були встановлені або видалені (наприклад, lbxproxy) в результаті вибору, який ми зробили за допомогою інтерфейсу dselect. Dselect може бути потужним інструментом, якщо використовується разом з APT.

Як підтримувати змішану систему

Іноді люди бажають використовувати одну з версій Debian в якості головного дистрибутиву системи та один чи декілька пакунків з іншої гілки.

Щоб вказати, яка версія Debian є головною, необхідно відредагувати файл /etc/apt/apt.conf (зазвичай його немає, в такому випадку створіть його), помістивши в нього такий рядок:

    APT::Default-Release "версія";  Де версія — це версія Debian, котру ви хочете використовувати в якості головної збірки. Можна вказувати такі значення як stable, testing та unstable. Далі, щоб встановити пакунки з інших версій, ви повинні використовувати APT в такий спосіб

    # apt-get -t збірка install пакунок  Проте, що це працювало, вам потрібно мати як мінімум один рядок в /etc/apt/sources.list з джерелом APT для відповідної збірки і на цьому джерелі повинні бути необхідні пакунки.

Ви також можете здійснити запит щодо конкретної версії пакунка, скориставшись наступним синтаксисом:

    # apt-get install пакунок=версія  Наприклад, при виконанні вказаної нижче команди встановиться пакунок nautilus з версією 2.2.4-1.

    # apt-get install nautilus=2.2.4-1  ВАЖЛИВО: збірка unstable — це збірка, до якої найновіші версії пакунків Debian потрапляють в першу чергу. Через цю збірку проходять всі ті зміни, котрих зазнають пакунки. І невеликі пакунки, і дуже важливі, від роботи яких залежать інші пакунки або система в цілому. З цієї причина, ця версія збірки не повинна використовуватись недосвідченими користувачами або тими, хто ставить стабільність системи на перше місце.

Збірка testing не обов'язково краща за unstable, оскільки не отримує оновлень безпеки за короткий час. Для серверів та інших виробничих систем завжди необхідно використовувати stable. 3.9 Яким чином оновлювати пакунки зі специфічних версій Debian

apt-show-versions забезпечує користувачів змішаних збірок безпечним способом для оновлення їх системи без отримання з менш стабільної збірки більшого, ніж вони мали на увазі. Наприклад, можна оновити лише ваші пакунки з unstable, виконавши, попередньо встановивши пакунок apt-show-versions,

    # apt-get install `apt-show-versions -u -b | grep unstable | cut -d ' ' -f 1` 

Як зберегти встановленими конкретні версії пакунків (складний метод)

Можливо, сталось так, що ви змінили дещо в пакунку, але не маєте часу або не хочете вносити ці зміни до нової версії програми. Чи, наприклад, вам просто потрібно оновити вашу збірку Debian до 3.0, але є бажання продовжувати використовувати деякі версії пакунків зі збірки Debian 2.2. Ви можете „приколоти“ (pin) версію, котру ви використовуєте так, щоб вона більш не оновлювалась.

Використовувати цю можливість просто. Необхідно лише відредагувати файл /etc/apt/preferences.

Формат простий:

    Package: <package>
    Pin: <pin-означення>
    Pin-Priority: <pin-пріоритет>

Кожен запис повинен відділятись від інших порожнім рядком. Наприклад, щоб зберегти версію 0.4.99 пакунка sylpheed, в котрий я додав можливість reply-to-list, я вказую:

    Package: sylpheed
    Pin: version 0.4.99*

Зверніть увагу, що я використав символ * (зірочка). Це „маска“, вона означає, що я хочу, щоб цей pin стосувався всіх версій, що починаються з 0.4.99. Це зроблено з тієї причини, що до версії в пакунках Debian додається номер „редакції Debian“ і я не хочу відміняти встановлення цих редакцій. Отже, наприклад, версії 0.4.99-1 та 0.4.99-10 будуть встановлені, як тільки стануть доступними. Зауважте, що якщо ви модифікували пакунок, такий метод вам не підійде.

Pin-пріоритет допомагає визначити чи оновлювати пакунок, що задовольняє вимогам в рядках Packages: та Pin:, вищий пріоритет збільшує шанси того, що відповідний пакунок буде встановлено. Ви можете прочитати apt_preferences(7), щоб ознайомитись зі всебічним обговоренням пріоритетів, але декілька прикладів допоможуть зрозуміти основну ідею. Далі описуються ефекти від встановлення різних значень поля Pin-Priority: для пакунку sylpheed з наведеного вище прикладу.

1001

  • Apt ніколи не замінить sylpheed, версії 0.4.99. Якщо буде потрібно, apt встановить версію 0.4.99, замінивши нею пакунок з більш високою версією. Тільки пакунки з пріоритетом, вищим ніж 1000 зможуть „понизити“ існуючий пакунок.

1000

  • Ефект такий самий, як і у випадку пріоритету 1001, за винятком того, що apt не буде знижувати версію вже встановленого пакунка до 0.4.99.

990

  • Версію 0.4.99 зможе замінити лише пакунок вищої версії зі збірки, котра визначена як переважаюча, шляхом використання змінної APT::Default-Release (див. Як підтримувати змішану систему, розділ 3.8 вище).

500

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

100

  • Вищі доступні версії sylpheed з будь-якої збірки будуть мати перевагу над версією 0.4.99, також будь які встановлені вищі версії slypheed; тобто 0.4.99 встановиться лише в тому випадку, якщо не встановлено жодної іншої версії. Це — пріоритет встановлених пакунків.

-1

  • Від'ємні значення також є прийнятними і забороняють встановлення 0.4.99.

„Приколювання“ пакунка може здійснюватись за такими критеріями як його версія (version), випуск (release) чи походження (origin) пакунка.

Фіксування за версією (version), як ми бачили, підтримує літерні номери версій і, крім цього, „маски“ з можливістю вибору декількох версій одночасно.

Опція release залежить від файлу Release зі сховища APT або з компакт-диску. Ця опція може не використовуватись у тому випадку, коли всі ваші сховища пакунків такого файлу не забезпечують. Вміст ваших файлів Release можна переглянути, відвідавши теку /var/lib/apt/lists/. Параметрами до release є: a (archive, архів), c (components, компоненти), v (version, версія), o (origin, походження) та l (label, мітка).

Наприклад:

    Package: *
    Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
    Pin-Priority: 1001

В цьому прикладі ми обираємо версію Debian 2.2* (що може бути 2.2r2, 2.2r3 — це „точковий випуск“, що, зазвичай, містить виправлення безпеки та інші дуже важливі оновлення), сховище stable, розділ main (на противагу contrib чи non-free) та походження і мітку Debian. Походження (o=) визначає, хто створив цей файл Release, мітка (l=) — назва дистрибутиву: Debian для власне Debian, Progeny для Progeny, і т.д. Приклад файлу Release:

    $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
    Archive: stable
    Version: 2.2r3
    Component: main
    Origin: Debian
    Label: Debian
    Architecture: i386