サブPCとしてubuntuを使っているのですが、最近パッケージ管理としてsnap経由になってきています。
masashi@PC-ubuntu:~$ nethack コマンド 'nethack' が見つかりません。次の方法でインストールできます: sudo snap install nethack # version 3.6.6, or sudo apt install nethack-console # version 3.6.1-1 sudo apt install nethack-x11 # version 3.6.1-1 他のバージョンについては 'snap info nethack' を確認してください。 masashi@PC-ubuntu:~$ microk8s コマンド 'microk8s' が見つかりません。次の方法でインストールできます: sudo snap install microk8s
debian系のパッケージ管理と言ったらずっとaptでやってきましたが、osからも勧められるくらいですから新しい管理システムにも慣れようということでsnap操作を一通り触ってみようと思います。
snapのバージョン。
masashi@PC-ubuntu:~$ snap version snap 2.56.2 snapd 2.56.2 series 16 ubuntu 20.04 kernel 5.4.0-122-generic
練習パッケージ
現行で使っているパッケージに影響が出ると困りますので
- 未インストール
- バージョンが複数あるもの
- サイズが大きくなさそうなやつ
を使用します。
いろいろ調べたらjujuが良さそうだったのでこちらを使います。
- juju
インフラ自動化系のツールらしいです。
そろそろ一個くらい家でも自動化ツール使いたいですね。(規模的にいらないけど)
- snap
今回はドキュメントの通りちょっとなぞってみるだけです。
find
パッケージの検索。
パッケージ名に関するものがずらーっと出てきます。
masashi@PC-ubuntu:~$ snap find juju Name Version Publisher Notes Summary juju 2.9.32 canonical✓ classic Juju - a model-driven operator lifecycle manager for K8s and machines juju-db 4.0.27 juju-qa - MongoDB object/document oriented database used internally by Juju. juju-act 1.0.3 stub classic Improve the command line user experience of Juju Action juju-verify 1.0 aluria - Juju plugin to verify if it's safe to perform an operation on juju units juju-wait 2.8.4~2.8.4 stub classic Juju plugin to wait for environment steady state. juju-bmc 0.1.2 jfguedez - juju plugin that adds a command to access a server out band management juju-crashdump 1.0.2+git120.a838717 jason-hobbs classic Gather logs and other debugging info from a Juju model juju-axw 2.3-aardvark axw classic juju client ・・・
list
現在のパッケージの状態です。
この時点で未インストール。
masashi@PC-ubuntu:~$ snap list juju error: no matching snaps installed
info
パッケージの情報がずらずらっと出てきます。
masashi@PC-ubuntu:~$ snap info juju name: juju summary: Juju - a model-driven operator lifecycle manager for K8s and machines publisher: Canonical✓ store-url: https://snapcraft.io/juju contact: https://canonical.com/ license: AGPL-3.0 description: | A model-driven **universal operator lifecycle manager** for multi cloud and hybrid cloud application management on K8s and machines. ・・・ snap-id: e2CPHpB1fUxcKtCyJTsm5t3hN9axJ0yj channels: 2.9/stable: 2.9.32 2022-06-24 (19681) 97MB classic 2.9/candidate: ↑ 2.9/beta: ↑ 2.9/edge: 2.9.33-ce7090f 2022-08-03 (20248) 95MB classic latest/stable: 2.9.32 2022-06-24 (19681) 97MB classic latest/candidate: ↑ latest/beta: 3.0-beta3 2022-07-29 (20184) 73MB - latest/edge: 3.0-rc1-027f450 2022-08-03 (20244) 73MB - 3.0/stable: – 3.0/candidate: – 3.0/beta: 3.0-beta3 2022-07-29 (20184) 73MB - 3.0/edge: 3.0-rc1-027f450 2022-08-03 (20244) 73MB - 2.8/stable: 2.8.13 2021-11-11 (17665) 74MB classic 2.8/candidate: ↑ 2.8/beta: ↑ 2.8/edge: ↑ 2.7/stable: 2.7.8 2020-07-22 (13563) 77MB classic ・・・
snapのChannels
バージョン情報的なニュアンスですが、Trasks、Risk-levelという概念で管理されるようです。
Tracks/Risk-levels/(Branches)
- Tracks: パッケージの実質的なバージョン
- Risk-levels: 安定版と新機能の間
- Branches: オプションで、一時的なリリースバージョン(バグ修正とかに使う)
install
この辺は他のパッケージマネージャと一緒ですね。
masashi@PC-ubuntu:~$ sudo snap install juju --classic juju (2.9/stable) 2.9.32 from Canonical✓ installed masashi@PC-ubuntu:~$ snap list juju Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.9/stable canonical✓ classic
switch
Channelの切り替えの様です。
refreshしなくても切り替えられると書いてありましたが、バージョン変わってないよね?
masashi@PC-ubuntu:~$ snap list juju Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.9/stable canonical✓ classic masashi@PC-ubuntu:~$ sudo snap switch juju --edge "juju" switched to the "2.9/edge" channel masashi@PC-ubuntu:~$ snap list juju Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.9/edge canonical✓ classic masashi@PC-ubuntu:~$ juju --version 2.9.32-ubuntu-amd64
後述で2.7を追加してswitchを試しました。
Trackingは変更になりますが、使用するバージョンを変更するにはrefreshをしないとダメそうです。(revertでもよかったかも)
2.9->2.7
masashi@PC-ubuntu:~$ sudo snap switch juju --channel=2.7 "juju" switched to the "2.7/stable" channel masashi@PC-ubuntu:~$ snap list juju --all Name Version Rev Tracking Publisher Notes juju 2.7.8 13563 2.7/stable canonical✓ disabled,classic juju 2.9.32 19681 2.7/stable canonical✓ classic masashi@PC-ubuntu:~$ juju --version 2.9.32-ubuntu-amd64 masashi@PC-ubuntu:~$ sudo snap refresh juju juju (2.7/stable) 2.7.8 from Canonical✓ refreshed masashi@PC-ubuntu:~$ sudo snap refresh juju juju (2.7/stable) 2.7.8 from Canonical✓ refreshed masashi@PC-ubuntu:~$ juju --version 2.7.8-focal-amd64
refresh
パッケージ更新です。
masashi@PC-ubuntu:~$ snap list --all Name Version Rev Tracking Publisher Notes ・・・ juju 2.9.32 19681 2.9/edge canonical✓ classic ・・・
すでにインストール済みのパッケージはrefreshで更新や前のバージョンのインストールができます。
masashi@PC-ubuntu:~$ sudo snap install juju --channel=2.7 --classic snap "juju" is already installed, see 'snap help refresh' masashi@PC-ubuntu:~$ sudo snap refresh juju --channel=2.7 juju (2.7/stable) 2.7.8 from Canonical✓ refreshed masashi@PC-ubuntu:~$ snap list juju --all Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.7/stable canonical✓ disabled,classic juju 2.7.8 13563 2.7/stable canonical✓ classic masashi@PC-ubuntu:~$ masashi@PC-ubuntu:~$ juju --version 2.7.8-focal-amd64
revert
バージョン切り替えのコマンド。
複数バージョンインストール済みならこのコマンドで切り替えられるようです。
これはrevision番号を使います。
masashi@PC-ubuntu:~$ snap list juju --all Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.7/stable canonical✓ disabled,classic juju 2.7.8 13563 2.7/stable canonical✓ classic masashi@PC-ubuntu:~$ masashi@PC-ubuntu:~$ sudo snap revert juju --revision=19681 juju reverted to 2.9.32
snapは自動Updateですが、install時にChannelを指定してインストールするとセキュリティパッチ以外のUpdateはしなくなるそうです。
こちらの動作未確認です。revertでも有効なのでしょうか。
Snap confinement
通常snapをインストールする際はパッケージはシステムへのアクセスが最低限に分離されているようです。
今回jujuをインストールする際にclassicモードを使えと警告が出ました。
classicはアクセス制限をセず、普段のパッケージマネージャのインストールと同じアクセス権となるようです。
masashi@PC-ubuntu:~$ sudo snap install juju error: This revision of snap "juju" was published using classic confinement and thus may perform arbitrary system changes outside of the security sandbox that snaps are usually confined to, which may put your system at risk. If you understand and want to proceed repeat the command including --classic.
connectionsでアクセスするインターフェースが見えますがよくわかりません。
masashi@PC-ubuntu:~$ snap connections juju Interface Plug Slot Notes content juju:peers - - desktop juju:desktop :desktop - home juju:home :home - lxd juju:lxd lxd:lxd - network juju:network :network - network-bind juju:network-bind :network-bind - personal-files juju:config-lxd :personal-files - personal-files juju:dot-aws :personal-files - personal-files juju:dot-azure :personal-files - personal-files juju:dot-google :personal-files - personal-files juju:dot-kubernetes :personal-files - personal-files juju:dot-local-share-juju :personal-files - personal-files juju:dot-maas :personal-files - personal-files juju:dot-openstack :personal-files - personal-files juju:dot-oracle :personal-files - ssh-public-keys juju:ssh-public-keys :ssh-public-keys -
Snapshot
現在インストール済みのバージョンのsnapshotが取れるらしい。
saveコマンド。
masashi@PC-ubuntu:~$ sudo snap save juju Set Snap Age Version Rev Size Notes 5 juju 314ms 2.9.32 19681 500B -
savedでsnapshot状態が確認できます。
masashi@PC-ubuntu:~$ snap saved Set Snap Age Version Rev Size Notes 5 juju 6m44s 2.9.32 19681 500B -
使用バージョンを変更してみます。
2.9 -> 2.7
masashi@PC-ubuntu:~$ sudo snap revert juju --revision=13563 juju reverted to 2.7.8 masashi@PC-ubuntu:~$ snap list juju --all Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.7/stable canonical✓ disabled,classic juju 2.7.8 13563 2.7/stable canonical✓ classic
restoreコマンドを打ってみます。(2.9に戻す)
masashi@PC-ubuntu:~$ sudo snap restore 5 juju Restored snapshot #5 of snaps "juju". masashi@PC-ubuntu:~$ snap list juju --all Name Version Rev Tracking Publisher Notes juju 2.9.32 19681 2.7/stable canonical✓ disabled,classic juju 2.7.8 13563 2.7/stable canonical✓ classic
2.7のままですね。
使用バージョンが変わるわけでは無い様です。
あくまでもパッケージ自体の保存と修復の様ですね。
パッケージのディレクトリ
/var/snap配下に各パッケージが保存されています。
masashi@PC-ubuntu:~$ ls -l /var/snap/juju/ 合計 12 drwxr-xr-x 2 root root 4096 8月 4 10:08 13563 drwxr-xr-x 2 root root 4096 8月 4 10:08 19681 drwxr-xr-x 2 root root 4096 8月 4 10:36 common lrwxrwxrwx 1 root root 5 8月 4 15:09 current -> 13563
数字のディレクトリはリビジョン番号っぽい。
currentが今のバージョンに向いているのね。
masashi@PC-ubuntu:~$ ls -l /var/snap/juju/current lrwxrwxrwx 1 root root 5 8月 4 15:09 /var/snap/juju/current -> 13563 masashi@PC-ubuntu:~$ masashi@PC-ubuntu:~$ ls -l /var/snap/juju/13563/ 合計 0
しかしリビジョンのディレクトリ内は空でした。
ただの管理のために存在しているんでしょうか。
masashi@PC-ubuntu:~$ ls -l /var/snap/juju/1* /var/snap/juju/13563: 合計 0 /var/snap/juju/19681: 合計 0
uninstall
アンインストールはremoveです。
masashi@PC-ubuntu:~$ sudo snap remove juju juju removed
リスト、ディレクトリから消えました。
masashi@PC-ubuntu:~$ snap list juju --all error: no matching snaps installed masashi@PC-ubuntu:~$ ls -l /var/snap/juju ls: '/var/snap/juju' にアクセスできません: そのようなファイルやディレクトリはありません
snapshotには残っているみたいなので間違って消えてもここから戻せそう。
remove時のバージョンも残るようです。
masashi@PC-ubuntu:~$ snap saved Set Snap Age Version Rev Size Notes 5 juju 17.4m 2.9.32 19681 500B - 6 juju 1m24s 2.7.8 13563 501B auto
と思いきやrestoreだけではダメでした。
この機能は自作snapを作る時に使う感じでしょうか。
masashi@PC-ubuntu:~$ sudo snap restore 5 juju Restored snapshot #5 of snaps "juju". masashi@PC-ubuntu:~$ snap list juju --all error: no matching snaps installed
まとめ
snapの操作を一通り行いました。
使い勝手としては各ディレクトリビューションのパッケージマネージャと変わりませんが、
ディストロ問わず同じコマンドを使えるのは意外と便利かもしれません。
パッケージのバージョンの行き来も簡単で、実際の運用で使う機会はそんなになさそうですが、
最新版にあげたらバグがあったのでちょっと戻したい、となった時に便利そうです。