ThinkPad535のサーバー化

 中古で9800円で買ってきたThinkPad535。スタジオでMIDIでも鳴らそうかと思っていたんだが、使い勝手悪すぎ。お払い箱になっちゃいそうなんで、サーバー化。いろいろ便利に使えればいいかなと。RedHatLinuxのバージョンは現在9だけど、Pentium 100MHzではしんどいので、なるべく古いやつってことでカーネル2.2を使った最後のやつ、RedHatLinux6.2jをインストール。VineLinuxのほうが簡単って話だけど、以前インストールしたときにRedHatとディレクトリ構成が微妙に違うんでやっぱRedHatの方がいいやと。
 ハードウェアはメモリをメモリを最大まで(20Mかな?)追加して、標準のHDDを最大(6G)まで増やした。この時点で2万になっちゃってるんだけどね。ノートだから停電しても平気だしね、Penの100MHzだから消費電力も少ないしね。このPCの問題はCD-ROMがなくFDDしかない。よってネットワークインストールしなきゃならないこと。
 まぁ、以前(HDDが1Gのとき)にもやってたんだけど、HDDを入れ替えたってことでメモを残しておこうかと。

各所update

古いのを使うとupdateが面倒だねぇ。でもFDDないからしょうがない。 apacheをバージョンアップしようとしうると、

	root#  rpm -Uvh apache-1.3.27-1.6.2.i386.rpm
			エラー: 依存性の欠如:
	    	    rpmlib(PayloadFilesHavePrefix) <= 4.0-1は apache-1.3.27-1.6.2 に必要とされています

こんなのが出やがるので、まずdb3のupdate

	root# rpm -Uvh db3-3.1.17-4.5x.i386.rpm

rpmのバージョンアップ

	root# rpm -Uvh rpm-4.0.2-5x.i386.rpm

ようやくapacheのうpでーと

	root# rpm -Uvh apache-1.3.27-1.6.2.i386.rpm
	root# rpm -Uvh apache-devel-1.3.27-1.6.2.i386.rpm
	root# rpm -Uvh apache-manual-1.3.27-1.6.2.i386.rpm

で、次、俺のサイトほとんどrubyで動くのでrubyのインストール。カレントバージョンは1.8なんだけど、会社も、MacOS-Xも1.6.8なので1.6.8をインストール。ruby1.6.8はrpmがなさそうなので、ソースからインストール。

	tuck$ tar xzvf  ruby-1.6.8.tar.gz
	tuck$ cd ruby-1.6.8
	tuck$ ./configure
	tuck$ make
	tuck$su
	password:xxxxx
	root# make install

 あと、いろんなところでwgetを使うのでこれもインスコ。

	root$ rpm -ivh wget-1.5.3.i386.rpm
	Preparing...                ########################################### [100%]
	1:wget                   ########################################### [100%]

Apacheの設定1

 まず、ベースのDocumentの位置を/home/html/にするのでディレクトリを作ると。

	root# cd /home
	root# mkdir html

で、とりあえず、/etc/httpd/conf/httpd.confを編集すると。エディタがviしかないので、viで編集。

	root# vi /etc/httpd/conf/httpd.conf

#ServerNameってのを探して適当な名前にして#をはずすっと

#ServerName localhost
↓こんなかんじ。
ServerName tp535

ついでだから、DocumentRootってところをさっき作った/home/html/に変更

DocumentRoot "home/httpd/html/"
↓
DocumentRoot "home/html/"

その下に

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/home/httpd/html">

こんなことが書いてあるので、ここも

<Directory "/home/html">

 ここでセーブして、とりあえず起動してみよう。。

	root# /etc/rc.d/init.d/httpd
	Usage: /etc/rc.d/init.d/httpd {start|stop|restart|reload|status}
	root# /etc/rc.d/init.d/httpd start
	Starting httpd:                                            [  OK  ]

OKっぽい。さっきの/home/html/にindex.htmlを適当に作って入れてアクセスしてみてOKならOK。

