Linux & Server」カテゴリーアーカイブ

Fedora15

これまでと同じ方法で、yumコマンドを使ってFedoraを14から15にアップグレードしました。

まず、fedora-release-15-1.noarch.rpmを入れるのですが、fedora-release-rawhide-15-1.noarchと依存関係があると言われるので、そちらも同時に入れました。
あとは今まで通りです。

# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Fedora/i386/os/Packages/fedora-release-15-1.noarch.rpm http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Fedora/i386/os/Packages/fedora-release-rawhide-15-1.noarch.rpm
# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Fedora/i386/os/Packages/fedora-release-notes-15.0.0-1.fc15.noarch.rpm
# yum clean all
# yum -y upgrade

ここでエラーが出まくったので、エラーが出たプログラムを片っ端から削除。
特に普段使ってるようなものはなかったので……。そろそろ初めからインストールし直した方がいいのかなとも思いますが、面倒くさい。

再度yum -y upgradeを実行して、再起動……起動しない?!
ログインの手前で起動処理が止まってしまいました。

とりあえずデーモン達は動いているようで、HTTP、Samba、SSHなどは繋がり、ほっと一安心。
MySQLはエラーで起動していなかったのですが、/etc/my.conf に書いてある default-character-set=utf8 の書式が変わったのが原因みたいで、character-set-server=utf8 に書き直したらあっさり直りました。

前回アップグレードしたときもそうだったのですが、Perlのバージョンが上がったことで、CGIが動かなくなってしまっていました。
これはCPANでモジュールのアップデートを行えばだいたい直ります。

# cpan
cpan> upgrade

しかし今回はそれでもMySQLへのアクセスが上手くいかない。PHPは素直に動いてくれるのに……。

エラーログを見るとこんな感じ。

[Wed Jun 08 05:57:51 2011] [error] [client 192.168.0.2] install_driver(mysql) failed: Can't load '/usr/local/lib/perl5/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: cannot open shared object file: No such file or directory at /usr/lib/perl5/DynaLoader.pm line 200.

ググってみるとこれは、libmysqlclient.so.16 が見付からないために mysql.so が読み込めないということのようなのですが、/usr/lib/mysql を見ると、あるのは libmysqlclient.so.18 で数字が16から18になってる。

