unixで実現するインターネットサーバ(Solaris 2.5.1編)


Sun_OS4.1.4FreeBSDで実現するインターネットサーバについてはすでにご紹介したが、今回はSolaris2.5.1(Sun_OS5.5.1)に各種ソフトをインストールする手順を紹介する。
Sun_OSやFreeBSDがいわゆるBSD系のunixであるのに対して、SolarisはSVR4である。
同じunixでありながら、ディレクトリ構造やお約束事(これが大事ね)は異なっている。
例えば後からインストールするソフトのディレクトリが、"/usr/local"から"/opt"(/usr/opt)になったり、"/usr/home"が"/export/home"であったりと言った具合。
ユーザの追加もGUI画面上で行えたり、IPアドレスの設定変更もGUI上で行えるなどユーザインタフェースは進化している分、いわゆるDOSからWindowsに移ったような難解さも併せ持ったと思うのは私だけだろうか..

Solarisにはgzipもcコンパイラも付属していない。
まず最初にやることはそれらのインストールだ。
もちろんソースコードを持ってきてもダメである。
何しろコンパイラが入っていないのだ!,コンパイル済みのバイナリを入手しよう。
入手されたバイナリを、適当なディレクトリに展開する(後で不要になる),展開後"pkgadd -
{filename} とすることで /opt の下にディレクトリが作られインストールされる。
gzipとgccはよく使うので、パスを通しておくかパスの通ったディレクトリにコピーしておく。
余談だが、Solarisではデフォルトの言語が日本語になっている。
ftp等のソフトによっては、日本語が通らない(通らないだけではなく動作しない)場合が見られる。
その場合には、/etc/default/init に定義されている"LANG"を変更することにより英語モードに変更することができる。
LANG=ja ==> LANG=
この設定を行うと必然的にOpenwindowも英語モードとなる。
日本語環境が欲しいときはsetenv L
GN japaneseをcshで実行すればいい。


