如何在启用安全启动时为可与 apt upgrade 配合使用的树外模块创建 Debian 软件包

How to create Debian package for out-of-tree module that works with apt upgrade when secure boot is enabled

我们已经为具有 Ubuntu 18.04 HWE 内核、运行 启用安全启动 的目标创建了我们自己的 fpga 驱动程序。此驱动程序已签名并放入 Debian 包中,如 fpga-driver-5.3.0-42-generic_1.1_amd64.deb,然后我们将此驱动程序上传到我们的自定义 Ubuntu 包服务器。在我们的目标上,我们在 /etc/apt/source.list.d/ 文件夹中有一个 link 到我们的包服务器,我们可以使用

安装驱动程序

sudo apt install fpga-driver-5.3.0-42-generic

如果我们将驱动程序升级到 fpga-driver-5.3.0-42-generic_1.2_amd64.deb,我们现在可以 运行 apt upgrade 只要内核版本相同就没问题。

不时升级 HWE 内核,我们重建驱动程序并创建一个新的 Debian 软件包,如 fpga-driver-5.3.0-51-generic_1.2_amd64.deb。如果我们现在 运行 apt upgrade on target,除了我们的驱动程序之外,其他所有内容都会更新。我们必须再次手动安装它才能使其正常工作,但这对最终用户来说不是一个好的解决方案。

所以问题是我们应该怎么做才能做到 'Debian way'?

我知道从 apt 的角度来看,包名称是不同的(fpga-driver-5.3.0-42-generic 与 fpga-driver-5.3.0-51-generic)所以它不会不理解应该升级这个包,但是我们必须支持多个内核。

我们不能像网上的大多数解决方案一样使用 dkms,因为我们必须签署此驱动程序才能使其在安全启动下工作,并且我们必须能够升级内核版本。

Debian 的方式是 meta package. This is just an empty package which depends on the current version of your driver. Everytime you upgrade your driver, you also set the dependencies of the meta package to your new package. A well know example is linux-image-amd64。该包指向您存储库内核的最新版本。目前到 linux-image-5.5.0-0.bpo.2-amd64 几天前到 linux-image-5.4.0-0.bpo.4-amd64 .