鶴見教育工学研究所

MacのUTMにインストールしたAlmaLinuxで共有フォルダーを有効化する

Tags:

先に結論だけ書いておきますね

  • UTMでインストールしたAlmaLinuxとホスト間でフォルダーを共有するには9pファイルシステムをサポートしたカーネルが必要
  • ELRepoリポジトリを有効化する
  • sudo dnf install kernel-ml でELRepoの9pモジュールがサポートされたカーネルをインストールする
  • 再起動して、mount コマンドなり /etc/fstab に書くなりしてマウントする
share (共有フォルダーをあらわす特殊デバイス名) が /mnt/macos にマウントされている

share (共有フォルダーをあらわす特殊デバイス名) が /mnt/macos にマウントされている

前置き1

4月から、やむを得ず🤪Macを使っています。6年近く使っていた富士通 FMV LIFEBOOK WU2/B3のバッテリーがヘタったのと、非常勤先の学部がMacなこと1、そして学割 (教職員割) で少し安く、かつ無金利48回払いができたので、M3 Macbook Air 15インチを購入しました。LIFEBOOKも、大学で学生に配布 (一括購入) されているMacも13インチなんですが、ちょっと画面が小さいなと。年なので🤪 かといって、2キロ超えの16インチProは持ち歩く気にならない2ので、間をとって15インチにしました。さらに、キャンペーンで24000円ぶんAppleギフトカードで還元されたので、(他に使い道もないので) Magic Trackpadを買いました。

まぁ、M3 Macを買った途端にM4チップが発表されたんですが。

前置き2

Macになっても仕事は変わらないので、研修や教材作成のためにLinuxやWindowsの環境が必要なことがあります。イマドキは何でもDockerなのでしょうが、筆者は (未だ) Dockerがよくわかっていないのと、どうせ永続化してしばらく使うのなら、普通の仮想マシンでいいんじゃないかと思っています (DockerでWindowsを動かすのも大変そうですし)。Macで仮想マシンを作成、実行するソフトとして、Parallels Desktopが有名ですが、有償です。他にもVMware Workstation Player(なんだこのURLは…)やVirtualBoxもあります。その中で、今回はオープンソースのUTMを使うことにしました。UTMは、LinuxのKVMでも使われているqemuがベースになっています。App Storeから入手しようとすると1500円するんですが、公式サイトからは無料でダウンロードできます。

仮想マシンの作成は他の仮想化ソフトとほとんど変わらず、マウスクリックや数値の入力だけでできます。今回は、Linux環境を作る必要があったので、AlmaLinuxをインストールしました。

本題

やっと本題ですが、AlmaLinuxをインストールする際に、ホストMacの “デスクトップ” を共有するよう設定したのですが、Linux側からは見えませんでした。調べてみると、Linuxでは mount コマンドのオプションで9pと指定してマウントする必要がありました。仮想マシンのOSがUbuntuであれば、以下の記事の通りにすればよいでしょう。

しかし、標準的なインストール直後のAlmaLinuxでは、

1
2
3
4
5
# shareが共有フォルダーを示す特殊なデバイス名っぽい
# /mnt/macosにマウントする
sudo mount -t 9p -o trans=virtio share /mnt/macos/ -oversion=9p2000.L

mount: /mnt/macos: unknown filesystem type '9p'.

といったように「9pというファイルシステムはない」とエラーになりました。さらに調べてみると、RHEL系 (CentOS, Rocky, Alma…) では、標準のカーネルでは9pファイルシステムをサポートしていない (カーネルモジュールを読み込んでいない) ようでした。実際に、以下のコマンドでモジュールのサポート有無が確認できます。

1
2
3
grep -i 9p /boot/config-5.14.0-427.13.1.el9_4.aarch64

# CONFIG_NET_9P is not set

昔は何かハードウェアを認識させるためにカーネルモジュールを追加してリビルドしたりしていましたが、今はめんどい🤪ので、もう少し楽な解決策はないかと調べていたら、UTMのGitHub issueで「ELRepoのカーネルを入れるとよい」とありました。

今まで、RHEL系のLinuxをインストールする時は、EPELリポジトリとRPM Fusionリポジトリを有効化していましたが、ELRepoというのは初めて知りました。なんかサイトがレトロなので、本当に更新されているんだろうかと思いましたが、今も活発に動いているようです。サイトの指示の通りRPMのGPG鍵のインストール、リポジトリファイル (? /etc/yum.repos.d/ 以下に入るファイル) のインストールを行いました。また、ミラーサーバーの一覧から、物理的にいちばん近そうなKDDI研究所のサーバーを参照するよう設定しました。そして、ELRepoでメンテナンスされているメインストリームのカーネルを以下のようにしてインストールします。

1
sudo dnf install kernel-ml

現時点でのカーネルのバージョンは6.8.9でした。AlmaLinux (9.4) のデフォルトは5.14.0なので、カーネルのバージョンが関係するような操作をする場合は注意が必要です。新しくインストールしたカーネルでは、9pファイルシステムがサポートされています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
grep -i 9p /boot/config-6.8.9-1.el9.elrepo.aarch64 
CONFIG_NET_9P=m
CONFIG_NET_9P_FD=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_NET_9P_XEN=m
CONFIG_NET_9P_RDMA=m
# CONFIG_NET_9P_DEBUG is not set
# CONFIG_VIDEO_MT9P031 is not set
CONFIG_9P_FS=m
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
# CONFIG_9P_FS_SECURITY is not set

これで、先ほどの mount コマンドが実行できるようになります。その前に、新しいカーネルで起動するために再起動が必要です。

1
2
# 正常にマウントできる
sudo mount -t 9p -o trans=virtio share /mnt/macos/ -oversion=9p2000.L

ここからはUTMのドキュメント通りですが、一般ユーザーでマウントしたフォルダーの読み書きができるように、chown コマンドで所有者を変更します。

1
chown -R $USER /mnt/macos

また、毎回手動で mount コマンドを実行するのではなく、仮想マシンの起動時に自動マウントするよう、/etc/fstab ファイルに以下の記述を追加します。

1
share   /mnt/macos      9p      trans=virtio,version=9p2000.L,rw,_netdev,nofail 0       0

ここまでやって、やっと仮想マシン側で作ったSSH鍵 (id_rsa.pub) をホストに送って authorized_keys に追加し、「ターミナル」アプリから仮想マシンにSSH接続できるようになりました。ただそれ (鍵の送信) がやりたかっただけなんですけどね。

…そして、書いていて気づきましたが、ローカルの仮想マシンなら公開鍵認証じゃなくてもパスワードでSSHできたじゃん、という。


  1. そのために、3年前に中古でMacbook Air Early 2015 (11.6インチ) を買ったんですが、画面デモ用途としても現代ではスペックが足りなすぎました。まぁ、11.6インチはある種の憧れで、ずっと欲しいなぁと思っていたので後悔はしていませんが。 ↩︎

  2. Proは30万円オーバーで、少額減価償却資産の特例 (一括償却) を超えてしまうというのもあります。 ↩︎