Как работает apt-get?


34

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

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

В дополнение к тому, как это работает, у меня есть следующие конкретные вопросы:

  1. Как клиент, обращающийся к хранилищу apt, отслеживает файлы?
  2. Должно ли хранилище размещаться в той же операционной системе (то есть может ли хранилище apt размещаться на 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). Внутри несколько файлов tar; один из них (по существу) извлекается в /.

  4. Это просто HTTP (или HTTPS, или FTP, или ... apt-get поддерживает множество протоколов). Ничего особенного, хотя. Обратите внимание, что существуют файлы Release, подписанные с помощью gpg, которые гарантируют целостность даже без HTTPS. Зеркала Debian в основном используют HTTP, а не HTTP. (Некоторые поддерживают HTTPS также для конфиденциальности).

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

Краткий обзор того, как apt-get взаимодействует с источником пакета:

  1. Вы настраиваете, какие источники смотреть в вашем файле sources.list. Рассмотрим строку вроде:

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

    debговорит, что это источник для получения .deb (двоичных) файлов; затем есть URL-префикс, suite / release ("stretch") и component ("main").

  2. У apt-get есть список архитектур, он получает его из dpkg. Скажем Давайте dpkg --print-architectureесть amd64. Теперь apt-get может создавать URL-адреса, с которых он будет загружаться, путем объединения префикса URL-адреса, слова «dists», набора, компонента и архитектуры. Затем он использует несколько фиксированных имен файлов, таких как «Packages.xz». Это дает URL выше (в # 1). Есть еще несколько файлов с определенными именами / путями, например, файл Release 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-file, а не apt-get) и т. д. Это, вероятно, не относится к вам, но вы можете увидеть их все, просматривая http://http.us.debian.org/debian/dists/stretch/ ; большинство из них - текстовые файлы.

Все эти файлы представляют собой простой текст. Теоретически они могут быть созданы вручную. На практике каждый использует один из этих инструментов генерации репозитория . Здесь - и я предупреждаю, что это был выбор, сделанный давным-давно, поэтому может быть устаревшим - мы используем мини-dinstall. Результатом этих инструментов являются обычные файлы или, в худшем случае, символические ссылки. Вы можете rsync их на любой веб-сервер, который вы хотите.


Ударь меня к этому ;-). unix.stackexchange.com/q/285635/86440 охватывает аспект целостности вещей (пункт 4). Поддержка FTP на зеркальной стороне была недавно деактивирована IIRC.
Стивен Китт

Что касается # 2, debian.org/doc/manuals/distribute-deb/… утверждает по-другому. Спасибо
user1032531

Что касается # 5, что точка wiki.debian.org/DebianRepository/...
user1032531

1
@ user1032531 # 2. Создание пакетов лучше всего делать в Debian. Но ваш веб-сервер может быть чем угодно. (Как правило, вы создаете пакет на хосте сборки, возможно, даже всю структуру хранилища, а затем загружаете его на веб-сервер.) # 5. Эти инструменты помогают вам создать структурированную файловую систему, включая все файлы списков, файлы с подписанными выпусками и т. Д. (Вероятно, их проще всего запускать в Debian).
Дероберт

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