Внедрение системы обновления / обновления для встроенных устройств Linux

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

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

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

  • Корневая файловая система целевого объекта, которая используется для создания образов файловой системы, не имеет версий (Я не думаю, что у нас вообще есть оригинальные rootfs).
  • Файлы rootfs, которые входят в обновление, выбираются вручную (вместо diff)
  • Обновление постоянно растет, и это становится лавашом. Теперь существует разделение между обновлением и обновлением, где обновление содержит более крупные изменения rootfs.
  • У меня сложилось впечатление, что проверки согласованности в обновлении довольно хрупкие, если они вообще реализованы.

Требования:

  • Приложение Пакет обновления не должен быть слишком большим, и он также должен иметь возможность изменять корневую файловую систему в случае внесения изменений.
  • Обновление может быть намного больше и содержать только то, что входит в корневую файловую систему (например, новые библиотеки, ядро ​​и т. д.). Для обновления может потребоваться установка обновления.
    Может ли обновление содержать всю корневую файловую систему и просто сделать dd на флэш-накопителе целевого объекта?
  • Создание пакетов обновления / обновления должно быть максимально автоматическим.

Мне абсолютно необходимо какой-то способ управлять версиями корневой файловой системы. Это должно быть сделано таким образом, чтобы я мог вычислить из него какой-то diff , который можно использовать для обновления rootfs целевого устройства.

Я уже изучал Subversion, поскольку мы используем его для нашего исходного кода, но это не подходит для корневой файловой системы Linux (права доступа к файлам, специальные файлы и т. Д.).

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

Используя такие diff , я полагаю, что Тогда обновление просто станет пакетом, содержащим инкрементные обновления на основе известного состояния корневой файловой системы.

Что вы думаете и идеи по этому поводу? Как бы вы внедрили такую ​​систему? Я предпочитаю простое решение, которое можно реализовать в кратчайшие сроки.

49
задан Craig McQueen 21 April 2015 в 13:00
поделиться