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