これを読み込むように指定している場所は、/etc/ld.so.conf なようで、中を見てみると ld.so.conf.d/*.conf をインクルードしている。
そこで /etc/ld.so.conf.d/ 以下を見ると mysql-i386.conf というのがあったので開いてみると、/usr/lib/mysql と書かれていた。
特に間違いはないように思える。
16という数字はどこから出てきたのだろう?

mysql-server や perl-DBD-MySQL をyumで削除して入れ直してみても状況は変わらず。

ホントにOSからインストールし直そうかなあ……。

■ 追記

どこに libmysqlclient.so.16 と書かれているのか探していたら、以下の場所にあったので、DBD::mysqlをインストールし直したらCGIは表示されるようになりました。

# find /usr/local/ -type f -print | xargs grep libmysqlclient.so.16
バイナリファイル /usr/local/lib/perl5/auto/DBD/mysql/mysql.so に一致しました
# cpan
cpan[1]> get DBD::mysql
cpan[2]> q
# cd ~/.cpan/build/DBD-mysql-4.019-r12r_n/
# ./Makefile.PL
# make
# make install

(cpanコマンドでmakeとinstallできるみたいだけど)

起動されない問題の方は、SSHでログインして startx すれば起動することがわかりました。
/var/log/boot.log を見ても何が原因で止まってるのかよくわからない。

■ 追記

起動時に途中で止まってGUIが起動しない理由がわかりました。
依存関係で適当に削除したときに、ログイン画面を表示するための gdm を削除してしまっていたようです。
これをインストールし直したらログイン画面が出るようになり、デスクトップが使えるようになりました。

Apacheのアクセスログからスパムアクセスを分離する

設置していた掲示板に、もの凄い数のスパムコメントがされるようになってしまったため、何ヶ月か前にページを撤去しました。
しかし、掲示板があったURLには未だにたくさんのアクセスがあります。
アクセスログを見てみると、リクエスト元のIPはバラバラで、アクセスの約8割がPOST。1分に4回くらいのアクセスがあります。
もともと流行っていた掲示板でもなかったので、アクセスはほぼ間違いなくスパムコメントを記入するためのBOTでしょう。

これらのアクセスに対し、初めは.htaccessでアクセスを禁止し、403を返すようにしていたのですが、それでもアクセスが止まないため、404を返すようにしてみました。
ところが、なおアクセスは続きます。

このように、明らかにスパムだとわかっているアクセスが続くと、ネットワークやサーバーに負荷がかかるというのは勿論ありますが、特に不便しているのはアクセスログが汚れてしまうことです。
アクセスログはこの掲示板へのアクセスのログで埋め尽くされ、容量が肥大していくだけでなく、現在運営しているページへのアクセスログが確認しづらくなってしまいます。
また、エラーログは、これらのアクセスに対する403や404のログで埋まってしまい、開発中のCGIの動作確認をしようと思っても、すぐにログが流れてしまいます。1

ということで、この旧掲示板に対するアクセスログとエラーログを、他のログとは分けて保存できないかを考えました。

調べてみたところ、アクセスログは SetEnvIf というディレクティブを使うことで、条件ごとのログが保存できるようでしたので、httpd.confに以下のように設定してみました。

LogFormat "%h %l %u %t \"%r\" %>s %b" common
SetEnvIf Request_URI "mybbs" spam
CustomLog logs/spam_log common env=spam
CustomLog logs/access_log common env=!spam

これは、リクエストされたURLに "mybbs" を含む場合に spam というタグを付けて、このタグが付いたアクセスを spam_log に保存し、それ以外を access_log に保存するという意味です。
"mybbs" の部分は正規表現で自由に設定できますので、スパムアクセスがあるアドレスに合わせて設定します。

エラーログの方は分ける方法がわかりませんでした。
なので、旧掲示板に対するアクセスがあった場合、リダイレクトさせてしまうことにしました。
そうすればエラーにならないので、エラーログは残りません。

リダイレクトには、410 Goneを使ってみました。410の場合リダイレクト先を指定しません。

Redirect gone /cgi-bin/mybbs/

アクセスを無くさせるためには他のステータスを返した方がいいのかもしれませんが……。

  1. 開発環境と運用環境が同じサーバーですから。

CPANモジュールをinstall/upgradeするときに常にyesと答える方法

OSをアップグレードしてPerlのバージョンが変わったら、CGIが動かなくなってしまったので、CPANモジュールをアップデートしてみることにしました。

ところが、CPANでinstallやupgradeコマンドを使うと、変更がある度にいちいち確認され、その度にyesと答えるためにエンターキーを押さなければなりません。
普段は内容を確認しながら処理を行えるのでいいのですが、今回みたいに一度にアップデートさせたい場合など、とても面倒です。
そこで、常にyesと答える設定を探しました。

yumのように-yオプションでできるかと思いきやダメで、少し覚えにくいコマンドを実行する必要があるようです。

$ sudo cpan
cpan> o conf prerequisites_policy follow
cpan> o conf commit

これで自動的に更新してくれるようになります。

元のように確認してくれるようにするには、followをaskに変えて実行します。

cpan> o conf prerequisites_policy ask
cpan> o conf commit

Fedora14

Fedoraのバージョンを13から14にアップグレードしてみました。
最近全然サーバーをいじってなかったんですけど、そういえば新しいの出てたなって思い出して。もう15が出るとか出ないとか言ってるから、今更なんですけど……。

さて、アップグレードの方法ですけど、preupgradeというコマンドがあって、これを実行すれば簡単にできるよと言われていたので実行してみました。
表示されたウィザードを進めていくと、再起動するように言われたんですけど、再起動したところで「not driver found」と表示されて、先に進めない……。
幸いカーネルの選択画面でFedora13のカーネルを選べば、今まで通り普通に起動できたので、今度はCUI版のpreupgrade-cliを実行してみたけれど、結果は同じ。

ドライバが見付からないというのは、何のドライバが見付からないのだろう?
HDDを繋いでるSATAのドライバだろうか?
適当に選んでみても先に進めず。

よくわからないので、今度はFedora13にアップグレードしたときと同じ方法でやってみました。

# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/i386/os/Packages/fedora-release-14-1.noarch.rpm
# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/i386/os/Packages/fedora-release-notes-14.0.3-1.fc14.noarch.rpm
# yum clean all
# yum -y upgrade

すると、いくつかの依存関係で怒られたので、怒られたの全部削除1してもう一回アップグレードを実行2

今度は上手くいった!

最後に再起動。

# reboot

確認。

$ cat /etc/fedora-release
Fedora release 14 (Laughlin)

ばっちり!

ちなみにpreupgrade-cliはLANG=Cじゃないと動かないらしいので、以下のように実行しました。

# LANG=C preupgrade-cli 'Fedora 14 (Laughlin)'
  1. # yum remove hoge fuga
  2. これでいいのか?

Alternative PHP Cacheのインストール

昨日のモダンPHP勉強会で話題に出てた APC (Alternative PHP Cache) をインストールしてみました。
これを入れるとPHPのコンパイルされたバイトコードをキャッシュしてくれて、高速化されるみたいです。

導入方法は以下のサイトを参照しました。

まず、

# yum -y install php-devel php-pear gcc httpd-devel pcre-devel

と、必要なモジュールをインストールします。
参照サイトと比べて、僕の環境では gcc は入っている一方で、 pcre-devel が入っていませんでした。

次に、

# pecl install apc

と入力し、APCをインストールします。
いくつか質問が出てきましたが、とりあえず全てデフォルト値で答えました。
最後に php.ini に "extension=apc.so" を書き加えるように言われますが、ここも参照サイトにならって、

# echo "extension=apc.so" >/etc/php.d/apc.ini

としました。

ここまでできたら、httpdをリスタートします。

# service httpd restart

これでインストール完了。
phpinfo() を見て、apcの項目が追加されていて、かつ "APC Support" が "enabled" になっていることを確認します。

参照サイトはWordPressでの利用を書いていますが、Nucleusでも管理画面がかなり高速化されました。これは爆速と呼べるレベル。
一方で、サイトの方はDB読み込みが絡むせいか、体感速度はそんなに変わらないかな。

pwmconfig / fancontrol で静音化

lm_sensorsが動くようになったので、さっそくpwmconfigを使ってOSからファン速度を調節してみることにしました。
やっぱり、CPU温度40℃に対して1300rpmは速すぎたようで、もっと下げても大丈夫でした。

lm_sensorsが動かない

マザーボード(MSI RC410M-L)が悪いのかなんなのか分かんないけど、lm_sensorsが動かない。
というか、sensors-detectで失敗しているようにも見える。

ここにチップセットのATI RC410もSB450も載ってないのが原因?

わからないからとりあえずメモっとく。

Fedora13

Fedoraのバージョンを12から13にアップデートしてみた。
ネットワーク経由で行い、方法はこんな感じ。

# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/13/Fedora/i386/os/Packages/fedora-release-13-1.noarch.rpm
# rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/13/Fedora/i386/os/Packages/fedora-release-notes-13-3.fc13.noarch.rpm
# yum clean all
# yum -y upgrade
# cat /etc/fedora-release
Fedora release 13 (Goddard)

特に問題もなくすんなりとアップデートできたようです。