![](http://webcf.waybackmachine.org/web/20210609153447im_/https://habrastorage.org/getpro/habr/avatars/7a4/e8a/6fb/7a4e8a6fbfb58c0c168221d1222163a0.jpg)
Свой лунапарк TFTP с блэкджеком и С++17
Преамбула
Я работаю в команде разработки встраиваемого ПО на базе GNU Linux для телекоммуникационного оборудования. В ходе разработки у нашей команды появляется огромное количество прошивок для нашего оборудования: релизные версии, предрелизные версии, тестовые отладочные сборки, сборки для разных веток из трекера задач — и все это для разных аппаратных платформ.
набор бинарных файлов, размером до 70Мб, представляющих собой:
- доработанный Das u-boot;
- доработанное ядро GNU Linux;
- файловая система, в которой содержится множество скомпилированных исполняемых файлов, конфигураций и пр., например, корневая файловая система GNU Linux;
- кортеж комбинаций всего перечисленного;
Для идентификации файлов прошивки в системе документооборота и трекере используются MD5 хеши в файлах *.md5. В итоге имеем несколько деревьев в файловой системе для хранения прошивок.
Обновление ПО, а именно передача прошивки в изделие, происходит через протокол TFTP.
Постановка задачи
Необходимо избавиться от "головной боли" при поиске и идентификации нужной прошивки, для чего необходимо чтобы сервер TFTP осуществлял поиск и выгрузку файлов используя их md5-хеш, осуществляя рекурсивный поиск по нескольким каталогам.