Хорошо, я понимаю, как я могу использовать apt-get {install|upgrade|remove} mypackages
для установки, обновления или удаления двоичных файлов, а также их файлов данных конфигурации и зависимостей (фактически, remove
удаляются только двоичные файлы, если не указаны дополнительные флаги).
Я не ищу, как это используется, как man
описывает это, но на высоком уровне, что он делает. Моя конечная цель - создать для меня средство для установки и управления некоторым пользовательским программным обеспечением (созданным с помощью файла make) на нескольких удаленных компьютерах, и мне нужно больше узнать об этом процессе. Если ответы на этот вопрос основаны на том, какой дистрибутив используется, адаптируйте Debian.
В дополнение к тому, как это работает, у меня есть следующие конкретные вопросы:
- Как клиент, обращающийся к хранилищу apt, отслеживает файлы?
- Должно ли хранилище размещаться в той же операционной системе (то есть может ли хранилище apt размещаться на redhat)?
- Как указаны места для установки файлов? Это указано в
.deb
файле? - Как удаленный компьютер получает доступ к хранилищу? Это просто ftp (s) или http (s)?
- На машине, на которой размещается репозиторий, работает специальное программное обеспечение (например, gitlab для git-репозитория) или это просто некая структурированная файловая система?
источник
Ответы:
Вам нужно взглянуть на https://wiki.debian.org/Packaging - там вам очень поможет учебник по упаковке, а также части руководства для нового сопровождающего.
Что касается ваших вопросов, то по порядку:
Репозиторий содержит «список» файлов. Например, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz .
apt-get update
загружает эти файлы списка и сохраняет их в/var/lib/apt/lists
. В списке файлов перечислены все пакеты, включая набор метаданных и относительный URL-адрес, по которому можно найти .deb. (Это простые для чтения текстовые файлы, так что вы можете просто посмотреть на них).ОС не имеет значения. Вы можете разместить его на Windows, если хотите. (Что ж, у вас могут возникнуть проблемы с именами файлов, которые не нравятся Windows.) (См. Также № 4 и № 5).
Да, это внутри файла deb. Файл deb на самом деле является архивом (используя
ar
). Внутри несколько файлов tar; один из них (по существу) извлекается в/
.Это просто HTTP (или HTTPS, или FTP, или ... apt-get поддерживает множество протоколов). Ничего особенного, хотя. Обратите внимание, что существуют файлы Release, подписанные с помощью gpg, которые гарантируют целостность даже без HTTPS. Зеркала Debian в основном используют HTTP, а не HTTP. (Некоторые поддерживают HTTPS также для конфиденциальности).
Это просто структурированная файловая система.
Краткий обзор того, как apt-get взаимодействует с источником пакета:
Вы настраиваете, какие источники смотреть в вашем файле sources.list. Рассмотрим строку вроде:
deb
говорит, что это источник для получения .deb (двоичных) файлов; затем есть URL-префикс, suite / release ("stretch") и component ("main").У 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.В файле Packages.xz перечислены все пакеты в этом наборе / кодовое имя / архитектура. Это также дает путь, где находится этот файл; например
pool/main/0/0ad/0ad_0.0.21-2_amd64.deb
.Когда вы просите apt-get загрузить пакет, он использует это местоположение + базовый URL для загрузки пакета, поэтому этот пакет находится по адресу http://http.us.debian.org/debian/pool/main/0/0ad. /0ad_0.0.21-2_amd64.deb
Другой интересный каталог
source
вместоbinary-amd64
. Это используется для вашихdeb-src
записей; он содержит информацию о пакетах с исходным кодом (в остальном он довольно похож)Есть некоторые другие вещи (все они необязательны, я полагаю), которые могут быть частью репозитория (то есть доступны через HTTP): различия между различными версиями файла Packages.xz; переводы описаний пакетов, полный список каждого устанавливаемого файла и к какому пакету он принадлежит (Contents-amd64.gz, используется, например, apt-file, а не apt-get) и т. д. Это, вероятно, не относится к вам, но вы можете увидеть их все, просматривая http://http.us.debian.org/debian/dists/stretch/ ; большинство из них - текстовые файлы.
Все эти файлы представляют собой простой текст. Теоретически они могут быть созданы вручную. На практике каждый использует один из этих инструментов генерации репозитория . Здесь - и я предупреждаю, что это был выбор, сделанный давным-давно, поэтому может быть устаревшим - мы используем мини-dinstall. Результатом этих инструментов являются обычные файлы или, в худшем случае, символические ссылки. Вы можете rsync их на любой веб-сервер, который вы хотите.
источник
/var/lib/apt/lists/
. Содержимое загружается с помощью apt-file и auto-apt.