Flatpak не обновляет свои приложения при запуске через cron

Flatpak не обновляет свои приложения при запуске через cron

Этот простой скрипт работает правильно при ручном запуске:

#!/bin/sh

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

При запуске 00 07 * * * sh ~/cron/cron-flatpak.sh(того же обычного пользователя, а не root crontab) выводится следующее:

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.

После этого версии, похоже, соответствуют тем, что указаны на flathub.io, но скрипт пытается обновить все снова и снова при каждом запуске. Есть предложения?

Расчетное время прибытия:Ладно, ребята, я буду тестировать предложенные вами подходы и приму один или другой ответ после того, как заставлю это работать. Это займет некоторое время, так как каждая итерация требует новой версии приложения, развернутой на flathub.

решение1

Это не столько решение, сколько обходной путь или возможная подсказка, но установка Chromium с --userфлагом (flatpak использует --systemего по умолчанию) и обновление в cron работают нормально.

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

К сожалению, я не уверен, почему возможность обновления системных flatpaks удалена из cron — по крайней мере для flatpak Chromium, поскольку похоже, что третий flatpak смог обновиться только что. Возможно, проблема в этом конкретном flatpak.

Редактировать: Я пропустил третью ошибку в выводе, она не была уникальной для Chromium.

Редактирование 2: Просто некоторые дополнительные разъяснения/шаги по использованию флага flatpak --user. Поскольку системные и пользовательские пакеты управляются отдельно, это означает, что добавление/удаление удаленных пакетов, установка и обновление также должны выполняться отдельно. Пользовательский пакет не может извлекать данные из системного удаленного пакета и наоборот.

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

# updates just user packages
flatpak update --user

решение2

Задания, запущенные через cron, или at, или batch, не запускаются в той же среде выполнения, что и на вашем рабочем столе. Никакие ваши PATHизменения или другие настройки переменных среды не распространяются автоматически на ваше cronзадание. Например, нет $DISPLAY, поэтому программы с графическим интерфейсом требуют особого обращения (читайте man xhost).

cronВ crontabфайле Read можно задать переменные окружения для всех своих заданий man 5 crontab.

Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasв каждой из ваших сред.

Поскольку commandчасть строки crontabпо умолчанию интерпретируется как /bin/sh, имеющий более простой синтаксис, чем /bin/bash, я рекомендую сделать commandвызов скрипта bash(исполняемого, монтируемого, запускаемого с #!/bin/bash), который настраивает среду, а затем вызывает нужную программу.

решение3

Нашел дешевое и грязное решение: запустить flatpak через cron с помощью sudo. Есть как минимум 3 способа сделать это; я пошел путем добавления flatpak вот sudoersтак:

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

Сценарий меняется соответственно:

#!/bin/sh

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

С этими модификациями все обновляется без сучка и задоринки. Настоящая причина, скорее всего, не в привилегиях как таковых, а в каком-то другом изменении в среде, но, по крайней мере, это не заставляет меня переустанавливать все.

Если кто-то считает, что это плохая идея, пожалуйста, объясните почему.

Связанный контент