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, но скрипт пытается обновить все снова и снова при каждом запуске. Есть предложения?

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

2
задан 12 June 2021 в 00:59

3 ответа

Это не столько решение, сколько обходной путь или возможная подсказка, а установка 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

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

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

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

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

# updates just user packages
flatpak update --user
4
ответ дан 28 July 2021 в 11:30

Нашел дешевое и грязное решение: запустить 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

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

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

0
ответ дан 28 July 2021 в 11:30

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

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

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

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

1
ответ дан 28 July 2021 в 11:30

Другие вопросы по тегам:

Похожие вопросы: