Як реально працює apt-get?


34

Гаразд, я розумію, як я можу використовувати apt-get {install|upgrade|remove} mypackagesдля встановлення, оновлення чи видалення бінарних файлів, а також файлів даних їх конфігурації та залежностей (насправді removeвидалятиме лише бінарні файли, якщо не передбачені додаткові прапорці).

Я шукаю не те, як воно використовується як manописане, але високий рівень того, що він робить. Моя кінцева мета - створити для мене спосіб встановити та керувати деяким спеціальним програмним забезпеченням (створеним файлом make) на декількох віддалених машинах, і мені потрібно дізнатися більше про процес. Якщо відповіді на це запитання ґрунтуються на тому, який розподіл використовується, будь ласка, підстройте Debian.

Окрім того, як це працює, у мене є такі конкретні питання:

  1. Як клієнт, який отримує доступ до вкладеного сховища, відслідковує файли?
  2. Повинен чи бути сховище розміщене в одній операційній системі (тобто чи може схоже сховище розміщене на Redhat)?
  3. Як вказані місця для встановлення файлів? Це вказано .debфайлом?
  4. Як доступ до віддаленої машини отримує доступ до сховища? Це просто ftp (s) або http (s)?
  5. Це машина, на якій розміщено сховище, на якому працює спеціальне програмне забезпечення (наприклад, gitlab для сховища git), чи це лише якась структурована файлова система?

Відповіді:


47

Вам потрібно поглянути на https://wiki.debian.org/Packaging - навчальний посібник з упаковки там вам дуже допоможе, а також частини нового посібника з обслуговування.

Що стосується ваших питань, щоб:

  1. Репозиторій містить "список" файлів. Наприклад, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updateзавантажує ці файли списку і зберігає їх у /var/lib/apt/lists. Файли списку містять список усіх пакетів, включаючи купу метаданих та відносну URL-адресу, на яку можна знайти .deb. (Вони читаються у звичайному тексті файли із звичайним текстом, тому ви можете просто подивитися).

  2. ОС не має значення. Ви можете розмістити його в Windows, якщо хочете. (Ну, можливо, у вас виникнуть проблеми з іменами файлів, які Windows не любить.) (Див. Також №4 та №5).

  3. Так, це всередині файлу deb. Файл deb є насправді архівом (використовуючи ar). Всередині - декілька файлів смоли; один із них (по суті) добувається до /.

  4. Це просто HTTP (або HTTPS, або FTP, або ... apt-get підтримує безліч протоколів). Хоча нічого особливого. Зауважте, що існують файли випуску, підписані gpg, які гарантують цілісність навіть без HTTPS. Дзеркала Debian в основному використовують HTTP, а не HTTP. (Кілька підтримують HTTPS також для конфіденційності).

  5. Це просто структурована файлова система.

Швидкий огляд високого рівня того, як apt-get взаємодіє з джерелом пакету:

  1. Ви налаштовуєте, які джерела слід шукати у файлі izvor.list. Розгляньте такий рядок:

    deb http://http.us.debian.org/debian/ stretch main
    

    debкаже, що це джерело для отримання .deb (бінарних) файлів; тоді є URL-префікс, suite / release ("stretch") та компонент ("main").

  2. apt-get має список архітектур, він отримує його від dpkg. Скажімо Давайте dpkg --print-architectureє amd64. apt-get тепер може створити URL-адреси, які фактично збирається завантажувати, поєднуючи URL-префікс, слово "dists", набір, компонент та архітектуру. Потім він застосовує кілька фіксованих імен файлів, наприклад "Packages.xz". Це дає URL-адресу вище (у №1). Є ще кілька файлів із визначеними іменами / шляхами, як, наприклад, файл випуску http://http.us.debian.org/debian/dists/stretch/Release та його підпис (те саме, із додаванням .gpg). Це всі (можливо стислі) файли простого тексту. Файл випуску містить контрольні суми для інших файлів, які apt-get збирається завантажити, як-от Packages.xz.

  3. Файл Packages.xz перераховує всі пакети в цьому наборі / кодовому імені / архітектурі. Він також дає шлях, де цей файл знаходиться; наприклад pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Коли ви запитуєте apt-get для завантаження пакета, він використовує це місце + базову URL-адресу для завантаження пакета, так що цей пакет знаходиться за адресою http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. Інший цікавий каталог sourceзамість binary-amd64. Це використовується для ваших deb-srcзаписів; вона містить інформацію про вихідні пакети (і в іншому випадку досить схожа).

  6. Є деякі інші речі (всі вони необов'язкові, я вважаю), які можуть бути частиною сховища (тобто доступні через HTTP): різняться між різними версіями файлу Packages.xz; переклади описів пакетів, повний перелік кожного встановленого файлу та до якого пакету він належить (Contents-amd64.gz, який використовується, наприклад, apt-файл, а не apt-get) тощо. Це, ймовірно, не стосується вас, але їх можна побачити, переглянувши http://http.us.debian.org/debian/dists/stretch/ ; більшість з них - це текстові файли.

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


Бийте мене до цього ;-). unix.stackexchange.com/q/285635/86440 охоплює аспект цілісності речей (пункт 4). Підтримка FTP на дзеркальній стороні нещодавно була деактивована IIRC.
Стівен Кітт

Щодо №2, debian.org/doc/manuals/distribute-deb/… говорить про інше. Дякую
користувач1032531

Відносно №5, який сенс у wiki.debian.org/DebianRepository/…
user1032531

1
@ user1032531 №2. Створення пакетів найкраще робити на Debian. Але ваш веб-сервер може бути чим завгодно. (Як правило, ви створюєте пакет на своєму хості збирання, можливо, навіть у всій структурі сховища, а потім завантажуєте його на веб-сервер.) # 5. Ці інструменти допомагають вам створити структуровану файлову систему, включаючи всі файли списків, файли підписаних релізів тощо (їх, мабуть, найпростіше запустити на Debian).
дероберт

2
Пакети @FaheemMitha (деякі компресії, сучасні прихильні переваги .xz), безумовно, завантажуються /var/lib/apt/lists/. Зміст завантажується apt-файлом та auto-apt.
дероберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.