也许我做得不对,但我似乎无法让 genisoimage 生成 UDF 图像并保留执行位。
$ genisoimage --version
genisoimage 1.1.11 (Linux)
$ echo "echo 'Hello world'" > script.sh
$ chmod +x script.sh
$ ./script.sh
Hello world
$ genisoimage -input-charset utf-8 -r -udf -volid minimal -o minimal.iso script.sh
Total translation table size: 0
Total rockridge attributes bytes: 250
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
420 extents written (0 MB)
$ mkdir mount
$ sudo mount minimal.iso $PWD/mount -o ro,loop -t udf
$ ls -l script.sh mount/script.sh
-r--r--r-- 1 root root 19 Sep 21 18:40 mount/script.sh
-rwxrwxr-x 1 kip kip 19 Sep 21 18:40 script.sh
您会在最后一条命令中注意到,script.sh 在注入图像时是可执行的,但似乎不在已安装的图像内。
这是 genisoimage 中的错误,还是我安装图像的方式存在问题,或者是我使用 genisoimage 时存在问题?
答案1
命令行的一个潜在问题可能是 -udf 选项。手册中是这样说的:
在生成的文件系统映像中包含 UDF 文件系统支持。UDF 支持目前处于 alpha 状态,因此无法创建仅支持 UDF 的映像。UDF 数据结构目前与 Joliet 结构耦合,因此当前实现存在许多缺陷。没有 UID/GID 支持,没有 POSIX 权限支持,不支持符号链接。
编辑:这肯定是问题所在。如果图像是用
genisoimage -input-charset utf-8 -r -volid minimal -o minimal.iso script.sh
那么 script.sh 就是可执行的(实际上甚至是-r-xr-xr-x
,因为该-r
选项会将可执行位传播到文件上)。如果您希望 iso 可供 Windows 读取,请使用 Joliet 扩展(选项-J
)。