无法找到内核以安装自定义服务器ISO文件。

我正在尝试构建一个定制的Ubuntu服务器ISO,并遇到了一个奇怪的问题,希望这里有人可以帮忙。我正在使用UCK和这些说明

当我只做最少的工作来构建一个“定制”ISO时,它会生成一个安装并无任何问题运行的ISO。

uck-remaster-unpack-iso ./ubuntu_trusty-server-amd64.iso 
uck-remaster-pack-iso 

然而,我也希望能够在我的ISO中包含自定义软件包。UCK为您设置环境,然后使用您的GPG密钥自动为您签署所有内容。
uck-remaster-clean
uck-remaster-unpack-iso ubuntu_trusty-server-amd64.iso 
uck-remaster-prepare-alternate 
gpg --list-keys
uck-remaster-finalize-alternate 60FB276F
uck-remaster-pack-iso 

生成ISO时没有任何错误,但是这个ISO却有一个奇怪的错误。

No kernel found

Syslog显示了这些(full):
Mar 19 19:37:28 base-installer: Using CD-ROM mount point /media/cdrom/
Mar 19 19:37:28 base-installer: Identifying.. 
Mar 19 19:37:28 base-installer: [53fed41586d1f78a456ce051a5c87264-2]
Mar 19 19:37:28 base-installer: Scanning disc for index files..
Mar 19 19:37:29 base-installer: Found 3 package indexes, 0 source indexes, 0 translation indexes and 1 signatures
Mar 19 19:37:29 base-installer: Found label 'Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Alpha amd64 (20140306)'
Mar 19 19:37:29 base-installer: This disc is called: 
Mar 19 19:37:29 base-installer: 'Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Alpha amd64 (20140306)'
Mar 19 19:37:29 base-installer: Copying package lists...
Mar 19 19:37:29 base-installer: gpgv: Signature made Fri 14 Mar 2014 01:18:54 AM UTC using RSA key ID 60FB276F
Mar 19 19:37:29 base-installer: gpgv: Can't check signature: public key not found
Mar 19 19:37:29 base-installer: E: Sub-process gpgv returned an error code (2)
Mar 19 19:37:29 base-installer: W: Signature verification failed for: /media/cdrom/dists/trusty/Release.gpg
Mar 19 19:37:29 base-installer: E: No CD-ROM could be auto-detected or found using the default mount point.
Mar 19 19:37:29 base-installer: You may try the --cdrom option to set the CD-ROM mount point. See 'man apt-cdrom' for more information about the CD-ROM auto-detection and mount point.
Mar 19 19:37:29 base-installer: error: error while running apt-cdrom

我也尝试了按照这里的说明操作,但结果相同 - 从源代码看,UCK似乎遵循这些说明。

有什么想法或建议将不胜感激。

更多调查后的更新:

在“坏内核”消息后跳出到shell:使用gpg --list-keys --keyring ./ubuntu-archive-keyring.gpg检查/usr/share/keyrings中找到的密钥时,UCK注入的签名密钥或通过ubuntu-keyring重建手动注入的密钥在安装程序中的apt-cdrom调用之前未安装。因此,dists/trusty/Release.gpg无法通过gpg验证。

手动运行“dpkg -i”命令安装重建的ubuntu-keyring软件包可以正确安装替换密钥;密钥会被安装到“/usr/share/keyrings”目录和适当的gpg信封中。然而,从安装菜单退出shell并重新启动软件安装后,apt-cdrom的gpg验证过程仍然无法修复——看起来好像有其他udeb注入了gpg密钥,并且在apt-cdrom检查之前没有安装ubuntu-keyring。
不幸的是,显示的错误消息并不能反映出潜在的问题。问题在于apt-cdrom无法验证gpg签名,因此无法将CDRom识别为有效的软件包源。这意味着没有可用的内核可以安装。