ダイナミックDNS

 自分の家を外からアクセスできるようにするには、ドメインネームがないと不便。家が固定IPならいいけど、そうじゃなくてADSLみたいに接続するた度にかわるような場合は、ダイナミックDNSサービスと使うと。ddo.jpここで無料でとれる。
 ここは、一ヶ月更新しないと消えちゃうんだけど、それはとりあえず置いといて、自分のルーターの設定。ルーターはTE4121cっていうやつ。これで、wwwサーバーを公開するにして、tp535のIPアドレスを入れてやると。ルーターからIPアドレスがDHCPで振られるて、192.168.1.3になるようになってるから、それを入力。
 これで、さっきのddo.jpにいってidとパスを入力して成功すれば外から見れるようになってるはず。エキサイトwebページ翻訳ここで確認。ローカルエリア内だからIPアドレス打っても外に出て行かないのよね。他に確認する方法ってあるの?。
 で、一ヶ月に1回は置いといて、ADSLのアドレスが変わっちゃったら、アクセスできなくなっちゃうので、ルーターから今のIPアドレスを取得するスクリプトを組むと。

#!/usr/local/bin/ruby
#
# TE4121C用グローバルIP取得スクリプト
#
require 'net/http'

#更新関数
def update()
	Net::HTTP.start('ddo.jp',80){|http|
		response = http.get('/dnsupdate.php?dn=XXXX&pw=XXXX')   #さっき取ったアカウントとパス
	}
end

#本体
Net::HTTP.version_1_2
req = Net::HTTP::Get.new('/cgi-bin/main.cgi?cc_webname=STATUS')
req.basic_auth 'user', 'user'
Net::HTTP.start('192.168.1.1') {|http|
	response = http.request(req)
	i = response.body.index("ADSL")
	i = response.body.index(":",i)
	e= response.body.index("</",i)
	ip = response.body[i+1..e-1]				#ipアドレス取得
	file = File.open("./adr",'r')
	adr = file.gets											#adrってファイルから読み込み
	file.close

	if(adr != ip)				#ipアドレスが違う
		file = File.open("./adr",'w')
		file.print ip
		file.close
		
		update()				#更新
	end
}
#end of file

 これと、adrってからのファイルを自分のhomeディレクトリに置いておくいて、crontabで周期的にチェック。crontab -eで編集、-lで今のリストの表示後は忘れた。これ、デフォルトでviで編集が始まるのよね。viの操作は"a"keyで編集開始、"esc"Keyで編集終了、shift+"z"を2回押すとセーブされる。後はしらない。頭から分、時、日、月、年かな?、年のところは使ったことないからわからんけど、*は分なら1分ごとって意味ね(あれ?曜日ってあったな、まぁいいか、使うときに調べれば。)。で*/5で5分ごと。5分ごとにルーターに割り当てられてるグローバルIPアドレスを取得してきて、前回と違ってたら更新すると。ファイル名はgetip.rbにして置いた。パーミッション設定も忘れずに。
 失敗するとメールがくる。5分たってメールがこなければOK。しばらくしてadrファイルを見ると今のipアドレスが書いてあるはず。
getip.txt一応置いとく。

	tuck$ chmod 755 getip.rb
	tuck$ crontab -e
	*/5 * * * *	  /home/tuck/getip.rb
	

Apacheの設定2

 次、CGIを動くようにする。さっきの/home/html/の中にcgi-binというディレクトリを作って、ここをcgiのディレクトリにする。

	root# cd /home/html
	root# mkdir cgi-bin

 次に、httpd.confをまた編集してcgiが動くように設定。ScriptAliasと、ディレクトリ設定を/home/html/cgi-bin/に書き換える。あ、デフォルトの位置で使うならこんなディレクトリの設定とかしなくていいのよ。

	root# vi /etc/httpd/conf/httpd.conf

でエディタ起動

ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
↓
ScriptAlias /cgi-bin/ "/home/html/cgi-bin/"
と
<Directory "/home/httpd/cgi-bin">
↓
<Directory "/home/html/cgi-bin">

再起動っと

	root# /etc/rc.d/init.d/httpd restart
	Shutting down http:                                        [  OK  ]
	Starting httpd:                                            [  OK  ]

で、/home/html/cgi-bin/の下に適当なcgiを置いてテスト。超簡単なrubyで書いたcgiプログラムを使う。helloって出るだけ:p。

