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