Сценарий: в конфигурации системы с управлением версиями, основанной на 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? Должна быть предусмотрена возможность автоматизации процесса установки в целом.
stable
остается последовательным, по крайней мере, до следующего выпуска. стабильные обновления, тестирование и нестабильная версия содержат только последнюю версию любого данного пакета. Для чего-то еще, вы должны посмотреть на archive.debian.org (или snapshot.debian.org, как упомянуто в ответе SK)linux
имя pkg является исключением: в общем случае пакеты стабильной версии Debian идут с тем же именем пакета и меняют только номер версии.linux-image-amd64
никогда не меняет имя и всегда зависит от последнихlinux-image-4.9.0-*
. Новоеlinux-image-4.9.0-*
имя pkg помечает несовместимые изменения ABI ядра, необходимые для бэкпорта некоторых исправлений, и позволяет справиться с необходимой перекомпиляцией пользовательских модулей (dkms и т. Д.). Аналогично дляlinux-headers-*
.apt-get changelog packagename
Ответы:
Возможность воспроизвести конкретную настройку вплоть до точной версии - это ваше требование, а не требование Debian.
Debian поддерживает только одну версию каждого двоичного пакета в любом выпуске; Его аналог заключается в том, что мы тщательно следим за тем, чтобы обновления пакетов в любом конкретном выпуске не приводили к регрессиям, а когда это невозможно, документировали этот факт. Хранение нескольких версий данного пакета только увеличит нагрузку на поддержку и требования к тестированию: например, разработчики пакетов должны будут протестировать обновленные пакеты по всем доступным версиям используемых ими библиотек, а не только по поддерживаемым в настоящее время версиям ... Пакеты обновляются в стабильном выпуске только тогда, когда это действительно необходимо, т.е.исправить серьезную ошибку (включая проблемы безопасности). В случае с ядром это иногда означает, что ABI ядра изменяется, и в результате этого изменяется имя пакета (для принудительной перестройки зависимых пакетов); Есть метапакеты, которые вы можете использовать вместо жесткого кодирования ABI (
linux-image-amd64
,linux-headers-amd64
и т. д.).Однако для вашей ситуации есть обходной путь: каждый опубликованный исходный код и двоичный пакет архивируются на snapshot.debian.org . Когда вы создаете версионную настройку, вы можете выбрать соответствующий снимок (например, один из снимков сентября 2019 года ) и использовать его в качестве URL-адреса хранилища:
Если вы в конечном итоге полагаетесь на это, пожалуйста, используйте какое-нибудь кеширующее зеркало, например, Apt-Cacher NG . Это не только уменьшит нагрузку на сервер моментальных снимков, но и обеспечит наличие локальной копии всех необходимых вам пакетов.
(Ситуация с исходными пакетами несколько сложнее, и архивы содержат несколько версий некоторых исходных пакетов в данном выпуске из-за лицензионных зависимостей. Но это не имеет значения. Строго говоря, Debian предоставляет несколько версий некоторых двоичные файлы в поддерживаемых выпусках: текущая версия в текущем выпуске, вместе с любыми обновлениями в репозиториях безопасности и хранилищах обновлений, последние складываются в следующем выпуске, поэтому поддержание воспроизводимой конфигурации системы с управлением версиями возможно без прибегать к моментальным снимкам, если вы будете обновлять их каждый раз, когда будет сделан точный выпуск.)
источник
apt-cache madison packagename
будут показаны все версии, которыеapt
можно увидеть через настроенные репозитории.Не полагайтесь на серверы, не находящиеся под вашим контролем, для воспроизведения определенного состояния системы. Даже если серверы Debian достаточно надежны, вы никогда не знаете, что может произойти в будущем. Это особенно актуально для других репозиториев, которые вы можете использовать.
Вы должны поддерживать свое собственное зеркало, чтобы получить воспроизводимые состояния системы. Таким образом, вы даже можете получить рабочее состояние для ваших обычных систем и несколько состояний тестирования для новых конфигураций.
Инструмент управления репозиторием удачно способен создавать зеркала репозиториев. Вы можете выбрать пакеты для зеркалирования, создавать моментальные снимки содержимого репозитория в определенные моменты времени и объединять несколько зеркал или моментальных снимков в один репозиторий. Таким образом, вы можете полностью воспроизвести состояния системы.
источник
Хотя ответ Стивена Китта, безусловно, является одним из возможных решений, я думаю, что для вас будет безопаснее хранить собственные копии необходимых пакетов.
При записи настроек системы обязательно сохраняйте копии
.deb
файлов из/var/cache/apt/archives/
. Вы также можете использоватьapt-get download
.При восстановлении настроек системы вы должны быть очень строгими с
apt
чтобы избежать запуска потенциально опасных автоматических действий.Вероятно, будет проще использовать
dpkg
напрямую, чтобы установить именно то, что вы хотите.источник
/var/cache/apt
.pkgs-20190501
, затем опубликуйте каталог снимков в качестве репозитория. Во время сборки поместите версионный URL репо (напримерhttp://debmirror/pkgs-20190501/...
) в sources.list, затем запустите apt-get update, apt-get install $ pkgs и т. Д.