なぜsnapを削除するのか?
最近のubuntuは有料版サブスクのubuntu pro版の導線が仕込まれていたりubuntu独自のsnapパッケージを勝手にインストールさせたり、システムを不安定化させる要因が多数含まれている。
システム不安定化の要因を除去するためにsnapパッケージを完全に削除する手順を共有します。
snapのインストール状況を確認
sudo snap list
※例
core18 20230901 2796 latest/stable canonical✓ base
core20 20230801 2015 latest/stable canonical✓ base
lxd 4.0.9-a29c6f1 24061 4.0/stable/… canonical✓ -
snapd 2.60.4 20290 latest/stable canonical✓ snapd
手作業で削除する場合は順番にsnap removeで削除する
sudo snap remove lxd
sudo snap remove core20
sudo snap remove core18
sudo snap remove snapd
これが結構めんどうでセットアップ状況によってインストール済みパッケージも異なるのでサーバーが多数あると把握しづらくなります。
そこで後述のように自動化します。
snapパッケージ削除用のshell-script
sudoコマンドが利用可能なユーザーでの実行を前提とします
shell-scriptを編集
vim remove-snapapp.sh
#!/bin/bash
while :
do
WSNAP=$(which snap)
if [ "$WSNAP" = "" ]; then
break
fi
SNAPLISTFILE=snaplist.txt
sudo snap list |awk '{print $1}'>$SNAPLISTFILE
## snap list が空ファイルであれば終了
if [ ! -s $SNAPLISTFILE ]; then
break
fi
## snap list の件数が0件の場合も終了
NSNAP=`grep "No snaps are installed" $SNAPLISTFILE -c`
if [[ $NSNAP > 0 ]]; then
break
fi
while read linetext; do
if [ $linetext != "Name" ]; then
sudo snap remove $linetext
fi
done < "${SNAPLISTFILE}"
done
実行
./remove-snapapp.sh
1度では全て削除できない場合があるのでsnapのパッケージが全て消えるまでコマンドを繰り返す。
snapdを削除する
パッケージを削除しただけではubuntuを再起動した時に勝手にsnapのパッケージが再インストールされてしまうので、snapd自体を削除する。
sudo apt remove snapd snap
sudo apt purge snapd snap --purge -y
sudo apt update
automount系のデーモンを除去する
snapdを削除してもsystemdでsnap関連の自動マウント系のジョブ・ユニットが残る場合がある。
snap系のデーモンを確認
sudo systemctl list-unit-files|grep snap
snapd関連のsystemctlデーモンを無効化
sudo systemctl disable snapd.*
snapdとsnapのインストールを制限する
ここまで制限してもOSのアップグレードで"apt upgrade"や"do-release-upgrade"を実行するとsnapdが勝手にインストールされて有効化されてしまう。
そうなるとまたパッケージが競合したり不安定になるのでsnapd自体に制限をかけておく。
sudo apt-mark hold snapd snap
もしsnapdの利用を再開する場合は、"apt-mark unhold"で解除すればよい。
snapやubuntu proが嫌な人はdebianへの移行を推奨
snapやubuntu proのようなリスクを嫌う人で、OSを入れ替える余裕がある人はdebianへ移行することを推奨します。
稼働中のubuntuをそのまま利用したい、ubuntuを安定化させて整備したい人にはこの記事のsnapdの削除は有用になると思います。