Debian Stretch: libgs_plugin_systemd-updates.so의 gnome-software segfault

Debian Stretch: libgs_plugin_systemd-updates.so의 gnome-software segfault

최신 업데이트에서 gnome-software가 세그폴트를 시작했습니다. 물론 부모님은 이 사실을 눈치채지 못하시죠. 이는 보안 업데이트에 대한 알림을 받지 못하며 PC가 끔찍하고 안전하지 않다는 것을 의미합니다.[1] Google의 첫 번째 페이지에는 이 Debian Desktop이 보안 업데이트 알림을 전달하지 못하는 이유를 설명하기 위해 아무것도 표시되지 않습니다(다시, 한숨을 쉬다).

다른 사람들도 다음과 같은 증상을 본 적이 있습니까? 설명을 해드릴까요? 영구적인 수정을 인정합니까?

(근본 원인 부족: 다른 데스크톱에 비해 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 패키지를 제거해도 충돌이 다시 시작되지 않았습니다. 아파트 상태에 관한 내용이었을 것입니다. 앞으로는 systemd-coredump.

내가 찾을 수 있는 가장 가까운 것은gnome-software segfault 일치우연히 로그인된보고서완전히 다른 프로그램에 반대합니다. 이는 "libgs_plugin_systemd-updates segfault"에 대한 결과에서 나타났습니다. (문제의 Kali 버전에는 Debian Stretch와 동일한 바이너리가 포함되어 있는 것 같습니다.) 이 segfault 메시지를 보다 구체적으로 검색하면 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 upgradegnome-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 Desktop에는 충돌에 대한 팝업이 제공되지 않습니다.

부모님은 다중 사용자 시스템에 익숙하셨고 종료하기 전에 gdm에서 로그아웃하실 수도 있습니다. 그러면 재부팅하고 업데이트를 설치할 수 있는 멋진 체크박스가 표시되지 않습니다. 저희 부모님은 먼저 로그아웃도 하지 않고 바로 종료하시는 편이신 것 같아요. 그러면 좋습니다. 최소한 종료할 때 "재부팅 및 업데이트 설치"가 표시되어야 합니다. (기본적으로 선택되어 있는 체크박스로 나타납니다.)

답변1

TL;DR PackageKit에는 버그가 있습니다(특히 오프라인 업데이트 - systemd에 대한 다양한 참조는 오프라인 업데이트가 이를 사용하여 구현되기 때문입니다). 데비안용 Google Chrome 패키지에서 질식합니다. 이 업스트림을 보고했습니다..

를 설치하고 의 행에 pk-update-icon주석을 달거나 제거/편집하여 이 문제를 해결할 수 있습니다 . 빠르게 테스트하려면 로 실행하는 것이 좋습니다 . 개인적으로 저는 아이콘 알림 문제 때문에 이것을 Gnome 확장 TopIcons Plus와 결합하고 싶습니다.NotShowIn=KDE;GNOME;/etc/xdg/autostart/pk-update-icon.desktoppk-update-iconpk-update-icon --delay=0


한달만에 또 크래쉬가 발생해서 다음 역추적을 캡쳐할 수 있었습니다.

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]);

위에는 분할 = 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);

관련 정보