« 2008年09月 | メイン | 2008年11月 »

2008年10月28日

linuxを起動すると、UNEXPECTED INCONSISTENCYエラー

設定をしながら色々といじっていたら遂に壊しました。>CentOS
多分、固まった時にリセットしたのが悪かったのかなと。

起動したら以下のエラーメッセージが出て、パスワードを要求される。
Your system appears to have shut down uncleanly
Press Y within 3 seconds to force file system integrity check...
Checking root filesystem


/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options )
                                                           [FAILED]

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):
/dev/VolGroup00/LogVol00 が UNEXPECTED INCONSISTENCY だから、
fsck(修復コマンド) をRUN してねと言っているので、パスワード入力後、
(Repair filesystem) 1 # fsck -y /dev/VolGroup00/LogVol00 #-yは自動でyesを選択
としてやると、だーーーーーーーっと修復してくれます。


※追記
結局1日放置するも、fsckがずっと走ったままだったので、再インストールすることにしました。
2008年10月24日

CentOS5でサーバ構築

POPfileをサーバの方で動かす為にlinuxマシンを作っています。
(CentOSで自宅サーバー構築--http://centossrv.com/

▼今日までやったこと
・インストールCD作成
  →焼きソフトによって作成失敗になることがある。ネットでも苦労してる人が結構いた。
   私は一度Burn4freeで作ったが,インストール時のmedia checkでfailedと言われた。
   Toastで焼いたらうまく行った。
・CentOSインストール
  →村元さんの高性能なマシンを借りてインストールを試みるも,
   何度も途中で落ちてしまい,初めからやり直すこと数回。
   結局,昔PLANTdbを動かしていたものに変えたらサクサクインストール完了。
   4GB以上メモリを積んでると問題も発生するみたいだし,高性能だと色々大変なのかも。
・CentOS5初期設定
・yum初期設定
・SELinux初期化
・時刻設定
  →インストール時に「Check your system clock」と言われる。
   date -s '2008-10-27 15:40:00' と手で直す。


▼メモ
・シャットダウン:poweroff
・手動ネットワーク設定
ネットワーク設定:vi /etc/sysconfig/network-scripts/ifcfg-eth0
ネットワーク再起動:service network restart


2008年10月21日

コメントスパム対策

MTには標準でスパムフィルタがあるようで、今までそれで別に不満もなく放っておいてんですが、
気付けば迷惑コメントが2000件近く保存されてた(笑)。ま、それでも別に無視してたんですけど。
しかし最近それをすり抜けてくるスパムが多くなってきて、携帯が鳴る鳴る。
携帯嫌いになりそうなので、MT-Keystrokesプラグインを入れました。
これを導入すると、投稿ボタンを押さない限りコメントが投稿されないとのこと。
確かにロボットは直接cgiの方にポストするらしいから、結構いいのかも。
読みづら~い画像認証(←地味に嫌い)とかいらないから、コメントする人も負荷ないし。
ま、一切来ないんですけど笑

因みにほぼ毎日来てたスパムが、入れてから今日まで約1週間、皆無です。

もし、自分もスパムがウザいですって人がいたら、
インストールは終わってますが、個別にテンプレートの修正が必要ですので、
Milano::Monologさん(の、2. エントリー・アーカイブのテンプレートを修正から)などを参考にしつつやってみて下さい。

2008年10月20日

ベイジアンフィルタまとめ

ベイジアンフィルタとは…


▼ベイジアンフィルタ
  • POPFile
  •  Perl で書かれたベイジアンスパムフィルタ
  • bsfilter
  •  Ruby で書かれたベイジアンスパムフィルタ  spamか否かを判定。GUIを持たないため、コマンドラインから操作。
  • Bogofilter
  •  C で書かれたベイジアンスパムフィルタ  spamか否かを判定
  • spamassassin
  •  spamか否かを判定
2008年10月15日

rubyでsleepが機能しない( ∵ バッファリング)

3年生向け自主ゼミでRubyを扱うにあたり,第一回は私が発表することに。

それで,自分も含めた初心者向けの出発点として,
Ruby ではじめるプログラミング 【第 1 回】」の内容をやることになったんですが,
初めの出力段階でつまずくという事態に(笑)

具体的には,このサイトの以下のコード
print '私は'
sleep 1
print 15
sleep 1
print '歳です。'
-----------------------------------------------------------------------------------------
このサンプルを実行すると
「私は」「15」「歳です。」とそれぞれの文字列が 1 秒おきに表示されます。
 sleep 1 の部分でプログラムの流れが 1 秒間止まっているのがわかると思います。
このようにプログラムは上から一行ずつ順番に実行されていきます。
を実行すると,順に表示されるはずが,数秒後一気に出力されてしまう。

これは,バッファリングされていることが原因なので,それを抑止する,
STDOUT.sync = true
をプログラムの頭に書いてやる事により解決した。

putsだときちんとsleepされるのに,printだとバッファされるのは何ででしょ。


2008年10月10日

Perlによるメール送信スクリプト

Perlでsendmailする際のベーススクリプトをメモ。
参考になったサイトはここここ。多謝。

メールのヘッダ部分(送信者、宛先、件名なども含む)に日本語を使いたい場合は、
MIMEエンコードされていないといけないのでMIME::Base64を利用。
(UTF-8でやってます。isoにするなら「=?ISO-2022-JP?B? 〜〜〜 ?=」と書く)
メール本文はISO-2022-JP(=JISコード)にするために、Jcodeを利用。

#! /usr/bin/perl

use MIME::Base64;
use Jcode;


$from = 'test@test.test';
$to = 'nanchara@nanchara.nanchara';
$subject = 'テストメールの件名です';
$body = 'テストメールの本文です';

# 件名を MIME エンコード
$encoded_subject = "=?utf-8?B?" . encode_base64($subject,"") . "?=";

# 本文を JIS 変換
$encoded_body = Jcode::convert($body, 'jis');


open(SENDMAIL,"|/usr/sbin/sendmail -t $from $to") || die 'error';
	print SENDMAIL "From: $from\n";
	print SENDMAIL "To: $to\n";
	print SENDMAIL "Subject: $encoded_subject\n";
	print SENDMAIL "MIME-Version: 1.0\n";
	print SENDMAIL "Content-Type: text/plain; charset=iso-2022-jp\n";
	print SENDMAIL "Content-Transfer-Encoding: 7bit\n";
	print SENDMAIL "\n";
	print SENDMAIL "$encoded_body\n";
close(SENDMAIL);
2008年10月08日

<Perl>MIME::Base64によるsendmail@UTF-8

Perlによるメール送信において,subjectが文字化けする件について。

先生から「MIME::Base64を使ってUTF8でsendmail」というサイトを紹介してもらったので,参考にしながらスクリプトを作った。しかし!

use MIME::Base64;

$subject="メールタイトル";
$encoded_subject = encode_base64($subject);

とするも,受信したメールの件名が

Subject : 44Oh44O844Or44K/44Kk44OI44Or

となってしまう。でもちゃんと変換はされている模様。
問題は,そのまま表示されていること。
前後に「=?utf-8?B?」と「?=」を付ければいいんじゃない?と思い,

$subject="メールタイトル";
$encoded_subject = encode_base64($subject);
$mail_subject = "=?utf-8?B?" . $encoded_subject . "?=";

とすればうまく行くはず!と思ったんですが,まだうまく行かない。
件名部分が勝手に改行されてしまう。
初心に戻り,「MIME::BASE64」をじっくり読んでみたら、

返されるエンコードされた文字列は76文字を越えないように分割され、
空文字列でなければ$eolが最後に付きます。
もしエンコードされた文字列を複数の行に分割したくない場合は、
2番目の引数として空白の文字列を渡してください。

とのこと。改行されたくなかったら空文字を入れろと!

$subject="メールタイトル";
$encoded_subject  = encode_base64($subject, "");
$mailsubject = "=?utf-8?B?" . $encoded_subject . "?=";

という訳ですんなり解決。


※追記:最終的に書いたsendmailベーススクリプト


2008年10月03日

後期が始まりました

もう半年経つんですね!早すぎ!
最近めっきり寒くなったので,皆様風邪などひかぬようお気をつけ下さい。

▼9月にやったこと
・メール配信スクリプトの仕上げ
・文字コード変換
  ⇒EUC-JPからUTF-8へ。
   BUT...「POPFileのUIでは文字コードにEUC-JPを利用」との事で文字化け発生。
   でも,メール自体には影響が無いとのことなので我慢して使う。
  ⇒メールの本文の方のニュース名が「???????」と出る事がある。
・POPFileのトレーニング
・10/1のプレゼン準備

▼これからやること
・「??????」の解決
 (※追記:MIMEの問題。mime_plsによって解決できる)
・ラベルを複数付けられるかの検討
 (POPFileを二つ通せるか?)
・引き続きトレーニング