- Вопрос или проблема
- Обновление сломало моё приложение!
- Я хочу остаться на старой версии приложения
- Я хочу остановить все обновления до своей большой презентации
- Я не хочу, чтобы обновления происходили по будням
- Я хочу отключить обновления, когда я плачу за свой трафик
- Я хочу отключить обновления, пока приложение работает.
- Я хочу сделать что-то еще!
- Решение 1
- Решение 2
- Ответ или решение
- Как отключить автоматическое обновление в Snap
- 1. Использование функции "hold" для остановки обновлений
- 2. Изменение параметров планировщика обновлений
- 3. Блокировка Snap Store через файл hosts
- 4. Управление обновлениями при использовании лимита на трафик
- 5. Остановка службы snapd
- Заключение
Вопрос или проблема
Можно ли отключить автоматическое обновление в snap? Эта ссылка говорит о том, что Snaps обновляются автоматически в фоновом режиме до последней версии каждый день. Некоторые snaps (например, vlc) создаются ежедневно, и нет смысла устанавливать их каждый день.
Есть несколько вариантов, в зависимости от того, что именно вам нужно.
Обновление сломало моё приложение!
Запустите snap revert название-пакета
, чтобы вернуться к предыдущей версии этого приложения. Вы останетесь на этой версии до выхода следующей версии приложения. Если следующая версия тоже сломана, вы можете снова запустить snap revert
.
Я хочу остаться на старой версии приложения
Многие программы в магазине snap используют каналы для основных релизов программного обеспечения. Большинство snaps по умолчанию используют канал latest/stable
, который предоставит вам последние обновления приложения сразу после их выхода, но пользователи могут выбрать другой канал, чтобы остаться на конкретной версии.
Например, для IDE CLion вы можете увидеть поддерживаемые каналы, запустив snap info clion
. Вы можете переключиться на другой канал, запустив snap refresh clion --channel=2020.2/stable
. Вы останетесь на этом канале, пока не измените его вручную. Вы все равно будете получать автоматические обновления для приложения, но в зависимости от выбранного вами канала вы будете получать только незначительные обновления для этой конкретной версии программного обеспечения.
Издатели решают, включать ли каналы в свои snaps, поэтому, если вам нравится какой-то snap, но у него нет канала для нужной вам версии, обязательно свяжитесь с издателем!
Я хочу остановить все обновления до своей большой презентации
Вам нужна опция “удерживать”. Вы указываете конкретную дату, и snap будет удерживать все обновления до этой даты. Например, это удерживает обновления на следующие 30 дней.
snap refresh --hold='720h' <snap1> <snap2>
- Если вы не укажете snaps, это будет применено ко всей системе
- Используйте
--hold=forever
, если хотите отключить обновления навсегда.
Я не хочу, чтобы обновления происходили по будням
В этом случае вам, вероятно, нужно изменить таймер обновлений. Например, следующая опция устанавливает таймер обновлений на последнюю субботу месяца с 23:00 до 1:00 следующего дня.
sudo snap set system refresh.timer=sat5,23:00-01:00
Вы можете использовать инструменты командной строки или магазин snap, чтобы увидеть, какие обновления доступны.
Я хочу отключить обновления, когда я плачу за свой трафик
По умолчанию snap не будет обновляться, когда NetworkManager обнаруживает подключение с лимитом, например LTE/3G/4G. Если NetworkManager не обнаруживает это правильно, вы можете установить это вручную.
Я хочу отключить обновления, пока приложение работает.
Это экспериментальная функция, которую вы можете включить, выполнив следующую команду:
snap set core experimental.refresh-app-awareness=true
Для получения дополнительной информации смотрите осведомленность о обновлениях snap и их блокировка.
Я хочу сделать что-то еще!
Смотрите документацию Управление обновлениями для получения дополнительных вариантов.
На момент написания это официально невозможно, что вызвало довольно дебаты. Лучшие способы управления обновлениями на рабочем столе все еще обсуждаются.
Решение 1
Заблокируйте магазин в вашем файле /etc/hosts/
:
127.0.0.1 api.snapcraft.io
Что сработало для меня: sudo nano /etc/hosts
, скопировал строку, затем нажал F2, затем Y, затем ENTER.
Решение 2
Отключите автоматическое обновление, если сетевое соединение с лимитом.
Сначала перейдите в настройки сети.
Затем нажмите на шестеренки с правой стороны обоих ваших сетевых интерфейсов и отметьте “ограничить использование фоновых данных” – это пометит подключение как имеющее лимит.
Наконец, откройте терминал и введите (документация):
sudo snap set system refresh.metered=hold
Остановите (перезапустится при загрузке), затем отключите демона snapd
:
sudo systemctl stop snapd.service
sudo systemctl mask snapd.service
Примечание ( systemctl
): mask
– это более строгая версия disable
.
Чтобы повторно включить и обновить:
sudo systemctl unmask snapd.service
sudo systemctl start snapd.service
sudo snap refresh
refresh
обновит все snaps в системе.
Это краткое содержание значительно лучших ответов, чем любые приведенные здесь.
По какой-то причине ~этот~ вопрос был отмечен как дубликат, ссылающийся обратно на этот :).
С последней версией snap (2.58+) вы можете отключить обновления snap
Новая функция удержания позволяет администраторам систем и конечным пользователям останавливать или откладывать обновления snap на столько времени, сколько необходимо. Удержание может быть применено к отдельным snaps или к всему набору установленных snaps, на ограниченный срок или, при необходимости, без ограничения.
Например, чтобы приостановить обновления snap для VLC на 3 дня, вы выполните следующую команду:
snap refresh --hold=72h vlc
Общие обновления “vlc” удерживаются до 2022-11-17T12:04:59Z
Аналогичным образом, чтобы приостановить обновления snap для всех snaps на срок 48 часов:
snap refresh --hold=48h
Автообновление всех snaps удерживается до 2022-11-16T12:27:25Z
Чтобы полностью остановить автоматическое обновление и без таймера:
snap refresh --hold
Автообновление всех snaps удерживается на неопределенный срок.
Служба обновления запускается systemd и настраивается в:
- /lib/systemd/system/snapd.refresh.service
- /lib/systemd/system/snapd.refresh.timer
Если вы хотите отключить автоматическое обновление, переопределите эти настройки в /etc/systemd. Возможно, самым простым способом будет просто установить таймер на желаемую частоту.
В данный момент это сделать невозможно. Однако вы можете запланировать время, когда snaps будут автоматически обновляться по вашему усмотрению, используя эту команду:
sudo snap set core refresh.schedule=8:00-20:00
В этом случае обновления будут происходить только раз в день между 8 вечера и 8 утра (пример).
Одним из обходных путей может быть установка из канала с конкретной версией, т.е. для PyCharm:
snap install pycharm-professional --channel 2018.3/stable --classic
Тогда snap не будет обновляться, пока не будет выпущена новая патч-версия 2018.3.
Чтобы увидеть доступные каналы, используйте snap info
, т.е.
$ snap info pycharm-professional
name: pycharm-professional
summary: Python IDE для профессиональных разработчиков
publisher: jetbrains✓
contact: https://www.jetbrains.com/pycharm/documentation/
license: unset
description: |
PyCharm Professional Edition - это IDE для профессиональной разработки на Python. Она создана программистами для программистов, чтобы предоставить все инструменты, необходимые для продуктивной разработки на Python, в вебе и научной области.
PyCharm Professional Edition доступна для бесплатной 30-дневной оценки.
Доступны ежемесячные и годовые подписки для компаний и отдельных пользователей. Узнайте больше на https://www.jetbrains.com/pycharm/buy/
commands:
- pycharm-professional
snap-id: Uqpw0ZWqy6Wh4mgaWE0rxgM5tAGCwf4D
tracking: stable
refresh-date: 10 дней назад, в 09:22 PDT
channels:
stable: 2019.1.1 2019-04-03 (127) 392MB classic
candidate: 2019.1.1 2019-04-03 (127) 392MB classic
beta: 2019.1.1 2019-04-03 (127) 392MB classic
edge: 2019.1.1 2019-04-03 (127) 392MB classic
2019.1/stable: 2019.1.1 2019-04-03 (127) 392MB classic
2019.1/candidate: 2019.1.1 2019-04-03 (127) 392MB classic
2019.1/beta: 2019.1.1 2019-04-03 (127) 392MB classic
2019.1/edge: 2019.1.1 2019-04-03 (127) 392MB classic
2018.3/stable: 2018.3.5 2019-02-27 (121) 355MB classic
2018.3/candidate: 2018.3.5 2019-02-27 (121) 355MB classic
2018.3/beta: 2018.3.5 2019-02-27 (121) 355MB classic
2018.3/edge: 2018.3.5 2019-02-27 (121) 355MB classic
2018.2/stable: 2018.2.8 2019-04-12 (128) 313MB classic
2018.2/candidate: 2018.2.8 2019-04-12 (128) 313MB classic
2018.2/beta: 2018.2.8 2019-04-12 (128) 313MB classic
2018.2/edge: 2018.2.8 2019-04-12 (128) 313MB classic
2018.1/stable: 2018.1.6 2018-11-15 (101) 314MB classic
2018.1/candidate: 2018.1.6 2018-11-15 (101) 314MB classic
2018.1/beta: 2018.1.6 2018-11-15 (101) 314MB classic
2018.1/edge: 2018.1.6 2018-11-15 (101) 314MB classic
2017.3/stable: 2017.3.7 2018-11-15 (100) 344MB classic
2017.3/candidate: 2017.3.7 2018-11-15 (100) 344MB classic
2017.3/beta: 2017.3.7 2018-11-15 (100) 344MB classic
2017.3/edge: 2017.3.7 2018-11-15 (100) 344MB classic
installed: 2019.1.1 (127) 392MB classic
Это моё решение этой проблемы (проверено на Ubuntu 22.04 в июне 2022 года). Ниже предполагается, что вы хотите контролировать, когда обновления будут производиться в вашей установке. То есть, чтобы просматривать предлагаемые обновления и контролировать время их выполнения, но не собираетесь удерживать отдельные snaps.
Настройка snap для автоматического обновления
Как подробно изложено в других ответах, snap позволяет контролировать время автоматических обновлений, но с жестким сроком в 90 дней (на момент написания) после последнего обновления независимо от любых других параметров. Контроли описаны в этой части документации (https://snapcraft.io/docs/keeping-snaps-up-to-date).
Первоначальное решение
Изначально я устанавливал дату удерживания на 90 дней вперед и вызывал “snap refresh –list”, чтобы определить, какие snaps имеют доступные обновления, а затем выполнял “snap refresh” для завершения обновления. И наконец, сбрасывал дату удерживания на 90 дней в будущее. Но этого недостаточно, так как фактическая дата удерживания сохраняется на 90 дней после последнего обновления.
“last-refresh”
По какой-то причине параметр “last-refresh” в конфигурации snapd обновляется ТОЛЬКО тогда, когда snapd выполняет автоматическое обновление, а не вручную инициированное. Примечание: причина кода заключается в том, что сервер не устанавливает last-refresh, если вы предоставите список snaps для обновления, а клиент командной строки преобразует полную команду обновления в серверный запрос со списком, содержащим все активные (не удерживаемые) snaps.
Поэтому, чтобы эта схема действительно работала, вам нужно как-то обновить last-refresh. Один из способов сделать это – изменить параметры “hold” и “timer”, так что произойдет автоп обновление (но ничего не нужно будет обновлять, так как вы только что сделали это вручную), и вернуть их на 90 дней вперед после автоп обновления.
Ручное обновление “Last-refresh”
Менее надежный, не лучший подход, вероятно, не одобренный командой разработчиков, но более простой в контроле, это вручную обновить его, как описано в функции prevent_autorefresh в этом тестовом файле (https://github.com/snapcore/snapd/blob/master/tests/lib/tools/snapd-state).
Пожалуйста, обратите внимание: snapd не читает файл конфигурации повторно, пока не будет перезапущен.
Процедура для выполнения обновления (в формате скрипта)
#!/bin/sh
sudo snap refresh --list
read -p "Запустить snap refresh [Да/нет]?" refresh
case $refresh in
[Nn]* ) break;;
* )
sudo snap refresh
#Обновить время last-refresh
sudo systemctl stop snapd
sudo jq -c ".data[\"last-refresh\"] = \"$(date +%Y-%m-%dT%H:%M:%S%:z)\"" /var/lib/snapd/state.json > /var/lib/snapd/state.json.new
sudo chmod 600 /var/lib/snapd/state.json.new
sudo mv /var/lib/snapd/state.json.new /var/lib/snapd/state.json
sudo systemctl start snapd
sudo snap set system refresh.hold="$(date --date="today+90days" --iso-8601=seconds)"
;;
esac
Удержание snaps более 90 дней
Из моего анализа кода и тестирования до настоящего времени, я считаю, что возможно удерживать дольше, регулярно обновляя параметр last-refresh и сбрасывая дату удержания без выполнения ручного обновления. Я этого не тестировал, так как это не то, что я хочу делать.
Вы можете настроить локальный Snap Store Proxy, чтобы контролировать, какие ревизии видит клиент Snap.
Ответ или решение
Как отключить автоматическое обновление в Snap
Система Snap предлагает удобные возможности для установки и обновления приложений, но многие пользователи могут сталкиваться с проблемой автоматического обновления, которое происходит ежедневно и может вызывать проблемы с совместимостью или нежелательными изменениями функционала приложений. В этом руководстве мы рассмотрим несколько методов, позволяющих контролировать обновления в Snap и по сути отключить автоматическое обновление, чтобы вы могли больше управлять своими приложениями.
1. Использование функции "hold" для остановки обновлений
С версии Snap 2.58 появилась возможность использовать команду hold
, чтобы временно приостановить автоматические обновления.
-
Для приостановки обновлений для конкретного пакета (например, VLC) на 3 дня выполните команду:
snap refresh --hold=72h vlc
-
Чтобы приостановить обновления для всех установленных snap-пакетов на 48 часов, используйте:
snap refresh --hold=48h
-
Если вы хотите полностью отключить автоматическое обновление на неопределённый срок, выполните:
snap refresh --hold
Эта команда предотвратит любые обновления всех пакетов до следующего вашего вмешательства.
2. Изменение параметров планировщика обновлений
Вы можете изменить настройки времени, когда Snap будет проверять наличие обновлений. Например, следующая команда установит план обновлений на каждую последнюю субботу месяца с 23:00 до 01:00 следующего дня:
sudo snap set system refresh.timer=sat5,23:00-01:00
Эта настройка позволяет избежать обновлений в утренние часы или во время рабочего дня.
3. Блокировка Snap Store через файл hosts
В качестве более радикального способа отключения обновлений вы можете заблокировать доступ к Snap Store, отредактировав файл /etc/hosts
:
sudo nano /etc/hosts
Добавьте строку:
127.0.0.1 api.snapcraft.io
Сохраните изменения, нажав F2, затем Y и ENTER. Это предотвратит любые попытки Snap получить обновления.
4. Управление обновлениями при использовании лимита на трафик
Если вы подключены к сети с лимитом на трафик (например, мобильный интернет), Snap по умолчанию не будет выполнять обновления. Однако вы можете дополнительно убедиться, что ваше соединение помечено как "ограниченное" (metered), и вручную установить параметры:
sudo snap set system refresh.metered=hold
Это обеспечит дополнительную защиту от ненужных обновлений во время использования ограниченного трафика.
5. Остановка службы snapd
Если вы хотите полностью отключить обновления Snap, вы можете остановить и отключить службу snapd
:
sudo systemctl stop snapd.service
sudo systemctl mask snapd.service
Этот метод требует дополнительных действий для восстановления обновлений, поэтому его стоит применять с осторожностью.
Заключение
Система Snap предоставляет несколько способов контролировать автоматические обновления приложений, позволяя пользователям адаптировать процесс под свои нужды. Используя описанные выше методы, вы сможете отключить автоматическое обновление Snap и управлять установкой своих приложений более эффективно. Если у вас возникнут дополнительные вопросы или нужна помощь, не стесняйтесь обращаться за поддержкой к сообществу или на специализированные форумы.