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

0

Na última atualização da saga, o gnome-software iniciou o segfaulting. Claro que meus pais não percebem isso. Significa apenas que eles não receberão notificações de atualizações de segurança, e o PC ficará horrível e inseguro. [1] A primeira página do Google não mostra nada, para explicar por que este Desktop da Debian não está entregando notificações de atualização de segurança ( novamente , suspiro).

Os seguintes sintomas foram vistos por outras pessoas? Podemos fornecer uma explicação? Admite uma correção permanente?

(menor que a causa raiz: recursos inadequados para o Debian Desktop, comparado a outros desktops).

sudo journalctl sugere que este é um desreferenciamento do ponteiro NULL em libgs_plugin_systemd-updates.so. (Os últimos três dígitos do ponteiro de instrução são os mesmos em cada caso).

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]

A revista mostra que ele caiu 66 vezes antes de hoje, a partir de 2017-10-18. A versão atual do software gnome foi atualizada para 2017-09-23. Isso teria sido quando eu atualizei a máquina do Debian Wheezy para o Stretch. Eu sei que consegui abrir o gnome-software imediatamente após a atualização.

Hoje estava travando sempre que eu comecei, até que eu tomei as medidas para instalar o gnome-software-dbgsym. Remover o pacote -dbgsym não conseguiu que ele começasse a travar novamente. Deve ter sido algo sobre o estado do apt. Para o futuro, habilitei a captura de backtraces instalando systemd-coredump .

O mais próximo que eu posso encontrar é um correspondendo o gnome-software segfault que aconteceu estar logado em um relatório contra um programa completamente diferente. Isso apareceu nos resultados de "libgs_plugin_systemd-updates segfault". (Eu estou supondo que a versão do Kali em questão incluía o mesmo binário do Debian Stretch). Pesquisando mais especificamente por essa mensagem de segfault, o índice do Google atualmente inclui apenas o relatório Kali e minha pergunta aqui.

$ 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

e apt-get upgrade não mostraram atualizações pendentes para o gnome-software (ou pacote de pacotes).

$ 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&

[recorte. este aviso acontece de qualquer maneira quando não falha]

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

[1] O Debian Desktop não vem com nenhum popup para falhas.

Meus pais estão acostumados a isso como um sistema multiusuário e é possível que eles façam logout no gdm antes de desligarem, o que não mostraria a boa tickybox para reiniciar e instalar atualizações. os pais tendem a desligar diretamente sem sair primeiro. Então, isso é bom, pelo menos eles ainda devem ver "reiniciar e instalar atualizações" quando desligarem. (Aparece como uma caixa de seleção que está marcada por padrão).

    
por sourcejedi 22.11.2017 / 17:13

1 resposta

1

TL; o DR PackageKit é buggy (especificamente as atualizações offline - as várias referências ao systemd são porque as atualizações offline são implementadas usando-as). Ele engasga com o pacote do Google Chrome para o Debian. Eu relatei esse processo .

Você poderia tentar resolver isso instalando pk-update-icon e comentando / removendo / editando a linha NotShowIn=KDE;GNOME; em /etc/xdg/autostart/pk-update-icon.desktop . Observe que, se você quiser testar rapidamente o pk-update-icon , talvez queira executá-lo com pk-update-icon --delay=0 . Pessoalmente, eu combinaria isso com a extensão do Gnome, o TopIcons Plus, devido a problemas com as notificações do ícone.

As falhas recomeçaram depois de um mês, por isso consegui capturar o seguinte backtrace.

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...)

Código-fonte 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]);

Nós dividimos = 0x0 (ponteiro NULL) acima. pk_package_id_split () retorna NULL somente quando o id é inválido.

(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

Parece que o ID inválido é _inc.-stable-main . pkcon get-updates mostra apenas um pacote contendo o texto dos dois IDs. No entanto, pkcon get-offline-updates aparece para ilustrar o mesmo erro. ( apt-get --dry-run upgrade mostra que existe apenas um pacote atualizável).

$ 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)

lol. pk-offline.c :

/* return raw package ids */
return g_strsplit (prepared_ids, ",", -1);
    
por 08.12.2017 / 12:22