#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
print "<html><body>hello</body<>/html>"

 これをtest.cgiという名前にして、アクセス権を変更してアクセステスト。

	root# chmod 755 test.cgi

 アクセス先は、http://192.168.1.3/cgi-bin/test.cgi。このIPはルーターでこのPCに割り当てられるようにしたIPアドレス。
 これで'hello"とでれば成功。だめなら、/etc/httpd/logs/error_logを見るといろいろ書いてある。not foundだったら、さっきのhttpd.confが間違ってる可能性大。フォービデンならアクセス権が違う可能性大。

xntpインスコ

 TP535は古くて、時計が狂うので、xntpを入れて時刻合わせ。たまに一気に1年も狂う。rpmでインスコして、xntpd startで起動。

	root# rpm -ivh xntp3-5.93-14.i386.rpm
	Preparing...                ########################################### [100%]
   1:xntp3                  ########################################### [100%]

	root # /etc/rc.d/init.d/xntpd start
	Starting xntpd:                                            [  OK  ]

 設定しないで起動していいのか?。まぁいいや、動いたのは確認。
 で、あらためて設定、viで/etc/ntp.confを編集。local Clockになってやがる・・・。東京理科大に変更。

	#server 127.127.1.0     # local clock
	↓ここを、こう。
	server sutns.sut.ac.jp

	root# /etc/rc.d/init.d/xntpd restart ←リスタート

これで同期とれてるのか?。ntpq -pってやると確認できるらしいが。

	root# /usr/sbin/ntpq -p
	 remote           refid      st t when poll reach   delay   offset    disp
	======================================================
	sutns.sut.ac.jp sutntp.sut.ac.j  2 u   49   64   17   138.26  19167.9 1896.51

 う、うーん。よくわからん。同期撮れてると*が付くはずはずなんだが。まぁいいか。ずれてきてから考えよう。

WebDAVを入れてみる。

 鯖にWebDAVなる物を入れると.MacのiDiskになるということで、家のもやってみよう。CGIのアップローダーでも役に立つが、制限事項とセキュリティがね。

http://www.webdav.org/mod_dav/ ここからダウンロード。
解凍してと

$ tar -xzvf mod_dav-1.0.3-1.3.6.tar.gz

そのディレクトリにはいって、ルートになって。

$ cd mod_dav-1.0.3-1.3.6
$./configure
$make
$su
passward:xxxxxxx

インストールと、

root#make install
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
cp /etc/httpd/conf/httpd.conf.new /etc/httpd/conf/httpd.conf
rm /etc/httpd/conf/httpd.conf.new

ん?httpd.conf書き換えられたな。。ちっちっち。面倒だな。コピーされた上で新しいの作ってるのかな。。

ん、大丈夫だ。自分で書いたのはそのままで、

LoadModule dav_module         lib/apache/libdav.so
AddModule mod_dav.c

こんなのが追加されてる。
viで検索するには"/"と入れると検索できるらしい。
が、ここにあるのか?。なんか/etc/httpd/modules/の中にlibdav.soなんてものがあるんだけどな。
まいいか、とりあえずapache再起動。

root# /etc/rc.d/init.d/httpd restart
Shutting down http:                                        [  OK  ]
Starting httpd: Syntax error on line 874 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/lib/apache/libdav.so into server: 
            /etc/httpd/lib/apache/libdav.so: cannot open shared object file: No such file or directory
                                                           [FAILED]

ガーン。やっぱないっていわれちゃったよ。。じゃ書き換え。

#LoadModule dav_module         lib/apache/libdav.so
↓ここを書き換え
LoadModule dav_module           modules/libdav.so

アパッチ起動
root# /etc/rc.d/init.d/httpd start
Starting httpd:                                            [  OK  ]

あい、とりあえず動いた。

 で?。でどうするんだ?。どのディレクトリがWebDAVになってるかわからんな。とりあえず、/home/htmlの中にdavとディレクトリを作って、ここをWebDAVのディレクトリにすることにする。

$mkdir /home/html/dav
$chmod 777 /home/html/dav

