Flatpak no actualiza sus aplicaciones cuando se ejecuta mediante cron

Flatpak no actualiza sus aplicaciones cuando se ejecuta mediante cron

Este sencillo script se ejecuta correctamente cuando se inicia manualmente:

#!/bin/sh

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

Cuando se ejecuta con 00 07 * * * sh ~/cron/cron-flatpak.sh(el mismo usuario normal, no con el crontab raíz), produce lo siguiente:

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.

Posteriormente, las versiones parecen coincidir con lo que aparece en flathub.io, pero el script intenta actualizar todo una y otra vez en cada ejecución. ¿Alguna sugerencia?

Hora estimada de llegada:Bien gente, probaré los enfoques que sugirieron y aceptaré una respuesta u otra después de que logre hacer que funcione. Tomará un tiempo ya que cada iteración requiere una nueva versión de la aplicación implementada en Flathub.

Respuesta1

No es tanto una solución como una solución alternativa o una posible pista, pero instalar Chromium con la --userbandera (Flatpak usa --systemde forma predeterminada) y actualizar funciona bien en cron.

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

Desafortunadamente, no estoy seguro de por qué la capacidad de actualizar los paquetes planos del sistema se elimina en cron, al menos para el paquete plano Chromium, ya que parece que el tercer paquete plano apenas pudo actualizarse. Quizás el problema esté en ese paquete plano en particular.

Editar: me perdí el tercer error en el resultado, no era exclusivo de Chromium.

Edición 2: Solo algunas aclaraciones/pasos adicionales para usar la bandera de Flatpak --user. Dado que los paquetes del sistema y del usuario se administran por separado, esto significa que agregar o quitar controles remotos, instalar y actualizar también se deben realizar por separado. Un paquete de usuario no puede extraerse de un sistema remoto y viceversa.

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

# updates just user packages
flatpak update --user

Respuesta2

Los trabajos que se ejecutan mediante cron, o at, o batchno se ejecutan en el mismo entorno de ejecución que tiene en su escritorio. Ninguno de sus PATHcambios u otras configuraciones de variables de entorno se propagan automáticamente a su crontrabajo. Por ejemplo, no existe $DISPLAY, por lo que los programas GUI necesitan un tratamiento especial (leer man xhost).

Se pueden establecer variables de entorno para todos cronlos trabajos en el crontabarchivo Read man 5 crontab.

Mira los resultados de echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasen cada uno de tus entornos.

Dado que la commandparte de la crontablínea es, de forma predeterminada, interpretada por /bin/sh, que tiene una sintaxis más simple que /bin/bash, recomiendo hacer commanduna llamada a un bashscript (ejecutable, montado, comienza con #!/bin/bash) que configura el entorno y luego llama al programa deseado.

Respuesta3

Encontré una solución barata y sucia: ejecutar flatpak mediante cron con sudo. Hay al menos 3 formas de hacerlo; Elegí agregar flatpak para que sudoersme gustara esto:

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

El guión cambia en consecuencia:

#!/bin/sh

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

Con estas modificaciones, todo se actualiza sin problemas. Lo más probable es que la verdadera razón no sean los privilegios per se sino algún otro cambio en el entorno, pero al menos no me obliga a reinstalar todo.

Si alguien piensa que es una mala idea, explique por qué.

información relacionada