Как эффективно управлять apt на нескольких машинах?

11

Я управляю около 30 серверами Ubuntu, используя Puppet. Я видел много ссылок на cron-apt и apticron как на подходы к обновлению своих пакетов, но я не смог найти способ централизованно управлять процессом. С помощью cront-apt / apticron мне все равно нужно было бы войти на каждый хост и aptitude updateвыполнить обновление. Не говоря уже о проверке уведомлений со всех 30 машин при каждом обновлении основного пакета.

Там должен быть лучший способ. Какие-либо предложения?

Insyte
источник

Ответы:

3

Пейзаж может быть интересен для вас. Это «официальный» инструмент управления для управления большими развертываниями Ubuntu, и Canonical, вероятно, очень хочет получить ваши деньги за его использование.

RE-EDIT:

Во-первых, отказ от ответственности; Я не использовал зеркалирование для Debian или Ubuntu, поэтому я не знаком с программным обеспечением.

Во-вторых, кажется, что apt-mirror будет «слишком тяжелым» решением, мои извинения. Первоначальная идея заключалась в том, что у вас будет отдельная тестовая машина (или тестовая среда, возможно, виртуальная машина?) Для развертывания обновления. Как только вы будете удовлетворены производительностью обновления, вы перетащите пакет в свое зеркало «развертывания» (из официальных источников будет локальное зеркало и дополнительное зеркало только для обновлений, которые вы хотите развернуть). Затем удаленные машины будут запускать обновление в заранее установленное время и извлекать его из зеркала «развертывания» на каждую машину, задание cron, состоящее из:

apt-get update && apt-get upgrade --quiet --assume-yes

К сожалению, когда я начал читать подробности, кажется, что apt-mirrorон потянет все виды вещей, а не только пакеты, которые вы ищете. Итак, я собираюсь отказаться от этой идеи, хотя концепция имеет некоторые достоинства.

Эйвери Пэйн
источник
Пейзаж выглядит интересно. Я должен смотреть на это более внимательно. Я не понимаю, как запуск локального apt-зеркала (что я сейчас и делаю) поможет мне утвердить / просмотреть ожидающие обновления. Вы можете это уточнить?
Insyte
14

Сотрудник обнаружил и кратко изучил apt-dater, который является «удаленным диспетчером обновления пакетов на основе терминала».

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

Полагается на ssh и sudo на управляемых машинах.

см. http://www.ibh.de/apt-dater/

Сам не использовал, так что я не могу это одобрить, но это звучит близко к тому, что вы ищете.

Джефф
источник
Это выглядит очень многообещающе. Insyte, я собираюсь рекомендовать этот ответ своим собственным. Несмотря на то, что вы можете выполнять все шаги, которые я описал, вы действительно хотите потратить на это время, когда вы, вероятно, могли бы сделать очень быструю настройку этого и просто продолжить жизнь? @ Джефф, +1 за хорошее предложение.
Эйвери Пейн
4

Поскольку вы уже используете Puppet, самый простой способ сделать это (и лучший для целей управления изменениями / отслеживания) - указать нужную версию пакетов, которые вы хотите установить в манифесте puppet. Вы следите за списком объявлений о безопасности, и когда что-то, что вы используете, проходит через вас, просто обновите Puppet, чтобы сказать «установить эту новую версию этого пакета». Предполагая, что вы используете контроль ревизий в своих манифестах, вы затем знаете, когда была изменена «политика», и отчеты из Puppet точно показывают, когда именно это изменение было внесено (так что вы можете легко сопоставить это с любыми последующими событиями журнала).

ombble
источник
Это в значительной степени то, что мы делаем. Мы не используем тип пакета puppet, так как каждый сервер будет устанавливать каждый пакет. Вместо этого мы пишем файл на сервере с именем и версией пакета, а затем используем сценарий для их запуска, проверяем, установлены ли они, и затем пытаемся установить их. Вторая часть - это скрипт, который читает мою почтовую папку с письмами apticron и собирает все пакеты, которые необходимо обновить, и переписывает файл манифеста. Мы не совсем уверены, насколько хорошо этот метод работает.
Дэвид Пашли
2
Почему тип пакета Puppet устанавливает все пакеты на каждом компьютере? Вы помещаете разделы для каждого пакета в соответствующий класс или определенный тип, чтобы он устанавливался только на соответствующие машины. Если вы хотите централизовать список версий в один файл, создайте большой список виртуальных ресурсов, а затем реализуйте их при необходимости.
womble
2

Посмотрите на clusterssh (apt-get install clusterssh):

$ cssh server1 server2 server3 ...

Тиаго Фигейро
источник
1
Это на самом деле работает до сих пор в 10.9.3 ... довольно забавно его использовать
Джонатан С. Фишер
1

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

По сути, вы настраиваете свои производственные машины на автоматическое обновление с вашего собственного локального репо, и вы обновляете этот репо только после того, как вы обновили свою тестовую среду до самой новой версии того, что вы запускаете.

Apticron не очень хорошо масштабируется, он спроектирован для работы в довольно небольших средах, но у него есть несколько положительных моментов:

  • Он не только отправляет вам список, но также и журналы изменений для обновляемых пакетов.
  • Для получения журналов изменений загружаются пакеты, поэтому при обновлении вам не нужно ждать, пока они загрузятся.
theotherreceive
источник
0

Иногда назад я писал низкоуровневый / грязный сценарий автоматизации Fabric (fabfile), чтобы удовлетворить аналогичные требования, вы можете проверить его по адресу:

https://gist.github.com/lgaggini/2be3c5bb47b8ce9267bd

lgaggini
источник