Chromebook + Snap
Chromebook の Linux 環境 Crostini にパッケージマネジャーの Snap をインストールしたのですが、ちょっと詰まったので記録を残します。
この記事の前提
- Chromebook ASUS C425TA
本体は日本語向けに設定済み- Chrome OS 86
- Core m3-8100Y
- 4GB RAM
- eMMC 64GB ストレージ
- US キーボード
- Crostini 有効化済み
- 標準 Debian 10 コンテナ
日本語化対応済み
- 標準 Debian 10 コンテナ
Snap のインストール
コンテナが Debian ですので、Snap の Debian 向けインストールガイドに従ってインストールしていきました。
-
apt でのインストール
apt でインストールします。パッケージ名は snapd です。$ sudo apt update $ sudo apt install snapd
Snap 本体のインストールは特に問題なく終了しました。
-
Snap での core のインストールとエラー
ガイドによると core というパッケージをインストールするようにとのことなので試みましたがエラーとなりました。$ snap install core error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount: /tmp/sanity-mountpoint-110704200: mount failed: 許可されていない操作です.
「許可されていない操作」とあったので、権限の問題か?と
sudo
しましたが同じエラーでした。 -
SquashFS 関連パッケージのインストール
SquashFS ということでファイルシステム関連だろうとエラーメッセージから検索してみるとズバリの記事がありました。
linux - ChromeOS: error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount: - Stack Overflow
ここでは SquashFS に関わる3つのパッケージを apt でインストールする解決策が提示されていました。- libsquashfuse0
- squashfuse
- fuse
snapd 自体の依存関係では
squashfs-tools
というパッケージがあるのですが、これだけでは足りないようです。squashfs-tools
は上記3つのパッケージへの依存関係はありません。
また、3つのパッケージそれぞれも依存関係はありませんでした。
記事通りに3つのパッケージをインストールしてみます。$ sudo apt install libsquashfuse0 squashfuse fuse
こちらもインストール自体は問題なく終了しました。
-
Snap での core のインストール
もう一度 Snap で core をインストールしてみます。$ snap install core error: access denied (try with sudo)
エラーになりましたが、今度は明らかに権限の問題というメッセージなので sudo してもう一度。
$ sudo snap install core
今度はエラーなくインストール出来ました。
-
hello-world パッケージのインストールで動作確認
ガイドに従って hello-world パッケージをインストールして動作確認します。$ snap install hello-world error: access denied (try with sudo)
また権限でエラーなので、sudo してもう一度。インストールガイドでは全般的に sudo 無しとなっていましたが、間違いのようです。
$ sudo snap install hello-world
今度はインストール出来ましたので、hello-world コマンドで動作確認。
$ hello-world Hello World!
動作確認は問題ありませんでしたので、hello-world パッケージはアンインストールします。
$ sudo snap remove hello-world
-
Snap Store のインストールと動作確認
インストールガイドでは続けて Snap のデスクトップアプリのインストールを勧めていました。
余り使わない気もしますが、インストールしてみます。
Installing the Snap Store app | Snapcraft documentation$ sudo snap install snap-store
インストールは出来ましたので、起動してみました。
$ snap-store
起動に数分かかった上に warning が幾つか出ましたが、とりあえず起動は出来ました。
ただ、パッケージを検索するだけでもかなり動作が遅く使い物になりません。
Snap Store はあまり使う予定も無いので、ここでは深追いせずこれで終わりにしておきます。 -
sudoers の PATH へ
/snap/bin
を追加
Snap でインストールするパッケージのディレクトリは/snap/bin
となりますが、このディレクトリは sudo で実行するときのパスとして通っていませんでした。$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin $ sudo env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
visudo
コマンドで sudoers を編集します。パスを通す方法は3つあります。-
secure_path
へ追記する -
env_reset
オプションを無効にする -
env_keep
オプションで PATH を実行時ユーザーから引き継ぐ
私は
secure_path
への追記を採用しました。ホワイトリスト式で最もセキュリティ上の趣旨にあうと思うからです。# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass # Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
secure_path
へ追記後にもう一度パスを確認します。$ sudo env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
これで無事、パスは通りました。
-
Snap と Crostini の TIPS
Snap でインストールしたデスクトップアプリは Chrome OS のランチャーに追加されない
apt や deb パッケージでコンテナにインストールしたデスクトップアプリは Chrome OS のランチャーに自動で追加されます。
しかし、Snap でインストールしたデスクトップアプリはランチャーに追加されません。また、あとから追加することも出来ないので、コマンドで起動する必要があります。
結びに
ざっと検索した限りでは2020年11月現在で Snap のインストール時に SquashFS 関連パッケージのインストールが必要になっているのは Crostini でコンテナが Debian 10 の場合のようです。
Snap は使ったことがなかったのですが、他に Chromebook の Crostini 上で問題がないかは積極的に使ってみて確認していこうと思います。
Discussion