Ubuntu Weekly Recipe

第582回 いろいろなディストリビューションでsnapとLXDを利用する

この記事を読むのに必要な時間:およそ 9.5 分

ディストリビューションごとのインストール方法

能書きはこれくらいにして,実際に各ディストリビューションでsnapを使える方法を説明しましょう。最低限必要なのがsnapdです。このデーモンだけはsnapパッケージとして配布できないので,各ディストリビューションのパッケージとして配布されています。

ちなみにsnapの権限管理機能を利用するためにはAppArmorといくつかのカーネルコンフィグが必要です。これらについてはディストリビューションによって対応がまちまちなので,snapdはAppArmorがなくても動作するようになっています。AppArmorがない場合,snapパッケージはホストシステムへのリソースにアクセス可能なdevmodeとして動作します。

今回インストールする対象は次のディストリビューションです。

Ubuntuを始めとしていくつかの派生ディストリビューションには最初からsnapdがインストールされています。それ以外のインストール方法はsnapcraftの公式ドキュメントにまとまっていますので,そちらも参照してください。

Debian 10へのインストール

DebianはDebian 9からリポジトリにsnapdが存在しています。よってaptコマンドからsnapdをインストール可能です。

$ sudo apt update
$ apt policy snapd
snapd:
  インストールされているバージョン: (なし)
  候補:               2.37.4-1+b1
  バージョンテーブル:
     2.37.4-1+b1 500
        500 http://deb.debian.org/debian buster/main amd64 Packages

$ sudo apt install snapd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  liblzo2-2 squashfs-tools
以下のパッケージが新たにインストールされます:
  liblzo2-2 snapd squashfs-tools
アップグレード: 0 個,新規インストール: 3 個,削除: 0 個,保留: 0 個。
14.5 MB のアーカイブを取得する必要があります。
この操作後に追加で 61.5 MB のディスク容量が消費されます。
(後略)

ただ,どうしてもsnapdのバージョンは古くなってしまいがちです。

$ snap --version
snap    2.37.4-1+b1
snapd   2.37.4-1+b1
series  16
debian  10
kernel  4.19.0-5-amd64

snapパッケージは/snap/bin/以下に実行バイナリへのシンボリックリンクを配置します。/etc/profile.d/apps-bin-path.shでPATHの設定をしていますので,一度ログインし直してください。

実際にsnapパッケージをインストールし,実行してみましょう。

$ sudo snap install hello-world
2019-08-17T21:16:44+09:00 INFO Waiting for restart...
hello-world 6.4 from Canonical✓ installed

$ snap list
Name         Version  Rev   Tracking  Publisher   Notes
core         16-2.40  7396  stable    canonical✓  core
hello-world  6.4      29    stable    canonical✓  -

$ hello-world
Hello World!

coreパッケージはsnapアプリケーションを動かすためのベースシステムです。

CentOS 7へのインストール

CentOSやRHELは7.6以降であればEPELリポジトリにあるsnapdパッケージを利用可能です※3⁠。よってあらかじめEPELリポジトリを有効化しておいてください。

※3
RHEL8用のsnapdパッケージもありますので,本項目の内容はRHELでもそのまま適用可能です。
$ sudo yum install epel-release
$ yum info snapd
中略
利用可能なパッケージ
名前                : snapd
アーキテクチャー    : x86_64
バージョン          : 2.39.2
リリース            : 1.el7
容量                : 14 M
リポジトリー        : epel/x86_64
要約                : A transactional software package manager
URL                 : https://github.com/snapcore/snapd
ライセンス          : GPLv3
説明                : Snappy is a modern, cross-distribution, transactional package manager
                    : designed for working with self-contained, immutable packages.

$ sudo yum install snapd
(中略)
インストール:
  snapd.x86_64 0:2.39.2-1.el7

依存性関連をインストールしました:
  audit-libs-python.x86_64 0:2.8.4-4.el7   bash-completion.noarch 1:2.1-6.el7                 checkpolicy.x86_64 0:2.5-8.el7
  fuse.x86_64 0:2.9.2-11.el7               fuse-libs.x86_64 0:2.9.2-11.el7                    libcgroup.x86_64 0:0.41-20.el7
  libsemanage-python.x86_64 0:2.5-14.el7   libzstd.x86_64 0:1.4.2-1.el7                       policycoreutils-python.x86_64 0:2.5-29.el7_6.1
  python-IPy.noarch 0:0.75-6.el7           setools-libs.x86_64 0:3.3.8-4.el7                  snap-confine.x86_64 0:2.39.2-1.el7
  snapd-selinux.noarch 0:2.39.2-1.el7      squashfs-tools.x86_64 0:4.3-0.21.gitaae0aff4.el7   squashfuse.x86_64 0:0.1.102-1.el7
  squashfuse-libs.x86_64 0:0.1.102-1.el7

完了しました!

snapパッケージをインストールするためにはsnapdが起動していなくてはなりません。snapd.socketをアクティベーションしておくと,必要に応じてsnapdを起動してくてくれます。

