Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome 软件段错误

Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome 软件段错误

在最新的更新传奇中,gnome-software 已开始出现段错误。当然,我的父母不会注意到这一点。这只是意味着他们不会收到安全更新的通知,并且 PC 将变得可怕且不安全。[1] Google 的第一页没有显示任何内容,以解释为什么此 Debian 桌面无法提供安全更新通知(再次,叹息)。

其他人是否见过以下症状?我们可以提供解释吗?它承认永久修复吗?

(缺少根本原因:与其他桌面相比,Debian 桌面资源不足)。

sudo journalctl表明这是 libgs_plugin_systemd-updates.so 中的 NULL 指针取消引用。 (指令指针的最后三位数字在每种情况下都是相同的)。

Nov 22 14:59:39 drystone kernel: pool[2781]: segfault at 0 ip 00007f86c4d6f6d6 sp 00007f86b92249d0 error 4 in libgs_plugin_systemd-updates.so[7f86c4d6e000+2000]

该日志显示,从 2017 年 10 月 18 日开始,今天之前它已经崩溃了 66 次。当前版本的 gnome-software 已升级至 2017-09-23。当我将机器从 Debian Wheezy 升级到 Stretch 时就会出现这种情况。我知道升级后我可以立即打开 gnome-software。

今天,每当我启动它时,它就会崩溃,直到我采取步骤安装 gnome-software-dbgsym。删除 -dbgsym 包并没有让它再次开始崩溃。肯定是和 apt 的状态有关。为了将来,我通过安装systemd-coredump.

我能找到的最接近的是匹配 gnome 软件段错误恰好登录了报告针对完全不同的程序。这出现在“libgs_plugin_systemd-updates segfault”的结果中。 (我猜测所讨论的 Kali 版本包含来自 Debian Stretch 的相同二进制文件)。更具体地搜索此段错误消息,Google 的索引目前仅包含 Kali 报告和我的问题。


$ apt-cache policy gnome-software
gnome-software:
  Installed: 3.22.5-1
  Candidate: 3.22.5-1
  Version table:
 *** 3.22.5-1 500
        500 http://ftp.uk.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status

apt-get upgrade显示 gnome-software(或 packagekit)没有待更新。

$ gnome-software 
14:59:38:0408 Gs  failed to call gs_plugin_add_updates_historical on packagekit-offline: The package id's 'curl;7.52.1-5+deb9u2;amd64;debian-stable-main&

[剪断。当它不崩溃时无论如何都会发生此警告]

&xwayland;2:1.19.2-1+deb9u2;amd64;debian-stable-main' are not valid
Segmentation fault

[1] Debian 桌面没有任何崩溃弹出窗口。

我的父母习惯将其作为多用户系统,他们可能在关闭之前注销到 gdm,这不会显示用于重新启动和安装更新的漂亮勾选框。 显然我的父母倾向于直接关闭而不先注销。所以这很好,至少他们在关闭时仍然应该看到“重新启动并安装更新”。 (它显示为默认选中的复选框)。

答案1

TL;DR PackageKit 有 bug(特别是离线更新 - 对 systemd 的各种引用是因为离线更新是使用它实现的)。它对 Debian 的 Google Chrome 软件包感到窒息。 我向上游报告了这个

pk-update-icon您可以尝试通过安装并注释/删除/编辑NotShowIn=KDE;GNOME;中的行来解决此问题/etc/xdg/autostart/pk-update-icon.desktop。请注意,如果您想快速测试pk-update-icon,您可能需要使用 来运行它pk-update-icon --delay=0。就我个人而言,由于图标通知的问题,我会将其与 Gnome 扩展 TopIcons Plus 结合起来。


一个月后崩溃再次开始,因此我能够捕获以下回溯。

Thread 9 "pool" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffcffff700 (LWP 2689)]
gs_plugin_add_updates (plugin=0x555555885d00, list=0x555557735af0, cancellable=<optimized out>, error=<optimized out>)
    at gs-plugin-systemd-updates.c:122
(gdb) bt full 3
#0  gs_plugin_add_updates (plugin=0x555555885d00, list=0x555557735af0, cancellable=<optimized out>, error=<optimized out>) at gs-plugin-systemd-updates.c:122
        app = 0x5555558af7c0
        split = 0x0
        i = 1
        error_local = 0x0
        package_ids = 0x7fffc0073d00
#1  0x00005555555ad795 in gs_plugin_loader_run_results (plugin_loader=plugin_loader@entry=0x555555849c30, function_name=0x5555555ca453 "gs_plugin_add_updates", flags=2228800, cancellable=cancellable@entry=0x555557764b60, error=error@entry=0x7fffcfffeaf0) at gs-plugin-loader.c:723
        error_local = 0x0
        ptask2 = 0x7fffc006c030
        list = 0x555557735af0
        plugin_func = 0x7fffe405d600 <gs_plugin_add_updates>
        plugin = 0x555555885d00
        exists = <optimized out>
        ret = <optimized out>
        i = 8
        ptask = 0x7fffc00757f0
        __func__ = "gs_plugin_loader_run_results"
#2  0x00005555555ad9b7 in gs_plugin_loader_get_updates_thread_cb (task=0x555558116a70, object=0x555555849c30, task_data=0x7fffc40bd520, cancellable=0x555557764b60) at gs-plugin-loader.c:1171
        method_name = <optimized out>
        state = 0x7fffc40bd520
        error = 0x0
        ret = <optimized out>
(More stack frames follow...)

源代码gs-插件-systemd-updates.c

121     split = pk_package_id_split (package_ids[i]);
122     gs_app_add_source (app, split[PK_PACKAGE_ID_NAME]);

上面我们有 split = 0x0(NULL 指针)。 pk_package_id_split()仅当 id 无效时返回 NULL。

(gdb) p package_ids[0]
$1 = (gchar *) 0x7fffc407f720 "google-chrome-stable;63.0.3239.84-1;amd64;google"
(gdb) p package_ids[1]
$2 = (gchar *) 0x7fffc4087e20 "_inc.-stable-main"
(gdb) p package_ids[2]
$3 = (gchar *) 0x0
(gdb) p i
$5 = 1

看来无效的 id 是_inc.-stable-mainpkcon get-updates仅显示一个包含两个 id 文本的包。然而pkcon get-offline-updates似乎说明了同样的错误。 (apt-get --dry-run upgrade显示只有一个可升级包)。

$ pkcon get-updates      
Normal          google-chrome-stable-63.0.3239.84-1.amd64 (google,_inc.-stable-main)    The web browser from Google
$ pkcon offline-get-prepared
Prepared updates:
google-chrome-stable-63.0.3239.84-1.amd64
(null)

哈哈。 pk-offline.c

/* return raw package ids */
return g_strsplit (prepared_ids, ",", -1);

相关内容