Являются ли обновления пакетов Debian атомарными?

Я хочу обновить коробку ubuntu без присмотра. Если обновление не удастся, мне придется лететь туда, чтобы исправить это вручную: P, поэтому мой вопрос:

Если во время обновления пакета ядра или пользовательского пространства произойдет отключение питания, будет ли система работать стабильно?

примеры сценариев:

  • обновить ядро ​​с помощью update-grub atomic или нет?
  • пакет A1 и B1 зависят от C1. Новые версии A2 и B2 зависят от C2, но не от C1. Обновление получило A2 и C2, а затем отключение питания. Что происходит? Я думаю, это зависит от того, как dpkg применяет обновления после загрузки.

Дополнение: если dpkg не может этого добиться, какие у меня есть варианты? Такие вещи, как docker, похоже, не решают эту проблему, поскольку хост-ОС все еще нуждается в обновлении. Спасибо!

Добавлено: что такое неконтролируемый способ: у меня тысячи таких ящиков работают в разных местах. Кто-то может случайно отключиться в любой момент. Для обновления мой сервер отправляет им команду «обновить до версии XXX». они выполняют команду автономно.


person Yey    schedule 23.02.2015    source источник
comment
Нет, даже не гарантируется, что система загрузится после обновления.   -  person hek2mgl    schedule 23.02.2015
comment
@ hek2mgl ... и я не думаю, что это особенность Debian. Может быть какой-то дистрибутив, где это не так, но я думаю, что это верно для подавляющего большинства из них...   -  person twalberg    schedule 23.02.2015
comment
@twalberg Если бы можно было обеспечить такой уровень стабильности, Debian просто реализовал бы это! ;)   -  person hek2mgl    schedule 23.02.2015
comment
Я думал, это просто компромисс? большинству пользователей эта гарантия не нужна. Но теоретически вы всегда можете иметь две копии, а затем атомарно создать новый файл конфигурации, указав новые версии каждого обновленного пакета. Запущенные процессы подхватывают изменения после перезагрузки.   -  person Yey    schedule 23.02.2015
comment
Если у вас есть тысячи в разных местах, у вас есть избыточность. И если вы ожидаете, что кто-то выдернет вилки, ожидайте худшего. У вас уже есть избыточность, и это ваша страховка.   -  person Ingo Bürk    schedule 24.02.2015
comment
@IngoBürk, я бы дал вам +1 за ожидаемую худшую часть, но ваше предположение об избыточности совершенно необоснованно: наличие тысяч этих ящиков в разных местах не означает, что все они заняты одним и тем же проблемным пространством, они просто имеют тот же способ управления.   -  person umläute    schedule 25.02.2015
comment
Они ни в малейшей степени не атомарны. Возможно, вы захотите изучить ОС, разработанную как атомарную, например Project Atomic.   -  person Michael Hampton    schedule 27.02.2015


Ответы (2)


Что вы подразумеваете под "неконтролируемым способом"? Обычно кто-то входит в систему через ssh и запускает apt-get или aptitude удаленно в командной строке. Обычно apt-get/aptitude запускается первым, скачивая необходимые пакеты. После завершения загрузки запускается dpkg, устанавливая эти пакеты в систему. Если произойдет системный сбой во время работы apt-get/aptitude, проблем не будет; вы просто остались с некоторыми частично загруженными пакетами и можете продолжить с того места, на котором остановились. Если произошел сбой во время работы dpkg, может возникнуть (и, вероятно, будет) проблема, но проблема также обычно решаема с помощью dpkg, используя такие опции, как dpkg --configure. dpkg достаточно надежен. Конечно, никаких гарантий никогда не бывает. Имейте в виду, что система обычно остается включенной во время обновлений, поэтому, если не возникнет какой-либо катастрофической проблемы, такой как удаление важных системных файлов, система, как правило, останется работоспособной и ее можно будет восстановить. Даже ssh-соединения обычно сохраняются во время обновления.

ПРИМЕЧАНИЕ. Выполнение обновлений небольшими порциями может снизить вероятность возникновения проблем. Но ваш пробег может отличаться.

ОБНОВЛЕНИЕ: Плакат разъяснил термин «неконтролируемый». Это, вероятно, не имеет никакого значения для моего ответа, за исключением того, что вы хотели бы убедиться, что вы ведете журналы на всех машинах, чтобы в случае проблемы у вас было некоторое представление о том, что пошло не так. Debian ведет журналы dpkg и aptавтоматически. Это /var/log/dpkg.log, /var/log/apt/history.log и /var/log/apt/term.log. term.log, вероятно, наиболее актуален с точки зрения проверки успешного завершения обновления.

person Faheem Mitha    schedule 23.02.2015
comment
Спасибо, Фахим. Я обновил вопросы о неконтролируемом пути. Но ваш пост, кажется, ответил мне независимо. - person Yey; 23.02.2015

Согласно моему опыту и документации, предоставленной командой Debian, вы можете полагаться на Debian для автоматического обновления стабильных систем.

Проверьте https://www.debian.org/doc/manuals/debian-faq/ch-uptodate.en.html и оценить.

Если aptitude будет убит, вам нужно будет вручную запустить

dpkg --configure -a

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

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

person lnrdo    schedule 23.02.2015
comment
спасибо за ссылку. однако в документе говорится: обратите внимание, что dpkg установит файлы обновления на место даже в работающей системе. Так что я не уверен, что это может выдержать отключение электричества. - person Yey; 23.02.2015
comment
У меня никогда не было проблем, и я пережил перебои в подаче электроэнергии и системные сбои. У меня были проблемы с обновлением основной версии, особенно с отсутствующей прошивкой и серьезными изменениями, такими как udev, или с тестированием/нестабильными версиями. Пожалуйста, читайте STABLE как текущую стабильную или старую стабильную версию Debian. - person lnrdo; 23.02.2015
comment
Использование контейнеров LXC для инкапсуляции сложности сделает задачу обновления хоста более быстрой и надежной. Меньшая занимаемая площадь упростит и ускорит обновление вашей хост-системы. Если вы сломаете свой контейнер, вам нужно будет просто получить доступ к хосту, чтобы исправить это. - person lnrdo; 23.02.2015
comment
имеет смысл. разделите сложности на хост и LXC и обновите их отдельно. - person Yey; 23.02.2015