Мы разрабатываем устройство на работе, которое доставляется в места с низким или несуществующим доступом в Интернет. При обновлении нашего программного обеспечения у нас есть полный набор технологий для обеспечения актуальности сервера, например, puppet и даже apt-offline.
Сначала у нас не было установлено apt-offline, и, к счастью, мы узнали об этом позже. , это была небольшая загрузка для его установки, которая подходила для большинства наших устройств. У всех пока низкий уровень интернета (от 56 до 256 Кб), поэтому загрузка 1,8 Мб заняла некоторое время, но мы заставили его работать.
Теперь, когда у нас есть либо исходная подпись машины, потому что мы смогли сгенерировать ее на расстоянии, либо с использованием подписи по умолчанию, созданной с того же установочного USB-ключа, мы можем сгенерировать пакет обновлений для этих машины и отправьте его вместе с USB-диском обновления для нашего устройства.
У меня проблема в том, что у Puppet также есть пакеты для установки. Мы составили список пакетов, которые необходимо установить, но слишком поздно поняли, что apt-offline генерирует подпись на автономном компьютере с этим списком с помощью --install-packages.
Мы пробовали
И нам не очень повезло ...
Осталось единственное, но очень неприятное решение - установить предварительное обновление базового устройства. Установите apt-offline и сгенерируйте новую подпись по умолчанию, которую все будут использовать с этими --install-packages, но опять же, проблема в том, что когда я устанавливаю apt-offline, я получаю, например, обновленные пакеты для python. Эти пакеты не будут упакованы с помощью apt-offline, когда я выполняю «apt-offline get», потому что подпись указывает на их актуальность.
Итак, мы ищем:
Спасибо
Итак, нам пришлось пойти совершенно другим путем и в итоге сделать следующее:
Создайте список версий всех установленных пакетов, используя:
dpkg-query -W -f '${status} ${package} ${version}\n' | sed -n 's/^install ok installed //p' | sed 's/ /=/' | sort | tr -d '\15\32'
Получите выбор, используя:
debconf-get-selections | sed '/^#,*/d'
Загрузите все deb-файлы, используя:
cat "$package_list" | xargs apt-get download
Затем, используя:
dpkg-scanpackages
Мы смогли создать наш собственный локальный репозиторий пакетов, вставить этот репозиторий в качестве первого элемента в список источников и просто запустить apt install с все исправленные версии. Et Voila!