- Proxmox VEのLXCゲストは、ホストに保存されているISOファイルをマウントできない
- メディアからaptやyumをしたい場合など、ニッチだけど地味に困る
- ホストに保存されているISOの中身を、LXCゲストに見せる方法を整理する
検証環境
- Proxmox VE 6.3
Proxmox VEでは、LXCゲストでISOをマウントできない
Proxmox VEは、KVMゲストにISOファイルをマウントさせることはできるが、LXCゲストではWebインタフェースに項目が無く、マウントさせることはできない。
LXCでは、ISOからOSをインストールする必要が無いため、割り切った仕様にしているのだとは思うが、DVDメディアやISOファイルをリポジトリとして yum や apt を使いたい場合に困る*1。
ダメな例1
Webインタフェースで設定する代わりに、以下のように/etc/pve/lxc/<VMID>.conf
に設定を書き込んでも、エラーになりゲストが起動しなくなる。
mp0: /path/to/isofile,mp=/path/to/mountpoint,ro=1 ★ダメな例1★
ダメな例2
Porxmox VE のLXCゲストの設定ファイルには、通常のLXCのオプションをそのまま書くこともできるので、以下のようにloop
マウントをやりたくなるが、これもうまくいかない。なお、bind
マウントはできる。
lxc.mount.entry = /path/to/isofile path/to/mountpoint iso9660 loop,nofail,ro 0 0 ★ダメな例2★
ISOファイルをLXCゲストに送り込んで、ゲストの中からloop
マウントする方法も考えられるが、これは Permission Denied
になる。回避するためには、apparmorの設定を緩めたうえで、特権コンテナにし、さらにケーパビリティを調整しないといけない(ケーパビリティに関しては過去記事参照)。
素のLXCならともかく、Proxmox VE のようなプラットフォームでホストの設定を変えると、不具合の原因になりかねないので避けたい。
解決策
「ダメな例2」でしれっと書いたが、bind
マウントはできる。そこで、力業だけどもホストでloop
マウントして、そのディレクトリをbind
マウントして投影すればよい。
なお、loop
マウントのマウントポイントをbind
マウントのマウント元に指定しないと、ISOファイルの中身は見えない。横着して、複数のマウントポイントを集めた親ディレクトリをbind
マウントしてもISOの中は見えない。
最終的にはホストで以下のようにする。
- ISOファイルを
loop
マウント
$ sudo vim /etc/fstab /path/to/isofile /path/to/mountpoint-host iso9660 ro,loop,nofail 0 0
loop
マウントしたディレクトリをbind
マウント
$ sudo vim /etc/pve/lxc/<VMID>.conf lxc.mount.entry = /path/to/mountpoint-host path/to/mountpoint-guest none ro,bind,nofail 0 0
これで、ISOファイルの中身がゲストでも中身が見えるようになる。なお、Readonlyとはいえど、ホストとゲストの間で穴を開けることになるので、セキュリティ面では大変よろしくない。使い終わったら、さっさと元に戻すのが吉。
おわりに
- Proxmox VEでは、LXCゲストにISOファイルをマウントする手段を提供していない
- ゲストの中からマウントするには、セキュリティ設定をかなり調整しないとダメ
- ホストで
loop
マウントしてから、bind
マウントすれば間接的にISOファイルをマウントできる - セキュリティ面では大変宜しくないため、使い終わったら元に戻すこと