「Snap」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(→‎参照: 校正)
 
(6人の利用者による、間の19版が非表示)
1行目: 1行目:
 
[[Category:開発]]
 
[[Category:開発]]
 
[[en:Snapd]]
 
[[en:Snapd]]
  +
[[pl:Snap]]
 
[[ru:Snapd]]
 
[[ru:Snapd]]
  +
{{Related articles start}}
[https://github.com/snapcore/snapd snapd] は snap パッケージ ("snap") を管理するための REST API デーモンです。ユーザーは (同じパッケージに入っている) {{ic|snap}} クライアントを使用することで snapd を操作することができます。
 
  +
{{Related|Flatpak}}
  +
{{Related|AppArmor}}
  +
{{Related articles end}}
   
  +
[https://snapcraft.io/ Snap] はソフトウェアのデプロイとパッケージ管理のシステムです。パッケージは 'snap' と呼ばれ、それを使用するツールは 'snapd' と呼ばれています。snapd は、さまざまなディストリビューションで動作し、上流はディストリビューションに依存しないデプロイができるようになります。Snap は元々 Canonical によって設計、開発されました。
==インストール==
 
   
  +
[https://github.com/snapcore/snapd snapd] は snap パッケージを管理するための REST API デーモンです。ユーザーは (同じパッケージに入っている) {{ic|snap}} クライアントを使用することで snapd を操作することができます。
公式リポジトリから {{Pkg|snapd}} パッケージをインストールしてください。
 
   
  +
snap はデフォルトのカーネルで現在有効にされている [[AppArmor]] を使ってアクセス制限ができます。[[AppArmor]] を有効にするには関連ページを参照してください。
パッケージをインストールすると、snapd デーモンと snap パッケージのマウント・制限・起動をする snap-confine がインストールされます。
 
   
  +
{{Warning|
{{Warning|[https://github.com/snapcore/snap-confine snap-confine] は {{ic|--disable-apparmor}} オプションでビルドされており、完全な制限を行うには Ubuntu の [http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux_4.4.0-21.37.diff.gz Linux 4.4 パッチセット] をあてて [[AppArmor]] が有効になったカーネルと snap の AppArmor のプロファイルが必要です。}}
 
  +
* AppArmor がシステムで有効になっていない場合、すべてのスナップは ''devel'' モードで実行され、Arch Linux リポジトリからインストールされたアプリケーションと同じようにシステムへ無制限にアクセスできることになります。
  +
* 信頼されていないコードを実行することは決して安全ではなく、サンドボックスはこれを変えることはできません。}}
   
  +
==インストール==
{{tip|snapd は snapd パッケージでインストールしたバイナリのパスとデスクトップエントリをエクスポートするために {{ic|/etc/profile.d/}} にスクリプトをインストールします。変更を適用させるために一度再起動してください。}}
 
   
  +
{{AUR|snapd}} または {{AUR|snapd-git}} パッケージを[[インストール]]してください。
==設定==
 
snapd には複数の systemd ユニットが付属しています。snap の新しいバージョンがリリースされたときに自動的に更新するなどの複数のタスクを管理できます。
 
   
  +
{{tip|snapd は snapd パッケージでインストールしたバイナリのパスとデスクトップエントリをエクスポートするために {{ic|/etc/profile.d/}} にスクリプトをインストールします。変更を適用させるために一度再起動してください。}}
{{ic|snap}} が使おうとしたときに snapd デーモンを起動するには、{{ic|snapd.socket}} を起動・有効化します:
 
# systemctl start snapd.socket
 
   
  +
バージョン 2.36 から、{{ic|snapd}} の AppArmor サポートが有効になっています。使用するためには AppArmor を有効にする必要があります。[[AppArmor#インストール]]を参照してください。
新しいバージョンがストアに追加されたときに snap を更新するにはタイマーを起動します:
 
# systemctl start snapd.refresh.timer
 
   
  +
{{note|AppArmor が有効になっていない場合、全ての snap は {{ic|devel}} モードで動作します。このモードでは Arch Linux のリポジトリからインストールされたアプリのように、システムへの無制限のアクセスができます。}}
==削除==
 
   
  +
[[AppArmor]] を使用する場合:
{{Pkg|snapd}} パッケージをアンインストールしても ''snap'' を使用して作成されたディレクトリやファイルは削除されません。{{Pkg|snapd}} パッケージをアンインストールする際は事前に ''snap remove'' で snap を削除することを推奨します。現在、''snap'' コマンドで ubuntu-core の snap を削除する方法はありません。snap パッケージのキャッシュや mount ユニットファイルなどを完全に削除したい場合、以下の手順に従って下さい。
 
  +
$ systemctl enable --now apparmor.service
  +
$ systemctl enable --now snapd.apparmor.service
   
  +
==設定==
1. {{ic|/snap}} にマウントされている snap を全てアンマウントします:
 
  +
{{ic|snap}} が使おうとしたときに {{ic|snapd}} デーモンを起動するには、{{ic|snapd.socket}} を[[起動]]・[[有効化]]します。
 
# umount $(mount | grep snap | awk '{print $3}')
 
   
  +
== 使用方法 ==
2. 状態ディレクトリとマウントフックを削除します:
 
# rm -rf /var/lib/snapd
 
# rm -rf /snap
 
   
3. 起動時に {{ic|/var/lib/snapd/snaps}} から {{ic|/snap}} snap をマウントするユニットファイルを全て削除します:
+
{{ic|snap}} コマンドは snap を管理するために使います
# find /etc/systemd/system -name "snap-*.mount" -delete
 
# find /etc/systemd/system -name "snap.*.service" -delete
 
# find /etc/systemd/system/multi-user.target.wants -name "snap-*.mount" -delete
 
# find /etc/systemd/system/multi-user.target.wants -name "snap.*.service" -delete
 
   
==使用方法==
+
=== 検索 ===
   
===snap の検索===
 
 
次のコマンドで Ubuntu Store を検索できます:
 
次のコマンドで Ubuntu Store を検索できます:
$ snap find <searchterm>
+
$ snap find ''searchterm''
   
===snap インストール===
+
=== インストール ===
次のコマンドで snap をインストールすることができます:
 
# snap install <snapname>
 
   
  +
次のコマンドで snap をインストールできます:
上記のコマンドを実行するには root 権限が必要です。現在のところ、通常ユーザーで snap をインストールすることはできません。インストールすると {{ic|/var/lib/snapd/snaps}} に snap がダウンロードされて、{{ic|/snap/<snapname>}} にマウントされ、システムから使える状態になります。
 
  +
# snap install ''snapname''
  +
  +
上記のコマンドを実行するには root 権限が必要です。現在のところ、通常ユーザーで snap をインストールすることはできません。インストールすると {{ic|/var/lib/snapd/snaps}} に snap がダウンロードされて、{{ic|/var/lib/snapd/snap/<snapname>}} にマウントされ、システムから使える状態になります。
   
 
システムが起動したときに全ての snap が利用できるように、snap のマウントユニットも作成され、{{ic|/etc/systemd/system/multi-user.target.wants/}} にシンボリックリンクとして追加されます。インストールが完了したら、次のコマンドでインストールされている snap を確認できます。バージョン番号やリビジョン番号、開発者も表示されます:
 
システムが起動したときに全ての snap が利用できるように、snap のマウントユニットも作成され、{{ic|/etc/systemd/system/multi-user.target.wants/}} にシンボリックリンクとして追加されます。インストールが完了したら、次のコマンドでインストールされている snap を確認できます。バージョン番号やリビジョン番号、開発者も表示されます:
57行目: 55行目:
   
 
ローカルのハードドライブから野良 snap をインストールするには:
 
ローカルのハードドライブから野良 snap をインストールするには:
# snap install --devmode /path/to/snap
+
# snap install --dangerous ''/path/to/snap''
   
===snap アップデート===
+
=== アップデート ===
  +
snap をアップデートするには次のコマンドを使用:
 
  +
次のコマンドで snap を手動でアップデートできます:
 
# snap refresh
 
# snap refresh
   
  +
snap を {{ic|refresh.timer}} の設定通りに自動でアップデートさせることも出来ます。
===snap の削除===
 
  +
  +
最新/次のアップデート時間を確認するには:
  +
# snap refresh --time
  +
  +
アップデートの頻度を変更するには (例: 1日2回):
  +
# snap set core refresh.timer=0:00~24:00/2
  +
  +
詳細は [https://forum.snapcraft.io/t/system-options/87 システムオプションのドキュメント] を参照してください。
  +
  +
=== 削除 ===
  +
 
次のコマンドで snap を削除できます:
 
次のコマンドで snap を削除できます:
# snap remove <snapname>
+
# snap remove ''snapname''
   
  +
== ヒントとテクニック ==
== 参照 ==
 
  +
=== Classic snap ===
  +
一部の snap (例: [[Skype]] や Pycharm) は classic confinement を使用しますが、classic confinement は [[FHS]] に準拠していない {{ic|/snap}} ディレクトリを必要とします。snapd パッケージには {{ic|/snap}} ディレクトリは含まれていません。classic snap をインストールしたい場合、{{ic|/var/lib/snapd/snap}} から {{ic|/snap}} に手動でシンボリックリンクを作成してください:
   
  +
# ln -s /var/lib/snapd/snap /snap
* [http://arstechnica.com/information-technology/2016/06/goodbye-apt-and-yum-ubuntus-snap-apps-are-coming-to-distros-everywhere/ arstechnica article] (06/16) about Ubuntu snaps becoming available for Arch and other distros
 
  +
  +
=== アクセス制限 ===
  +
[[AppArmor]] を使用している場合 snapd は Ubuntu と同じプロファイルを生成します。[[AppArmor]] パーサーはメインラインカーネルでまだサポートされていないルールを削除するほど賢くなっています。
  +
  +
基本的なアクセス制限が動いているか確認するために {{ic|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
  +
  +
=== スナップフォルダを隠す ===
  +
  +
Snap は、ユーザーのホームディレクトリに {{ic|snap}} フォルダを配置します。このフォルダは再配置できませんが、[[KDE]] などで非表示にすることは可能です:
  +
  +
$ echo snap >> ~/.hidden
  +
  +
== トラブルシューティング ==
  +
  +
=== 文字が読めない ===
  +
  +
文字が読めず四角く表示される場合は、フォントキャッシュをクリアする必要があります。
  +
  +
# rm -f /var/cache/fontconfig/*
  +
$ rm -f ~/.cache/fontconfig/*
  +
# fc-cache -r -v
  +
  +
Snapctl は、個々のスナップに対して内部キャッシュを保存しています。これは、[https://askubuntu.com/a/1228809 個別にクリアする必要があります。]
  +
まず、これらを実行することで見つけます。
  +
  +
{{hc|$ find ~/snap/ -wholename '*/.cache/fontconfig'|
  +
... /home/darth_vader/snap/mailspring/common/.cache/fontconfig
  +
... /home/darth_vader/snap/authy/common/.cache/fontconfig
  +
... /home/darth_vader/snap/icedrive/common/.cache/fontconfig
  +
... /home/darth_vader/snap/discord/common/.cache/fontconfig
  +
... /home/darth_vader/snap/bitwarden/common/.cache/fontconfig
  +
}}
  +
  +
その後、個別に削除するか、[https://gist.github.com/Techcable/a9382ad83f1b651a0e9c25e9c6f26f88 このシンプルなループ] を使用します。
  +
  +
最後に、セッションを再スタートします。
  +
  +
=== Error:squashfs をマウントできない ===
  +
  +
Snap パッケージは [[ファイルシステム#Read-only ファイルシステム|SquashFS]] ファイルシステムを使用します。以下のようなエラーが発生した場合。
  +
error: system does not fully support snapd: cannot mount squashfs image using "squashfs"
  +
SquashFS カーネルモジュールがロードされていることを確認することができます。
  +
{{hc|$ lsmod|
  +
Module Size Used by
  +
'''squashfs xxxxx x'''
  +
...
  +
}}
  +
{{tip|最近システムに snapd パッケージを [[#インストール|インストール]] した場合、[[snap#インストール|Snap パッケージのインストール]] の前に Arch Linux を再起動する必要があるかもしれません。
  +
}}
  +
  +
== GUI 管理 ==
  +
  +
Gnome Software Center と KDE Discover の両方がネイティブのスナップサポートを提供することができます。KDE Discover の場合は {{AUR|discover-snap}} パッケージをインストールしてください。
  +
  +
[https://snapcraft.io/snap-store Snap Store] は snap でインストールすることができます。
  +
  +
# snap install snap-store
  +
  +
== サポート ==
  +
Arch Linux のメーリングリストや他の公式サポートチャンネルは Arch Linux で使用する snap のサポートを求める適切な場所ではありません。サポートを求めるときは [https://forum.snapcraft.io Snapcraft フォーラム] を利用してください。
  +
  +
== 参照 ==
  +
* [https://snapcraft.io/ 公式サイト]
  +
* [https://github.com/snapcore/snapd GitHub リポジトリ]
  +
* [http://arstechnica.com/information-technology/2016/06/goodbye-apt-and-yum-ubuntus-snap-apps-are-coming-to-distros-everywhere/ ArsTechnica article] (2016-06) Ubuntu の snap が Arch などのディストリで使えるようになったことについての記事

2023年6月2日 (金) 14:56時点における最新版

関連記事

Snap はソフトウェアのデプロイとパッケージ管理のシステムです。パッケージは 'snap' と呼ばれ、それを使用するツールは 'snapd' と呼ばれています。snapd は、さまざまなディストリビューションで動作し、上流はディストリビューションに依存しないデプロイができるようになります。Snap は元々 Canonical によって設計、開発されました。

snapd は snap パッケージを管理するための REST API デーモンです。ユーザーは (同じパッケージに入っている) snap クライアントを使用することで snapd を操作することができます。

snap はデフォルトのカーネルで現在有効にされている AppArmor を使ってアクセス制限ができます。AppArmor を有効にするには関連ページを参照してください。

警告:
  • AppArmor がシステムで有効になっていない場合、すべてのスナップは devel モードで実行され、Arch Linux リポジトリからインストールされたアプリケーションと同じようにシステムへ無制限にアクセスできることになります。
  • 信頼されていないコードを実行することは決して安全ではなく、サンドボックスはこれを変えることはできません。

インストール

snapdAUR または snapd-gitAUR パッケージをインストールしてください。

ヒント: snapd は snapd パッケージでインストールしたバイナリのパスとデスクトップエントリをエクスポートするために /etc/profile.d/ にスクリプトをインストールします。変更を適用させるために一度再起動してください。

バージョン 2.36 から、snapd の AppArmor サポートが有効になっています。使用するためには AppArmor を有効にする必要があります。AppArmor#インストールを参照してください。

ノート: AppArmor が有効になっていない場合、全ての snap は devel モードで動作します。このモードでは Arch Linux のリポジトリからインストールされたアプリのように、システムへの無制限のアクセスができます。

AppArmor を使用する場合:

$ systemctl enable --now apparmor.service
$ systemctl enable --now snapd.apparmor.service

設定

snap が使おうとしたときに snapd デーモンを起動するには、snapd.socket起動有効化します。

使用方法

snap コマンドは snap を管理するために使います。

検索

次のコマンドで Ubuntu Store を検索できます:

$ snap find searchterm

インストール

次のコマンドで 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 refresh

snap を refresh.timer の設定通りに自動でアップデートさせることも出来ます。

最新/次のアップデート時間を確認するには:

# snap refresh --time

アップデートの頻度を変更するには (例: 1日2回):

# snap set core refresh.timer=0:00~24:00/2

詳細は システムオプションのドキュメント を参照してください。

削除

次のコマンドで 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 は 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

スナップフォルダを隠す

Snap は、ユーザーのホームディレクトリに snap フォルダを配置します。このフォルダは再配置できませんが、KDE などで非表示にすることは可能です:

$ echo snap >> ~/.hidden

トラブルシューティング

文字が読めない

文字が読めず四角く表示される場合は、フォントキャッシュをクリアする必要があります。

# rm -f /var/cache/fontconfig/*
$ rm -f ~/.cache/fontconfig/*
# fc-cache -r -v

Snapctl は、個々のスナップに対して内部キャッシュを保存しています。これは、個別にクリアする必要があります。 まず、これらを実行することで見つけます。

$ find ~/snap/ -wholename '*/.cache/fontconfig'
... /home/darth_vader/snap/mailspring/common/.cache/fontconfig
... /home/darth_vader/snap/authy/common/.cache/fontconfig
... /home/darth_vader/snap/icedrive/common/.cache/fontconfig
... /home/darth_vader/snap/discord/common/.cache/fontconfig
... /home/darth_vader/snap/bitwarden/common/.cache/fontconfig

その後、個別に削除するか、このシンプルなループ を使用します。

最後に、セッションを再スタートします。

Error:squashfs をマウントできない

Snap パッケージは SquashFS ファイルシステムを使用します。以下のようなエラーが発生した場合。

error: system does not fully support snapd: cannot mount squashfs image using "squashfs"

SquashFS カーネルモジュールがロードされていることを確認することができます。

$ lsmod
Module                  Size  Used by
squashfs               xxxxx  x
...
ヒント: 最近システムに snapd パッケージを インストール した場合、Snap パッケージのインストール の前に Arch Linux を再起動する必要があるかもしれません。

GUI 管理

Gnome Software Center と KDE Discover の両方がネイティブのスナップサポートを提供することができます。KDE Discover の場合は discover-snapAUR パッケージをインストールしてください。

Snap Store は snap でインストールすることができます。

# snap install snap-store

サポート

Arch Linux のメーリングリストや他の公式サポートチャンネルは Arch Linux で使用する snap のサポートを求める適切な場所ではありません。サポートを求めるときは Snapcraft フォーラム を利用してください。

参照