Обычно snap-пакеты обновляются автоматически, но у пользователя всё равно остаётся возможность управлять обновлением вручную. С этим сегодня и разберёмся.
Обновление snap-пакетов в дистрибутивах из семейства Ubuntu
Snap-пакеты – неотъемлемая часть дистрибутивов из семейства Ubuntu. Вы, конечно, можете удалить из системы абсолютно все найденные в ней snap-пакеты, но по факту snap – это основа, вокруг которой сейчас и строится Ubuntu.
Когда дело доходит до обновления системы, опытные линуксоиды по привычке используют команды apt update и apt upgrade. И ещё несколько лет назад это бы сработало, но сейчас, когда в системе всё больше snap-пакетов, привычных команд уже недостаточно.
Теоретически snap-пакеты должны обновляться до актуальной версии автоматически: несколько раз в день ваша система проверяет наличие обновлений и автоматически устанавливает найденные патчи. Но это не значит, что вы не можете обновлять систему вручную. За обновление snap-пакетов в официальных редакциях дистрибутива Ubuntu отвечает команда snap refresh.
Обновление по расписанию
Итак, по умолчанию демон snapd автоматически проверяет наличие обновлений для всех установленных snap-пакетов, и делает он это по четыре раза в сутки. Подробности о том, как часть система будет проверять наличие обновлений для snap-пакетов, можно узнать с помощью следующей команды:
snap refresh --time
Результаты, скорее всего, будут следующими:
Например, тут timer: 00:00-24:00/4 означает, что система проверяет наличие обновлений четыре раза в сутки. Последнее обновление было в 09:19, а следующее запланировано на 15:33.
Вы можете отредактировать расписание обновлений с помощью команды refresh.timer. Например, если вы хотите, чтобы система проверяла обновления snap-пакетов только с 6:00 до 8:00 и с 20:00 до 22:00, понадобится следующая команда:
sudo snap set system refresh.timer=6:00-8:00,20:00-22:00
Список snap-пакетов, которые можно обновить
Чтобы проверить, для каких snap-пакетов уже доступны обновления, нужно выполнить следующую команду:
snap refresh --list
Если обновлений нет, вы увидите следующее сообщение:
All snaps up to date.
Установка всех обновлений вручную
Если вы уже проверили доступность обновлений и не хотите ждать, пока система установит их в автоматическом режиме, накатить обновления можно и вручную. Для этого подойдёт следующая команда:
sudo snap refresh
Обновление конкретных snap-пакетов
Если хотите обновить конкретный snap-пакет, воспользуйтесь следующей командой:
sudo snap refresh package_name
Разумеется, в этом случае вам нужно знать точное название конкретной программы. Кстати, обновлять snap-пакеты можно и списком:
sudo snap refresh package_1 package_2
Обратите внимание: некоторые snap-пакеты не умеют обновляться в фоновом режиме (обычно это те приложения, которые устанавливаются в классическом режиме). То есть прежде, чем вы сможете обновить приложение, его придётся закрыть.
Проверка изменений, внесённых вместе с последними обновлениями
Поскольку большинство обновлений установленных snap-пакетов будет осуществляться в фоновом режиме без вашего участия, вам, возможно, будет интересно узнать, какие изменения в системе были произведены вместе с этими обновлениями. Узнать это можно следующей командой:
snap changes
Результат будет выглядеть примерно так:
С помощью ID можно узнать детали каждого подобного изменения:
snap change change_ID
Откат обновлений snap-пакетов
По умолчанию Snap сохраняет предыдущую версию приложения. Если новая версия работает неправильно или просто вам не понравилась, вы всегда можете вернуться к предыдущей версии вручную. Для этого введите следующую команду:
sudo snap revert package_name
Запрет обновлений конкретных snap-пакетов
Если вы хотите и дальше использовать конкретную версию какого-то приложения, вы можете вручную запретить системе его обновлять. Для этого вам понадобится следующая команда:
sudo snap refresh --hold package_name
Чтобы остановить автоматическое обновление вообще всех snap-пакетов используют следующую команду:
sudo snap refresh --hold
Если когда-то вы отключили автоматические обновления snap-пакетов, а затем передумали и хотите вернуть всё как было, воспользуйтесь следующей командой:
sudo snap refresh --unhold
Если же хотите вернуть автоматические обновления для конкретного приложения, нужна следующая команда:
sudo snap refresh --unhold package_name
А ещё вы можете запретить системе обновлять конкретное приложение в течение определенного времени. Для этого понадобится следующая команда:
sudo snap refresh --hold=duration package_name
duration – это период, в течение которого система не будет проверять обновления для конкретного приложения. Можно указать часы, минуты и даже секунды.
Ну и напоследок…
Если вы из тех, кто до сих пор пользуется тарифом с ограничениями по трафику, автоматические обновления вам явно ни к чему, ибо snap-пакеты сами по себе весят немало, и тратить на них драгоценный трафик вы явно не хотите. Но в Ubuntu есть команда, предотвращающая обновление snap-пакетов через сеть с ограниченным трафиком:
sudo snap set system refresh.metered=hold
Разумеется, это далеко не всё, но если нужно больше, вам стоит подробнее изучить официальную документацию.
Ну и на этом, наверное, всё. Теперь вы немного лучше ориентируетесь в обновлениях snap-пакетов. Ну а если есть какие-то тонкости, о которых мы не упомянули, не стесняйтесь рассказать о них в комментариях. Кому-то это обязательно пригодится.
Абхишек Пракаш,
It’s FOSS
5 июня 2023