Warning: Error while sending QUERY packet. PID=29832 in /home/uls/public_html/wordpress/wp-includes/class-wpdb.php on line 2351 FreeBSDな生活

2012.02.02

Majordomoをソースからインストール・・・(mail)

FreeBSD 9.0を入れてportsでMajordomoを入れようとすると、古いのでMailmanを使えと言ってくる。以前はそれでもインストールできたのだが、いよいよportsでは入れられないらしい。Mailmanを使うことも考えたが、MLの運用上色々と細かいカスタマイズを行なっているので、なかなか止められない。
そこで、久々にソースを取ってきてインストールしたのだが、だいぶやり方を忘れていたので、改めてインストール方法を書いておくことにした。

まず、下記からmajordomoのソースのgzipファイルをダウンロードしてくる。
http://www.greatcircle.com/majordomo/
そして、適当なフォルダーで解凍する。

# tar xvzf majordomo-1.94.5.tar.gz

majordomo-1.94.51のフォルダーができる。
majordomoのユーザー名、グループ名を決める必要があるので、下記を追加する。
/etc/passwdに

majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent

/etc/groupに

majordom:*:54:

ユーザーIDとグループIDはportsでインストールしたときと同じに54とした。
次にmajordomo-1.94.51に入って、Makefileの編集をする。

# cd majordomo-1.94.51
# vi Makefile
PERL = /usr/bin/perl         ← perlの位置の指定の修正
W_HOME = /usr/local/majordomo ← 自分のmajordomoのインストール先を指定
W_USER = 54          ← user ID
W_GROUP = 54          ← group ID
TMPDIR = /usr/tmp        ← tmpディレクトリーの指定

次にsample.cfをmajordomo.cfとしてコピーし、編集する。

# cp sample.cf majordomo.cf
# vi majordomo.cf
$whereami = "host.example.com"; ← 運用するホスト名を入れる。
#if ( defined $ENV{"HOME"}) {   
#     $homedir = $ENV{"HOME"};
#} else {
#     $homedir = "/usr/test/majordomo";
#}

      $homedir = "/usr/local/majordomo"; ← $homedirの場所を単純に指定

$sendmail_command = "/usr/sbin/sendmail"; ← sendmailの場所の指定

$TMPDIR = "/usr/tmp"; ← tmpディレクトリーの指定

ここで、/usr/tmpを作成し、パーミッションを書き込みを可能にしてMajordomoをインストール

# mkdir /usr/tmp
# chmod 777 /usr/tmp
# make install

そして、wrapperのインストールとテスト

# make install-wrapper
# cd /usr/local/majordomo
# ./wrapper test-config

エラーがでなければ、インストールは終了である。
以降の設定はportsで入れた場合と同じなので省略する。

****インストール後に散々トラブった事****

(1) wrapperの実行権限

インストールして./wrapper config-testは無事に終了したが、FreeBSD 9.0になって、メールの実行権限はrootでなくなったようで、majordomoのwrapperがPermission deniedになってしまう。
この対策として、/etc/groupのmajordomにmailnullを追加する必要があった。

# vi /etc/group
majordom:*:54:mailnull   ← mailnullを追加する

(2) majordomo.plの修正

lists内にtestのディレクトリーを作りowner, groupともにmajordomにして後に、majirdomoにsubscribe testとメールを出すと動作せず、majordomoディレクトリー内のLogに以下のエラーが記録されていた。

ABORT Majordomo@abc.def.jp: HOGEHOGE <hogehoge@abc.def.jp> is not a valid return address.

PackageでMajordomoを入れると正常に動作するので、色々調べたらmajordomo.plに修正が必要であった。
sub main’ParseAddrsの中の記述である。(98行付近から始まっている)

sub main'ParseAddrs {
    local($_) = shift;
    1 while s/\([^\(\)]*\)//g;      # strip comments
    1 while s/"[^"]*"\s//g;     # strip comments"
    split(/,/);     → my @parts = split(/,/);        # split into parts
  foreach (@_) {  →   foreach (@parts) {
    1 while s/.*<(.*)>.*/$1/;
    s/^\s+//;
    s/\s+$//;
    }

    @_;    →  @parts;
}

後に調べたら、perl 5.12.以降で修正が必要となったとのこと。マジック変数の@_を使うのが、そもそも間違いだが、以前のperlでは何とか動いていた。
参考URL: http://henrysnotes.org/?p=448

(3) Sequencer

