Flatpak não atualiza seus aplicativos quando executado via cron

Flatpak não atualiza seus aplicativos quando executado via cron

Este script simples é executado corretamente quando iniciado manualmente:

#!/bin/sh

flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log

Quando executado com 00 07 * * * sh ~/cron/cron-flatpak.sh(mesmo usuário normal, não root crontab), ele produz o seguinte:

Looking for updates…


 1.     org.chromium.Chromium.Codecs    stable  u   flathub < 1.1 MB
 2.     org.chromium.Chromium.Locale    stable  u   flathub < 112.8 kB (partial)
 3.     org.qbittorrent.qBittorrent stable  u   flathub < 8.3 MB



Updating 1/3…                                                                 
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user

Updating 1/3… ██▌                   13%  41.1 kB/s
Updating 1/3… ████████████████████ 100%  674.8 kB/s
Updating 1/3… ████████████████████ 100%  674.8 kB/s
Updating 2/3…                                                                 
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user

Updating 2/3… ████████████████████ 100%  592 bytes/s
Updating 3/3…                                                                 
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user

Updating 3/3… ████████████████████ 100%  0 bytes/s
Updates complete.

Depois disso, as versões parecem corresponder ao que está listado em flathub.io, mas o script tenta atualizar tudo repetidamente a cada execução. Alguma sugestão?

Hora prevista de chegada:Ok pessoal, estarei testando as abordagens que vocês sugeriram e aceitarei uma resposta ou outra depois de conseguir fazer a coisa funcionar. Vai demorar um pouco, já que cada iteração requer uma nova versão do aplicativo lançada no flathub.

Responder1

Não é tanto uma solução, mas uma solução alternativa ou possível pista, mas instalar o Chromium com o --usersinalizador (o flatpak usa --systempor padrão) e atualizar funciona bem no cron.

flatpak install flathub org.chromium.Chromium # default, has cron issues
flatpak install --user flathub org.chromium.Chromium # no cron issues

Infelizmente, não tenho certeza por que a capacidade de atualizar flatpaks do sistema foi descartada no cron - pelo menos para o flatpak do Chromium, já que parece que o terceiro flatpak foi capaz de atualizar apenas. Talvez o problema esteja nesse flatpak específico.

Editar: perdi o terceiro erro na saída, não era exclusivo do Chromium.

Edição 2: Apenas mais alguns esclarecimentos/etapas para usar --usero sinalizador do flatpak. Como os pacotes do sistema e do usuário são gerenciados separadamente, isso significa que a adição/remoção de controles remotos, a instalação e a atualização também devem ser feitas separadamente. Um pacote de usuário não pode ser extraído de um sistema remoto e vice-versa.

# add a user remote
flatpak remote-add --if-not-exists --user REMOTE_NAME REMOTE_ADDRESS

# updates just user packages
flatpak update --user

Responder2

Os trabalhos executados por meio de cron, ou at, ou batch, não são executados no mesmo ambiente de tempo de execução que você tem em sua área de trabalho. Nenhuma das suas PATHalterações ou outras configurações de variáveis ​​de ambiente são propagadas automaticamente para o seu crontrabalho. Por exemplo, não existe $DISPLAY, então os programas GUI precisam de tratamento especial (leia man xhost).

É possível definir variáveis ​​de ambiente para todos os crontrabalhos no crontabarquivo Read man 5 crontab.

Veja os resultados echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasem cada um dos seus ambientes.

Como a commandparte da crontablinha é, por padrão, interpretada por /bin/sh, que possui uma sintaxe mais simples que /bin/bash, recomendo que commandhaja uma chamada para um bashscript (executável, montado, começa com #!/bin/bash) que configura o ambiente e depois chama o programa desejado.

Responder3

Encontrei uma solução barata e suja: execute o flatpak via cron com sudo. Existem pelo menos 3 maneiras de fazer isso; Eu adicionei flatpak sudoersassim:

Cmnd_Alias FLATPAK = /usr/bin/flatpak
myusername ALL=(ALL) NOPASSWD: FLATPAK

O script muda de acordo:

#!/bin/sh

sudo /usr/bin/flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log

Com essas modificações, tudo é atualizado sem problemas. O verdadeiro motivo provavelmente não são os privilégios em si, mas alguma outra mudança no ambiente, mas pelo menos isso não me obriga a reinstalar tudo.

Se alguém achar que é uma má ideia, explique o porquê.

informação relacionada