その1:WWW Server
インターネット関連機能の目玉といえば、WWWサーバだ。
ここでは、全世界でのシェアNo1と言われるフリーのソフト、APACHEをインストールすることにする。
このAPACHE,ソースが公開されているし、色々なオプションモジュールが用意されており商用サイトでの使用実績も多いと言われている。
コンパイル済みのバイナリを入手する手もあるが、ここではソースコードを入手してコンパイルした。
gzipで解凍してtarで展開すると、ディレクトリが作成され展開される。
展開したsrcディレクトリの中のConfigureファイルを編集して"Solaris2*"部分のコメントを外す。
その後"Configure"を実行するとMakefileが作成される。
(何もしなくても自動的にOSタイプを判定してくれるようだが..)makeを実行すればバイナリが完成するが「makeが無い」と言われる場合には/usr/ccs/bin にパスを通す。
(cshの場合は"set path=(/usr/ccs/bin $path) ついでにgccにもパスを通す場合は "set path=(/usr/ccs/bin /opt/FSFgcc/bin $path)"とする。
makeが完了すれば、srcディレクトリに実行ファイルが出来ているはずである。
次に、./confディレクトリで3つのconfigファイルを編集する。
これらファイルをエディタで開いて見れば、設定例とともに説明が書いて有るので決して難しい設定ではない。
詳しくはこちらにゆずる。
solarisでの注意点は、nobodyグループIDが(sun_OSやFreeBSDと違って)60001である点である。
httpd.confの中を訂正しておかないと実行できない。
設定が終了したら、httpdを実行すればよい。
(/usr/local/apache_1.2.0/src/httpd -f /usr/local/apache_1.2.0/conf/httpd.conf) これでhttpサーバが稼働する。
前記configファイルで設定されたディレクトリが、wwwホームディレクトリとなり同様に(通常は)index.htmlが最初に読み込まれるhtmlファイルである。


その2:perlインタプリタ
wwwサーバが動き始めたら、perlを入れてみたくなるだろう。
今回は面倒なことをせずにバイナリを持ってきた..perlはCFを使うときも必要だから、この際インストールしよう。


その3:bind
BINDはソースを入手してインストールする。
BINDをインストールする前に、Solarisに付属してくるBINDでDNS設定を行っておいた方が良いのだ(トラブルが出た場合に、何が悪いのか分からなくなるから)が、短気な人はコンパイルにかかってみて欲しい。
まずはMakefileを編集する。
(変更点のみ下記の通り)#(solaris2.x/sunos5.x)
#be careful with installation - note in particular that the system ships
#with /usr/sbin/in.named (with in.) and /usr/sbin/named-xfer (without in.)
#to emulate this naming, INDOT should be set to 'in.' while XFER_INDOT
#should be empty. also, under solaris2.x, use 'make install' at your own risk.
#don't include sys/stream.h via netinet/in.h by defining _SYS_STREAM_H.
#->and note that sun moved their nslookup to /usr/sbin for some odd reason;
# when you install this one in /usr/bin you should delete sun's or else you
# will get confusing results since you never know which nslookup you're using.
PIDDIR = /etc
LEX = lex
#uncomment next line for Sun C compiler
#CC = /opt/SUNWspro/bin/cc $(CPPFLAGS) -R$(DESTLIB)
#uncomment next two lines for GNU C compiler
CC = gcc $(CPPFLAGS)
#LDFLAGS=-Xlinker -R$(DESTLIB)
#otherwise uncomment the next line and hope for the best
#CC = cc $(CPPFLAGS)
CDEBUG = -g
CPPPFLAGS = -DSVR4 -D_SYS_STREAM_H -DMAXHOSTNAMELEN=256
CPPFLAGS = $(CPPPFLAGS) $(SOLCOMPAT)
INDOT = in.
XFER_INDOT =
LIBS = -ll -lnsl -lsocket
DESTEXEC = /usr/sbin
DESTHELP = /usr/lib
INSTALL_COMPAT = install-compat
LDS =
INSTALL = /usr/ucb/install
RANLIB =
ARPREF = `lorder
ARSUFF = | tsort`
MANDIR = man
MANROFF = cat
CATEXT = $$$$N
PS = ps -p
IOT = IOT
#uncomment next line for link-compatibility with Solaris resolver library
SOLCOMPA-Dgethostbyaddr=res_gethostbyaddr -Dgetnetbyname=res_getnetbyname \
-Dgetnetbyaddr=res_getnetbyaddr -Dsethostent=res_sethostent \
-Dendhostent=res_endhostent -Dgethostent=res_gethostent \
-Dsetnetent=res_setnetent -Dendnetent=res_endnetent \
-Dgetnetent=res_getnetent
# for details on shared library building, see shres/solaris/INSTALL
#uncomment next line to build a shared library version of libresolv
SHRES = shres/solaris
#uncomment next line to build tools and named with shared libresolv
#if you do so, you *must* define SOLCOMPAT as well (and it must be in CPPFLAGS)
RES = $(SHRES)/libresolv.so
# uncomment only one of the triplets of lines below
# -- if you use gcc (recommended)
# (if -fpic doesn't work, see shres/solaris/ISSUES)
SHCC = gcc -B/usr/ccs/bin/ $(CPPPFLAGS)
PIC= -fpic
SHLD = /usr/ccs/bin/ld -G
# -- if you use Sun's cc
#SHCC = /opt/SUNWspro/bin/cc $(CPPPFLAGS)
#PIC = -Kpic
#SHLD = /opt/SUNWspro/bin/cc -G

#(hpux7.0,hpux8.0,hpux9.0,)
#CC = cc $(CPPFLAGS)
#CDEBUG = -g
#CPPFLAGS = -DCHECK_UDP_SUM
#LEX = lex
#LIBS = -ll -lBSD
#PIDDIR = /etc
#DESTSBIN = /etc
#DESTEXEC = /etc
#DESTMAN = /usr/man
#DESTHELP = /usr/lib
#INSTALL = bsdinstall.sh
#RANLIB =
#MANROFF = cat
#PS = ps -p
#KSYMS = /hp-ux
#KMEM = /dev/kmem
#UDPSUM = udpcksum
#(bsdinstall.sh is in conf/)
Makefileが完成したら"make"を行い、エラーがなければ"make install"を行う。
これでBINDは新しくなったわけだ。
実はSolarisで完全に?BINDを使うためには、新しいlibresolvを見に行くように共有ライブラリを変更する必要がある。
これは、バイナリエディタで直接"/usr/lib/nss_dns.so.1"を編集してしまうと言う乱暴な作業が必要だ。
そのファイルの中の"libresolv.so.1"を"revresolv.so.2"に書き換えるのだが、この作業は必須ではないから、バイナリエディタをお持ちでない向きはやめておいた方がよい。
(危険性高し)インストールが済んだらDNSの設定をしよう!そうそう、Solarisの/etc/resolv.conf以外にも/etc/nsswitch.confも書き換えておかなくてはいけない。
/etc/nsswitch.conの中身hosts files ==> hosts files dn
上記"dns"を書き足すのだ。


その4:sendmail
sendmailはメール関連ソフトであり、Solarisにも付属している。
しかし一般的にOSの付属sendmailはバージョンが古く、セキュリティホールが多く見つかっている。
出来ることなら最新版をインストールしたいところだ。
perlのインストールを終えている方は、多少自信が付いたのでは無かろうか?sendmail(8.8.7) gzipで解答してtarで展開するとディレクトリが作られ展開される。
sendmailをインストールする前にbind4.9.xをインストールしておかなくてはいけない。
順序が逆だとsendmailが古いライブラリを使うので注意が必要だ。
展開された後のsrcディレクトリに移動して、sh makesendmail を行う。
決してmakeを使ってはいけない。
途中で"groffが無い”とメッセージが出るが、気になる人はgroffを持ってこよう。
気にならない人はMakefileでgroffを使おうとする部分をコメントアウトする。
コンパイルが終了したら"sh makesendmail install"とやって、インストールする。
sendmailのインストールはこれだけだが、Solarisでは/etc/mail/sendmail.cfが標準的であるのに対して(設定を変えなければ)/etc/sendmail.cfを見に行くようになる。
そこで、sendmail.cfを/etcの下に作成することになる。
sendmail.cfの作成は、sendmailのインストールよりも難解だ..

その5:CF
難解なsendmail.cfの作成支援ソフト、CFもインストールしよう。
CFはPerlで書かれているので、Perlさえ入っていれば実行できる(入っていなくても、shだけで実行する手もある)CFを展開した後"make samples"とする事でStandardディレクトリの下に、いくつかのサンプルが出来上がる。
その中からテキトーな(例えばsendmail-v7.def)を好きな名前(例えばabc.def)にコピーして編集する。
defファイルの編集に関しては、日本語ドキュメントが同梱されているので分かりやすいのではないかと思う。
専用線接続にしろ、ダイアルアップ接続やUUCPにしろ編集する部分はわずかなものだ。
この日本語ファイルは「JIS漢字」コードが使われている点に注意!,何故EUCで書いてくれなかったんだろう??その"abc.def"中身を編集して(そのうち書きましょう..)make abc.cf とやると、abc.cfが出来上がる。
これを cp abc.cf /etc/sendmail.cf としてコピーすればOK,sendmailを再起動してmailを出してみよう。


その6:qpopper
sendmailと一対となってmail関連プロトコルを実行するためのpopプロトコルを処理するqpopperのインストールを行わなくてはいけない。
qpopper以外にも、popプロトコルを処理するソフトは存在するから、各自の好みで選んで問題はない。
なお、Solarisにはpopプロトコルを処理できるモジュールは標準で付属していないからこのインストールは必須だ。
今回はこれも手抜きで、コンパイル済みバイナリを使用した。
(ソースコンパイルにはちょっとした変更が必要)インストール後に出来たpopperは、/usr/etcにコピーしなくてはいけない。
(別のディレクトリでも良いし、逆に/etc/inetd.confの設定を変えても良い)次に/etc/inetd.confを編集して次のに行を書き加える pop3 stream tcp nowait root /usr/etc/popper popper -
また/etc/servicesを編集して次の行を書き加える pop3 110/tcp 上記作業によって、例えばクライアントのNetscape mailなどからmail送受信が出来るはずである。
確認作業としては、telnetで110番ポートにアクセスしてみる手がある。
telnet hostname 110

その7:xntpd
インターネット経由でマシンの時計を自動校正させるのがntpサーバだ。
マシンの台数が多くなると時計管理も面倒だから、コイツをインストールしておこう。
ソースを展開したら cp Config.local.dist  Config.local としてファイルをコピーする。
その後 make makeconfig を実行することで、Makefileが出来上がる。
後は make と make install を行えばいい。
バイナリは/usr/local/bin に出来ているはずだ。
元となるntpサーバのアドレスは、こちらで見てくる。
めぼしいstratum 1サーバが見つかったら、/usr/local/bin/ntpdate {ntp server address} とする。
これで時計の粗調整を行うわけだ。
その後 /usr/local/bin/xntpd とすれば、ntpデーモンが時計を監視してくれる。
なお /usr/local/bin/ntpq で色々なステータスが見られる。


おまけ:あると便利なソフト
top CPUやメモリの使用状況をリアルタイムで見ることが出来る。
sysinfo その名の通り、OSバージョンからシリアルポートデバイス名,CPUのメーカまで分かる。
traceroute パケット経路と時間が分かる。


おまけ,その2:設定変更手順
ホストネームの変更
正しく?ホストネームの変更を行わないとOpenwindowが立ち上がらなくなったりAnswerbookが読めなくなるなどの障害が発生する。
admintoolでホストネームを変更したら、/etc/hostsにドメイン名を書き加える(sendmailの為に)更に"host=*****"で変更し(?)hostname.le0も変更するのだが、これらがadmintoolで変更できないのがちょっと疑問..私がどこかの環境を壊したためかも知れない。
ホストネームを変更したらBINDを再構築した方が無難。
IPアドレスの変更
これもadmintoolで変更できる。
その他は/etc/netmask,/etc/defaultrouter,/etc/resolv.confなど忘れずに設定しよう。
自動起動の設定
/etc/rc2.d/の中にS77options等として実行したいファイルを書き並べればいい。
システムは[S]の次の数字の順番に実行してくれる。
パッチを当てよう
http://sunsolve.sun.co.jp/sunsolve/jpにあるsolaris用パッチクラスタを入手するのが簡単だ。
これを適当な(パッチを当ててしまえば不要になるので/tmpでも良い)ディレクトリにコピーし"zcat 2.5.1_Recommended.tar.Z | tar xvf -"で展開して2.5.1_Recommendedディレクトリに移動後"./install_cluster"でパッチを当てる。
これは寝る前にやっておこう,翌朝には完了しているはずだ。
オートマウント解除
ホームディレクトリは/export/homeにマウントされた物を、ユーザ毎に/homeにマウントさせるのがお約束のようだ。
最初から/homeをマウントしておくと起動時にワーニングが出る(当たり前)そこで/etc/auto_masterの/home auto_homeの行に#を付けてコメントアウトする。
シェルを入れ替えた場合
シェルを入れ替えるとftpでの接続が出来なくなる場合がある。
そんな時は/etc/shellsに追加したシェルを書き足せばOK。
inetdのエラー
多くの端末からpopサーバを呼ばれる(同一ポートにアクセスが集中する)と、inetdが一定時間サービスを止めてしまう(セキュリティのため)(たぶん)デフォルトでは1分間に40回程度のアクセスしか許していないと思うが、多数のpopクライアントをかかえるメールサーバなどではこれでは不足だ。
そこでinetd起動時に "inetd -s -r 300 60"とすれば1分間に300回のアクセスまで許される。
inetdの起動は/etc/rc2.d/S72inetsvcに書いてあるはず。
ディスクの追加
SS5では専用のHDDでなければ正しい位置?に増設できない。
HDD自体は何でも良くて、そこらに転がっているSCSIディスクを付けてフォーマットすれば使えるようになる。
そこでこれを本体に内蔵したいと思うわけだが、CR-Driveが付いていないモデルの場合は、そこに付けることが出来る。
3.5インチHDDを5インチベイに取り付けるための金具?にHDDを取り付けて、CD-Drive用のスペースに置く(もしくは両面テープで貼る)事で作業完了。
インタフェースケーブルや電源ケーブルはCD-Drive用をそのまま使う。
CD-Driveの追加
unixのファイルシステムが読めるCD-Driveなら接続するだけでOK,くれぐれもunixファイルシステムが読めるドライブを使用すること。
テープバックアップ
/kernel1/drv/st.confにデバイスファイルを追加する(或いはコメントアウトする)boot -r でリブートすれば認識されているはず。