2010.12.13

MySQL 5.5 におけるrootパスワード再設定

以前にも書いたが、mysql 5.5になったので、rootのパスワードを忘れた場合を改めてかいておく。

# cd /usr/local/etc/rc.d
# ./mysql-server stop
mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql > UPDATE user SET Password=PASSWORD('mynewpassword')
      -> WHERE User='root';
mysql > flush privileges;
mysql > exit;

これで、正規にmysqlにloginでき、各種コマンドが使えるようになる。

2010.12.10

FreeBSD 8.1におけるapache22の注意事項

FreeBSD 8.1でapache22を入れると、/etc/rc.conf に下記の2行を入れる必要がある。

apache22_enable="YES"
apache22_http_accept_enable="YES"

従来、apacheXX_enable=”YES” の1行のみであったので、2行目を忘れがちである。
この2行目の指定で、accf_http.koとaccf_data.koのカーネルロードモジュールが読み込まれるが、これらは、Listen しているソケットに対して、 OS が固有に持っているプロトコルについての最適化を有効にするものとのことです。内容はよく理解していない。
そして、この2行目を忘れると、起動時に下記のエラーメッセージが出る場合があるので要注意だ。
「[warn] (2)No such file or directory: Failed to enable the ‘httpready’ Accept Filter」

2010.12.07

FreeBSDでRAID1(mirror)をLivefs CDなしで設置

既にLivefs CDを使って、gmirrorの設定を行う方法を書いた。このLivefs CDを使う方法が正当な方法と思える。
しかし、Livefs CDを使うことなく設定する方法をNetで見つけ、試したところ無事設定出来たので、ここに書いておくことにした。
前提条件として、FreeBSDがインストールされているHDDは/dev/ad4で、設定終了後にHDDを追加してミラー化するものとする。また、gmirrorで設定するのはgm0の設定名とし、サーバーは通常に起動して動作中であるものとする。

注:

ATAインターフェイスのチャネル(ATA0, ATA1, ATA2・・・)単位でFreeBSDでは、attach/detachできるので、ミラー化するドライブ(ここでは、ad4とad6)は、HDD故障時の交換を考え、ATAインターフェイスのチャネルが異なるドライブの組み合わせにするのが望ましい。(例:ATA2 ← ad4, ATA3 ← ad6) (atacontrolで故障HDDの交換 を参照)

(1) /boot/loader.confに gmirrorの読み込みを設定する。

# vi /boot/loader.conf
geom_mirror_load="YES"   ← この行を追加

(2) /etc/fstabを編集する

# vi /etc/fstab
# Device                Mountpoint      FStype  Options        Dump    Pass#
/dev/ad4s1b              none             swap    sw                  0       0
/dev/ad4s1a              /                     ufs       rw                 1       1
/dev/ad4s1d              /backup          ufs     rw                   2       2
/dev/ad4s1e              /tmp               ufs     rw                   2       2
/dev/ad4s1f               /usr                 ufs     rw                   2       2
/dev/ad4s1g              /var                 ufs     rw                   2       2
/dev/ad4s1h              /web               ufs     rw                   2       2
/dev/acd0                 /cdrom            cd9660  ro,noauto    0       0

viで開いた画面で、
:%s/ad4/mirror/gm0/
と、入力する。画面が次のように変わる。

# Device                          Mountpoint      FStype  Options       Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw                 0       0
/dev/mirror/gm0s1a              /                   ufs     rw                   1       1
/dev/mirror/gm0s1d              /backup        ufs     rw                   2       2
/dev/mirror/gm0s1e              /tmp             ufs     rw                   2       2
/dev/mirror/gm0s1f              /usr                ufs     rw                   2       2
/dev/mirror/gm0s1g              /var               ufs     rw                   2       2
/dev/mirror/gm0s1h              /web             ufs     rw                   2       2
/dev/acd0                             /cdrom          cd9660  ro,noauto    0       0

この内容を保存する。

(3) /etc/rc.confにswapoff=”YES”を追加する。

# echo 'swapoff="YES"' >> /etc/rc.conf

(4) kern.geom.debugflagsに16を書きこむ

# sysctl kern.geom.debugflags=16

この操作で、ブートしたHDDにメタデータが書き込めるようになる。

