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 ....
当然,你a
也b
可以使用其他名称。
在文件夹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 公告。
无需指出,在“程序包控制系统”中替换可执行文件不一定是个好主意。不过,在这种情况下,我认为这没问题。