amd (am-utils) のマップを LDAP で管理する。これができないと NIS から移行できない。以前は確か NetBSD 付属の am-utils は LDAP に対応していなかったように記憶しているが、NetBSD 5.0 のアナウンス によれば、5.0 から対応していたようだ。
NetBSD のソースツリーにある、src/external/bsd/am-utils/dist/ldap.schema を /usr/pkg/etc/openldap/schema/am-utils.schema にコピーする。
LDAP サーバの /usr/pkg/etc/openldap/slapd.conf に include /usr/pkg/etc/openldap/schema/am-utils.schema を追加して再起動する。
LDAP Admin に am-utils.schema を読ませる方法がわからなかったので、下の LDIF を手書きして ldapadd で登録した。その状態で LDAP Admin で接続すると以後は LDAP Admin で am-utils.schema 内で定義された ObjectClass を扱えるようになった。
dn: cn=amdmap amd.home timestamp,ou=Amd Map,dc=example,dc=co,dc=jp
objectClass: amdmapTimestamp
cn: amdmap timestamp
amdmapTimestamp: 1365580086
amdmapName: amd.home
dn: cn=amdmap amd.home[/defaults],ou=Amd Map,dc=example,dc=co,dc=jp
objectClass: amdmap
cn: amdmap amd.home[/defaults]
amdmapName: amd.home
amdmapKey: /defaults
amdmapValue: type:=nfs;sublink:=${key};opts:=rw,intr,nodev,nosuid,resvport,tcp
“ou=Amd Map,dc=example,dc=co,dc=jp” は事前に作成しておいた organizationUnit。単に整理のために作成しただけで必須ではない。名前も任意。
am-utils では、タイムスタンプ (amdmapTimestamp) とマップ (amdmap) の2種類の Object Class を使用する。
cn の形式は src/external/bsd/am-utils/dist/scripts/amd2ldif.in に合わせた。am-utils で要求されているのかどうかはよくわからない。
amdTimestamp では “cn=amdmap $mapname timestamp” で、amdmap では “cn=amdmap $mapname[$key]” となる。ここで $mapname は、am-utils で指定するマップ名 (map_name) が、$key にはキー名が入る。この例では、amd.home というマップのタイムスタンプと、/defaults の設定をしたことになっている。
タイムスタンプの値は、perl -e ‘print time,”\n”‘ として得られる Epoch を入れた。
ここで LDAP Admin が使用できるようになるので、LDAP Admin を使って個々のエントリを作成する。
LDIF で記述すると以下の通り。
dn: cn=amdmap amd.home[alice]
objectClass: top
objectClass: amdmap
amdmapName: amd.home
amdmapKey: alice
amdmapValue:
-rhost:=gemini;rfs:=/vol/home
host==${rhost};type:=link;fs:=${fs}
host!=${rhost}
amdmapValue の値は am-utils でのそれ。LDAP Admin では1行になるのでやや読みにくい。
ユーザ alice のホームディレクトリが、ファイルサーバ gemini の /vol/home/alice として置かれていて、gemini からは /home がエクスポートされている環境を想定している。gemini が同じマップを使用してマウントしようとした場合には、NFS ではなく、シンボリックリンクを作成する。
次、クライアント。
まず、/etc/amd.conf。
[global] ldap_proto_version = 3 ldap_base = "ou=Amd Map,dc=example,dc=co,dc=jp" ldap_hostports = aries.example.co.jp:389 restart_mounts = yes [/home2] map_type = ldap map_name = amd.home
見ればだいたいわかると思う。要注意は ldap_proto_version=3 。デフォルトでは 2 なので忘れると接続できない。
あとは、/etc/rc.conf に NFS と amd に必要な設定をして、起動すれば接続できる。