majordomo-1.94.5-jp.patch.gzを/usr/local/majordomoに入れ、日本語化のパッチを行い、resendで動作確認してからsequencerに変えたら動かなくなった。
何のことはない、sequencerの中にもsendmailコマンドに/usr/lib/sendmailをしているところが3箇所あった。/usr/sbin/sendmailに書き直した。

# vi sequencer

$sendmail_cmd = "/usr/sbin/sendmail $opt_m -f$sendmail_sender " .

        print MAIL ">>> /usr/sbin/sendmail -f$sendmail_sender -t\n";

    local(@mailer) = split(' ',"/usr/sbin/sendmail -f$sendmail_sender -t");

なお、Majordomoを日本語化したい場合は、日本語化のパッチ(majordomo-1.94.5-jp.patch.gz → 遂にリンク先がなくなった。)をあてた後に下記のようにjsendmailをつくり、majordomo.cfの$sendmail_commandを書き換える。

# vi jsendmail
#! /bin/sh
/usr/local/bin/nkf -j | /usr/sbin/sendmail $*
# chmod +x jsendmail
# vi majordomo.cf
# $sendmail_command = "/usr/sbin/sendmail"; 
$sendmail_command = "/usr/local/majordomo/jsendmail"; 

jsendmailに書き換えるのはmajordomo.cfのみで、sequencerなどにある/usr/sbin/sendmailは書き換えてはならない。書き換えるとSubjectのMIME変換がなされなくなる。

(4) その他

sequencerに変えたのはメールのタイトルに[Test:00123]タイトル のようにメールの件名に連番をつけたいからであるが、このためmajordomo/lists内にtest.seq(testの名のML名の場合)のファイルを作り、例えば00001のように最初の番号を入れておく。0の数は、連番の桁数合せのためで、この例の場合は5桁になる。


2012.01.29

FreeBSD 9.0のGPTでのミラー構築・・・(FreeBSD)

FreeBSD 9.0では、GUIDパーティション(GPT)がサポートされたが、そこでミラー構成がMLの助けも借りて成功したので、記述しておくことにした。
既に、GUIDEDでFreeBSD 9.0がインストールされているものとする。
なお、画面キャプチャーなどで便利なので、VMWareで構成したが、もちろんこの方法で実環境でも問題なく構成でき、サーバーを立ち上げた。

1. HDDの追加

ミラーにするHDDを追加して、普通に起動し、ログインしてrootで下記の操作を行う
最初にFreeBSDをインストールしたドライブ名と追加したドライブ名を確認する。

# camcontrol devlist
<VMware Virtual IDE Hard Drive 00000001> at scbus0 target 0 lun 0 (pass0,ada0)
<VMware Virtual IDE Hard Drive 00000001> at scbus0 target 1 lun 0 (pass1,ada1)

次にada1をada0と同じパーティションとなるように合わせる。

# gpart backup ada0 > ada0.gpt
# gpart restore -F ada1 < ada0.gpt

内容の確認をする。

# gpart show
=>       34  20971487  ada0  GPT  (10G)
        34            128     1  freebsd-boot  (64k)
          1 62  19920768     2  freebsd-ufs   (9.5G)
  19920930   1048576     3  freebsd-swap  (512M)
  20969506         1981        - free -  (990k)

=>         34  25165791  ada0  GPT  (12G)
              34            128     1  freebsd-boot  (64k)
            162  19920768     2  freebsd-ufs   (9.5G)
   19920930   1048576     3  freebsd-swap  (512M)
   20969506   4196285        - free - (2.0G)

ada1にbootレコードを書き込む。

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1

2. ミラーの構築

ここで、shutdownして、インストールCDで起動して、Live CDを選択する。loginのpromptが出たらrootでログインする。パスワードは不要である。(クリックで画像拡大)

mirror01.jpgmirror02.jpg

geom_mirrorをロードし、各スライス毎にround robinで構築する。

# kldload geom_mirror
# gmirror label -vb round-robin p1 /dev/ada0p1
# gmirror label -vb round-robin p2 /dev/ada0p2
# gmirror label -vb round-robin p3 /dev/ada0p3

内容を確認する。

# gmirror status
Name         status     Components
mirror/p1    COMPLETE    ada0p1 (ACTIVE)
mirror/p2    COMPLETE   ada0p2 (ACTIVE)
mirror/p3    COMPLETE    ada0p3 (ACTIVE)

ada1の各スライスをinsertする。