你需要添加软件包,请参考 https://help.ubuntu.com/community/InstallCDCustomization#Modify_pool_structure_to_include_more_packages - Panther
当我添加软件包时,我遇到了完全相同的错误 - 我想为了这个例子的简单起见,没有必要再去处理软件包问题。 - Stephen RC
再次查看您的错误信息,您遇到了一个“gpgv: 无法验证签名:找不到公钥”的问题。我想知道您是否需要添加一个公钥。请参考以下链接:https://help.ubuntu.com/community/InstallCDCustomization#Generating_a_new_ubuntu-keyring_.deb_to_sign_your_CD - Panther
是的,我也差不多到了这个阶段。UCK应该正在执行这个操作(通过uck-remaster-finalize-alternate 60FB276F),当我手动执行时,我确实完成了这一步骤...但现在我正在那个区域进行更多的测试,看看为什么它不起作用。 - Stephen RC
你给你的自定义内核取了什么名字? - Panther
我还没有碰过内核。 - Stephen RC
.deb 钥匙扣已经成功创建并成功打包到 ISO 中。我手动安装了它,并且 apt-key 显示了我的自定义密钥,md5sums 与 ISO 上的内容相匹配。 - Stephen RC
3个回答

[cdrom]/install/filesystem.squashfs 包含了预安装的 ubuntu-keyring 版本,而在 CD 的 /pool/ 目录下的 ubuntu-keyring 软件包在 debian-installer 执行 apt-cdrom 之前没有被安装 - 因此 apt-cdrom 无法验证修改后的 Release 文件,apt 将不会处理 CD 上的软件包。

为了替换基线密钥为您修改后的版本,需要类似以下的操作:

mkdir /tmp/CDRom
mount -o loop /path/to/trusty.iso /tmp/CDRom

mkdir /tmp/SquashFS
cd /tmp/SquashFS

unsquashfs /tmp/CDRom/install/filesystem.squashfs
cd squashfs-root
cp /path/to/modified/ubuntu-archive-keyring.gpg usr/share/keyrings/ubuntu-archive-keyring.gpg
rm /path/to/FinalCD/install/filesystem.size /path/to/FinalCD/install/filesystem.squashfs
du -sx --block-size=1 ./ | cut -f1 > /path/to/FinalCD/install/filesystem.size
mksquashfs ./ /path/to/FinalCD/install/filesystem.squashfs

apt-cdrom 然后将正常工作。

现在似乎不需要签署定制安装了。实际上,如果您尝试签署,安装将失败。

我也尝试创建14.04服务器64位的自定义安装,并遇到了相同的问题,即Release.gpg的签名验证出错(未找到公钥)。我以前在许多版本上都这样做过,包括12.04 64位服务器版发布。我使用了https://help.ubuntu.com/community/InstallCDCustomization指南。重新创建了ubuntu-keyring的deb文件,添加了我的密钥,并替换了pool/main/u/ubuntu-keyring的deb文件。

结果发现,如果我不签署Release文件,安装程序就不再关心我是否创建了额外的目录,是否使用了自定义的preseed文件,以及对我想要的一切进行了调整和安装。


我不知道这是一个bug还是一个特性,但是简单地不签名发布(删除Release.gpg)要容易得多。谢谢! - Colin C.

RedPhoenix的答案对我有用,我在其中添加了两个额外的密钥文件。
cp /path/to/modified/ubuntu-archive-keyring.gpg usr/share/keyrings/ubuntu-archive-keyring.gpg
cp /path/to/modified/ubuntu-archive-keyring.gpg etc/apt/trusted.gpg
cp /path/to/modified/ubuntu-archive-keyring.gpg var/lib/apt/keyrings/ubuntu-archive-keyring.gpg

作为一种工作格式,我建议您用几句话总结RedPhoenix的回答,并在您的回答中提到他的回答作为来源。虽然在这种情况下可能性不大,但是回答可能会被其所有者或其他原因删除,使您的回答成为孤立的存在。 - Jacob Vlijm