Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段錯誤
在最新的更新傳奇中,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-software 段錯誤,它恰好記錄在針對完全不同程序的報告中。這齣現在“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&
$$ snip. this warning happens anyway when it doesn’t crash $$
&xwayland;2:1.19.2-1+deb9u2;amd64;debian-stable-main' are not valid Segmentation fault
$$ 1 $$ Debian 桌面沒有任何崩潰彈出視窗。
我的父母已經習慣了它作為一個多使用者系統,他們可能會在關閉之前註銷到 gdm,這不會顯示漂亮的 tickybox 來重新啟動和安裝更新。顯然我的父母傾向於直接關閉而不先註銷。所以這很好,至少他們在關閉時仍然應該看到“重新啟動並安裝更新”。(它顯示為預設勾選的複選框)。
TL;DR PackageKit 有問題(特別是離線更新 - 對 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-plugin-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-main
.pkcon 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);