「Snap」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(6人の利用者による、間の20版が非表示) | |||
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 |
||
− | + | {{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 |
+ | $ snap find ''searchterm'' |
− | === |
+ | === インストール === |
− | 次のコマンドで 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 -- |
+ | # snap install --dangerous ''/path/to/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 |
+ | # 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 などのディストリで使えるようになったことについての記事 |
2024年7月10日 (水) 21:02時点における最新版
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 を管理するために使います。
検索
次のコマンドで 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 ...
GUI 管理
Gnome Software Center と KDE Discover の両方がネイティブのスナップサポートを提供することができます。KDE Discover の場合は discover-snapAUR パッケージをインストールしてください。
Snap Store は snap でインストールすることができます。
# snap install snap-store
サポート
Arch Linux のメーリングリストや他の公式サポートチャンネルは Arch Linux で使用する snap のサポートを求める適切な場所ではありません。サポートを求めるときは Snapcraft フォーラム を利用してください。
参照
- 公式サイト
- GitHub リポジトリ
- ArsTechnica article (2016-06) Ubuntu の snap が Arch などのディストリで使えるようになったことについての記事