Назад | Перейти на главную страницу

Обновление автономного сервера ubuntu

Мы разрабатываем устройство на работе, которое доставляется в места с низким или низким уровнем доступа в Интернет. При обновлении нашего программного обеспечения у нас есть полный набор технологий для обеспечения актуальности сервера, например, 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'

Загрузите все debs, используя:

cat "$package_list" | xargs apt-get download

Затем с помощью:

dpkg-scanpackages

Мы смогли создать собственный локальный репозиторий пакетов, вставить этот репозиторий в качестве первого элемента в список источников и просто запустить apt install со всеми фиксированными версиями. И вуаля!