
Инструмент за откриване и прехвърляне на разлики (rsync)
Трябва ми cli инструмент (линукс), който да:
- открие разликите между две "версии" на съдържанието на папка
- подготви списък на променените файлове
- приложи списъка, така че да "синхронизира" втората папка, но по-точно на нейно копие на друга физическа машина, нямаща връзка с първата (примерно през usb стик)
Имам версия на фирмуер (rootfs на линукска система, по-точно определени папки от нея - /usr, /opt, /etc и т.н.). Знам точната версия (имам копие на папката), която има на някаква машина, дето е някъде си. Правя нова версия на фирмуера, който променя един или повече файлове (може и махне, добави, модифицира). Трябва да пакетирам и изпратя това на отдалечена машина, във формата на пакетче от изпълним файл и архив, или саморазархивиращ се архив.
Целта е когато доставят тоя файл на "старата" система и се изпълни, той да подмени/добави/махне файлове, така че да постигне състоянието, което е в новия ми билд.
Т.е. система за ъпдейтване, базирана на разликите - за да се оптимизира размера на архива (да не се праща целия rootfs имидж).
Знам че има няколко системи за такива цели (swupdate, rauc и подобни), но в конкретния случай са неприложими - отдалечената система "разбира" за момента само от "ако ми бучнеш флашка и на нея има скрипт с определено име, ще го повикам - той може да си достъпва други файлове на стика, но си е негова работа да подмени каквото иска - има достъп r/w до rootfs-а, има и достъп до флашката, да се оправя".
Не искам да правя всичкото това от нулата - искам да ползвам лек инструмент (който да може да е част от "флашката" и да не се окаже че е добавил няколко мегабайта, който всъщност съм искал да спестя с "инкременталния" ъпдейт). От едната страна искам да му дам двете папки - "нова" и "стара", и той да подготви "пакет", който да сложа на флашката и да я "пратя" (реално доставката не е през флашка, но е подобно - има механизъм да се "доставят" файлове до системата, но той е сравнително бавен и трябва да се оптимизира размера, за да се ускори "ъпдейтването" на системата).
Пробвах rsync, по-точно във варианта "--only-write-batch" и "--only-read-batch". Това е хитро - прави си бинарен файл с промените, и скрипт, който да свърши работата - супер, точно каквото ми трябва. Само че бинарния файл с данните не можах да го накарам да включи истинските данни - май само описва разлики и разчита на това, че има онлайн връзка към оригиналната машина, от която да вземе самите файлове. Може и аз да бъркам в разбирането, ще пробвам още.
Като четох попаднах на някакъв "архиватор" - dar (
http://dar.linux.free.fr/ ). Проучвам го, да видя дали ще мога да го ползвам.
Някакви идеи? Търсим лек и тестван вариант - мога да си го напиша, но предпочитам нещо изпитано в боя.