9-3. SunOS 4.1.x について (1) インタ−フェ−スとパケット転送制御 '96〜 * SunOS 4.1.x の ifconfig の特殊なところ SunOS 4.1.x はブロ−ドキャストの解釈が違うことに先ず注意したい。しかし解釈が違う 設定のまま異機種混合ネットワ−クで使用しても、問題は別に起きなかった。 # /etc/ifconfig le0 255 でないといけない!。 le0: flags=43 ↓ inet 202.241.128.1 netmask ffffff00 broadcast 202.241.128.0 ether 7:6:02:14:99:ff ifconfig の設定は /etc/rc.boot でネットマスクを付けずに、 ネットワ−ク・インタ− フェ−スを初期化する。次に /etc/rc.local の中で "+" を使ってネットマスクだけ再設 定する。 ifconfig le0 'hostname' netmask + しかしこの "+" は Sun 独自で、/etc/netmasks ファイルから、ネットマスク値をとる指 示である。分かりにくいので "+" は使わず明示した方がよい。 * インタ−フェ−スが1つの場合 # cat /etc/hostname.le0 << -rw-r--r--、root パ−ミション。 sparc << sparc はこのマシンの名前。 /etc/hosts ----------------------------- |127.0.0.1 localhost |202.241.128.1 sparc jiro << /etc/hostname.le0 と sparc は名前を合わせるこ と。jiro は別名である。 注.ホストのIPアドレスを変更する場合は、/etc/hosts に書いたIPアドレスを変え て reboot する。NIS も使っている場合は # cd /var/yp, # make とやること。 * インタ−フェ−スが2つの場合 # cat /etc/hostname.le0 << 1個目のインタ−フェ−ス。 sparc # cat /etc/hostname.le1 << 2個目のインタ−フェ−ス。 sparc-gw /etc/hosts ----------------------------- |127.0.0.1 localhost |202.241.128.1 sparc jiro |202.241.129.1 sparc-gw * ハ−ドウェアの情報を表示する # dmesg 現在の configuration file、パケットの転送制御で要る。 Sep 8 03:42 ↓ SunOS Release 4.1.2-JLE1.1.2 (GENERIC) #1: Mon Jun 1 17:24:04 JST 1992 Copyright (c) 1983-1991, Sun Microsystems, Inc. mem = 32768K (0x2000000) avail mem = 30863360 Ethernet address = 7:6:02:14:99:ff << 適当なMACアドレスに変えています。 | le0 at SBus slot 0 0xc00000 pri 5 << ネットワ−ク・インタ−フェ−ス。 * IPパケットの転送制御 Apollo のように簡単にはいかない。 マシンのOSのカ−ネルを再構築しなければならな い。この作業は本書での管理者の範囲を超えている。 もし IP forwarding をしないよう にしたければ出入りのSI業者に一度頼む。その時の作業ログをとっておき、戻し方も教 えてもらっておこう。同じ Sun でもOSやマシンの種類によってカ−ネルも違う。 一応 どうやってIPパケットの転送制御するのか書いておく。下に示す in_proto.c ファイル の IPFORWARDING という定数を変更するのである。デフォルトは0であり、イ−サネット ・インタ−フェ−スが2つあれば自動的に転送するようになっている。転送禁止にするに は−1にする。つまり #define IPFORWARDING -1 にしてコンパイルし、 これを含む一時 的なカ−ネルを作成し、本物のカ−ネルと交換するわけである。 /usr/kvm/sys/netinet/in_proto.c << /usr/sys/netinit からリンク。 ---------------------------------- |#include SPARCstation 2, SunOS 4.1.2 の場合 | | |#ifndef IPFORWARDING |/* #define IPFORWARDING 0 */ |#define IPFORWARDING -1 << -1 を指定して、転送禁止にする。 |#endif |int ip_forwarding = IPFORWARDING; # /bin/arch -k sun4c << machine のタイプを調べる。 # cd /usr/kvm/sys/sun4c/conf;ls -l << Kernel configuration file の色々。 -rw-r--r-- 1 root 1344 Oct 24 1991 DL60 -rw-r--r-- 1 root 1637 Oct 24 1991 DLS60 -rw-r--r-- 1 root 7836 Dec 2 1991 GENERIC << デフォルトはこれ。 -rw-r--r-- 1 root 6561 Dec 2 1991 GENERIC_SMALL -r--r--r-- 1 root 4093 Oct 24 1991 Makefile.src -rw-r--r-- 1 root 2542 Oct 24 1991 NFS60 -r--r--r-- 1 root 2644 Oct 24 1991 README -rw-r--r-- 1 root 2447 Oct 24 1991 SDST60 -r--r--r-- 1 root 23 Oct 24 1991 devices -r--r--r-- 1 root 8986 Oct 24 1991 files # cp GENERIC KATOU << これをコピ−して使うことにする。 # chmod +w KATOU /usr/kvm/sys/sun4c/conf/KATOU ------------------------------ |machine "sun4c" << machine と cpu はこのまま。 |cpu "SUN4C_60" |ident "KATOU" << configuration file の名前を入れる。 |#ident "GENERIC" # /usr/etc/config KATOU Doing a "make depend" # cd /usr/kvm/sys/sun4c/KATOU;ls << ディレクトリができて、ファイルがコピ Makefile dma.h is.h pp.h −される。/usr/kvm/sys/sun4c/KATOU。 dnalink.h kb.h pty.h tod.h | # make << すぐ終わる。1分ぐらい。 cc -sparc -c -O -Dsun4c -DGENERIC -DSUN4C_60 .. /netinet/in_proto.c | loading vmunix rearranging symbols text data bss dec hex 1327104 191824 118328 1637256 18fb88 # ls Makefile ft.h ... tcp_debug.o vmunix << できた。サイズ 1697083 byte。 # cp /vmunix /vmunix.kkk << 現在のを念のためとっておく。 # cp vmunix /vmunix << 入れ替える。リブ−トしてOK。 (2) SunOS スタ−トアップ制御 '96〜 SunOS 4.1.x 系のスタ−トアップ・ファイルについて、 TCP/IP ネットワ−クの部分のみ 説明する。 4.1.x は BSD 系のOSなので /etc/rc, /etc/rc.boot, /etc/rc.local が制 御ファイルである。これらのファイル中の以下の部分は関係しないので、コメントにする か、消去するかしてあると思って頂きたい。 ・NFS が使う biod, nfsd, rpc.lockd, rpc.statd, rpc.mounted。 ・NIS が使う ypbind, rpc.yppasswdd, ypxfrd, ypserv, ypupdated。 ・SecureNFS が使う keyserv。これは暗号化 NFS。日本では使えない。 ・かな漢字サ−バの cesd, ccv, kkcv。ccv と kkcv は cesd の管理下にある。 ・swapper, pagedaemon, update はシステムが使用するため必要。 ・プリントサ−バの lpd。プリンタを使わなければいらない。 ・RPC 管理の portmap、これは NIS のアップデ−ト時にも使われるので注意。 ・他 cron, syslogd は用がなければ必要ない。rpc.solved は何をやるのか不明。 SunOS はスタ−トアップ・ファイルの実行に際して、色々制御ファイルを使えるようにな っている。一般的なのは /etc/networks で静的経路の記述ファイルがある。 これ以外に も、/etc/defaultrouter、/etc/netmasks などがある。制御ファイルが不用意に増えると 何をやっているのか分からなくなる。ここでは、これらは使わずに直接 rc ファイルに記 述することにする。 /etc/hostname.le0 /etc/hostname.le1 2つインタ−フェ−スがあるとする。 ------------------ ------------------ |sparc |sparc-gw /etc/rc ------------------------------------------------------ |#! /bin/sh - |HOME=/; export HOME |PATH=/bin:/usr/bin:/usr/etc; export PATH |sh /etc/rc.local |rm -f /var/spool/cron/FIFO << cron 必要なければ、ここコメントにする。 |cron << ここもコメントにする。 | |if [ -f /usr/etc/inetd ]; then << inetd ス−パ−・デ−モン。 | inetd |fi |if [ -f /usr/lib/lpd ]; then << これはプリンタ・デ−モン。 | rm -f /dev/printer /var/spool/lpd.lock | /usr/lib/lpd |fi /etc/rc.boot ------------------------------------------------------ |#! /bin/sh - |PATH=/sbin:/single:/usr/bin:/usr/etc; export PATH |HOME=/; export HOME | |hostname="`shcat /etc/hostname.??0 2>/dev/null`" |if [ ! -f /etc/.UNCONFIGURED -a ! -z "$hostname" -a "$hostname" != "noname" ]; then | hostname $hostname |fi | |interface_names="`shcat /etc/hostname.* 2>/dev/null`" |if test -n "$interface_names" |then | ( | IFS="$IFS." | set `echo /etc/hostname\.*` | while test $# -ge 2 | do | shift | if [ "$1" != "xx0" ]; then |# ifconfig $1 "`shcat /etc/hostname\.$1`" netmask + -trailers up | ifconfig $1 "`shcat /etc/hostname\.$1`" netmask 0xffffff00 -trailers up | fi ↑ | shift クラスCのネットマスクにしておく。 | done ここではネットマスクだけ設定して | ) いる。 |fi | |ifconfig -ad auto-revarp up | |if [ -z "`hostname`" ]; then | hostconfig -p bootparams |fi | |if [ -z "`hostname`" -a ! -f /etc/.UNCONFIGURED ]; then | intr sh /etc/rc.ip |fi | |ifconfig lo0 127.0.0.1 up | | |# ここでは route コマンドは使えないと注意書きがあった。 |# |#if [ -f /sbin/route -a -f /etc/defaultrouter ]; then |# route -f add default `cat /etc/defaultrouter` 1 |#fi /etc/rc.local ------------------------------------------------------ |PATH=/bin:/usr/bin:/usr/etc:/usr/ucb; export PATH |LC="/usr/etc/install/run_configure" |NC="/usr/etc/install/sysIDtool" | |if [ -f /etc/.UNCONFIGURED ]; then | if [ -f ${NC} ]; then | intr ${NC} | if [ $? = 0 ]; then | intr /usr/etc/install/sys_rootpasswd | else | if [ -f ${LC} ]; then | intr ${LC} | fi | fi | else | if [ -f ${LC} ]; then | intr ${LC} | fi | fi | tzsetup |fi | |if [ -f /etc/defaultdomain ]; then << これは NIS のドメイン名。 | domainname `cat /etc/defaultdomain` |fi | |#ifconfig -a netmask + broadcast + > /dev/null |ifconfig le0 broadcast 202.241.128.255 > /dev/null << broadcast address をち | ゃんと設定し直している。 | |#ifconfig le1 broadcast 202.241.128.255 > /dev/null << 2個目の interface。 | |# デフォルトでは rc.boot で実行しているのに再度やることになっている。無視する。 |#if [ ! -f /sbin/route -a -f /etc/defaultrouter ]; then |# route -f add default `cat /etc/defaultrouter` 1 |#fi | |# 上記経路設定をここでやる。 |route add net 0.0.0.0 192.9.201.1 1 << ここで静的ル−トを記述する。 | |ifconfig -a << ifconfig の設定状態を表示する。 | |defroute="`netstat -n -r | grep default`" |if [ -z "$defroute" ]; then | if [ -f /usr/etc/in.routed ]; then | in.routed << routed の稼働。Sun の場合は in.xxx と | fi というように in が付くのが特徴。 |fi | |if [ -f /usr/etc/in.named -a -f /etc/named.boot ]; then | in.named << DNS の稼働。 |fi | |#if [ -f /usr/etc/syslogd ]; then << syslog をとりたい場合はコメントを外す。 |# rm -f /dev/log |# syslogd |#fi | |if [ -f /usr/lib/sendmail -a -f /etc/sendmail.cf ]; then | (cd /var/spool/mqueue; rm -f nf* lf*) | /usr/lib/sendmail -bd -q1h; echo -n ' sendmail' |fi | |if [ -f /etc/httpd.conf ]; then << CERN httpd の起動も追加してみた。 | /usr/local/bin/httpd -r /etc/httpd.conf | > & /dev/console |fi (3) 煮ても焼いても食えんマシン '96〜 * 捨てられないマシン ここでは Sun の古いマシンがあるとしよう。4.1.x-JLE 日本語版のOSである。 そのマ シンに PostScript の SPARCprinter がついているような場合、容易に捨てられない状況 があったりする。なんせこのプリンタは高かった。 この SPARCprinter は 4.1.x のOS でないと動かない。単に Solaris 2.x に変えるわけに行かないのである。 4.1.x-JLE の 場合、先にも述べたが DNS の扱いが NIS とも絡んで非常にやっかいになる。 4.1.x-JLE では DNS を働かせるには NIS が動いてないといけない。インタ−ネットの世 界では DNS はいわば必須なので困る。4.1.x の英語版では、 ホスト名解釈のレゾルバと いうのを入れ替えることによって直接 DNS を見るようにすることはできる。 しかしここ では日本語版を想定している。またたとえ英語版でも、入れ替えは相当やっかいみたいで ある。WWWのどこかにやり方が書いてあったが、本書の管理者の範囲を完全越えている。 [ ホストの確認 ] 他のマシンから telnet アクセスしても最初に出て来る。 ↓ SunOS Release 4.1.4-JLE1.1.4 (GENERIC_SUP1) #1: Thu Aug 22 14:24:06 JST 1996 # ldd /bin/cp -lc.1 => /usr/lib/libc.so.1.9 << レゾルバを変更するには、これを入れ替える。 -ldl.1 => /usr/lib/libdl.so.1.0 下手にいじるとマシンが壊れる。 # uname -a << # uname -r だと 4.1.4-JL と出る。sparc は SunOS sparc 4.1.4-JL 1 sun4c hostname コマンドで出て来るホスト名。 * SunOS 4.1.x の NIS の基本 ・NIS のサ−バは ypserv、NIS のクライアントは ypbind である。 ・NIS のスレ−ブサ−バは予備であり、NIS の最低限の実装には必要ない。 ・NIS の他のデ−モンの yppasswdd や ypupdated などは最低限の実装には必要ない。 ・NIS のデ−モンをバリア・セグメントのホストで稼働させるのは望ましくない。 ・システム起動時のみ自分のIPアドレスと localhost のエントリを、/etc/hosts から 参照する。起動後は NIS の hosts マップだけを見るようになる。 ・次のファイルも NIS 起動後、NIS のマップだけが参照される。passwd, netmasks, rpc, networks, protocols, services, rpc ファイルなどである。 ・メ−ルの /etc/aliases ファイルも NIS で管理される。newaliases コマンドをたたい た後、NIS マップの更新をやること。 ・NIS でホスト名が見つからなかった場合、DNS を検索しに行くようにするには、NIS の Makefile で B=-b を設定し、NIS マップを作成する。 ・/etc/passwd, /etc/hosts 等変更したら # cd /var/yp, # make をやること。変更は直 ちに有効になる。確認は /etc/hosts の場合 # ypcat hosts で内容が表示される。 ・portmap デ−モンが稼働していないと、上記 # make, # ypcat hosts は効かない。 * SunOS 4.1.x の NIS と DNS の振る舞い ・sendmail.nis は NIS しか見ない。 NIS で見つからなければ DNS を見にいきそうなも のだが、そうはならない。 ・sendmail.mx は NIS が稼働していても DNS しか見ない。即ち ypserv, ypbind は関係 ない。稼動していなくても直接 DNS を見にいく。 ・sendmail 8.8.5 は resolv.conf があれば DNS しか見ない。 Makefile の -DNIS 指定 は NIS が管理する /etc/hosts も見るという意味ではない。 NIS が管理する aliases を見るということらしい。これが一番いやらしい。非常に困る。 ・DNS は他のホストからなら見ることができる。resolv.conf は関係しない。このファイ ルは、そのホストでの DNS クライアントのためのものである。 * SunOS 4.1.x をどう使う 1) 社内外のメ−ルサ−バとして使う 外部にメ−ルを送るには sendmail は DNS を参照しなければならない。 このためメ−ル サ−バのホストでは /etc/resolv.conf で DNS のアドレスを記述する。 resolv.conf の 指定があるとどうやっても、このOSでは sendmail は DNS しか見なくなる。 これによ り内部同士のメ−ルでは、ホスト名解釈のため /etc/hosts や NIS は使えない。 内部ネ ット用の DNS を設けるしか手がないのだ。つまり DNS のスプリット・ドメイン構成にす るしか方法がない。しかしこれはやっかいだ。お勧めできない。 2) 社外用のメ−ルリレ−、社内用のメ−ルサ−バとして使う 外部とのメ−ルは別に設ける社外用メ−ルサ−バが働くとする。社外用のメ−ルリレ−は そのメ−ルサ−バと、ただメ−ルを移動させるだけである。これならメ−ルリレ−は DNS は関係ない。メ−ルサ−バのホスト名さえ分かればいいのである。 /etc/hosts 制御で社 外用のメ−ルリレ−、社内用のメ−ルサ−バとして使うことができる。ただ resolv.conf をこのホストで書こうとすると、またやっかいなことになる。 Netscape の使用は諦める ことだ。しかし # ping www.iij.ad.jp なども効かないのでは、困った!。 3) 社外用のWWWサ−バとして使う DNS だけ稼働させれば、社外からWWWサ−バにアクセスできる。 外からは NIS 経由で なく直接 DNS にアクセスできるのだ。 しかしWWWへのアクセス・ログを取る場合少々 困る。どこからアクセスが来たか、それをログでは見たい。ほかっておくとIPアドレス で記録されることになる。ホスト名で記録したければ、WWWサ−バのホスト自体も DNS のクライアントにならなければならない。resolv.conf を設定する必要がある。そうする と、このOSでは NIS 経由でないと DNS を見に行かない。NIS サ−バをともかく設置し なければならないのである。これは困ったことになった。 最低限の NIS を稼働させるに しても、NIS はインタ−ネットで安全とはいえない。するとログの記録をIPアドレスに するか、WWWサ−バとして使うのは諦めるしかない。 4) ただのクライアントとして使うだけ メ−ルサ−バでもなければWWWサ−バでもない。 Netscape などブラウザを使うだけの ホストならばどうだ。外部URLのWWWにアクセスするには、resolv.conf を設定しな ければならない。しかし、ホスト名解釈に DNS を使うということは、sendmail も DNSを 使うことになる。またまた問題が出た。 内部ネットのメ−ルのやりとりも DNS 制御とな りスプリット・ドメイン構成となるのだ。Netscape が使えるのにメ−ルができない。 そ んなわけには行かない。苦肉の策として外部WWWへは、 社内に別に Proxy サ−バを設 けて、間接アクセスさせるか。ん−、やっとれん。 全く SunOS 4.1.x は煮ても焼いても 食えん奴だ。(でもその後ディスク増設などのテスト機として役立つことになるのだった)。 * NIS の設定手順 /etc/hosts << これだけ NIS で管理したい。最も最低限の設定にする --------------------------- には、自ホストが hostB ならば、localhost と hostB |127.0.0.1 localhost だけの /etc/hosts にすればよい。 |192.9.201.1 hostB |192.9.201.2 hostC |192.9.201.3 hostD mailhost # cat /etc/defaultdomain << 現在の NIS のドメイン名を一応チェックする。 noname # domainname << domainname コマンドでも確認できる。NIS のドメイン noname 名が出て来る。最初は noname である。 # domainname dummy << NIS の domainname を dummy とする。 /etc/defaultdomain << このファイルにも dummy と書き入れておくこと。やっ ------------------- ておかないと reboot で立ち上がらなくなる。 |dummy # mkdir /var/yp << 最初 yp ディレクトリはない、作ること。 # cp /usr/lib/NIS.Makefile /var/yp/Makefile # cd /usr/etc/yp # vi Makefile << Makefile 変更して ypinit -m をやること。 Makefile ----------------------------------------------------------------------------- |# @(#)make.script 1.36 90/12/20 SMI |# This file should reside in both /var/yp/Makefile and /usr/lib/NIS.Makefile. |# It should only be executed from /var/yp. | |# Set the following variable to "-b" to have NIS servers use the domain name |# resolver for hosts not in the current domain. |B=-b << B= を B=-b に変更する。これが肝心!。 |#B= | | # /usr/etc/yp/ypinit -m << /var/yp ディレクトリを作ってからやること。 | Do you want this procedure to quit on non-fatal errors? [y/n: n] Return キ− | list, type a . next host to add: hostB NIS マスタ−サ−バのホスト名 next host to add: ^D NIS スレ−ブサ−バはなしとする。Ctrl+D キ− The current list of NIS servers looks like this: hostB Is this correct? [y/n: y] y There will be no further questions. The remainder of the procedure should take 5 to 10 minutes. すぐ終わる。ものの1秒。 Building /var/yp/dummy/ypservers... Running /var/yp/Makefile... updated passwd updated group updated hosts | Current working directory /var/yp hostB has been set up as a NIS master server without any errors. 以下のようにファイルができる。 # ls /var/yp Makefile group.time netmasks.time protocols.time services.time aliases.time hosts.time networks.time publickey.time dummy netid.time passwd.time rpc.time /etc/rc.local --------------------------------------------------------------- | | |# if [ -f /usr/etc/rpc.ypupdated -a -d /var/yp/$dname ]; then |# rpc.ypupdated; echo -n ' ypupdated' |# fi # reboot # ps -ax 55 ? IW 0:00 portmap << 必要。/var/yp/make で RPC コ−ルを使うため。 60 ? IW 0:01 ypserv << NIS のサ−バです。 62 ? IW 0:00 ypbind << NIS のクライアントです。内部メ−ルのやりとりだけ | なら、なくてもいいみたい。 注.portmap を停止して、再度 /usr/etc/portmap と起動しても # ypcat hosts は効か ない。# cd /var/yp, # make も効かない。マシンを reboot して最初から portmap を稼働させておかなければ、これらのコマンドは効かない。 [ メンテナンス ] /etc/passwd や /etc/hosts など、変更したらともかく /var/yp/make をやっておくこと。 # cd /var/yp # make updated hosts << 1分ぐらいかかることもある。 | # ypcat hosts 192.9.201.1 hostB 192.9.201.2 hostC 192.9.201.3 hostD mailhost ← ホストに別名が付いていればそれも反映される。 127.0.0.1 localhost (4) sendmail と popper のコンパイル '96〜 * sendmail-8.8.5 のコンパイル ( SunOS 4.1.4-JLE ) ================================================================================ 作成する sendmail は、ホスト名検索を /etc/hosts 制御とする。DNS や NIS は見ない。 ================================================================================ # ls /usr/lib/*db* << 入っているデ−タベ−スを調べる。 /usr/lib/libdbm.a # cd sendmail-8.8.5/src # cp Makefiles/Makefile.SunOS Makefile Makefile --------------------------------------------------------------------- |# define the database mechanisms available for map & alias lookups: |# -DNDBM -- use new DBM |# -DNEWDB -- use new Berkeley DB |# -DNIS -- include NIS support | |#DBMDEF= -DNDBM -DNEWDB -DNIS << libdbm.a しかないので -DNEWDB を削る。 |DBMDEF= -DNDBM -DNAMED_BIND=0 << ホスト名検索で DNS を見ないようにする。 | |# loader options |LDOPTS= -Bstatic | |# libraries required on your system |#LIBS= -ldb -lresolv |LIBS= -lresolv << libdbm.a しかないので -ldb を削る。 | | << SunOS のリゾルバ /usr/lib/libresolv.a を使う。 注.DBMDEF 定義のところ -------------------------------------------------------------------------------- SunOS 4.1.x にはデフォルトでは libdbm.a しかないので -DNEWDB 指定は有効ではない。 -DNIS は NIS のマップも見るようにする。この意味はホスト名検索で、NIS を見てなけ れば DNS を見るということではない。どうも NIS が管理する aliases も見るというこ とらしい。SunOS の NIS に絡んだ非常に訳のわからないところである。 -------------------------------------------------------------------------------- # make << マニュアルを作るところでエラ−になるが、 本体はノ−・エラ−、ノ−・ワ−ニングである。 # ls -al send* << sendmail ができる。 -rwxr-xr-x 1 root 557056 Apr 24 14:23 sendmail -r--r--r-- 1 1237 16045 Jan 17 08:26 sendmail.8 -r--r--r-- 1 1237 55314 Jan 15 10:51 sendmail.h -r--r--r-- 1 1237 4912 Sep 12 1996 sendmail.hf # make install << インスト−ルする。 install -o root -g kmem -m 6555 sendmail /usr/lib for i in /usr/ucb/newaliases /usr/ucb/mailq /usr/ucb/hoststat /usr/ucb/purgestat; do rm -f $i; ln -s /usr/lib/sendmail $i; done install -c -o root -g kmem -m 644 /dev/null \ /usr/lib/sendmail.st install -c -o root -g kmem -m 444 sendmail.hf /usr/lib groff -Tascii -mandoc aliases.5 > aliases.0 sh : groff: not found 注.Sun の /etc/group には kmem というグル−プが最初からある。 # /usr/lib/sendmail -bd -q1m & << 動作確認。一度 reboot した方がよい。 # ps -ax << プロセスの確認。 970 ? S 0:00 sendmail: accepting connections on port 25 色々 sendmail ができる。一応 SunOS 4.1.4-JLE に元からあったものや、 関連ファイル などリストしておく。ファイルサイズも出しておけば、どれがどれだか分からなくなるこ とはないだろう。それと元の sendmail.cf の内容は、4.1.4-JLE も 4.1.2-JLE と変わっ ていないみたいだ。ひょっとして sendmail プログラムも同じかも知れん。 # ls -l /usr/lib/send* -r-sr-sr-x 1 root 557056 Apr 24 14:23 /usr/lib/sendmail -r-sr-x--x 1 root 155648 Feb 25 13:12 /usr/lib/sendmail.nis << NIS 対応。 -r-sr-x--x 1 root 172032 Mar 27 1995 /usr/lib/sendmail.mx << DNS 対応。 -r-sr-sr-x 1 root 573440 Mar 24 10:52 /usr/lib/sendmail.8.8.5 << -DNIS あり。 -r-sr-sr-x 1 root 565248 Mar 24 15:46 /usr/lib/sendmail.8.none << -DNIS なし。 -r--r--r-- 1 root 4912 Mar 24 15:55 /usr/lib/sendmail.hf -r--r--r-- 1 root 10660 Oct 15 1994 /usr/lib/sendmail.main.cf -r-------- 1 root 155648 Oct 15 1994 /usr/lib/sendmail.mx_CTC -r--r--r-- 1 root 8334 Oct 15 1994 /usr/lib/sendmail.subsidiary.cf -r-------- 1 root 139264 Oct 15 1994 /usr/lib/sendmail_CTC * popper のコンパイル ( SunOS 4.1.4-JLE ) SunOS 4.1.x-JLE をメ−ルサ−バとして使うとする。 このホストでは DNS を検索するた め NIS が稼働しているとする。 SunOS 4.1.x-JLE の場合、問題なくコンパイルできると タカを食っていたが、何のことはない、エラ−がでる。個々のコンパイルは問題なく通る が、最後のライブラリをくっつけるところで __res が未定義と出てしまう。多分 NIS の 関係で共有ライブラリが結合されないのなだと思った。一応伊藤忠のソリュ−ションデ− タベ−スをのぞいてみた。記事はなかった。「UNIX MAGAZINE」'95/03, "POP後編" に 山口英氏が解決方法を書いていた。これを知らなかったら一体どうやるんでしょうね。 # popper.taz # mv popper.taz popper.tar.Z # uncompress popper.tar.Z # tar xvf popper.tar # ls popper popper.tar # cd popper # make | cc -O -DBIND43 -DHAVE_VSPRINTF -target sun4 -c pop_init.c | cc -O -DBIND43 -DHAVE_VSPRINTF -target sun4 -c popper.c cc pop_dele.o ... popper.o -o popper ld: Undefined symbol __res << __res は pop_init.c の中で使われている。 *** Error code 2 make: Fatal error: Command failed for target `popper' [ Makefile の修正 ] Makefile ----------------------------------- | | |${TARGET}: ${OBJS} |#cc ${OBJS} -o ${TARGET} |cc ${OBJS} -o ${TARGET} -lresolv << これでリンクOK。 | | # make install install -c -m 700 -o root -g staff popper /usr/etc (5) メ−ルのスプ−ルディレクトリの変更 '97/11/24 * メ−ルのスプ−ルが一杯 現行メ−ルストアのメ−ルのスプ−ルディレクトリの実体は /var/spool/ である。 この /var の属するパ−ティションの容量は元々非常に少なかった。このため余裕のある /sun パ−ティションに spool というディレクトリを作成し、 その下にメ−ルのスプ−ルディ レクトリを設け、変更することにする。作業は東海インタ−ネットが点検のため、インタ −ネットが使えない日に行なった。まだメ−ルのユ−ザ数も30人程度と少なく、メ−ル の利用もぼちぼちで作業はすんなり済んだ。幸いなことに mqueue ディレクトリにも溜ま っているメ−ルはなかった。 << 現行の状態 >> << 変更後の状態 >> /usr/spool ---> /var/spool /var/spool/mail ---> /sun/spool/mail /var/spool/mqueue ---> /sun/spool/mqueue * 現行のマシンの状態 # df Filesystem kbytes used avail capacity Mounted on /dev/sd0a 15487 10272 3667 74% / << 全部で約15 MB。 /dev/sd0g 148887 126077 7922 94% /usr 有効領域3MB強。 /dev/sd0h 193591 144280 29952 83% /home /dev/sd2g 471326 299480 124714 71% /sun # ls -lg /usr/spool lrwxrwxrwx 1 root wheel 12 Aug 22 1996 /usr/spool -> ../var/spool # cd /var/spool; ls -lg drwxr-sr-x 4 root 10 512 Oct 18 15:53 cron drwxr-xr-x 2 daemon daemon 512 Jan 2 1992 licenses drwxr-sr-x 2 uucp uucp 512 Oct 15 1994 locks drwxrwsr-x 2 daemon daemon 512 Oct 15 1994 lpd -rw-r--r-- 1 root 10 4 Oct 18 15:53 lpd.lock drwxrwsrwx 2 root 10 512 Aug 22 1996 ls drwxrwsrwt 2 root 10 1024 Nov 24 13:24 mail drwxr-s--- 2 root 10 512 Nov 24 10:48 mqueue drwxr-sr-x 2 root 10 512 Oct 15 1994 rwho drwxrwsrwx 2 bin bin 512 Oct 15 1994 secretmail drwxr-sr-x 10 uucp uucp 512 Oct 18 15:53 uucp drwxrwsrwt 2 uucp uucp 512 Oct 15 1994 uucppublic # grep full /var/adm/messages 注.メ−ルのスプ−ル領域が Jun 6 12:47:06 taro vmunix: /: file system full ル−ト"/" の /dev/sd0a Jun 6 12:47:08 taro last message repeated 4 times で、元々非常に少なかっ Jun 6 12:47:08 taro vmunix: /: file system full た。"/" ファイルシステ Jun 6 12:47:09 taro vmunix: /: file system full ムの領域が一杯になった Jun 6 12:47:10 taro vmunix: /: file system full と警告が出ている。 | # ls -lg /var/spool/mail -rw------- 1 khiro staff 0 Nov 24 1997 .khiro.pop -rw------- 1 hisobe staff 0 May 26 1997 .hisobe.pop -rw------- 1 khiro staff 0 Nov 24 1997 khiro -rw------- 1 hisobe staff 0 May 26 1997 hisobe # ls -l /var/spool/mqueue 注.mail, mqueue とも中味が全部0だったら、 下記で中 total 0 味はコピ−しなくてもいい。新しいディレクトリさえ 用意すればいい。 * 余裕のある新しいディレクトリにする # cd /sun; mkdir spool # ls -lg drwxr-xr-x 4 root daemon 512 Apr 8 12:43 spool # cd spool # cp -rp /usr/spool/mail mail << /sun/spool/mail に中味ごとコピ−する。 # cp -rp /usr/spool/mqueue mqueue /sun/spool/mail, mqueue である。 # ls -lg ↓ drwxrwsrwt 2 root daemon 1024 Apr 8 12:41 mail drwxr-s--- 2 root daemon 512 Jan 23 1998 mqueue # cd /var/spool # mv mail tmp_mail << 一応前のをコピ−しておく。 # mv mqueue tmp_mqueue # ln -s /sun/spool/mail /var/spool/mail << シンボリックリンクを張る。 # ln -s /sun/spool/mqueue /var/spool/mqueue # ls -lg << 関係するとこだけ表示した。 lrwxrwxrwx 1 root daemon 16 Apr 8 12:53 mail -> /sun/spool/mail lrwxrwxrwx 1 root daemon 18 Apr 8 12:53 mqueue -> /sun/spool/mqueue drwxrwsrwt 2 root 10 1024 Nov 24 1997 tmp_mail drwxr-s--- 2 root 10 512 Jan 23 1998 tmp_mqueue * 元のメ−ルスプ−ルに戻すには # cd /var/spool # rm mail mqueue << これでリンクを解消する。/sun/spool/mail, mqueue のファイ ルはそのままである。適当に消去すること。 # mv tmp_mail mail # mv tmp_mqueue mqueue