我需要使用 grub-mkrescue 来生成一些 ISO。我的主要工作环境是 Windows 10 机器。我已经使用 Linux 子系统执行各种任务。
我成功地安装了 grub,没有遇到任何问题,但我需要 xorriso 才能使用 grub-mkrescue。当我这样做时,sudo apt-get install xorriso
我收到以下错误:
正在读取软件包列表... 完成 正在构建依赖关系树 正在读取状态信息... 完成 软件包 xorriso 不可用,但被另一个软件包引用。这可能意味着软件包缺失、已过时或只能从其他来源获得
E: 软件包‘xorriso’没有安装候选项
支持吗?
答案1
从源代码构建其静态链接版本。
下载https://www.gnu.org/software/xorriso/xorriso-1.4.6.tar.gz 到你想要构建 xorriso 的目录
tar xzf xorriso-1.4.6.tar.gz
cd xorriso-1.4.6
touch xorriso/*.info
./configure && make
我认为您需要包build-essential
和tar
。
该命令touch xorriso/*.info
避免了需要makeinfo
从包中获取程序texinfo
,这种情况在极少数情况下可能会由于 中的文件顺序不当而出现xorriso-1.4.6.tar.gz
。(有关故障症状,请参阅 user3804799 于 10 月 12 日 18:56 的评论。这种情况不会发生在真正的 Debian 或 Ubuntu 上,因为没有tar
选项-m
会从 tar 存档中恢复时间戳。)
成功后将生成一个二进制文件,运行如下
xorriso/xorriso -version
应该说类似
GNU xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.
...
There is NO WARRANTY, to the extent permitted by law.
如果是这样,那么您可以使用可执行二进制文件的完整路径作为
grub-mkrescue
选项的参数--xorriso
。
grub-mkrescue -o grub.iso --xorriso=/...path.../xorriso-1.4.6/xorriso/xorriso prepared_directory
如果这对您来说更方便,您可以将可执行二进制文件移动到任何其他存储位置。
虽然在 Win10-Ubuntu 子系统中构建 GNU xorriso 的问题没有被诊断出来,但我添加了以下关于在真正的 Ubuntu没有 Linux 内核依赖项,这可能会使 xorriso 脱离 Win10-Ubuntu 存储库。
如果xorriso/xorriso
已经在xorriso-1.4.6
树中构建,则首先删除所有编译结果:
make clean
强制执行不涉及 Linux 特定功能的配置并编译:
export CFLAGS="-DLibburn_use_sg_dummY"
./configure --disable-libacl --disable-xattr --disable-zlib --disable-libreadline
make
然后应将生成的文件xorriso/xorriso
复制到 Win10-Ubuntu 子系统范围内。尝试/...path.../xorriso -version
它是否愿意启动(即它是否找到必要的库)。
xorriso 使用“GNU/Linux SG_IO 适配器 sg-linux”在 Win10-Ubuntu 上构建并运行。但 ioctl(SG_IO) 或对光驱的访问似乎未实现。未检测到任何驱动器。
因此,似乎最好使用-DLibburn_use_sg_dummY
“X/Open 适配器 sg-dummy”进行编译,它不依赖于 Linux 细节,也不会尝试操作光驱。