2007年12月02日
FreeBSD鯖の移植
家のメインサーバであるFreeBSD鯖が、オンボードNICのトラブルでネットワークから切断された状態のまま何日過ぎただろうか。だいたいオンボードのNICのトラブルなんてあるもんかいな。チップがPRO100だったので結構重宝していたのだが、認識すれど、ループバックはOKだけど、外部にパケットが出て行かない(HUBは点滅するので恐らくデータが化けてる)状態になってしまったのでどうしようもない。念のためKNOPPIXでBOOTしてみたけどやっぱり症状は一緒で、認識はしているけど通信不可という不可解な現象。もうマシンを入れ替えよう(K6-233MHzは流石に古すぎるっしょ)
ずっとFreeBSD 4.x系で動いてきたのでそのまま惰性で4.x系を使い続けてきた。4.11Rでお終いだったか。5系もそろそろ終わりと言われているし、6.2Rがスタンダードで7系のアナウンスも出ているからな。
幸いIDEなHDDは無事だったので、データは丸々残っているという寸法だ。問題はどうやって新しいマシンに移行させるかだな。もう流石に4.11Rは使えないので6.2Rに鞍替えする計画。場合によってはOpenBSDもありかなと思っていたけれど、まだOpenBSDについては理解が進んでいないので、当分先送りする事にして、FreeBSD 6.2Rで行く事にした。
マシンはやっぱりまたK6だったりする(w CPUはK6-450MHz、MEMは384MBである。富士通のFMVという古いパソコン。なんとなく気に入って二台ゲットしておいたのだが、ブログ用のサーバとおそろいで並べて置くとちょっとだけ嬉しい気がする。
FreeBSD 6.2RのCD用ISOを一つだけDLしてきた。余計なモノは入れないつもりだから、FDブートでもいいんだけど、FDイメージが4つもあるのを見てその気は無くなった。せめて2枚にとどめて欲しいもんだな。もうFDの時代も終わったという事か。その点OpenBSDはFD一枚でBOOT出来てネットワークインストール出来るから凄いぞ。そろそろマジにOpenBSDも覚えないといけないな。
さて、私はサーバ用途ではX-Windowは全く不要なので、マシンがショボイと言う理由もあって普通は見向きもされないらしい最小インストールを実行する。ドキュメント類もインストールされない本当の最小インストールだ。古いマシンでもあっという間にインストールが終わるので心地よい感じがする。 まぁここからがちょっと手がかかるのだが、FreeBSDはSysinstallが使えるからまだ楽ちんな方だと思う。
※例外なく/stand/sysinstallとやって焦ってしまった。こういう細かいところが新しいバージョンでは変わってるんだね。 落とし穴が結構有りそうな気配を感じる。
取り急ぎ必要なのは
- ddclient
- Apache2(とうとう1.3系から移行する決意をした)
- Perl
この位である。あとはまぁ依存関係で勝手に入るんだろうからよしなにという感じである。DebianのAPTと同じでお気楽インストールが有り難い。依存関係で頭を悩ませるのは結構ストレスだったりするから本当にありがたい。
さて課題のデータ移行である。ここで出番はIDE-USB変換コネクターである。1500円位で買ってきたものだが、時々活躍してくれるアイテムだ。電源はAC100Vのコンセントからとり、USBポートに接続すれば、内蔵型IDE-HDDが簡易型USB-HDDに早変わり。むき出しだからHDDの回転音が五月蠅いけどね。
ad0: 6149MB <WDC AC26400R 17.01J17> at ata0-master UDMA33
acd0: CDROM <CD-224E/1.5A> at ata1-master PIO4
Trying to mount root from ufs:/dev/ad0s1a
umass0: vendor 0x05e3 USB TO IDE, rev 2.00/0.33, addr 2
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <FUJITSU MPB3043ATU 0811> Fixed Direct Access SCSI-0 device
da0: 1.000MB/s transfers
da0: 4125MB (8448300 512 byte sectors: 255H 63S/T 525C)
umass0として認識してくれているから、/dev/da0で探せば見つかるハズ。
# ls /dev | grep da0
da0
da0s1
da0s1a
da0s1b
da0s1c
da0s1e
da0s1f
da0s1g
あたたたた、パーティション(スライス?)をいっぱい切ってたんだった。どれだったっけな。とりあえずラベルが/usrか、/etc/fstabを探し出したい。適当にマウントして行ってみる。
# mkdir /mnt/usbmass/
# mount /dev/da0s1a /mnt/usbmass/
# ls /mnt/usbmass/
こんな感じで探し当てる。/etc/fstabを見つける事に成功したらローカルにコピペしておいた方が良いと思う。fstabの記述は色々な局面で役立つよね。結局我が家の鯖の場合は、/usr/は、da0s1gに有った。
/usr/home/配下は、ちゃんとファイル属性でユーザーIDとグループIDが残っていた。このユーザーIDが大切なんだよね。これを元に確実にユーザー登録をしていく。そうすればファイル属性を維持したままFreeBSD 6.2R環境へ移行出来るハズだ。
# sysinstall
Configure>User Management>User
UIDをしっかり意識しつつアカウントを合わせていく。まぁ言い換えればUIDさえ理解していればユーザー名を無理に合わせることもないのだが、うちはNameベースのVirtualHostを組んでいるので、ユーザー名が合わないと困った事になるんだな。アカウント登録が終わったらUIDでなく、ユーザー名で表示去れるようになった。これで一安心。
後は各ユーザーでログインしなおしてから、コピーコマンドでボチボチコピーして行く事だ。
# cd /mnt/usbmass/home/sasapurin/
# cp -r -p public_html /home/saspurin/public_html/
cpコマンドに-rと-cのオプションを付ける事がポイントかな。manが使えない(インストールしてない)ので、Googleで検索した。地道な作業だが後でオーナー変更やパーミッション変更をちまちましていくよりはずっと楽だと思うので有り難いと思うべきだろう。
Apache1.3系と2系の設定ファイルの違いと、PerlのPATHの違いで、CGIが動かなくて焦ったけれど、結局やっぱり基本通りに確認すべき点を確認して行けば課題は克服できた。まだ6.x系の事が分かってないので後日ボチボチ調べていかないといけないなと思う次第である。
投稿者 sasapurin : 16:50 | コメント (0) | トラックバック
2007年06月02日
久しぶりのトラブルシューティング
いやぁ参ったです。全然トラブルの無かったWebサーバが留守にしている間にトラブルを起こしたらしく、アクセス出来ないとメールをいただきました。Netcraftで調べてみたら確かに変。そして調べているとどんどんはまっていく(汗まず変だったのがローカルループバックloに関するエラー。/var/log/messageにたっぷり記録されていました。こんなの原因調べる術知らないから素直に再起動してみた。凄く久しぶりの再起動。これが一つの罠。そう言えば前のトラブルも長期稼働し続けた末のチョンボだった記憶が。
起動中、NTPの時刻同期エラーが発生。っていうかログを見ると、ずっと時刻同期に失敗していたらしく時刻が5分位ずれている。なんでかな?と調べてみたらnamedが起動してないからNTPサーバへアクセス出来ないって罠。何時namedが落ちたんじゃ?しかも起動しないってなんでじゃー。とりあえずマニュアルでコマンドを入れて起動。NTPの時刻同期成功。これは原因を解決しておかんとまた繰り返すな。
加えてどうやら、DDNSの書き換えツールとして使っているddclientもcheckip.dyndns.orgの名前解決が出来ずにエラーを吐いてる。これじゃぁsasapurin.comは孤立状態じゃんか!まぁnamedが起動したらこの問題は解決した。DNSに反映されるまで15分位だったか。
少し待ってからWindowsのIEからWebサーバにアクセス。しかしこれではいかんと気づいた。我が家の場合はLAN内部はbind(named)で名前解決しているので、そのままだとプライベートアドレスが帰って来ちゃう。ネットワークのプロパティからDNS設定をプロバイダのDNSに変更して試験。これでグローバルアドレスが返ってくるハズ。そしたらルーターの認証が出てくる。そうだった、内部からグローバルアドレスでアクセスするとルーターの設定画面が応答するんだった。プロクシ噛まさないとね。サイバーシンドロームじゃ。
サイバーシンドロームで適当なプロクシを探してIEの接続プロパティを変更。80をポートフォワード設定しているから、これでルーターじゃなくてWebサーバが応答するはず。しかし、レスポンスが無い。なんで??もちろんYahoo!とかGoogleとかはちゃんと応答する。って事はWebサーバの問題かよ。
まさか、Apacheが起動してないって事は無いよな?プロセスを見るコマンドは何だっけ。psじゃなくてリアルタイムで見る奴。思い出せない。えーと、えーと。頭が錆び付いてる。しばらく考えてたらtopコマンドを思い出した。そうぢゃtopぢゃ。
# top
げげげー、Apacheが起動してないじゃん。応答するはずないよ。Webサーバーを再起動するまでは、かみさんが自分のHPにアクセスしていたから、FreeBSDの起動関係か。って事でrc.d辺りだなと考えて確認してみたら、/usr/local/etc/rc.d/apache.shの中の記述でEnableがNOになってた。うーん、そう言えばかなり前にPortの更新をした様な気がする。その時に書き換わったんだろうね。YESに書き換えておかないとまた再起動した時に同じ罠にはまるから書き換えておく。(補足:この対処方法は間違いです。)
# apachectl start
# top
apacheがプロセスとして常駐する様になった。これで問題ないだろうと思いきや、やっぱり応答してくれない。なんでーなんでーと考えていたら、アクセス制限を掛けていることを思い出した。海外からのアクセスは片っ端から蹴る様に実験がてらipfwで定義していたのだった(汗 海外の串じゃあかんやないの、日本の串ささないと。
サイバーシンドロームで日本国内の串を探してきてIEにセット。これで行けるでしょとやってみたところ、異様に時間がかかる。なんで?と思いながらも待っていたら少し画面が表示された。しかし何かが変。なんでこんなに時間がかかるねん?
ここまで調べたんだから、串を変えれば解決するんじゃないか?と思って別の串にしてみたら、普通に表示される様になった。良かったぁ~
思い返してみれば、FreeBSDサーバをいじるのってかなり久しぶりだ。再起動かけたのってもしかしたら一年位前だったかも知れない。再起動前に確認しておくべきだったな。
最近、Linuxの方に浮気気味だし、しかもGUIを使う様になっちゃってから、コマンドを忘れる傾向が強い。まぁ用途もサーバーからデスクトップに変わってきてるから、仕方ないっちゃあ仕方ないんだけど、RHCE受験で勉強した知識も錆び付いて来たって感じじゃん。ホント使わないと頭って錆びてくるね。
体調も回復して来たし、再就職にUNIX系の知識を活かそうかと思っていたけれど、身体のリハビリと同様に頭のリハビリも必用じゃんか..orz 今日は反省点とかを実感してどっと疲れがでて来たのである。いつもならトラブルシューティングが終わると達成感あるのに、今回は反省ばっかだからスッキリしないな。ああ、修行が足りん。
FreeBSDの場合、OS起動時のスタートアップ動作は、/etc/rc.conf ファイルで制御しています。確かに、/usr/local/etc/rc.d/apache.sh を書き換えても起動するのですが、それは本来の考え方を無視した結果オーライな間違った設定方法だと後に知りました。正式には下記の様にしておくのが正解というか、FreeBSD流のスタートアップ登録なのでしょう。
# vi /etc/rc.conf
apache_enable="YES" この一行を追記
これはapache1.3系の場合の話。どういう風に記述するかは、それこそ/usr/local/etc/rc.d/apache.sh に書いているので、それを確認する事です。そうすれば応用が利くので、Apacheに限らず、他のアプリケーションを自動起動させる方法も身につくというものです。
投稿者 sasapurin : 14:44 | コメント (0) | トラックバック
2007年02月18日
ccacheのインストール
distccと併せて、ccacheも入れてみることにした。
これでコンパイル処理が分散化され速くなればかなりうれしい。
portinstallでccacheをインストール
# cd /usr/ports
# portinstall devel/ccache devel/distcc
# mkdir -p /.ccache
# setenv CCACHE_DIR /.ccache
# printenv
/etc/make.confに追記
.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE)
CC=/usr/local/libexec/ccache/world-cc
CXX=/usr/local/libexec/ccache/world-c++
.endif
/etc/csh.cshrcに追記
setenv PATH /usr/local/libexec/ccache/:$PATH
setenv CCACHE_PATH /usr/bin:/usr/local/bin
setenv CCACHE_DIR /.ccache
setenv CCACHE_LOGFILE /var/log/ccache.log
#To use distcc
setenv CCACHE_PREFIX /usr/local/bin/distcc
setenv DISTCC_HOSTS 'localhost vine gentoo redhat'
参考URL
otsune's FreeBSD memo
投稿者 sasapurin : 00:41 | コメント (0) | トラックバック
distccのインストール:その1
Gentoo Linuxに寄り道したおかげで、面白い事を覚えた。distccによる分散コンパイルである。
FreeBSDのPortsにもdistccがある事を「FreeBSD Ports Search」で確認したので、インストールしてみることにした。もう4.11は余命短いと言うか、早く6.x系に移行しなくてはならないので、色々むちゃな事をやっていたりする。
distccのPortsは、Category develにあった。つまり/usr/ports/devel/distcc である。
# cd /usr/ports
# portinstall devel/distcc
# rehash
# /usr/local/etc/rc.d/distccd.sh start
Starting distccd.
とりあえずはこれだけである。もちろん各種設定はエディタで行わなくてはならない。
後心配なのはコンパイラのバージョン違いとか..である。このあたりは徐々に検証していかないと訳がわからない。何しろコンパイラなんて意味不明のまま使いつづけてきたのだから。
但し、分散コンパイルが実現すれば、古いマシンでも速いマシンに助けてもらえるので、コンパイル処理がかなり速くなるという、よだれものの技術だからやってみる価値は十分にあると思うのだ。