我构建了一个 ISO,其中包含以下内容:
Directory listing of /
d--------- 0 0 0 2048 Mar 19 2015 [ 29 02] .
d--------- 0 0 0 2048 Mar 19 2015 [ 29 02] ..
d--------- 0 0 0 4096 Mar 19 2015 [ 32 02] target-rpms
d--------- 0 0 0 2048 Mar 19 2015 [ 34 02] vat
Directory listing of /target-rpms/
d--------- 0 0 0 4096 Mar 19 2015 [ 32 02] .
d--------- 0 0 0 2048 Mar 19 2015 [ 29 02] ..
---------- 0 0 0 32435902 Mar 18 2015 [ 85 00] file1.rpm
---------- 0 0 0 2055833 Mar 18 2015 [ 15923 00] file2.rpm
Directory listing of /vat/
d--------- 0 0 0 2048 Mar 19 2015 [ 44 02] .
d--------- 0 0 0 2048 Mar 19 2015 [ 29 02] ..
---------- 0 0 0 0 Apr 20 2015 [ 56633 00] file1.txt
我想从 ISO 安装的映像中添加/删除文件,所以我这样做了:
sudo mount -o loop,ro /full/path/to/file.iso /mounted/path
为了添加文件我找到了这个方法:
mkdir /path/where/put/addedFile/vat/
cp prova.txt /path/where/put/addedFile/vat/prova.txt
mkisofs -o /tmp/test.iso -A test-1.0 -copyright 'Test' -joliet-long -RU
-uid 0 -gid 0 -iso-level 4 /mounted/path /path/where/put/addedFile
有效,mkisofs
将文件合并到目录中并test.iso
包含所有所需的文件。
我需要一些关于如何test.iso
在没有例如target-rpms/file2.rpm
.
我知道我可以使用以下程序来做到这一点:
mkdir /path/where/rebuildIso
cp -R /mounted/path /path/where/rebuildIso
rm /path/where/rebuildIso/target-rpms/file2.rpm
mkisofs -o /tmp/test.iso -A test-1.0 -copyright 'Test' -joliet-long -RU
-uid 0 -gid 0 -iso-level 4 /path/where/rebuildIso
但是,由于 iso 尺寸,我想避免cp
命令。
我在 Red Hat Enterprise Linux AS 版本 3(Taroon 更新 2)上使用 mkisofs 2.01 (i686-pc-linux-gnu)
答案1
事实上 mkisofs 2.01 指向 genisoimage:
$ mkisofs --version
mkisofs 2.01 is not what you see here. This line is only a fake for too clever
GUIs and other frontend applications. In fact, this program is:
genisoimage 1.1.11 (Linux)
您man genisoimage
可以尝试以下-m
选项:
-m glob
Exclude files matching glob, a shell wildcard pattern, from being written to CD-ROM. glob may match either the filename component or the full pathname. This option may be used multiple times. For example:
genisoimage -o rom -m '*.o' -m core -m foobar
would exclude all files ending in `.o', or called core or foobar from the image. Note that if you had a directory called foobar, it too (and of course all its descendants) would be excluded.
-exclude-list file
A file containing a list of shell wildcards to be excluded. See -m.
答案2
find
一种更容易记住的方法是使用自 12 年以来版本中出现的内置功能(通过 libfind) mkisofs
。因此,如果您自 2006 年夏季以来确实更新了操作系统安装,则可以使用例如:
mkisofs -o /tmp/test.iso -R -find /mounted/path ! -name '*.rpm' -chown root -chgrp root
如果您想合并多个源路径,请直接添加更多路径过去-find
。
如果您喜欢使用目标路径,请选中也-graft-points
适用于内置路径的选项。find
请参阅手册页:http://schilytools.sourceforge.net/man/man8/mkisofs.8.html