# gmirror insert p1 /dev/ada1p1
# gmirror insert p2 /dev/ada1p2
# gmirror insert p3 /dev/ada1p3

gmirrorのステータスを確認する。

# gmirror status
Name         status     Components
mirror/p1    COMPLETE   ada0p1 (ACTIVE)
                        ada1p1 (ACTIVE)
mirror/p2    DEGRADED   ada0p2 (ACTIVE)
                        ada1p2 (SYNCRONIZING 91%)
mirror/p3    COMPLETE   ada0p3
                        ada1p3 (ACTIVE)

p1とp3が同期化完了で、p2のみ進行中を示している。
全てCOMPLETEになるのを待ち、fstabとloader.confを編集する。

# mount /dev/mirror/p2 /mnt
# cd /mnt/etc
# vi fstab
# Device                 Mountpoint       FStype    Option   Dump   Pass#
/dev/ada0p2          /                       ufs           rw          1           1
/dev/ada0p3         none                  swap       sw          0           0

下記になるように修正する。

/dev/mirror/p2          /                       ufs           rw          1           1
/dev/mirror/p3         none                  swap       sw          0           0

次にloader.confにgeom_mirrorの読み込みを追加。

# cd /mnt/boot
# vi loader.conf
ここで、
geom_mirror_load="YES" を追加

これで終了である。rebootしてHDDから起動して使用する。
Swapも確認しておく。

# pstat -sh  または swapinfo -h
Device                     1K-blocks  Used    Avail Capacity
/dev/mirror/p3         418812   0B  418MB

2012.01.26

FreeBSD 9.0のインストール(GUIDパーティション)・・・(FreeBSD)

FreeBSD 9.0がリリースされた。今回のFreeBSD 9.0では、GUIDパーティション(GPT)がサポートされ、それに伴いインストーラーも従来のsysinstallに変えてbsdinstallになった。
GPTがサポートされた理由は、従来のMBRパーティション方式ではHDDの使用最大容量は2TB(テラバイト)なので、一気に8ZB(ゼタバイト、正確にはZiBでゼビバイト:2**70)まで広げようとするもので、インテルが提唱していた。テラ→ペタ→エクサ→ゼタなので、とてつもない値である。
ともかく、bsdinstallでインストールの様相がsysinstallと違うので、VMware下にインストールしてその方法を記述して置くことにした。
ネットからFreeBSD-9.0-RELEASE-i386-disc1.isoをダウンロードし、CDRに焼き、DVDドライブのトレーに入れて起動させた。すぐに起動画面が現れた。右側にデーモン君が描かれている。その後、起動時のメッセージが画面を流れた後に[Install]、[Shell]、[Live CD]の選択画面になるので、[Install]を選ぶ。
bsd9_01.jpgbsd9_02.jpg

次にキーボードの選択を行うか否かの画面になるので[Yes]を選んで[Japanese 106]を選択する。

bsd9_03.jpgbsd9_04.jpg

次にhostnameの入力画面になるので、ホスト名を入れる。特に指定するホスト名がなければtestとでも入れておけばよい。その次にインストールする内容物を選ぶ。今回はDefaulltのままとした。

bsd9_05.jpgbsd9_06.jpg

いよいよパーティションの選択である。Defaultの[Guided]を選んで[Entire Disk]を選んだ。

bsd9_07.jpgbsd9_08.jpg

ada0p1(boot)、ada0p2(utf)、ada0p3(swap)が表れるので、変更の必要がなければ[Finish]を選ぶと確認画面が現れるので[Commit]する。

bsd9_09.jpgbsd9_10.jpg

インストールが始まる。しばらく時間がかかるが、終わると管理者(root)のパスワードの入力となる。

bsd9_11.jpgbsd9_12.jpg

LANドライバーの選択画面になるので、選んでこのホストのIPアドレス、マスク、接続ルーターのIPアドレスを入れる。

bsd9_13.jpgbsd9_14.jpg

DNSの入力画面も現れるので、少なくとも一つは入れて置く。
次は、時刻合わせである。UTCにするかと聞いてくるので[No]を選び、後はAsia→Japanと選択する。

bsd9_15.jpgbsd9_16.jpg

サービスの追加の画面になるので、ntpdをマークした。
crash dumpを有効にするかどうかの画面が出てきたが、crash dumpの使い方を知らないし、disk spaceもたくさん取られるとのことなので[No]を選んだ。

bsd9_17.jpgbsd9_18.jpg

ユーザー追加画面になるので、自分をユーザーとして追加した。現れる画面は、従来から使っていたadduserコマンドと同じである。

