Ответ 1
Хотя вы, конечно, можете использовать rpm, deb или ipk для своих обновлений, мой предпочтительный способ (по крайней мере, для изображений с небольшим размером до разумного размера) состоит в том, чтобы иметь два изображения, хранящиеся на флешке, и обновлять только полные изображения rootfs.
Сегодня я, вероятно, посмотрю мета-swupdate, если я начну работать со встроенным Linux, используя OpenEmbedded/Yocto Project.
То, что я использовал для себя и нескольких клиентов, - это нечто большее:
- Файл обновления контейнера, который представляет собой tarball, состоящий из другого tarball (далее называемого файлом обновления), md5sum файла обновления и часто gpg-подпись.
- Программа обновления script хранится в запущенном изображении. Этот script отвечает за распаковку внешнего контейнера файла обновления, проверку правильности файла обновления с помощью md5sum и часто проверку криптографической подписи (обычно на основе gpg). Если файл обновления проходит эти тесты, программа обновления script ищет обновление script внутри файла обновления и выполняет это.
- Обновление script внутри файла обновления выполняет фактическое обновление, то есть обычно перезаписывает неиспользуемое изображение, извлекает и переписывает ядро, и если эти шаги будут успешными, попросите загрузчик использовать вместо этого новое ядро и изображение текущей системы.
Преимущество использования script, выполняющего фактическое обновление внутри файла обновления, заключается в том, что вы можете делать все, что вам нужно в будущем, за один шаг. Я сделал специальные изображения для обновления, которые обновляют FW подключенных модемов, или которые извлекли некоторую дополнительную диагностическую информацию вместо фактического обновления. Такая гибкость будет в будущем окупаться.
Чтобы сделать систему еще более надежной, пользователи-загрузчики имеют функцию bootcount, которая может содержать количество попыток загрузки, и если это число превышает пороговое значение, например 3, загрузчик выбирает загрузку другого изображения (как изображение, настроенное для загрузки, считается ошибочным). Это гарантирует, что изображение полностью повреждено, другое сохраненное изображение будет автоматически загружено.
Основной риск с этой схемой заключается в том, что вы обновляете изображение, механизм которого не работает. Обычно мы также реализуем какой-то механизм восстановления в загрузчике, так что загрузчик может перепрограммировать совершенно новую систему; хотя этот механизм спасения обычно означает, что раздел данных (используемый для хранения конфигураций, баз данных и т.д.) также будет удален. Это отчасти для обеспечения безопасности (не утечки информации) и отчасти для обеспечения того, чтобы после этой операции по спасению состояние системы было полностью известно нам. (Это большое преимущество, когда это выполняется неопытным техником далеко).