Как работает apt-get в деталях?

Как работает apt-get в деталях?

В настоящее время я работаю с Ubuntu и пытаюсь установить систему Debian на VM, что означает, что мне придется иметь дело с пакетами. Поскольку я новичок, я много читал об этом в Интернете и особенно в вики Debian (вики Ubuntu тоже полезны). В частности, я узнал, как создать локальный репозиторий и как правильно редактировать файл sources.list.

Однако у меня все еще остались некоторые вопросы о том, как это работает, подробности которых я не смог найти в Интернете.

  • Во-первых, когда вы используете онлайн-репозиторий. Я понял, что apt-get будет следовать по ссылке, которую вы написали в файле source.list, и искать архив Packages.gz. Я не понимаю, как этот простой архив (который, кажется, является только спискомустанавливаемые пакеты) разрешить установку пакета? Дает ли Packages.gz полезную информацию о том, как найти файл .deb и продолжить установку? Или это что-то другое?

  • Во-вторых, об архиве Sources.gz. Я читал, что это исходный код пакетов, перечисленных в Packages.gz, НО в большинстве случаев он не нужен. Так что, если я добавлю ссылку на этот Sources.gz в свой файл source.list, что это мне даст? В чем смысл?

  • Третье, о локальном репозитории; это связано с предыдущими вопросами. Я знаю, как создать локальный репозиторий с файлами .deb, но, допустим, у меня есть только этот архив Packages.gz: его будет недостаточно, верно? А если у меня есть архив Sources.gz, он будет работать?

  • Наконец, я видел в репозитории Debian, что в дополнение к репозиторию dist есть репозиторий pool с большим количеством .deb. Я знаю способ их установки (скачать .deb и его зависимости, установить их с помощью dpkg -i), но есть ли более простой способ? Что-то более автоматическое, что могло бы найти .deb в сети, найти его зависимости и установить все? (точно так же, как это делает apt-get, но насколько я понял, apt-get работает только с архивами Packages.gz и Sources.gz, а не напрямую с .deb)

Извините, это не совсем вопрос, а скорее список вопросов ^^, но все, что я нашел в Интернете, в основном сводилось к «apt-get, найдите пакет и его зависимости в онлайн-репозитории и установите его через dpkg», и мне хотелось бы получить больше подробностей об этом.

решение1

  1. Packages.gz содержит Filenameполе со значением, которое, вероятно, выглядит как pool/main/n/name-of-package/name-of-package_version_amd64.deb. Это говорит менеджеру пакетов, что нужно посмотреть на этот URL.
    Например, если у вас есть следующая строка в вашем sources.list(.d):
    deb https://some-domain.com/some-url some-distribution main
    У вас будет следующий файл:https://some-domain.com/some-url/dists/some-distribution/main/binary-amd64/Packages.gz
    Этот файл будет ссылаться на pool/main/n/name-of-package/name-of-package_version_amd64.deb, поэтому ваш менеджер пакетов будет искать https://some-domain.com/some-url/pool/main/n/name-of-package/name-of-package_version_amd64.deb.

  2. Sources.gz работает так же, но не является обязательным. Он работает с apt source, который извлечет исходный код, если вы захотите скомпилировать его самостоятельно, а не использовать готовые двоичные файлы.
    Это в основном полезно для системных администраторов, которые хотят пропатчить точную версию пакета, используемого дистрибутивом, а не для участников/любопытных людей, которые просто зайдут на домашнюю страницу проекта и выполнят инструкции по сборке там.

  3. Если пакет находится в каталоге pool дистрибутива, но не в Packages.gz, скорее всего, он находится в другом Package.gz. Обратите внимание, что в типичной sources.listстроке есть несколько слов:
    deb http://archive.ubuntu.com/ubuntu precise main universe multiverse
    main, universeи multiverseу каждого есть свой Packages.gzфайл. Возможно, вам придется включить некоторые из них, поскольку Debian, например, отключает их non-freeпо умолчанию. Однако некоторые пакеты по-прежнему будут недоступны (даже не в pool). Вы можете добавить ненадежные репозитории (например, PPA в Ubuntu), упаковать отсутствующую программу самостоятельно (чтобы вы и другие люди могли использовать свой менеджер пакетов для управления этой программой) или просто собрать и установить ее самостоятельно (вам следует использовать префикс, /usr/localчтобы избежать конфликтов с вашим менеджером пакетов).

  4. При появлении нового (версии) пакета Releaseфайл для дистрибутива обновляется. Это позволяет apt updateузнать, что его нужно загрузить повторно Packages.gz.

Связанный контент