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 --user
sinalizador (o flatpak usa --system
por 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 --user
o 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 PATH
alterações ou outras configurações de variáveis de ambiente são propagadas automaticamente para o seu cron
trabalho. 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 cron
trabalhos no crontab
arquivo Read man 5 crontab
.
Veja os resultados echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
em cada um dos seus ambientes.
Como a command
parte da crontab
linha é, por padrão, interpretada por /bin/sh
, que possui uma sintaxe mais simples que /bin/bash
, recomendo que command
haja uma chamada para um bash
script (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 sudoers
assim:
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ê.