Ещё один клон make_ext4fs и его друзей, ответвление от репозитория superr/make_ext4fs.
Причина создания клона в том, что я наткнулся на серьёзную ошибку в make_ext4fs, а в процессе правки появилось желание чуть подправить здесь и там. Утилита мне нужна для проекта Android firmware construction kit project.
Также мне понадобилась одинаково работающая программа под линукс и виндоус. Для этого мейкфайлы были изменены для поддержки (кросс-)компиляции под MinGW.
В make_ext4fs были внесены следующие изменения:
-
Если в fs_config вместо uid, gid, mode указано -1, берётся значение атрибута по умолчанию (mode берётся из файловой системы, uid и gid по умолчанию равны нулю).
-
Если файл отсутствует в fs_config, выдаётся предупреждение вместо ошибки, и для uid, gid и mode берутся значения по умолчанию. (такое же поведение, как без ключа -C).
-
Версия для Windows/MinGW теперь умеет сканировать каталоги, аналогично тому, как это работает в Linux (зачем-то Google это отключили). В MinGW на файлах режим доступа равен 0666 (или 0444 для ReadOnly), а на каталогах 0777. Не то, чтобы это было очень полезно, просто имейте это в виду.
-
Если во время копирования файлов в образ программа обнаруживает, что не может открыть файл, происходит следующее:
-
В Linux сначала делается попытка временно сменить режим доступа на 0444, затем открыть файл, затем восстановить исходный режим доступа.
-
Если открыть файл всё равно не удаётся, на экран выводится сообщение об ошибке с указанием файла, который не мог быть прочитан. Также выставляется глобальный флаг ошибки, что в итоге приводит к удалению формируемого образа и выводу сообщения о том, что он был удалён.
-
-
Версия для MinGW имеет ограниченную поддержку символьных ссылок Cygwin. Пример шестнадцатиричного дампа файла ссылки, скажем, /bin/ls:
00000000 21 3C 73 79 │ 6D 6C 69 6E │ 6B 3E FF FE │ 74 00 6F 00 │ 79 00 62 00 !<symlink>..t.o.y.b. 00000014 6F 00 78 00 │ 5F 00 76 00 │ 65 00 6E 00 │ 64 00 6F 00 │ 72 00 00 00 o.x._.v.e.n.d.o.r...
В созданном образе будет содержаться символьная ссылка /bin/ls, указывающая на "toybox_vendor".
-
Сборка для MinGW теперь имеет поддержку контекстов SELinux. Метки SELinux берутся только из файла "file_contexts", который указывается в опции -S. В именах файлах можно использовать регулярные выражения.
-
Исправлено падение программы когда размера образа недостаточно даже для метаданных.