(5) gmirrorモジュールをload

# kldload geom_mirror

(6) /dev/ad4をmirror登録し、rebootする。

# gmirror label -b round-robin gm0 ad4
# reboot  ← そして、reboot

(7) 無事起動したらloginしてgmirrorのstatusを確認する。下記のようになれば成功である。

# gmirror status
Name    Status  Components
mirror/gm0  COMPLETE  ad4

(8) /dev/ad6が実装されているものとすると、これを追加してミラーを構成する。

# gmirror insert gm0 ad6

これで、同期化が始まる、statusを見ると、進行状態が%で示される。

# gmirror status
   Name     Status  Components
  mirror/gm0  DEGRADED    ad4
                  ad6(2%)

HDDの容量にもよるが、1時間程度でCOMPLETEDになり構成は完了する。

(9) ミラーの状態を毎日メールで知らせてもらうように設定

/etc/defaults/periodic.confをみると、下記のようにDaily check項目の406番が”NO”になっている。

# 406.status-gmirror
daily_status_gmirror_enable="NO"                # Check gmirror(8)

“NO”を”YES”に直しても良いのだが、/etc/defaults/rc.confの内容は直接には書き換えず、/etc/rc.confを作成して修正したい箇所のみを指定するのと同様に/etc/periodic.confを作って記述すべきとコメントでご指摘いただいた。

# cd /etc
# vi periodic.conf
daily_status_gmirror_enable="YES"
: wq

注意) もしmirrorの構成に失敗したら、このときはLivefs CDを使って元の状態に戻し、
   やり直す必要があるので、やはりLivefs CDは用意しておくべきであろう。

MHonArcによるメールのhtml表示の構成

メーリングリストを運用していると、投稿されたメールを整理された形でWebからも見られるようにすることが望まれる。その用途にはMHonArcというソフトが存在するが、満足な結果を得るためには、様々な対処が必要になる。
最初に、メールのaliasesに書いている文を下に示しておく。heptaviaと名付けたmlの運用を行っていて、投稿されたメールはMajordmoで会員に配送されるとともに、このメールaliasesにも送られてくる。なお、メール表示ページのディレクトリーは/web/data/heptavia/mlである。

heptaviaml: "| /usr/local/bin/chopper | /usr/local/bin/nkf -me | /usr/local/bin/newmlist /web/data/heptavia/ml Heptavia"

1. htmlメールとbase64/quoted-printableエンコードに対する処理

メーリングリストでは、Plain textメールのみ許し、htmlメールは許さないと宣言している例は多いが、Microsoftの評判の悪いOutlookのdefaultがhtmlメールになっていることが災いしてか、htmlで送信してくるメンバーが後を絶たない。特にPC関連のliteracyに乏しい人が多いメーリングリストでは、htmlメールの根絶は無理である。
さて、outlookから送られてくるhtmlメールを見ると、メール本文は2つのパートからなり、平文のメール内容の後に、同じ内容のhtml文が付いた構造であるのが分かる。
そこで、後半のhtml部分を切り離して、mhonarcに送り込むためのプログラムを書くこととした。合わせてbase64/quoted-printableのエンコードに対する処理とメール送信者にWarningメールを送る機能も持たせた。改めて、プログラムの機能を箇条書きすると、

(1)平文の場合は、base64/quoted-printableで送られてきたときには、デコード処理のみ行い、
  その他の場合はそのままで送り出す。
(2) htmlメールのhtml文部分の切り離し、平文部分のみを取り出したメールを再構築
(3) base64/quoted-printableのデコード
(4) メール送信者にプレーンメールとするよう警告メールを発信

chopperの名前のプログラムで、やっつけ仕事であり、あまり綺麗な作りでなくて恥ずかしいが、ここに上げておく。==> chopper
また、この中で使っている送信者への警告文は下記のようなものです。
————————————————————————–
メーリングシステムの自動発信メールです。

html形式でMLにメール送信されました。
今後は、テキスト形式で投稿されるようお願いします。

 一般的にhtml形式の方がウイルスの混入に脆弱であるため、メーリング
 リストのような、大勢の人に同時に送られる用途では使用しないのが正しいとさ
 れています。
