⚙️

Chromebook + Snap

2020/11/10に公開

Chromebook の Linux 環境 Crostini にパッケージマネジャーの Snap をインストールしたのですが、ちょっと詰まったので記録を残します。

この記事の前提

Snap のインストール

コンテナが Debian ですので、Snap の Debian 向けインストールガイドに従ってインストールしていきました。
https://snapcraft.io/docs/installing-snap-on-debian

  1. apt でのインストール
    apt でインストールします。パッケージ名は snapd です。

    $ sudo apt update
    $ sudo apt install snapd
    

    Snap 本体のインストールは特に問題なく終了しました。

  2. 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 しましたが同じエラーでした。

  3. 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
    

    こちらもインストール自体は問題なく終了しました。

  4. Snap での core のインストール
    もう一度 Snap で core をインストールしてみます。

    $ snap install core
    error: access denied (try with sudo)
    

    エラーになりましたが、今度は明らかに権限の問題というメッセージなので sudo してもう一度。

    $ sudo snap install core
    

    今度はエラーなくインストール出来ました。

  5. 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
    
  6. Snap Store のインストールと動作確認
    インストールガイドでは続けて Snap のデスクトップアプリのインストールを勧めていました。
    余り使わない気もしますが、インストールしてみます。
    Installing the Snap Store app | Snapcraft documentation

    $ sudo snap install snap-store
    

    インストールは出来ましたので、起動してみました。

    $ snap-store
    

    起動に数分かかった上に warning が幾つか出ましたが、とりあえず起動は出来ました。

    ただ、パッケージを検索するだけでもかなり動作が遅く使い物になりません。
    Snap Store はあまり使う予定も無いので、ここでは深追いせずこれで終わりにしておきます。

  7. 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