Статьи

Debian. Шпаргалка сисадміна. управління пакетами

  1. Теоретична частина
  2. Загальна інформація
  3. файл control
  4. Сценарії установки
  5. Утиліти управління пакетами
  6. Основні відмінності
  7. базові функції
  8. розширені функції

www.debian.org

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

Теоретична частина

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

Загальна інформація

Всі пакети для Debian можна розділити на два типи:

Двійкові пакунки (binary) - містять виконувані файли, файли налаштувань, довідкові сторінки, інформацію про авторські права. Пакети поставляються в файлах з розширенням .deb (специфічний саме для Debian-систем).

Пакети вихідного коду (source) - містять опис пакета, файл з tar-архівом немодифицированного вихідного коду (розширення .orig.tar.gz) і зазвичай файлу, що містить особливі Debian-специфічні зміни до оригінального вихідного коду (розширення .diff.gz)

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

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

файл control

Вся супровідна інформація про пакет знаходиться в файлі control. Деякі атрибути в цьому файлі розглянуті нижче, призначення інших легко можна зрозуміти виходячи з їх назви. Розглянемо для прикладу висновок файлу control для пакета mysql-server-5.5:

Пріоритет (priority) - може приймати значення необхідний (required), важливий (important), стандартний (standard), додатковий (optional) і екстра (extra). Всі типи вказані в порядку зменшення їх важливості для операційної системи. Якщо без необхідних пакетів операційна система не зможе функціонувати нормально, то екстра і додаткові пакети в принципі не потрібні для роботи системи, вони додають додатковий функціонал.

У нижній частині тексту можна зустріти атрибути, які містять списки певних пакетів. Деякі з цих пакетів можуть бути встановлені за бажанням, а якісь мають бути присутні обов'язково. У цьому випадку говорять, що пакет: залежить (depends), пред-залежить (pre-depends), рекомендує (reccomends), пропонує (suggests), ламає (breaks), конфліктує (conflict), надає (provides), замінює (replace ), нарощує (enhances). Звичайно ж всі ці поля містять імена інших пакетів, без яких робота основного неможлива (як у випадку з пакетами в атрибуті depends), які додають додатковий функціонал (reccomends, suggests), або які можуть навіть заміняти вже існуючі в системі пакети (replace) і так далі.

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

Сценарії установки

Крім даних самого додатка та інформації про нього, в пакетах також поставляються сценарії, які визначають необхідні дії до / після установки / видалення пакета. Всі сценарії встановленого пакета зберігаються в каталозі низкоуровневой утиліти управління пакетами - dpkg - / var / lib / dpkg / info з відповідним розширенням (перевіримо це на прикладі все того ж mysql-server-5.5):

Ось за що відповідає кожен сценарій:

. preinst - виконується перед розпакуванням пакетів, зазвичай зупиняє пов'язані з ними служби;

. postinst - виконується відповідно після розпакування пакету і в більшості випадків служить для настройки тільки що розпакованого пакета - або самостійної, або за допомогою користувача шляхом запиту будь-яких даних і / або виведення попереджень. Звичайно ж зупинені на етапі виконання сценарію .preinst служби повинні бути запущені;

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

. postrm - виконується в найостаннішу чергу після видалення пакета, запускає назад необхідні служби, підчищає всі залишилися від пакета дані.

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

Утиліти управління пакетами

Існує досить багато утиліт управління пакетами, наприклад: apt, aptitude, dpkg, dselect, synaptic і інші. Всі вони володіють практично ідентичним функціоналом для «повсякденного» використання, але розрізняються деякими іншими функціями, інтерфейсом і т.д.

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

Треба розуміти, що високорівневі утиліти, такі як aptitude, засновані на apt, яка в свою чергу використовує низкоуровневую dpkg.

Основні відмінності

Основні відмінності полягають в наступному:

dpkg:

  • є основним низькорівневим інструментом для роботи з пакетами, вміє працювати з файлами .deb, на відміну від apt і aptitude, працює тільки з існуючими пакетами, завантажувати нічого не вміє, користуйтеся цим інструментом дуже акуратно;
  • не вміє працювати з залежностями і якщо встановлюється пакету потрібні будь-які інші, dpkg викине помилку і вам доведеться довантажувати залежності вручну;
  • веде дуже докладні логи в файлі /var/log/dpkg.log;

apt:

  • рекомендують використовувати для оновлення системи при переході між версіями дистрибутивів, а також просто при установці або оновленні пакетів завдяки більш надійному механізму залежності не будуть задоволені пакетів;
  • apt-get і apt-cache працюють тільки в режимі командного рядка;
  • apt-cache надає можливість пошуку з використанням регулярних виразів тільки в іменах і описах пакетів;
  • вміє працювати з уподобаннями тільки через файл / etc / apt / preferences, на відміну від aptitude;
  • менш вимоглива до апаратних ресурсів.