bsd9_19.jpgbsd9_20.jpg

インストールが終わり、いよいよbsdinstallから抜ける画面が現れる。Exitを選ぶと、抜ける前にShellを起動して何か修正したくはないかと問う画面が現れるが、修正は普通にログインして行うことにして[No]を選んだ。

bsd9_21.jpgbsd9_22.jpg

bsd9_23.jpg

やっと[Reboot]の画面となった。これでインストールは終わりである。
インストールを終えて、少し戸惑ったことは、Remoteからtelnetできないことであった。
そう言えば、inetd.confの設定がなかったと思い、ローカルでログインし、inetd.confを開いてtelnetを有効にして再起動したが、やはりtelnetができない。
調べたら、何のことはない、inetdが起動していない。rc.confにinetd_enable=”YES”を追加して再起動し、ようやくtelnetができた。
Pckageの追加は、従来通りsysinstalも使えるので、普通に自分の環境を構築していける。
しかし、現在運用しているサーバーは、gmirrorでHDDをミラー構成にして使っているが、gptでミラー化はややこしそうなので、運用サーバへの適用は当面見合わせることになりそうである。FreeBSD 8.2で困っていないことでもある。


2011.09.15

Wakeup on Lan・・・(FreeBSD)

最近のPCやサーバーのオンボードのLANポートには、Wakeup on Lanの機能が付いている。そこで、FreeBSDでこの機能を利用して、普段は予備機として電源を入れずに置いてあるサーバーに夜中にPower Onして主サーバーのデーターを送り込むことを考えた。
まず、Wakeup on Lanを受けるマシンにマジックパケットを送出するwolをインストールする。

# cd /usr/ports/net/wol
# make install clean

使い方は簡単である。
 # wol -i [ブロードキャストアドレス] [MACアドレス] とする。
サーバーのIPが 192.168.1.xxのときは、下記となる。

# wol -i 192.168.1.255 ab:13:48:78:93:b6 ← MACアドレスは、Power ONしたいサーバーのをセット。

crontabに登録してPower onし、主サーバからrsyncでデータを転送して、Shutdownするようにして目的を果たす。サーバーは、物置部屋と化しているところに置いてあるので、デスクトップから席を立ってPower Onに出向く必要がないのも便利だ。
ルーターのWR8700NにもLAN接続されているPC等をリモートでPower Onする機能があり、外出先からもPCのPowe Onができるというが、少し危なっかしい気がする。


2011.09.14

ブロードバンドルーター考・・・(etc)

 現在、固定IP接続のアカウントを別個に2つ契約していて、2台のサーバーをそれぞれのアカウント先に接続して運用している。2台のサーバーは、自分用と設置を人に頼まれたもので、ドメイン名も分ける必要があったため、接続アカウントも2つ契約したものである。
 回線は、Bフレッツマンションタイプを7年ほど前から使用しているが、NTTのレンタル品のVDSLのモデムVH-50IIにルーターとしてNTT-MEのMN8300を接続して使っていた。
しかし、ルーターも古くなってきて、もし故障でもしたら同じルーターは手に入らないであろうから、別のものを見つけておく必要を感じていた。
logical.jpg
 ところが、最近のルーターは無線LAN機能を内蔵しているのは良いとしても、マルチPPPoEを唱っていても、接続は2セッションで、しかも1つはフレッツスクエアと全くバカにした仕様のものがあったり、自由に2セッション接続可能なものであってもポートマッピングが接続毎に設定できなかったり、パケットフィルターの設定が無いなどの商品が多くどれを購入すれば良いのか考え倦んでいた。そもそも、マルチセッションなどと言わずに、ハッキリと何セッションと記述してほしい。
さらに大きな問題は、製品説明で簡単接続とか、無線LANの通信速度、到達距離等を誇るものが多く、肝心のルーターとしての機能説明が乏しく判断に迷うものが多いことである。
 結局、さんざん迷いながら調べて、WR8700Nを購入した。5セッション独立して設定でき(フレッツなので2セッションまでしか利用できないが)、ポートマッピング、パケットフィルターを含めて文句なしの機能が揃っており、無線LANも2.5G系と5G系があり、それぞれ2つのSSIDが使用可能となっている。
NECが販売する最上位機のようであるが、価格も安く、ようやく満足できるルーターに巡り会えた気がする。1台のデスクトップPCが離れた場所にあるが、無線LANで快適に接続できている。