そもそも、OS-XでどうやってWebDAVにアクセスするんだ?。ふむふむ、Finderからサーバーに移動で接続するのね。時鯖だからIPアドレス指定でhttp://192.168.1.3/davで接続すればいいんだな。たぶん。

 さて、WebDAVに使うディレクトリを有効にしなくては。
まず、httpd.confに DAVLockDBってのをかかなきゃいけないらしい。しかも、Userディレクトティブで書き込めないと行けないと。/home/davlockにしよう。
httpd.confに書く。

 DAVLockDB /home/davlock/DAVLock

で、ディレクトリを有効に。


	DAV On

で、再起動。

root# /etc/rc.d/init.d/httpd restart
Shutting down http:                                        [  OK  ]
Starting httpd:                                            [  OK  ]

さてさて、Finderからサーバに接続。
http://192.168.1.3/dav/

おぉー、とりあえずマウントされた。 なんかドラッグしてみよう。。 おぉーー普通にコピーされた。

 ふむ。windowsからもアクセスしてみたが、windowsはいまいちだね。OS-XはiDiskがあるのでOSの機能のままで使い勝手が良い。普通にディスクにあるのと同じように使える。そのまま編集もできるし。でもWindowsからだと、編集とかはできないみたい。一度HDDにコピーしてから編集して、再度コピーと。制限付き共有ディスクかな。WindowsXPだとどうなってるかわからんけど。

mod_encodingも。

 WebDAVを入れて便利になったはいいのだが、仲間内での共有ディスクとして 使っていると、不都合が・・・。別にasciiのファイル名だけで、2バイトコードのファイル名なんて 使わなければいいや。と思っていたんだが、「日本語のファイルも入れられたよ。」なーんていわれちゃって。。そりゃ入れられるけどよ、その後問題があるのよ。。ってことで、やはりmod_encoding も必須かも。。

 どこから取ってくれば良いかよくわからんが、WebDavResourceってところにあったので、ここからApache1.3用の ものを取って来てインストールしよう。

$wget mod_encoding 20021209.tar.gz
$cd mod_encoding-20021209
$./configure
$make 
apxs -c    mod_encoding.c
make: apxs: Command not found
make: *** [mod_encoding.so] Error 127

 なんじゃこりゃ・・・。
調べると/usr/sbinのなかにapxsってのがあって、configure時に指定するらしい。

$./configure -with-apxs=/usr/sbin/apxs
$make
mod_encoding.c: In function `iconv_string':
mod_encoding.c:100: warning: passing arg 2 of `iconv' from incompatible pointer type
gcc -shared -o mod_encoding.so mod_encoding.o 

 なんかワーニングが出ておりますが・・・。まぁいいか。

root#make install

 んでもって設定。httpd.confの書き換え。mod_encodingのロードと設定かな。 なんかreadmeを読むとheader情報としてMS-Author-Viaなんてのを送らないとwindowsで誤動作する らしいので、それも入れとく。LoadModules mod_headers.soはすでに入っていたので追加しない。

LoadModule encoding_module modules/mod_encoding.so
AddModule mod_encoding.c


 Header add MS-Auther-Via "DAV"


 
  EncodingEngine    on
  NormalizeUsername on
  SetServerEncoding     UTF-8
  DefaultClientEncoding JA-AUTO-SJIS-MS SJIS

  AddClientEncoding "cadaver/" EUC-JP
 

 ほかはよくわからんので、そのままコピペ。

で、再起動。

root# /etc/rc.d/init.d/httpd restart
Shutting down http:                                        [  OK  ]
Starting httpd:                                            [  OK  ]

 うーん。日本語のファイルは入れられたし消せる。さて?、 何ができないんだっけ?。

 ※なにやら、Proxyを通したり、IEだったり、officeだったりを使っていると色々問題が あるらしい。いまのところos-xからは問題なく、win2kProのエクスプローラーからはなんとか使える。 win2kproはファイルの入出力だけで、そのまま編集はできないらしい。XPになると、os-xに近づいて 編集も出来るようになる様だが、XPを試せる環境にない。しかしなー、なんでもかんでも80だな。。

Top 前へ戻る