7

У меня есть веб-приложение, которое должно быть размещено на встроенном контроллере.

Этот контроллер (не мой) имеет файловую систему 8.3 UPPERCASE, похожую на FAT12.

Моя сборочная система работает под управлением Linux и может использовать любое имя файла, допустимое в ext4 (UTF-8).

Проблема в том, что я не могу собрать и подписать архив прошивки самостоятельно, я должен раздать сжатые архивы владельцу ключа.

Если что-то проскальзывает в архив, возникает много хлопот и споров, потому что процесс прерывается только после создания подписанного архива прошивки, когда он загружается в тестовый контроллер.

Из-за этого я хочу как можно раньше обнаружить эти ошибки в моей системе сборки.

Я попытался смонтировать файловую систему VFAT, содержащуюся в файле, смонтированном с помощью устройства loop в режиме FAT12, в моей сборке / каталоге с mode = strict, но, похоже, никакое ограничение не работает, кроме ограничения пространства для файла loopback.

Есть ли другой способ добавить ограничения на файловые системы, чтобы имитировать ограниченные файловые системы?

Изменить 19.Декабрь 2012: Возможно, мне следует показать то, что я пробовал раньше: (мой тестовый скрипт в режиме отладки -vx)

export LANG=C
+ export LANG=C
+ LANG=C
export LC_ALL=C
+ export LC_ALL=C
+ LC_ALL=C

IMAGE=$(mktemp --quiet --suffix=fat12.img 8dot3XXXXXXXX)
mktemp --quiet --suffix=fat12.img 8dot3XXXXXXXX)
mktemp --quiet --suffix=fat12.img 8dot3XXXXXXXX
++ mktemp --quiet --suffix=fat12.img 8dot3XXXXXXXX
+ IMAGE=8dot3C2CGojhZfat12.img

MOUNTPOINT=${HOME}/fat-test
+ MOUNTPOINT=/home/human/fat-test

dd if=/dev/zero of=${IMAGE} bs=1M count=1
+ dd if=/dev/zero of=8dot3C2CGojhZfat12.img bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00500883 s, 209 MB/s

mkfs.vfat -F 12 -n flashfs ${IMAGE}
+ mkfs.vfat -F 12 -n flashfs 8dot3C2CGojhZfat12.img
mkfs.vfat 3.0.12 (29 Oct 2011)

file ${IMAGE}
+ file 8dot3C2CGojhZfat12.img
8dot3C2CGojhZfat12.img: x86 boot sector, mkdosfs boot message display, code offset 0x3c, OEM-ID " mkdosfs", sectors/cluster 4, root entries 512, sectors 2048 (volumes <=32 MB) , Media descriptor 0xf8, sectors/FAT 2, heads 64, serial number 0xc02d5e98, label: "flashfs    ", FAT (12 bit)

mkdir -p ${MOUNTPOINT}
+ mkdir -p /home/human/fat-test
\sudo mount ${IMAGE} ${MOUNTPOINT} -t vfat -o fat=12,check=strict,shortname=win95,uid=1000,gid=1000,debug
+ sudo mount 8dot3C2CGojhZfat12.img /home/human/fat-test -t vfat -o fat=12,check=strict,shortname=win95,uid=1000,gid=1000,debug

cd ${MOUNTPOINT}
+ cd /home/human/fat-test
df -h ${MOUNTPOINT}
+ df -h /home/human/fat-test
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop1     1004K     0 1004K   0% /home/human/fat-test

## test suite

# is 8.3 and uppercase, should work
mkdir TEST
+ mkdir TEST
touch TEST/TEST.TXT
+ touch TEST/TEST.TXT

# is 8.3, but wrong case, should fail
mkdir trial
+ mkdir trial
mkdir trial/trial.txt
+ mkdir trial/trial.txt

# should fail
mkdir muchtoolong
+ mkdir muchtoolong
touch muchtoolong/muchtoolong.with.triple.extension
+ touch muchtoolong/muchtoolong.with.triple.extension

find  ${MOUNTPOINT} -ls
+ find /home/human/fat-test -ls
     1   16 drwxr-xr-x   5 human    human       16384 Dec 19 18:40 /home/human/fat-test
    21    2 drwxr-xr-x   2 human    human        2048 Dec 19 18:40 /home/human/fat-test/TEST
    22    0 -rwxr-xr-x   1 human    human           0 Dec 19 18:40 /home/human/fat-test/TEST/TEST.TXT
    23    2 drwxr-xr-x   3 human    human        2048 Dec 19 18:40 /home/human/fat-test/trial
    24    2 drwxr-xr-x   2 human    human        2048 Dec 19 18:40 /home/human/fat-test/trial/trial.txt
    25    2 drwxr-xr-x   2 human    human        2048 Dec 19 18:40 /home/human/fat-test/muchtoolong
    26    0 -rwxr-xr-x   1 human    human           0 Dec 19 18:40 /home/human/fat-test/muchtoolong/muchtoolong.with.triple.extension

cd
+ cd
\sudo umount  ${MOUNTPOINT}
+ sudo umount /home/human/fat-test
rm ${IMAGE}
+ rm 8dot3C2CGojhZfat12.img

Если кто-то может заметить ошибку: TIA, потому что я не могу ее найти.

1 ответ1

2

Вы, кажется, боретесь с наличием длинных имен в FS, которые вы предполагаете ограничить чистыми соглашениями MSDOS. Затем используйте « -t msdos » вместо « -t vfat ». В противном случае VFAT будет хранить только длинные имена для "невозможных" файлов вместе с созданием коротких альтернатив им.

Вам придется удалить опцию « shortname », так как « msdos » FS не знает, что означают "короткие имена".

Кстати, есть еще одна ошибка в вашем скрипте, делающая его неработоспособным, как вы и предполагали: вы пропустили опцию « loop » в команде mount, следовательно, она сообщит об ошибке, и все дальнейшие операции будут происходить в каталоге $ {MOUNTPOINT} базовой FS, а не в проверено FS в вашем тестовом файле. Вы, казалось, отредактировали свой сценарий / вывод перед публикацией, потому что перед вашей командой " sudo mount " есть очевидная ошибочная косая черта "\". Итак, правильная команда монтирования будет такой:

sudo mount ${IMAGE} ${MOUNTPOINT} -t msdos -o loop,fat=12,check=strict,uid=1000,gid=1000,debug

Еще одно замечание: в режиме MSDOS имена на диске хранятся только в верхнем регистре. Таким образом, разработчики FS Linux « msdos » приняли решение преобразовать и отобразить все имена только в / из нижнего регистра, сохраняя их все еще в верхнем регистре. Это означает, что ваши тесты для случаев будут работать наоборот: разрешать только имена в нижнем регистре, но отклонять любые символы в верхнем регистре. Хотя это может создавать неудобства для ваших тестов, имена в вашем файле всегда будут создаваться правильно, а все смешанные дубликаты будут отклонены (а также другие аномалии, отличные от 8.3), поэтому я считаю, что вы сможете адаптировать свою ситуацию к этой конкретной ситуации. Особенность монтирования MSDOS FS в Linux.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .