如何在 Disco 中升级到 systemd-241?

如何在 Disco 中升级到 systemd-241?

systemd-240 中有一个错误影响了 jackdbus,从而破坏了我的整个音频设置。该错误已在 systemd-241 中修复。有没有办法升级到 systemd-241?

答案1

另一个选择是重新编译应用了补丁的 systemd-240,假设它完全适用于 systemd-240。

如果可以的话,这确实很简单。你只需要将你的补丁添加到 ubuntu 已使用的补丁列表中。

答案2

免责声明

我并不主张用此方法解决问题。请自行承担风险。

此外,Ubuntu 19.10 附带 systemd 242,因此,如果您计划升级到 Ubuntu 19.10,则没有理由尝试这样做。

修复当前安装

基本上,这个想法是solsTiCe 的回答:修补发行版的源代码。但不要重新安装整个systemd系统。只替换systemd可执行文件 — 这是可以做到的,因为修补程序只影响的代码systemd。这样我就能确保不会对当前安装造成太大的混乱。

我解决问题的路径并不像我将要描述的那么“线性”,因为一开始我想修补原始系统 v240(使用 v241 中的正确位),构建它并自定义安装它。然后我转向使用构建器

下面的描述是这样的仿佛我直接就明白了。希望在清理步骤的过程中我没有忘记细节。

跟随本指南安装构建器,准备构建环境(sudo pbuilder create --distribution disco --debootstrapopts --variant=buildd),下载源代码(apt-get source systemd)。您将获得三个文件(两个档案和一个.dsc)和一个目录。因此,您可能希望在一个全新的文件夹中执行 apt-get 命令,以避免当前目录中的文件污染。

然后,克隆systemd github 仓库并签出标签 v241(git checkout tags/v241)。

现在diff -u在 Ubuntusrc/core/main.c和标签 v241 之间获取补丁,例如my.patch。我已经对其进行了编辑,以删除可能影响 memlock 限制以外的内容(对打开文件描述符的数量也进行了类似的修复,我也保留了这一点),并以以下形式获取正确的标题:

--- a/src/core/main.c ....
+++ b/src/core/main.c ....

当然,你ab可以使用其他名称。

在文件夹systemd-240(通过运行获得apt-get source systemd)里面有debian/patches。复制my.patch到那里并在末尾添加文件名debian/patches/series

尝试构建包(sudo pbuilder build systemd_240-6ubuntu5.dsc);这也应该获得依赖项,如果一切正常,你就有了.deb/var/cache/pbuilder/result/但它是“原始的”。

更改目录systemd-240并运行pdebuild --use-pdebuild-internal

过了一会儿……出现/var/cache/pbuilder/result了一个新的.deb(和之前的名字一样……)但这次是修补过的。如果你这样做,你应该会看到一行

tar -tJf /var/cache/pbuilder/result/systemd_240-6ubuntu5.debian.tar.xz |grep my.patch

假设您为补丁命名my.patch,并且也tar.xz这样命名。

.deb现在,在a-folder( ) 中解压dpkg-deb -R systemd_240-6ubuntu5_amd64.deb a-folder,并以 root 身份复制a-folder/lib/systemd/systemd/lib/systemd/。不要忘记备份原始文件/lib/systemd/systemd(我已将其重命名为__systemd)。如果出现问题,您可以用旧文件替换新文件,可能来自恢复 shell。

重新启动后ulimit -l应该说unlimited(取决于您的配置,但我想您已经读到到目前为止,因为这是您对音频组中用户的期望)。

资源

  • 系统 v240 已修补;我还没有编译并尝试过这个——如果你并希望systemd从其原始版本升级,那么我建议使用最新版本并选择最新标签,例如今天是v243
  • 补丁为github 上的要点,这个适用于Ubuntu的systemd源,版本240-6ubuntu5.7。

此补丁不是按照上一节的解释生成的,因为我已经差异已经打过补丁的 Ubuntu 源代码main.c可以在前述分支。最终结果应该不会相差太大。

最后说明

当我第一次注意到这个问题时,大约是以前,在检查配置没有问题之后,我决定等待 Ubuntu 修复它(我无法将其追溯到 systemd 的错误)。

但今天它阻止我做我真正想做的事情,因此我决定是时候做点什么了。

这里评论 7我发现systemd 错误第一次提到,然后我就发现了这个问题。

几个小时后,我还看到了两天前的 19.10 公告。

无需指出,在“程序包控制系统”中替换可执行文件不一定是个好主意。不过,在这种情况下,我认为这没问题。

相关内容