はじめに
CI環境を構築するにあたって、成果物を共有するための共有ストレージが必要になった。 いろいろ検討したが、ESXiのデータストアとして利用できるという点から、NFS Version 4を採用することにした。 ネット上の情報は古いものが多くて構築に苦労したので、NFSサーバとNFSクライアントの構築手順を残しておく。 試した環境はUbuntu 18.04。
NFSサーバ
NFSサーバをインストールする。
$ sudo apt install nfs-kernel-server
公開するディレクトリを準備する。
ここでは、以下に示すディレクトリ/public/shared
と/var/ci-artifacts
を公開することにする。
/ |-- public | `-- shared `-- var `-- ci-artifacts
NFS Version 4は個別にディレクトリを公開するのではなく、特定のディレクトリをルートとして公開する思想らしい。
そのため、公開したいディレクトリをあるひとつのディレクトリのもとに集約する必要がある。
ここではバインドマウントを利用して、以下のようにディレクトリ/export
のもとに集約する。
/ |-- export | |-- ci-artifacts ←●/var/ci-artifactsをバインドマウント | `-- shared ←●/public/sharedをバインドマウント |-- public | `-- shared `-- var `-- ci-artifacts
推測だが、シンボリックリンクだと(chrootの場合のように)管轄外には辿れないので、バインドマウントでしっかりとファイルシステムに組み込む、ということなんだと思う。
バインドマウントするためには、/etc/fstab
に以下のエントリを追記する。
/export/ci-artifacts /var/ci-artifacts none bind 0 0 /export/shared /public/shared none bind 0 0
公開するディレクトリのマウント先を作成する。
$ sudo mkdir /export/ci-artifacts $ sudo mkdir /export/shared
マウントする。
$ sudo mount -a
マウントできているか確認する。
$ findmnt -l | grep "/export/" /var/ci-artifacts /dev/sda2[/export/ci-artifacts] ext4 rw,relatime,errors=remount-ro,data=ordered /public/shared /dev/sda2[/export/shared] ext4 rw,relatime,errors=remount-ro,data=ordered
/etc/exports
を編集して、公開するディレクトリの定義を行う。
/export 192.168.8.0/24(rw,sync,all_squash,no_subtree_check,fsid=0) /export/ci-artifacts 192.168.8.0/24(rw,sync,all_squash,no_subtree_check,nohide) /export/shared 192.168.8.0/24(rw,sync,no_root_squash,no_subtree_check,nohide)
ここではNFS Version 4のエントリだけを定義しているが、NFS Version 3などのエントリも混在させることができる。
fsid=0
とあるのが、NFS Version 4のルートのエントリとなる。
色々調べてみた結果、複数のルート(fsid=1
とか?)を公開することはできないように思うが、いまいち確証は得られなかった。
また、バインドマウントの単位ごとにエントリを作成する必要があり、ここでは/export/ci-artifacts
と/export/shared
のエントリを作成している。
/etc/exports
の編集が完了したら、以下のコマンドを実行してディレクトリを公開する。
$ sudo exportfs -r
あるいは、NFSサーバを再起動する事で公開してもよい。
$ sudo systemctl restart nfs-server
実際に公開できたか確認する。
$ sudo exportfs /export 192.168.8.0/24 /export/ci-artifacts 192.168.8.0/24 /export/shared 192.168.8.0/24
NFSクライアント
まずはNFSクライアントをインストールする。
$ sudo apt install nfs-common
マウントポイントを作成する。
$ sudo mkdir /ci-artifacts $ sudo mkdir /shared
/etc/fstab
を編集する。
192.168.8.1:/ci-artifacts /ci-artifacts nfs noauto,x-systemd.automount,rw 0 0 192.168.8.1:/shared /shared nfs noauto,x-systemd.automount,rw 0 0
マウントオプション的には、公開ディレクトリがどのバージョンのNFSなのかは、気にしなくていいようだ。
ただし、公開ディレクトリのパスのルートはfsid=0
のパスが基準になる。
そのため、今回の場合は/export
を基準にするため、/export/ci-artifacts
は/ci-artifacts
になる。
そして、マウントする。
$ sudo mount -a