Snap
Snap はソフトウェアのデプロイとパッケージ管理のシステムです。パッケージは 'snap' と呼ばれ、それを使用するツールは 'snapd' と呼ばれています。snapd は、さまざまなディストリビューションで動作し、上流はディストリビューションに依存しないデプロイができるようになります。Snap は元々 Canonical によって設計、開発されました。
snapd は snap パッケージを管理するための REST API デーモンです。ユーザーは (同じパッケージに入っている) snap
クライアントを使用することで snapd を操作することができます。
snap はデフォルトのカーネルで現在有効にされている AppArmor を使ってアクセス制限ができます。AppArmor を有効にするには関連ページを参照してください。
目次
インストール
snapdAUR または snapd-gitAUR パッケージをインストールしてください。
バージョン 2.36 から、snapd
の AppArmor サポートが有効になっています。使用するためには AppArmor を有効にする必要があります。AppArmor#インストールを参照してください。
AppArmor を使用する場合:
$ systemctl enable --now apparmor.service $ systemctl enable --now snapd.apparmor.service
設定
snap
が使おうとしたときに snapd
デーモンを起動するには、snapd.socket
を起動・有効化します。
使用方法
snap
コマンドは snap を管理するために使います。
snap の検索
次のコマンドで Ubuntu Store を検索できます:
$ snap find searchterm
snap のインストール
次のコマンドで snap をインストールできます:
# snap install snapname
上記のコマンドを実行するには root 権限が必要です。現在のところ、通常ユーザーで snap をインストールすることはできません。インストールすると /var/lib/snapd/snaps
に snap がダウンロードされて、/var/lib/snapd/snap/<snapname>
にマウントされ、システムから使える状態になります。
システムが起動したときに全ての snap が利用できるように、snap のマウントユニットも作成され、/etc/systemd/system/multi-user.target.wants/
にシンボリックリンクとして追加されます。インストールが完了したら、次のコマンドでインストールされている snap を確認できます。バージョン番号やリビジョン番号、開発者も表示されます:
$ snap list
ローカルのハードドライブから野良 snap をインストールするには:
# snap install --dangerous /path/to/snap
snap のアップデート
次のコマンドで snap を手動でアップデートできます:
# snap refresh
snap を refresh.timer
の設定通りに自動でアップデートさせることも出来ます。
最新/次のアップデート時間を確認するには:
# snap refresh --time
アップデートの頻度を変更するには (例: 1日2回):
# snap set core refresh.timer=0:00~24:00/2
詳細は システムオプションのドキュメント を参照してください。
snap の削除
次のコマンドで snap を削除できます:
# snap remove snapname
ヒントとテクニック
Classic snap
一部の snap (例: Skype や Pycharm) は classic confinement を使用しますが、classic confinement は FHS に準拠していない /snap
ディレクトリを必要とします。snapd パッケージには /snap
ディレクトリは含まれていません。classic snap をインストールしたい場合、/var/lib/snapd/snap
から /snap
に手動でシンボリックリンクを作成してください:
# ln -s /var/lib/snapd/snap /snap
アクセス制限
AppArmor を使用している場合 snapd (バージョン2.36以上) は Ubuntu と同じプロファイルを生成します。AppArmor パーサーはメインラインカーネルによってサポートされていないルールを破棄します。
基本的なアクセス制限が動いているか確認するために hello-world
snap をインストールして、次のコマンドを実行してください:
$ hello-world.evil Hello Evil World! This example demonstrates the app confinement You should see a permission denied error next /snap/hello-world/27/bin/evil: 9: /snap/hello-world/27/bin/evil: cannot create /var/tmp/myevil.txt: Permission denied
AppArmor によりアクセスが拒否され、ログが生成されるはずです:
$ dmesg ... [ +0.000003] audit: type=1327 audit(1540469583.966:257): proctitle=2F62696E2F7368002F736E61702F68656C6C6F2D776F726C642F32372F62696E2F6576696C [ +12.268939] audit: type=1400 audit(1540469596.236:258): apparmor="DENIED" operation="open" profile="snap.hello-world.evil" name="/var/tmp/myevil.txt" pid=10835 comm="evil" requested_mask="wc" denied_mask="wc" fsuid=1000 ouid=1000 [ +0.000006] audit: type=1300 audit(1540469596.236:258): arch=c000003e syscall=2 success=no exit=-13 a0=55d991ba6bc8 a1=241 a2=1b6 a3=55d991ba6be0 items=0 ppid=31349 pid=10835 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts2 ses=3 comm="evil" exe="/bin/dash" subj==snap.hello-world.evil (enforce) ...
アクセス拒否が確認できない場合は、プロファイルがロードされているか確認してください:
$ sudo aa-status | grep snap.hello-world snap.hello-world.env snap.hello-world.evil snap.hello-world.hello-world snap.hello-world.sh
また、どのサンドボックスの機能が有効になっているか snapd に確認することができます:
$ snap debug sandbox-features apparmor: kernel:caps kernel:domain kernel:file kernel:mount kernel:namespaces kernel:network_v8 kernel:policy kernel:ptrace kernel:query kernel:rlimit kernel:signal parser:unsafe policy:default support-level:partial confinement-options: devmode dbus: mediated-bus-access kmod: mediated-modprobe mount: freezer-cgroup-v1 layouts mount-namespace per-snap-persistency per-snap-profiles per-snap-updates per-snap-user-profiles stale-base-invalidation seccomp: bpf-argument-filtering kernel:allow kernel:errno kernel:kill_process kernel:kill_thread kernel:log kernel:trace kernel:trap
GUI 管理
Gnome Software Center や KDE Discover は、gnome-software-snapAUR[リンク切れ: パッケージが存在しません] や discover-snapAUR パッケージをインストールすることで snap サポートを使用できます。
サポート
Arch Linux のメーリングリストや他の公式サポートチャンネルは Arch Linux で使用する snap のサポートを求める適切な場所ではありません。サポートを求めるときは Snapcraft フォーラム を利用してください。
参照
- 公式サイト
- GitHub リポジトリ
- arstechnica article (06/16) Ubuntu の snap が Arch などのディストリで使えるようになったことについての記事