jailでwebサーバやSambaを動かすとき、ホストの特定ディレクトリを参照するのはよくあること。 たとえば以下のようなディレクトリ構成で、ホストのpicturesディレクトリを、jailである “jail_samba” のshared_folderで見られるようにしたい。
.
|-- jails
| `-- jail_samba
| `-- shared_folder
`-- pictures
こういう場合には、nullfsで/picturesを/jails/jail_samba/shared_folderにマウントするのが定石。
ただこの問題点は、jailが増えていくと、ホストでmountコマンドを実行したときにズラズラと表示が増えて見にくくなること。
しょうがないと言えばしょうがないのだが、もうちょっとなんとかならんか。
jailのfstab
jailには専用のfstabがあるのでそれを使う。
使うと、jailが実行されたときにマウントされ、停止したときにはアンマウントされる。
ファイルは/etc/fstab.<jailname>
。
ただこの仕組みを使うと今度は/etcディレクトリの下が取っ散らかるのでjailのサポートツールを使う。
ここではqjailを使う。
qjailでjailごとのfstabを設定する。
/usr/local/etc/qjail.fstab/<jailname>
で決める。
デフォルトの状態では以下の通り。
ここではplexという名前のjailである。
$ cat ./plex
/usr/jails/sharedfs /usr/jails/plex/sharedfs nullfs ro 0 0
mountの状態を見てみる。
$ sudo qjail start plex
Jail successfully started plex
[doe@camazotz /usr/local/etc/qjail.fstab]$ mount
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
devfs on /dev (devfs, local, multilabel)
(略)
/usr/jails/sharedfs on /usr/jails/plex/sharedfs (nullfs, local, read-only)
devfs on /usr/jails/plex/dev (devfs, local, multilabel)
では、以下のように参照させる。
Hostディレクトリ | jail側のディレクトリ |
---|---|
/itunes/pictures | /usr/jails/plex/pictures |
/itunes/music | /usr/jails/plex/music |
/itunes/homevideo | /usr/jails/plex/homevideo |
まずjail側に、対応するディレクトリを作る。
もちろん作業前にjailは停止させましょう。
$ sudo qjail list
STATUS JID NIC IP Jailname
------ ---- ------ --------------- --------------------------------------------
DS N/A re0 192.168.1.15 plex
$
$ cd /usr/jails/plex/
$ sudo mkdir pictures music homevideo
Password:
$ ls
COPYRIGHT etc lib mnt pictures sbin tmp
bin home libexec music proc sharedfs usr
dev homevideo media net root sys var
次にfstabの書き換え。
$ cd /usr/local/etc/qjail.fstab/
$ sudo vi ./plex
$ cat ./plex
/usr/jails/sharedfs /usr/jails/plex/sharedfs nullfs ro 0 0
/itunes/pictures /usr/jails/plex/pictures nullfs ro 0 0
/itunes/music /usr/jails/plex/music nullfs ro 0 0
/itunes/homevideo /usr/jails/plex/homevideo nullfs ro 0 0
で、jail plexをスタート。
$ sudo qjail start plex
Jail successfully started plex
$ mount
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
devfs on /dev (devfs, local, multilabel)
(略)
zroot on /zroot (zfs, local, noatime, nfsv4acls)
/usr/jails/sharedfs on /usr/jails/plex/sharedfs (nullfs, local, read-only)
/itunes/pictures on /usr/jails/plex/pictures (nullfs, local, read-only)
/itunes/music on /usr/jails/plex/music (nullfs, local, read-only)
/itunes/homevideo on /usr/jails/plex/homevideo (nullfs, local, read-only)
devfs on /usr/jails/plex/dev (devfs, local, multilabel)
無事にマウントされた。
jail plexを止めて見てみよう。
$ sudo qjail stop plex
Jail successfully stopped plex
$ mount
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
devfs on /dev (devfs, local, multilabel)
(略)
zroot on /zroot (zfs, local, noatime, nfsv4acls)
狙い通りmountが外れている。
以上。