1. Обзор
Snap – это система упаковки программного обеспечения, разработанная Canonical в первую очередь для использования в системах Linux с системой инициализации systemd. Он направлен на решение ряда проблем, связанных с упаковкой и распространением программного обеспечения, но также имеет свой набор недостатков. В этом руководстве мы рассмотрим недостатки использования Snap и узнаем, как отключить или удалить его.
Все команды были протестированы в Snap 2.58.2, запущенной в Ubuntu Desktop 22.04.02 LTS. Однако они также должны быть совместимы с большинством других дистрибутивов Linux.
2. Введение в проблему
Хотя Snap предоставляет ряд преимуществ, у него также есть некоторые потенциальные недостатки, такие как использование дискового пространства, производительность и ограниченная интеграция и настройка.
Из-за этих проблем и некоторых спорных решений, принятых Canonical за последние несколько лет, некоторые дистрибутивы отключили или вообще удалили Snap из своих выпусков.
2.1. Недостатки Snap
По сравнению с традиционными системами упаковки, такими как .deb или другими форматами, такими как Flatpak и AppImage, пакеты Snap, как правило, занимают больше места на диске. Более того, они запускаются медленнее, поскольку требуют инициализации среды выполнения и загрузки зависимостей в память.
Поскольку пакеты Snap являются автономными и изолированными от хост-системы, они предлагают ограниченную интеграцию с системными ресурсами и другими приложениями. Это может вызвать проблемы с доступом к определенным системным ресурсам, таким как системные темы и шрифты.
2.2. Противоречия с браузером Chromium
Начиная с Ubuntu версии 19.10, Canonical обязала пользователей Ubuntu и ее производных использовать Snap для установки Chromium. Пакет chromium-browser .deb теперь включает только скрипты-оболочки, которые облегчают загрузку пакета Snap.
В результате этого решения, Linux Mint удалил Snap из своего пакета выпуска, начиная с версии 20 – Ulyana. Команда apt также предотвращает установку snapd.
2.3. Автоматическое обновление по умолчанию
По умолчанию Snap выполняет четыре проверки в день на наличие обновлений и автоматически обновляется, когда они доступны. Однако эта функция может вызвать проблемы в системах с ограниченными ресурсами. Когда ресурсы, такие как оперативная память и процессоры, ограничены, операционная система может завершить другие важные процессы, чтобы приспособиться к процессу автоматического обновления.
2.4. Ubuntu не поддерживает Flatpak
Компания Canonical объявила, что она не будет включать программное обеспечение Flatpak в пакет Ubuntu, начиная с версии 23.04 – Lunar Lobster, в попытке стимулировать использование Snap вместо него.
3. Удаление и отключение Snap
Давайте отключим и удалим Snap из нашей системы.
При новой установке Ubuntu 22.04.2 LTS у нас предварительно установлены следующая версия Snap и пакеты:
$ snap --version
snap 2.58.2
snapd 2.58.2
series 16
ubuntu 22.04
kernel 5.19.0-35-generic
$ snap list
Name Version Rev Tracking Publisher Notes
bare 1.0 5 latest/stable canonical✓ base
core20 20230126 1822 latest/stable canonical✓ base
firefox 110.0-3 2356 latest/stable/… mozilla✓ -
gnome-3-38-2004 0+git.6f39565 119 latest/stable/… canonical✓ -
gtk-common-themes 0.1-81-g442e511 1535 latest/stable/… canonical✓ -
snap-store 41.3-66-gfe1e325 638 latest/stable/… canonical✓ -
snapd 2.58.2 18357 latest/stable canonical✓ snapd
snapd-desktop-integration 0.1 49 latest/stable/… canonical✓ -
3.1. Удаление существующих пакетов Snap
Теперь давайте приступим к удалению пакетов Snap, или привязок, в следующем порядке:
$ snap remove firefox
$ snap remove gtk-common-themes
$ snap remove gnome-3-38-2004
$ snap remove snapd-desktop-integration
$ snap remove snap-store
$ snap remove core20
$ snap remove bare
$ snap remove snapd
Прежде чем перейти к следующему шагу, давайте убедимся, что список snaps пуст:
$ snap list
No snaps are installed yet. Try 'snap install hello-world'.
Если бы остались какие-либо привязки, мы могли бы вернуться к их перечислению и попытаться удалить их с помощью snap remove.
3.2. Удаление демона snapd
Далее давайте остановим, отключим, удалим и удержим демон snapd:
$ sudo systemctl stop snapd
Warning: Stopping snapd.service, but it can still be activated by:
snapd.socket
$ sudo systemctl disable snapd
Removed /etc/systemd/system/multi-user.target.wants/snapd.service.
$ sudo systemctl mask snapd
Created symlink /etc/systemd/system/snapd.service → /dev/null.
$ sudo apt purge snapd -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
snapd*
...
Removing snapd state
$ sudo apt-mark hold snapd
snapd set on hold.
Команда ‘apt-mark hold‘ означает, что пакет помечен как отложенный, что предотвратит автоматическую установку, обновление или удаление пакета.
3.3. Удаление каталогов пакетов Snap
Snap по умолчанию хранит все пакеты в каталоге ~/snap/. Давайте удалим его.:
$ rm -rf ~/snap/
Поскольку каталог находится в каталоге home, нам не нужно использовать sudo для его удаления. Однако важно быть осторожным при вводе команды, поскольку она удалит каталог рекурсивно.
Мы также должны убедиться, что путь ~/snap/ указан правильно.
3.4. Предотвращение установки Snap с помощью команды apt
Canonical изменила пакет chromium-browser .deb, теперь он включает только скрипты-оболочки, которые запускают установку Snap.
Чтобы предотвратить подобные случаи, мы можем использовать следующую команду, предложенную Linux Mint:
$ sudo cat <<EOF | sudo tee /etc/apt/preferences.d/nosnap.pref
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOF
В результате, когда мы пытаемся установить браузер Chromium с помощью команды apt:
$ sudo apt install chromium-browser
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
chromium-browser : PreDepends: snapd but it is not installable
E: Unable to correct problems, you have held broken packages.
Как мы можем видеть из приведенной выше команды, Snap не сможет установить себя без нашего согласия.
3.5. Удаление всех оставшихся каталогов Snap
Если наша система не была установлена заново, нам может потребоваться проверить и удалить некоторые каталоги.
Давайте убедимся, что мы вводим эти команды правильно, поскольку мы будем использовать sudo для рекурсивного удаления каталогов:
$ rm -rf ~/snap
$ sudo rm -rf /snap
$ sudo rm -rf /var/snap
$ sudo rm -rf /var/lib/snapd
4. Заключение
В этой статье мы рассмотрели процесс удаления и отключения Snap из нашей системы, а также предотвращение его установки без нашего согласия при использовании команды apt.