Ubuntu22.04でfirefoxが/home以外で起動しない
Posted:
背景
2024/01時点だとUbuntu22.04 LTSでfirefoxをインストールしようとするとSnap版がインストールされます。
Snapは、アプリケーションとその依存関係を含む自己完結型のパッケージ形式で、異なるLinuxディストリビューション間での互換性を提供します。 Snapパッケージは独自のサンドボックス環境で実行され、セキュリティと隔離を強化します。自動更新機能により、常に最新のソフトウェアバージョンを維持することを目的としています。
仕組み自体は良い仕組みだと思います。ただ私の環境では動作しなかったので、回避方法のメモを残します。
回避策
snapのfirefoxではなくMozillaチームのfirefoxを入れます。
ハマりやすいポイント
Snap自体は割と20.04の頃から存在しており使ったりしていたのですが、22.04から apt install firefox とした場合でもsnapのパッケージがインストールされるようになりました。 (つまりdebでインストールされるように見えるが実はSnapパッケージ)
エラーメッセージ
「/home以外にホームディレクトリがあると追加で設定が必要ですよ」というメッセージが出る。
$ firefox
Sorry, home directories outside of /home needs configuration.
See https://forum.snapcraft.io/t/11209 for details.
オススメされているURLが Support for non /home homedirs 内容を見ると、 Home directories outside of ‘/home’に情報がまとまっているとの事。アプローチとしては2つ
sudo snap set system homedirs=<destination-directory>を実行してね- /home配下のホームディレクトリ配下にbindマウントしてね
1のアプローチを試してみるがエラー
$ sudo snap set system homedir=/mnt/nfs/home/exampleuser/
error: cannot perform the following tasks:
- Run configure hook of "core" snap (run hook "configure": cannot set "core.homedir": unsupported system option)
現在の状況を snap get で取得するもエラー
$ sudo snap get system homedir
error: snap "core" has no "homedir" configuration option
そもそもhomedirという機能はロードされているのか?を確認してもロードされていない。
sudo snap get system
Key Value
refresh {...}
seed {...}
system {...}
https://snapcraft.io/docs/home-outside-home?_ga=2.190030251.1609473829.1706598251-671978911.1706598251 を確認するとSnapのバージョン2.59から、と書いてあるので、現在のバージョンを確認してみる。 対応済みのバージョンの模様。
sudo snap version
snap 2.61.1
snapd 2.61.1
series 16
ubuntu 22.04
kernel 6.5.0-15-lowlatency
1のアプローチはそのままではうまく行かない。2のアプローチを試す。
sudo mount --bind /mnt/nfs/home/exampleuser /home/exampleuser
sudo vi /etc/passwd # ホームディレクトリを/home配下に修正
この状態であればSnapパッケージは動作する事が分かった。 ただ、できれば設定はシンプルにしたい。また/etc/passwdのホームディレクトリを変えてしまうのはNFSホームの設定との両立に支障がある(/homeは/homeでNFSマウントできない障害時のために残したい)
このためSnapではなくMozillaのパッケージを用いたい。下記でMozillaのPPAを追加
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt update
特定のPPAからパッケージを優先的にインストールするために、「パッケージピンニング」を使用。 これにより、特定のソース(PPAなど)からのパッケージに優先順位を付けることができます。
例えば、/etc/apt/preferences.d/ ディレクトリ内にピンニング設定ファイル(例えば mozillateam.pref)を作成します:
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1
上記の状態で選択されるパッケージを確認する
apt-cache policy firefox
下記のような状態だった。
$ apt-cache policy firefox
firefox:
インストールされているバージョン: 125.0.1+build1-0ubuntu0.22.04.1~mt1
候補: 125.0.1+build1-0ubuntu0.22.04.1~mt1
バージョンテーブル:
1:1snap1-0ubuntu2 -1
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
*** 125.0.1+build1-0ubuntu0.22.04.1~mt1 1001
1001 http://ppa.launchpad.net/mozillateam/ppa/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
これでdebパッケージでのFirefoxが起動した。
debパッケージのFirefox起動後、再度、再現性を確認するため、debのFirefoxを削除、Snapの状況を確認したところsnap set が可能だった(何かがトリガーになってロードされたようだ)
sudo snap set system homedir=/mnt/nfs/home/exampleuser/
値も取得できる。
$ sudo snap get system
Key Value
homedirs /mnt/nfs/home/exampleuser/
refresh {...}
seed {...}
system {...}
上記の状態でapt install firefoxを使ってsnapパッケージのfirefoxのインストールを試す。インストールはできる。
$ sudo apt install firefox
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
firefox
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
72.3 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 261 kB のディスク容量が消費されます。
パッケージを事前設定しています ...
以前に未選択のパッケージ firefox を選択しています。
(データベースを読み込んでいます ... 現在 492581 個のファイルとディレクトリがインストールされています。)
.../firefox_1%3a1snap1-0ubuntu2_amd64.deb を展開する準備をしています ...
=> Installing the firefox snap
==> Checking connectivity with the snap store
==> Installing the firefox snap
firefox 122.0-2.1 from Mozilla✓ installed
=> Snap installation complete
firefox (1:1snap1-0ubuntu2) を展開しています...
firefox (1:1snap1-0ubuntu2) を設定しています ...
desktop-file-utils (0.26-1ubuntu3) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
mailcap (3.70+nmu1ubuntu1) のトリガを処理しています ...
起動するかテスト -> 起動しない。
$ firefox
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/local/share/doc /usr/local/share/doc none bind,ro 0 0): cannot open directory "/usr/local/share": permission denied
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/gimp/2.0/help /usr/share/gimp/2.0/help none bind,ro 0 0): cannot open directory "/var/lib": permission denied
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/gtk-doc /usr/share/gtk-doc none bind,ro 0 0): cannot open directory "/var/lib": permission denied
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/libreoffice/help /usr/share/libreoffice/help none bind,ro 0 0): cannot open directory "/var/lib": permission denied
update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/xubuntu-docs /usr/share/xubuntu-docs none bind,ro 0 0): cannot open directory "/var/lib": permission denied
Sorry, home directories outside of /home needs configuration.
See https://forum.snapcraft.io/t/11209 for details.
現状はMozillaのPPAを追加し、debパッケージをインストールする方法が良いようだ。
Snapパッケージの削除
下記の両方が必要。
sudo apt remove firefox
sudo snap remove firefox
MozillaチームのPPA追加とPPAを優先するように変更してインストール
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt update
sudo vi /etc/apt/preferences.d/mozillateam.pref
下記を書き込む。
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
インストール
sudo apt update
sudo apt install firefox