Linuxで七転八倒な記録


まず一言。Linux の HowTo に関するページは世の中たくさんあるから、ここを見るよりはそっちを見るのが賢明かと。まだまだ Linux を完全に理解してるわけじゃないから(^^;
それに「前あれってどうやったんだっけ?」とすぐ忘れる自分のための覚え書き的存在なので(笑)

← 前 BBS 次 →

◆ クイックインデックス ◆
「鷹の巣」の自宅サーバー 掲示板 No.7748 から来られた方、キーワード "サブシテムがロック" で来られた方は ロックファイルの削除



2002年11月7日
○ スワップを増やす(パーテーションの変更無しで) 【関連】補足
DAV にファイルをアップロードしているとエラーが出て中断してしまうことがある。実は前々から心当たりはあったわけだが対処せずにいたらしい・・・。エラーが出るのはファイルサイズが大きい場合だけなので、メモリー不足だろうと思い、ログをチェックしてみる。

# grep 'Memory' /var/log/messages
Nov  5 00:57:02 server kernel: Out of Memory: Killed process 28634 (httpd).
Nov  5 01:09:15 server kernel: Out of Memory: Killed process 29346 (httpd).
Nov  5 01:25:24 server kernel: Out of Memory: Killed process 29356 (httpd).
Nov  5 01:37:37 server kernel: Out of Memory: Killed process 29357 (httpd).
Nov  5 09:08:51 server kernel: Out of Memory: Killed process 29958 (httpd).
Nov  5 09:21:33 server kernel: Out of Memory: Killed process 29975 (httpd).
Nov  5 21:33:33 server kernel: Out of Memory: Killed process 30295 (httpd).
Nov  5 21:34:26 server kernel: Out of Memory: Killed process 30277 (httpd).
Nov  6 09:40:11 server kernel: Out of Memory: Killed process 921 (httpd).
Nov  6 09:41:06 server kernel: Out of Memory: Killed process 922 (httpd).
Nov  6 10:43:04 server kernel: Out of Memory: Killed process 1202 (httpd).
Nov  6 15:37:56 server kernel: Out of Memory: Killed process 1346 (httpd).

やはりそのようだね。 数ヶ月前に M/B や ハードディスクの交換をしたわけなのだが、その時に物理メモリもスワップ領域も小さくなったのだが、普段はメモリ不足が起きることはない。でも、数百メガもあるファイルを扱う DAV はどうしてもメモリをたくさん食らうらしい。これに対処するためにスワップを増やすことに。しかし、ハードディスクは容量一杯確保してあるのでスワップパーテーションの容量を増やすことは難しい。そこで、一般パーテーション(?)上にスワップファイルを作ることに。
まず /var/tmp/ に swapfile という名前で 200M のファイルを作成する。作成する場所やファイル名は好きなもので OK。そして、このファイル上にスワップ領域を作成し、スワップ領域を有効にする。free でちゃんとスワップが増えているかも確認しておこう。

# dd if=/dev/zero of=/var/tmp/swapfile bs=1024 count=200000
読み込んだブロック数は 200000+0
書き込んだブロック数は 200000+0
# /sbin/mkswap -v1 /var/tmp/swapfile
Setting up swapspace version 1, size = 199996 KiB
# /sbin/swapon /var/tmp/swapfile
# free
             total       used       free     shared    buffers     cached
Mem:        127020     123940       3080          0       1948      89316
-/+ buffers/cache:      32676      94344
Swap:       288340      22004     266336
もしこのスワップが必要無くなったら swapoff してあげればよいね。あとマシンが再起動すると自動的には有効にならないので、/etc/rc.local のなかででも有効にしてあげる。一度スワップファイルを作ってある状態なら swapon するだけで使える。


2002年9月11日
○ Samba 2.2.2.ja-11 → 2.2.4.ja-12
日本 Samba ユーザ会 に 2.2.4 の RPMパッケージがあがっていたのでバージョンアップ。自前で RPM をビルドするのは面倒そうだったので今まで待っていたらしい(^^;
RedHat 7.3 用なんで多分依存性チェックで何かしら文句つけられるだろうと思いつつバイナリを落として試してみる。

# rpm --test -Uvh samba-2.2.4.ja-12.i686.rpm
エラー: 依存性の欠如:
        libreadline.so.4  は samba-2.2.4.ja-12 に必要とされています
readline の依存性を解決するのはとても困難(以前やったが挫折した)なんでソースからビルドし直すほうが速い。

# rpm --rebuild samba-2.2.4.ja-12.src.rpm  # バイナリrpm リビルド
# sudo /sbin/service smb stop              # smb を停止
# sudo rpm -Uvh RPMS/i386/samba-2.2.4.ja-12.i386.rpm  # リビルドした rpm でアップデート
# sudo /sbin/service smb start             # smb を再開

○ まだ Apache が落ちる
その後順調に経過してたいたけどまだうまく再起動しない場合がある。きちんと原因究明が出来るまではとりあえずサービスが止まったままにはならないようにしておくことに。ログローテーションされた後に一度再起動させれば上手く起動していた場合は再起動するだけだし、上手く起動できていなかった場合も起動できるかもしれない。crontab に追加して保存すればOK。

$ crontab -e
3 4 * * * /sbin/service httpd restart  # 毎日 4時 3分に httpd を再起動


2002年9月6日
○ Apache が落ちる
一週間くらい前からよく原因が分からないが早朝に Apache が落ちるという現象が起きるようになった。まずエラーログを見てみる。

## /var/log/httpd/error_log ##
 …(中略)…
[Wed Sep  4 04:02:02 2002] [notice] SIGHUP received.  Attempting to restart
最終行がこのようになっている。前日分にさかのぼって調べても 4時 2分に再起動がかかってそのまま落ちてしまっている。この時間は cron がログのローテーションをしたときに再起動しているので再起動自体は問題ではなく、きちんと再起動できないところが問題なわけだ。一番ありえそうなのは httpd.conf をちょくちょく編集するのでそこに記述ミスがあるというパターン。そこで念の為 apachectl でチェックしてみる。

$ /usr/sbin/apachectl configtest
Syntax OK
問題はないみたい。次に極力シンプルな状態で起動できないか調べるために service を使わず直接 httpd を起動してみる。

$ /usr/sbin/httpd
Syntax error on line 1259 of /etc/httpd/conf/httpd.conf:
Invalid command 'DAVLockDB', perhaps mis-spelled or defined by a module not included
 in the server configuration
うちのサーバは DAV機能も使っているのでそれの関係でエラーが。エラーが出ないように DAVモジュールの使用を有効にして試してみる。

$ /usr/sbin/httpd -DHAVE_DAV
$ ps ax | grep httpd  # エラーが出ないのでプロセス状態を確認
 2985 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV
 2986 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV
 2987 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV
 2990 pts/1    S      0:00 grep httpd
きちんと起動できる。ひょっとすると他のモジュールのどれかが原因だろうかと思い、順番にチェックしていくと mod_perl のところで、

$ /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
セグメンテーション違反です (core dumped)
どうやらこれが原因のよう。そういえばエラーが出始めた時期になんとなく mod_perl をバージョンアップした記憶がある。RPM のエラーが出なかったので正常なものだと思ったが実は適切なバージョンではなかったのかもしれない。そこで mod_perl-1.26-5 にバージョンアップしてみる。

$ rpm -Uvh mod_perl-1.26-5.i386.rpm
$ /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
$ ps ax | grep httpd
 3002 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
 3003 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
 3004 ?        S      0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
 3006 pts/1    S      0:00 grep httpd
問題なさそうなので service で起動しなおし、ログのローテーションと同じように kill してみて最終チェック。

$ /sbin/service httpd status  # 起動する前にきれいに(?)停止しているか確認
httpdは停止していますがサブシテムがロックされています
$ rm /var/lock/subsys/httpd   # ロックファイルが残ったままだと起動できないことがあるので削除
$ /sbin/service httpd start
httpdを起動中:                                             [  OK  ]
$ kill -HUP `cat /var/run/httpd.pid`  # 起動できたらローテーション時と同様に kill してみる
$ tail -n 4 /var/log/httpd/error_log  # ログで動作を確認
[Wed Sep  4 09:55:12 2002] [notice] SIGHUP received.  Attempting to restart
[Wed Sep  4 09:55:15 2002] [notice] Apache/1.3.26 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.7
 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.0.6 mod_perl/1.26 mod_gzip/1.3.19.1a configured --
 resuming normal operations
[Wed Sep  4 09:55:15 2002] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Sep  4 09:55:15 2002] [notice] Accept mutex: sysvsem (Default: sysvsem)
正常に動作しているようなので、修正は無事完了。


2002年7月12日 [ 2002/09/06 遅延書き込み(汗 ]
○ squid 2.4 STABLE 1 → 2.4 STABLE 6-6
また例によってセキュリティのフィックス。squid はこのところ tar.gz でアップデートしていたが久しぶりに rpm に戻してみた。まず、rpm を拾ってくる。バイナリは依存性チェックで苦労するのでソース rpm にする。今回は普通にリビルドしてインストールするだけでよかった。

# rpm --rebuild squid-2.4.STABLE6-6.7.3.src.rpm  # バイナリrpm リビルド
# sudo /sbin/service squid stop                  # squid を停止
# sudo rpm -Uvh RPMS/i386/squid-2.4.STABLE6-6.7.3.i386.rpm  # リビルドした rpm でアップデート
# sudo /sbin/service squid start                 # squid を再開

← 前 BBS 次 →

△戻る ▲トップに戻る