Почему предыдущие версии пакетов Debian исчезают в репозиториях пакетов? (очень важно для конфигурации системы с управлением версиями)

39

Сценарий: в конфигурации системы с управлением версиями, основанной на Puppet, Chef и т. Д., Требуется воспроизвести определенное состояние системы. Это делается путем явного указания версий системного пакета.

Недавно мы столкнулись с проблемой, когда некоторые версии пакетов отсутствовали в репозиториях Debian. Один пример: пакет "patch" требовался в версии 2.7.5-1 + deb9u1, но был доступен только 2.7.5-1 + deb9u2. Требуется другой, еще более серьезный пример: «linux-headers-4.9.0-9-common» (из-за установки соответствующего ядра), и доступен только «linux-headers-4.9.0-11-common».

Это делает невозможным воспроизведение определенного состояния системы.

Вышеуказанные пакеты являются лишь примерами (с которыми я на самом деле сталкивался). Я заинтересован в понимании и решении общей проблемы.

Какова идея этих обновлений, «исчезающих» пакетов и версий пакетов?

Где я могу получить предыдущие версии (не очень старые версии, но версии, имеющие пару недель) пакетов Debian? Должна быть предусмотрена возможность автоматизации процесса установки в целом.

Фло
источник
1
В некоторой степени зависит от программного обеспечения, используемого для настройки хранилища. Представление, iirc, позволяет только одну версию каждого пакета
Muru
2
stableостается последовательным, по крайней мере, до следующего выпуска. стабильные обновления, тестирование и нестабильная версия содержат только последнюю версию любого данного пакета. Для чего-то еще, вы должны посмотреть на archive.debian.org (или snapshot.debian.org, как упомянуто в ответе SK)
cas
5
Есть ли причина, по которой вы не используете свой собственный репозиторий, в котором вы можете управлять политикой замены и версиями пин-кодов (что будет иметь преимущество в том, что будущие автоматические установки будут локальными)?
Эрик Тауэрс
2
Новое linuxимя pkg является исключением: в общем случае пакеты стабильной версии Debian идут с тем же именем пакета и меняют только номер версии. linux-image-amd64никогда не меняет имя и всегда зависит от последних linux-image-4.9.0-*. Новое linux-image-4.9.0-*имя pkg помечает несовместимые изменения ABI ядра, необходимые для бэкпорта некоторых исправлений, и позволяет справиться с необходимой перекомпиляцией пользовательских модулей (dkms и т. Д.). Аналогично для linux-headers-*.
Ignis
1
В чем идея этих обновлений apt-get changelog packagename
ignis

Ответы:

65

Возможность воспроизвести конкретную настройку вплоть до точной версии - это ваше требование, а не требование Debian.

Debian поддерживает только одну версию каждого двоичного пакета в любом выпуске; Его аналог заключается в том, что мы тщательно следим за тем, чтобы обновления пакетов в любом конкретном выпуске не приводили к регрессиям, а когда это невозможно, документировали этот факт. Хранение нескольких версий данного пакета только увеличит нагрузку на поддержку и требования к тестированию: например, разработчики пакетов должны будут протестировать обновленные пакеты по всем доступным версиям используемых ими библиотек, а не только по поддерживаемым в настоящее время версиям ... Пакеты обновляются в стабильном выпуске только тогда, когда это действительно необходимо, т.е.исправить серьезную ошибку (включая проблемы безопасности). В случае с ядром это иногда означает, что ABI ядра изменяется, и в результате этого изменяется имя пакета (для принудительной перестройки зависимых пакетов); Есть метапакеты, которые вы можете использовать вместо жесткого кодирования ABI ( linux-image-amd64, linux-headers-amd64и т. д.).

Однако для вашей ситуации есть обходной путь: каждый опубликованный исходный код и двоичный пакет архивируются на snapshot.debian.org . Когда вы создаете версионную настройку, вы можете выбрать соответствующий снимок (например, один из снимков сентября 2019 года ) и использовать его в качестве URL-адреса хранилища:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

Если вы в конечном итоге полагаетесь на это, пожалуйста, используйте какое-нибудь кеширующее зеркало, например, Apt-Cacher NG . Это не только уменьшит нагрузку на сервер моментальных снимков, но и обеспечит наличие локальной копии всех необходимых вам пакетов.

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

Стивен Китт
источник
Обратите внимание, что иногда доступны некоторые предыдущие версии - apt-cache madison packagenameбудут показаны все версии, которые aptможно увидеть через настроенные репозитории.
ivanivan
5
(Пожалуйста, не перегружайте серверы моментальных снимков / архивов, используя их без необходимости, вместо близлежащего зеркала. Поэтому оставьте ваше обычное зеркало в вашем списке sources.list с более высоким приоритетом, чем у моментального снимка, чтобы все еще доступные с него пакеты могли быть получены таким образом .)
Питер Кордес
3
Просто чтобы убедиться, что я правильно понял: на практике речь идет не о версиях, которые я указываю при установке пакетов (поскольку более старые версии могут быть недоступны), а скорее о состоянии хранилища пакетов, которое я использую. Итак, если я хочу «свежий» Debian 9.8, мне нужно, чтобы хранилище пакетов находилось в том же состоянии (например, снимок или хранилище, которое я создал сам), и тогда, конечно, правильный пакет linux-header- * остается доступным , Если я хочу перейти на Debian 9.9, я возвращаю репозиторий пакетов в соответствующее состояние и запускаю apt-get dist-upgrade. Это верно?
Flo
2
Да, это правильно.
Стивен Китт
3
@ Обратите внимание, что точечные выпуски (например, Debian X.9 или X.8) предназначены только для загружаемых iso, поэтому новые установки не загружают тонны пакетов. В репозиториях нет различия между точечным выпуском, вы всегда получаете последний пакет.
Брайам
16

Не полагайтесь на серверы, не находящиеся под вашим контролем, для воспроизведения определенного состояния системы. Даже если серверы Debian достаточно надежны, вы никогда не знаете, что может произойти в будущем. Это особенно актуально для других репозиториев, которые вы можете использовать.

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

Инструмент управления репозиторием удачно способен создавать зеркала репозиториев. Вы можете выбрать пакеты для зеркалирования, создавать моментальные снимки содержимого репозитория в определенные моменты времени и объединять несколько зеркал или моментальных снимков в один репозиторий. Таким образом, вы можете полностью воспроизвести состояния системы.

чарльстон
источник
8

Хотя ответ Стивена Китта, безусловно, является одним из возможных решений, я думаю, что для вас будет безопаснее хранить собственные копии необходимых пакетов.

При записи настроек системы обязательно сохраняйте копии .debфайлов из /var/cache/apt/archives/. Вы также можете использовать apt-get download.

При восстановлении настроек системы вы должны быть очень строгими с apt чтобы избежать запуска потенциально опасных автоматических действий.

Вероятно, будет проще использовать dpkgнапрямую, чтобы установить именно то, что вы хотите.

Стиг Хеммер
источник
6
Еще лучшим подходом IMO будет использование локального кэша APT. Это позволяет избежать проблем в третьем абзаце, а также избежать необходимости собирать урожай /var/cache/apt.
Стивен Китт
3
Есть два варианта: один - использовать что-то вроде apt-mirror для клонирования всего репозитория, другой - загружать только определенные пакеты и зависимости . Затем сделайте снимок каталога - например, с помощью btrfs as pkgs-20190501, затем опубликуйте каталог снимков в качестве репозитория. Во время сборки поместите версионный URL репо (например http://debmirror/pkgs-20190501/...) в sources.list, затем запустите apt-get update, apt-get install $ pkgs и т. Д.
bain