aptitude:

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

базові функції

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

aptitude apt-get / apt-cache опис aptitude update apt-get update оновлення метаданих локального архіву пакетів aptitude install foo apt-get install foo встановити актуальну на даний момент версію пакету foo з усіма необхідними залежностями aptitude safe-upgrade apt-get upgrade встановити актуальні на даний момент версії наявних в системі пакетів без видалення існуючих aptitude full-upgrade apt-get dist-upgrade встановити актуальні на даний момент версії наявних в системі пакетів з видаленням існуючих, якщо це необхідно aptitude remove foo apt-get remove foo видалення пакета foo без видалення його конфігураційний их файлів - apt-get autoremove видалення залежностей від відсутніх в системі пакетів aptitude purge foo apt-get purge foo видалення пакета foo разом з його файлами aptitude clean apt-get clean очищення локального сховища отриманих пакунків aptitude autoclean apt-get autoclean як і попередня команда, але видаляє також пакети, які більше не можуть бути отримані aptitude show foo apt-cache show foo відобразити детальну інформацію про пакет foo aptitude search <regex> apt-cache search <regex> пошук в імені і описі пакета відповідно до заданого регулярним виразом aptitude why <regex> - пояснення чому пределеніе пакет повинен бути встановлений в системі aptitude why-not <regex> - пояснення чому певний пакет не повинен бути встановлений в системі

розширені функції

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

Команда Опис COLUMNS = 120 dpkg -l <package_name_pattern> dpkg -L <Имя_Пакета> повний список встановлених файлів для певного пакету dpkg -L <Имя_Пакета> | egrep '/usr/share/man/man.*/.+' список довідкових сторінок певного пакету dpkg -S <шаблон_імен_файлов> список файлів встановлених пакетів, які мають збіги з шаблоном apt-file search <шаблон_імен_файлов> список пакетів з локального архіву, в іменах яких є збіг з шаблоном apt-file list <шаблон_імен_файлов> список вмісту пакетів з архіву, в назві яких є збіг з шаблоном dpkg-reconfigure <Имя_Пакета> переналаштувати певний пакет dpkg-reconfigure -p = low <Имя_Пакета> переналаштувати певний пакет з завданням мінімального пріоритету що надаються питань configure-debian централізована перенастроювання пакетів, які використовують debconf dpkg -audit аналіз системи на предмет частково встановлених пакетів dpkg -configure -a переналаштувати розпакований пакет. Разом з опцією -а все розпаковані, але не налаштовані пакети будуть налаштовані apt-cache policy <імя_двоічного_пакета> перевіряє стан встановлення пакунків apt-cache madison <Имя_Пакета> показує доступну версію і інформацію про архіви пакета apt-cache showsrc <імя_двоічного_пакета> показує вихідну інформацію про пакеті apt-get build-dep <Имя_Пакета> установка пакетів, необхідних для компіляції пакетів вихідних кодів aptitude build-dep <Имя_Пакета> install required packages to build package apt-get source <Имя_Пакета> скачування пакета вихідного коду dget <URL for dsc file> завантаження пакета вихідних кодів (може использова ься в сценарії установки ПО з нестабільної гілки дистрибутива) dpkg-source -x <Имя_Пакета> _ <версія> - <версія_debian> .dsc dpkg-source входить в пакет dpkg-dev. команда означає складання пакету з трьох файлів ( «* .orig.tar.gz», «* .debian.tar.gz» / »*. diff.gz») debuild binary збірка пакета make-kpkg kernel_image збірка ядра make-kpkg - initrd kernel_image збірка ядра з ключем initrd dpkg -i <Имя_Пакета> _ <версія> - <версія_debian> _ <arch> .deb установка пакета debi <Имя_Пакета> _ <версія> - <версія_debian> _ <arch> .dsc установка .dsc -пакети в систему dpkg -get-selections '*'> selection.txt зберегти список пакетів і їх статусів в файл dpkg -set-selections <selection.txt задати список станів вибору пакетів echo <Имя_Пакета> hold | dpkg -set-selections встановити стан певного пакета в hold

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

APT HOWTO (Obsolete Documentation)

HOWTO: сховище Debian

Часті питання про Debian GNU / Linux (Глави 6, 7)

Debian Reference (Глава 2)

Debian Policy Manual

Керівництво користувача aptitude

Короткий довідник по Debian

Також можуть бути корисні ресурси суміжних дистрибутивів:

репозиторії Ubuntu

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

comments powered by HyperComments

Новости