$ sudo systemctl enable --now snapd.socket

$ snap --version
snap    2.39.2-1.el7
snapd   2.39.2-1.el7
series  16
centos  7
kernel  3.10.0-957.27.2.el7.x86_64

また,/snapディレクトリは作られませんので自分で作成します。

$ sudo ln -s /var/lib/snapd/snap /snap

Debianと異なり,CentOSの場合は/etc/profile.d/snapd.sh/snap/binのPATH設定などを行います。よってやはりログインし直してください。

$ sudo snap install hello-world
2019-08-17T23:51:40+09:00 INFO Waiting for restart...
Warning: /var/lib/snapd/snap/bin was not found in your $PATH. If you've not restarted your session
         since you installed snapd, try doing that. Please see https://forum.snapcraft.io/t/9469
         for more details.

hello-world 6.4 from Canonical✓ installed
$ hello-world
Hello World!

パッケージインストール時にsnapdが起動しているため,Debianとは少し異なるメッセージですね。警告は/var/lib/snapd/snap/binがsudo時のPATHとして設定されていないことによる警告です。

openSUSE Leap 15.1へのインストール

openSUSE Leap/Tumbleweedは,snappyリポジトリからsnapdのインストールが可能です。よってまずはsnappyリポジトリを有効化します。

$ sudo zypper addrepo --refresh https://download.opensuse.org/repositories/system:/snappy/openSUSE_Leap_15.1 snappy
リポジトリ 'snappy' を正常に追加しました

URI         : https://download.opensuse.org/repositories/system:/snappy/openSUSE_Leap_15.1
有効        : はい (y)
GPGチェック : はい (y)
自動更新    : はい (y)
優先順位    : 99 (既定の優先順位)

$ sudo zypper --gpg-auto-import-keys refresh
以下の鍵を自動的にインポートします:

  リポジトリ:        snappy
  鍵の名前:          system:snappy OBS Project <system:snappy@build.opensuse.org>
  鍵の指紋:          4F2FA05B 2C6589C3 FD12055E F7C6E425 ED340235
  鍵の作成日時:      2018年09月05日 19時57分20秒
  鍵の期限切れ日時:  2020年11月13日 19時57分20秒
  RPM の名前:        gpg-pubkey-ed340235-5b8fb690

(中略)
すべてのリポジトリを更新しました。

$ sudo zypper dup --from snappy
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...
ディストリビューションのアップグレードを準備しています...

何もすることがありません。

上記はopenSUSE Leap 15.1にインストールした例です。他のリリースを使う場合は適宜URLを変更してください。

snapdパッケージをインストールしましょう。

$ sudo zypper install snapd
(中略)
以下 2 個の新しいパッケージをインストールします:
  snapd squashfs
(後略)

openSUSEの場合は,snapdそのものを有効化する方法が紹介されています。

$ sudo systemctl enable snapd
$ sudo systemctl start snapd

Tumbleweedの場合は,snapd.apparmorも有効化する必要があるようです。

$ sudo systemctl enable snapd.apparmor
$ sudo systemctl start snapd.apparmor

CentOSと同様にPATH設定するためにログインし直してください。

$ snap --version
snap           2.39.1-lp151.3.1
snapd          2.39.1-lp151.3.1
series         16
opensuse-leap  15.1
kernel         4.12.14-lp151.28.13-default

実際にsnapパッケージをインストールし,実行してみましょう。

$ sudo snap install hello-world
hello-world 6.4 from Canonical✓ installed

$ snap list
Name         Version  Rev   Tracking  Publisher   Notes
core         16-2.40  7396  stable    canonical✓  core
hello-world  6.4      29    stable    canonical✓  -

$ hello-world
Hello World!

Arch Linuxへのインストール

Arch Linuxへのインストールは,snapcraft.ioよりはArch Wikiのほうがかなり詳しく紹介されています。

以前はリポジトリにsnapdパッケージがあったのですが,今はAUR経由のインストールになっているので,gitやbase-develグループが必要になります。

$ sudo packman -S git base-devel

次に必要なパッケージデータをダウンロードしてビルド・インストールしましょう。

$ git clone https://aur.archlinux.org/snapd.git
$ cd snapd
$ makepkg -si

CentOSと同様に,snapd.socketを有効化し,/snapを作成しましょう。

$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap

$ snap --version
snap    2.40-1
snapd   2.40-1
series  16
arch    -
kernel  5.2.8-arch1-1-ARCH

/snap/binへのPATH設定のために再ログインしてください。そのあとの実行方法は他のディストリビューションと同じです。

$ sudo snap install hello-world
2019-08-17T23:51:40+09:00 INFO Waiting for restart...
Warning: /var/lib/snapd/snap/bin was not found in your $PATH. If you've not restarted your session
         since you installed snapd, try doing that. Please see https://forum.snapcraft.io/t/9469
         for more details.

hello-world 6.4 from Canonical✓ installed
$ hello-world
Hello World!

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。