CentOS8, FreeIPAでautomountを使い,ホームフォルダーをファイル共有によって一元化する.
ええっと.うちの本番サーバーでは
- /net ネットワークで共有してるディスク
- /local ローカルマシンのディスク
になっているから,とりあえず,それを実現しよう.RedHatE8のガイドが見つからないので,RedHat7のガイドを見たが時間の無駄であった.
で, いったいどうしろと?
こういう場合,何が必要かを整理し,その作業を探す方が良かろう.
- ディスクを提供する側が,NFSサーバーを設定し.ディスクを共有する
- 提供を受ける側は,そのディスクを利用するように設定
で, 提供を受ける設定とは
auto.master
/- /etc/auto.localを見たまえ
/misc /etc/auto.miscを見たまえ
/net yp:auto.homeを見たまえ
auto.home
sun0 -fstype=nfs4,rw,hard,intr,rsize=4096,wsize=4096 sun0:/disk1
・・・
つまり, [フォルダー名 マウントオプション 提供ディスク]の羅列である. /net/フォルダー名 にアクセスがあると, autofs が提供ディスクをマウントオプションを使ってマウントする仕組みだ.
思い出せ, 1993年だ
ええっとえええっと・・・autofsのインダイレクトマップとダイレクトマップの違い忘れた.
マップ, つまり,写像ってわけだ.だから\[x\to f(x)\]であって,\(x\in A, y=f(x)\in B\)で\(A\)を定義域, \(B\)を値域と呼ぶべきところ, データベース業界では,\(A\)の要素を「キー」, 対応する\(B\)を「値バリュー」と呼ぶ仕様だった. で,
- キーが絶対パス (/media/usb とか)のやつをダイレクトマップ
- キーがマップ自身の属性値(例えば/miscとか)の相対パス(キーがcdromなら,属性値/miscと合わせ技で /misc/cdromになる)ってやろうがインダイレクト
・・・思い出した.こんな仕方もないものに,わざわざ名前つけるなよ,と思ったもんだ.
で,今回は・・・・サーバーの手順が不明だ.RedHatのガイドに記載があった:
NIS サーバーには、ユーザー、グループ、ホスト、netgroup、および自動マウントマップの情報が含まれます。これらのエントリータイプはいずれも IdM に移行することができます。
つまり,NISと同等のマップは提供するが,記述がないNFSサービスを提供する気は無い,ということですよね.ということは,提供側は,古式ゆかしくNFSエクスポートすれば良いのではないでしょうか?
マップの編集
Webサイトで設定
【Network Services】【Automount】にマウントメニューがある.
【default】をクリックすると, 【Automount Maps】が出る:
インダイレクト・マップを追加してみる.【Add】で
で,こうなる:
作成したマップをクリックし,エントリーを【Add】で作成する.
例えば ホスト【h223.229.249.10.1016485.vlan.kuins.net】が公開している /disk0 を【ib2007a】としてマウントできるように設定するには
最後に重要なポイント:
- デフォルトで設定されているダイレクトマップ 【auto.direct】はデータが一つもない.データが一つもないとエラーしてautofsが止まってしまう.使わないのであれば, 【auto.direct】マップを削除すること!
- 【auto.direct】マップを削除すると,【auto.master】の中のエントリー番号【/-】が嘘になる.使用しないのであれば,削除すること!エラーするから!
NFS利用しますよ設定
マップはできましたが,ディスクを共有するには,全マシーンでNFSを設定する必要がありやす.
ディスク提供側で実施 デイスク利用側で実施
ipa-server, ipa-clientのどちらかが完了した段階で, NFSはインストールされている. そこでいきなり実行する:
ipa-cient-automount
Searching for IPA server...
IPA server: DNS discovery
Location: default
Continue to configure the system with these values? [no]: yes
Configured /etc/idmapd.conf
Restarting sssd, waiting for it to become available.
Started autofs
NFSサーバー設定
ディスク提供側で実施
/etc/exports に提供にあたっての権利関係を指定する:
/export 10.249.229.0/24(rw,fsid=0) 提供する親フォルダは/exportで,提供先IPアドレス/ネットマスクが10.249.229.0/24 /export/disk0 10.249.229.0/24(rw,nohide) disk0を読み書き可能で提供する. /export/packages 10.249.229.0/24(rw,nohide,no_root_squash) packagesを読み書き可能で提供する. 管理者IDを抹消せず,木馬の進入を許可
localhostからもマウントする場合は:
/export 10.249.229.0/24(rw,fsid=0) localhost(rw,fsid=0) /export/disk0 10.249.229.0/24(rw,nohide) localhost(rw,nohide) /export/packages 10.249.229.0/24(rw,nohide,no_root_squash)
記述が終わったら,実際に提供するブツを用意しないとやばい. これは /etc/fstab に記述する. 例えば
UUID=あんたのUUID /local/disk0 xfs defaults,usrquota,grpquota 0 0 必要なら追加ディスクをマウント /local/disk0 /export/disk0 none bind 0 0 そのディスクをdisk0として大公開 /local/disk0 /disk0 none bind 0 0 /local/packages /export/packages none bind 0 0 システムディスクのフォルダーを大公開
ま,こんな感じか..緑色の不思議な/disk0は,後で説明する.
mkdir /export
mkdir /disk0
mkdir /export/disk0
...
mount -a
exportfs -a
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload
systemctl start nfs-server
systemctl enable nfs-server <-- 再起動しても有効にする
できたかな?
自分でマウント: mount localhost:/disk0 /mnt ---- OK!
他人がマウント: mount 10.249.229.223:/disk0 /mnt --- OK!
さて,上の /disk0 設定であるが,これはローカルのディスクをNFSを経由しないでマウントするための設定である.autofsは次のような動作をする:
- /net/KEY フォルダーにアクセスがあった!
- 上のマップを参照すると, KEYは, ホスト名 MACHINE のディスク名 /DISK であることがわかったとする.
- もしMACHINEが自分でないなら,何の躊躇もなくNFSを経由して/DISKを提供してもらう.
- もしMACHINEが自分自身であれば,NFSを経由すると速度が低下してしまう.そこで,/DISKが利用できるか?調べる
- つまり, 提供しているディスク名 /DISK がローカルファイルシステムに存在するなら使う
- 存在しなければ,諦めてローカルマシンにNFSで提供してもらう
- もちろんNFSアクセスでは爆遅になってしまうので,提供しているディスク/DISK がローカルファイルシステムにも存在した方が良い.
- そこで, /export/DISK と同じ内容を /DISK にバインド設定しておく.
動作確認
設定が終わったら,全マシンで
systemctl reload autofs ← restart しても reload はされないので,必ず,reload sytemctl restart autofs
すると,上で指定した /net フォルダーが全てのマシンに出現し,cd /net/ディスク名 によってファイル共有が実現される.やったー!メーッチャ簡単やんけー すげーすげー
つぎはレプリケーションだ.
なお,ユーザー登録した tom くんが(ホームディレクトリを /net/ib2007a/tom に変更したら)正常にログインできることろも確認した.