展開したソースのトップディレクトリにあるREADMEにはコンパイルの仕方等が書かれているので読んでください。INSTALLには特定機種の問題と対処方法が書いてあるので、必ず読んでください。
% tar xzf am-utils-6.0a16.tar.gz % cd am-utils-6.0a16
研究室ではprefixを/usr/am-utilsにしてインストールします。本来はconfigureにきちんと--prefixで指定しなければいけないのですが、コンパイル回数が多いのでconfigureとbuildallを書き換えてしまいます。
% mv buildall{,.orig}
% sed 's,/usr/local/AMD,/usr/am-utils,g' buildall.orig > buildall
% chmod +x buildall
% mv configure{,.orig}
% sed 's,/usr/local,/usr/am-utils,g' configure.orig > configure
% chmod +x configure
あとはこれだけ。全機種とも同じ場所でこれだけ。難しいとは言わせない。
% ./buildall # cd A.hogehoge # make install
インストールしたら、今動いているamdを終了して、試してみましょう。
# /usr/am-utils/sbin/amd -r -l syslog /home amd.home.map /share amd.share.map
am-utilsをインストールすると${prefix}/etc/amd.conf-sample
が出来上がります。これをベースに記述すれば良いのですが、デフォルト設定と異なるもの以外は記述しない方が、後の管理者に分かりやすいです。さきほどamdを起動するときにつけたオプションを/etc/amd.confに書くと以下のようになります。
でも、当分はlogをいろいろ取りたいとか、amd.runが欲しいとか、amdが落ちるときにumountして欲しいとか、icsドメインが分離していて...とかいろいろ要求は出てきて、以下がよろしいかと思います。[ global ] # (amd -r) restart_mounts = yes # (amd -l) log_file = syslog [ /home ] map_name = amd.home.map [ /share ] map_name = amd.share.map
/etc/amd.confが書けたら、今起動しているamdを終了して、もう一度起動してみましょう。[ global ] # (amd -p) print_pid = yes pid_file = /var/run/amd.pid # (amd -r) restart_mounts = yes unmount_on_exit = yes # (amd -l) log_file = /var/log/amd # (amd -x) log_options = fatal,error,user,warn,info,nomap,nostats [ /home ] map_name = amd.home.map [ /share ] map_name = amd.share.map
# /usr/am-utils/sbin/ctl-amd stop # /usr/am-utils/sbin/ctl-amd start もしくは # /usr/am-utils/sbin/ctl-amd restart
# amq -f
もしくは
# kill -1 `/usr/am-utils/sbin/amq -p`
もしくは
# kill -1 `cat /var/run/amd.pid`
もしくは
FreeBSD# killall -1 amd
もしくは
# ~keisuke/bin/all/killproc -1 amd
For NFS and UFS filesystems the value of `${fs}' is used as the local mount point. For other filesystem types it has other meanings which are described in the section describing the respective filesystem type. It is important that this string uniquely identifies the filesystem being mounted. To satisfy this requirement, it should contain the name of the host on which the filesystem is resident and the pathname of the filesystem on the local or remote host.昔は研究室のdefaultはfs:=${autodir}/${key}となっていましたが、sublink Optionを有効に使うために、amdのデフォルト(${autodir}/${rhost}${rfs})を使います。
The subdirectory whithin the mounted filesystem to which the reference should point. This can be used to prevent duplicate mounts in cases where multiple directories in the same mounted filesystem are used.簡単に言えば普通は${path}→${autofs}/${rhost}${rfs}のリンクが張られるのが${autofs}/${rhost}${rfs}/${sublink}へのリンクになります。
例えば、ホストnovaでは/export/projをnfs exportしており、projディレクトリの中にはasca、attempt、juten、markov、oscar、sed、snail、wasmii、vlsi等が存在します。これらを単独のkeyにしてマウントしたい場合、従来は
と記述していましたが、この調子でマップを書いていくと、asca host!=nova;rhost:=nova;rfs:=/export/home/proj/asca \ host==nova;type:=link;fs:=/export/home/proj/asca
path | link to | mount pt. | mount from |
---|---|---|---|
/home/asca | → | /a/asca | nova:/export/home/proj/asca |
/home/attempt | → | /a/attempt | nova:/export/home/proj/attempt |
: |
と書きます。fs Optionは再定義せずにamdのデフォルトを使います。そうするとまずnova:/export/homeが/a/nova/export/homeにマウントされ、そこのproj/ascaへリンクが張られるので、以下のように重複マウントはなくなります。asca host!=nova;rhost:=nova;rfs:=/export/home;sublink:=proj/asca \ host==nova;type:=link;fs:=/export/home/proj/asca
path | link to | mount pt. | mount from |
---|---|---|---|
/home/asca | /a/nova/export/home/proj/asca | /a/nova/export/home | nova:/export/home |
/home/attempt | /a/nova/export/home/proj/attempt | ↑ | ↑ |
: |
と言った記述が* host!=${key};type:=nfs;rhost:=${key};rfs:=/export/home \ hoge==${key};type:=link;fs:=/export/home
と書けるのかと思いきや、nfsマウントするときにhoge:/export/homeを/a/hogeでなく/export/homeにマウントしてしまいます。もちろんtype:=nfsの動作は${rhost}:/${rfs}を${fs}へマウントして、${key}から${fs}へリンクが張られるので、nfslがtype:=linkとtype:=nfsをミックスしただけならば、この記述ではこの動作はある意味正しいです。しかし、研究室の事情には合いません。* type:=nfsl;fs:=/export/home;rhost:=${key};rfs:=${fs}
と書けば、SCSI CDROMがつながっているFreeBSDでcdromをautomountできるようになります。全機種統一マップだとOSごとにCD-ROMのdeviceが違うので、まともに記述するとマウントマップが複雑になってしまいます。これを防ぐために、automountしたいCD-ROMはそのデバイスのリンクを/dev/cdromへ張っておくようにしましょう。cd type:=cdfs;dev:=/dev/cd0c
この例ではさらにMOとFloppy Diskも使えるようにしています。fdはSolarisに習ってdisketteにするとして、MOはどうしましょう? 私はFreeBSD以外知りません。cd type:=cdfs;dev:=/dev/cdrom mo type:=ufs;dev:=/dev/od0a mopc type:=pcfs;dev:=/dev/od0 fd type:=pcfs;dev:=/dev/diskette