У меня есть приложение, которое работает на встроенном устройстве Linux, и время от времени вносятся изменения в программное обеспечение, а иногда и в корневую файловую систему или даже в установленное ядро.
В текущей системе обновлений содержимое старого каталога приложения просто удаляется, а новые файлы копируются поверх него. После внесения изменений в корневую файловую систему новые файлы доставляются как часть обновления и просто копируются поверх старых.
Теперь у текущего подхода есть несколько проблем, и я ищу способы улучшить ситуацию:
- Корневая файловая система цели, которая используется для создания образов файловой системы, не имеет версий (я не думаю, что у нас даже есть оригинальные rootfs).
- Файлы rootfs, которые входят в обновление, выбираются вручную (вместо diff)
- Обновление постоянно растет, и это становится лавашем. Теперь существует разделение между обновлением и обновлением, когда обновление содержит более крупные изменения rootfs.
- У меня сложилось впечатление, что проверки согласованности в обновлении довольно хрупкие, если они вообще реализованы.
Требования:
- Пакет обновления приложения не должен быть слишком большим, а также должен иметь возможность изменять корневую файловую систему в случае внесения изменений.
- Обновление может быть намного больше и содержать только то, что входит в корневую файловую систему (например, новые библиотеки, ядро и т. Д.). Для обновления может потребоваться установка обновления.
Может ли обновление содержать всю корневую файловую систему и просто выполнитьdd
на флэш-накопителе целевого объекта? - Создание пакетов обновлений / обновлений должно быть как можно более автоматическим.
Мне абсолютно необходим способ управления версиями корневой файловой системы. Это должно быть сделано таким образом, чтобы я мог вычислить из него какой-то diff
, который можно использовать для обновления rootfs целевого устройства.
Я уже изучал Subversion, поскольку мы используем его для нашего исходного кода, но это не подходит для корневой файловой системы Linux (права доступа к файлам, специальные файлы и т. Д.).
Теперь я создал несколько сценариев оболочки, которые могут дать мне что-то похожее на svn diff
, но мне очень хотелось бы знать, существует ли уже работающее и протестированное решение для этого.
Я полагаю, что при использовании таких diff
Upgrade просто станет пакетом, содержащим инкрементные обновления, основанные на известном состоянии корневой файловой системы.
Что вы думаете и думаете по этому поводу? Как бы вы внедрили такую систему? Я предпочитаю простое решение, которое можно реализовать в кратчайшие сроки.