————————————————————————–
chopperを通ったメールは、nkfでEUCコードに変換(nkf -me)され、次の月別分割処理プログラムに送られる。

2. メールの月別分割

mhonarcは月別の分割機能はないので、Nobさん(→リンク先がなくなった)のmlist2htmlを使わせていただいていたが、以下の変更を加えて名前をnewmlistとしている。

(1) 時差の影響の処理

メーリングリストの会員に海外在住者がいると、月の変わり目でメールのやり取り上、今月に分類されるべきメールが前月に入ってしまうことがある。例えば、5月1日の真夜中の0時過ぎに送られたメールに対するレスが4月30日になることが起こり得るのである。大概の国は日本より時刻が遅れているからである。この修正のため、メールの送信された時の日本時刻で、分類するようにした。

(2) ファイルの書き出しの回避

オリジナルのmlist2htmlでは、/tmp/tmp_$$のファイルに処理結果を書き出し、最後に読み出しながらmhonarcにメール文を渡している。これを修正して、ファイル書き出し不要とし、全てメモリー上のデータとして扱うようにした。

ファイルは、ここに上げておく。==> newmlist

3. mhonarcの対処

(1) 文字化け問題

以前に、iso2022jp.plの不備で、文の頭に”(B “のようなものが付くので、その対処を書いた
この対処でも良いのだが、http://www.mhonarc.jp/のページのKnown Problemsで新しいiso2022jp.plが提供されていた。本家にも報告済みのようだが、FreeBSD 8.1のportsでは、まだ直っていない。新ファイルを提供されているページからダウンロードすれば良いのだが、念の為にここにも、置いておく。

iso2022jp.pl (表示されるiso2022jp.plはiso2022jp.txtと名前を変えているので注意)

なお、iso2022jp.plの保存場所は、portsで入れると最近は、
/usr/local/lib/perl5/site_perl/5.10.1になっている。

(2) 長い行への対処

mhonarcでは、メールの本文の文頭と末尾を<pre>と</pre>で挟むので、たまたま1行が長い文を送って来られると、Browserの表示にはなはだ不都合である。
それで、改行コードを使い<pre>と</pre>で挟むのをやめる方法を以前に書いたが、これは、やはり必要である。

#           $$data = '<pre>' . $$data . '</pre>';
            $$data =~ s/\n/<br>\n/g;
            $$data = '<p>' . $$data . '</p>';

 なお、入っている場所は、iso2022jp.plと同じ/usr/local/lib/perl5/site_perl/5.10.1である。

(3) mhonarcの設定ファイル(rcファイル)について

mhonarcでhtml表示する内容の設定ファイルは、どこに設置してもよく、newmlistの中でパスを指定する。ここに掲げたnewmlistでは、/usr/local/lib/MHonArcに置くようになっている。
書き方の詳細はmhonarcのhome pageに詳しく書かれているが、私が使っているものをサンプルとして掲げておく。

Heptavia.rc

2010.12.05

MTのエントリーの編集画面(2)

以前に、MTのエントリーの編集画面で、編集画面で表示されるタイトルの長さが短すぎるのを修正した。
しかし、MTのバージョンを3.35にしたら編集方法が違っていたので、以下にその方法を書いておく。/mt/lib/MT/Appに移動してCMS.pmを編集する。

# cd ・・・/mt/lib/MT/App
# vi CMS.pm

修正場所はの6343行目あたりで、下記の赤字部である。すなわち、my title_max_lenを32の固定値にする。

    my %blogs;
require MT::Blog;
#    my $title_max_len = const('DISPLAY_LENGTH_EDIT_ENTRY_TITLE');
my $title_max_len = 32;
my $excerpt_max_len = const('DISPLAY_LENGTH_EDIT_ENTRY_T ・・・

ついでに、最近のエントリーのタイトル表示も長くしておく。1906行あたりである。

      $row->{status_text} = MT::Entry::status_text($entry->status);
#      my $max_len = const('DISPLAY_LENGTH_MENU_TITLE');
my $max_len = 32;
if (defined($row->{entry_title}) && ($row->{entry_title}・・・

タイトルが長い場合は2行にわたるようになるが、通常は1行に納まる場合が多く、不都合はない。むしろ、良い感じになった。

« Previous | Next »