paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

Ubuntuのsnapが勝手にUpdateするので調査

ubuntuにこんなポップアップが来ました。

正確にはsnapdがパッケージを勝手にupdateしようとする…です。
lxdがUpdateする前に止めておいてねという旨のメッセージですが、snapが勝手に動いて何かやるんでしょうか?
もしかして数年前にlxdをsnap版にしたのもsnapのこういう処理が動いたからなのか。

ubuntuのLXDが勝手にsnap版LXDになって起動できなくなった - paloma blog

ということで少し動きについて調べました。

snapとは

Canonical社製のパッケージマネージャですが、ディストリビューション問わずインストールできるようです。
依存ライブラリごとパッケージ化されているらしい。
ディストリビューション毎にパッケージマネージャが違ってコマンドも異なるのでこういう共通化できるツールがあるといいかもしれませんね。
言うほど違うOSを同時で運用するか?とは思いますが。

snapcraftというツールで自作のパッケージ作成、アップロード等もできるとのこと。

意識してインストール舌記憶はありませんが、20.04にUpdateしたとき一緒に付いてきたんでしょうか。
get start系ドキュメントのubuntuバージョンでよく出てくるのでaptから代替されるパッケージマネージャかなのイメージで使ってました。

ubuntu.com

デフォルトの仕様

snapcraftの方に仕様が書いてありました。

snapcraft.io

  • インストールしたパッケージは自動Update
  • daemonは日に4回Updateの有無を確認する
  • Update関係はrefreshコマンドで確認

いきなり自動アップデートの文言が書いてあります。
ドキュメントにもセキュアがどうのとあるので、そういうツールということですね。

コマンドを使ってみます。

  • refresh間隔のチェック
masashi@PC-ubuntu:~$ sudo snap refresh --time
timer: 00:00~24:00/4
last: today at 21:49 JST
next: tomorrow at 02:48 JST

デフォルトの日に4回は結構なペースですね。

  • パッケージの状態
masashi@PC-ubuntu:~$ sudo snap refresh --list
All snaps up to date.

これは今はないよということでしょうか。

Updateのコントロール

公式だと自動アップデートを停止出来るような文章は書いていなくて、以下の4つのコントロール方法があるようです。

  1. refreshの更新タイミング、頻度
  2. 次回のrefresh確認までの遅延時間
  3. ネットワーク帯域の計測による更新の停止
  4. 保管するパッケージの世代数の変更

一応インストールするバージョンを固定しておけば自動アップデートは行われないようです。
厳密にはバージョンに該当するアップデートは提供されますが、通常はセキュリティパッチなので機能やバージョン変更は無いそうです。

www.pragmaticlinux.com

私の例はホームサーバなので常に最新版でもそんなに問題ありませんが、商用で使うとしたらバージョン固定しとかないと困りますからね。

とりあえずlxdのUpdate

ubuntu及びコンテナは常時動かしているのでいきなり使えなくなると困ります。 使ってるコンテナはイメージもデータもバックアップがあるので正直なんとかなりますが、アップデートを覚えているうちにやってしまいます。

infoでパッケージの情報がバーっと出てきます。
今は5.3がインストール済み。

masashi@PC-ubuntu:~$ sudo snap info lxd
name:      lxd
summary:   LXD - container and VM manager
publisher: Canonical✓
store-url: https://snapcraft.io/lxd
contact:   https://github.com/lxc/lxd/issues
license:   unset
description: |
・・・()
services:
  lxd.activate:    oneshot, enabled, inactive
  lxd.daemon:      simple, enabled, active
  lxd.user-daemon: simple, enabled, inactive
snap-id:      J60k4JY0HppjwOjW8dZdYc8obXKxujRu
tracking:     latest/stable
refresh-date: 10 days ago, at 10:01 JST
channels:
  latest/stable:    5.4-82d05d6   2022-07-27 (23339) 107MB -
  latest/candidate: 5.4-022a3ee   2022-07-26 (23356) 107MB -
  latest/beta:      ↑                                      
  latest/edge:      git-3ef9250   2022-07-22 (23338) 107MB -
  5.3/stable:       5.3-91e042b   2022-07-06 (23270) 107MB -
  5.3/candidate:    5.3-b403e7f   2022-07-05 (23282) 107MB -
  5.3/beta:         ↑                                      
・・・()
  3.0/beta:         ↑                                      
  3.0/edge:         git-81b81b9   2019-10-10 (11362)  55MB -
installed:          5.3-91e042b              (23270) 107MB -

一旦lxdを止めておきます。

masashi@PC-ubuntu:~$ sudo snap stop lxd
Stopped.

refreshでアップデート。

masashi@PC-ubuntu:~$ sudo snap refresh lxd
lxd 5.4-82d05d6 from Canonical✓ refreshed

起動。

masashi@PC-ubuntu:~$ sudo snap start lxd
Started.

5.4になりました。

masashi@PC-ubuntu:~$ lxd --version
5.4

infoで見るとちゃんと5.4のStableがインストールされています。

channels:
  latest/stable:    5.4-82d05d6   2022-07-27 (23339) 107MB -
・・・
installed:          5.4-82d05d6              (23339) 107MB -

まとめ

まとめと言うほど調べられていませんが何となくの動作はわかりました。
勝手にUpdateされていきなり挙動が変わってしまった、となると困りモノですがバージョンを固定しておけば任意のタイミングで変更はできそうです。
古いパッケージを使い続けるよりはセキュリティパッチあたってるほうが一応は安心ですね。

今回はsnapをちょっと舐めた程度で値のチューニングは行っていません。
パッケージの世代の管理数や変更方法は確認できていないのでこの辺をもう少し調べてみます。
(バージョンもいくつか保持できてロールバックとか出来るらしいです)