Linux 設定日記

設定したことを忘れないように書いてあります。

2003.11.01
ホームサーバーのディスクをRaid化

一年半ぶりの更新(下のメモはいつやったか残っていたので記述)。滞っていた理由の大きなことは、サーバが死んだこと。サーバの死んだ理由は、 富士通製HDDが経年劣化で故障したため。 サーバ再作成を機会にディストリビューションを slackware からVine Linuxに変更。

ディスクが飛んだことで一番いたかったのが、今までのメールがなくなってしまっこと。これはすごく痛かった。 と、いうことで、今後このような事が無いように、サーバーのHDDを冗長化することにした。

しかし、現在のサーバはにRAIDカードを入れる余裕はないので、ソフトウエアRAIDで構成することになる。 また、筐体にはハードディスクは2台までしか入らないので、RAID形式はミラーリングとなる。

やはりミラーリングであるならば、鏡像対称が美しいので、2台のハードディスクの領域は全てRAIDとすることにする。 つまり起動パーティションもRaidから行うこととしたのだが、bootできるようになるまでに非常に苦労した。

redhat を利用すれば、grubがraidからのインストール、起動に対応しているとのことなので、 redhatにすれば問題なかったのかもしれないが、aptを使いたかったので、Vine Linuxにした。

kernelにraid関係のドライバ、モジュールをスタティックに組み込んでも、rootパーテーションをraidにしたとたん起動しなくなる。
liloのパラメータやらgrubの設定やらいろいろいじくってみたが、うまくいかなかった。
最終的にこのページを見つけて、問題を解決できた。

リンク先を読めば、raidでのブート方法はは自明だが、自分の備忘録として書いておく。リンク先が消えることもあるしね。

簡単にいえば、片方のディスクに通常にインストール。raidセットを、もう一方のディスクに構築。 その際に、現在のディスクをfaild-diskとしておき、raidセットに認識させないようにする。 その後、raid側にコピー、raidhotaddで最初のディスクをraidに追加する。

raidtabはこんな感じ。faild-diskを1にしておくと/dev/hda1はとりあえず認識しない。

#### raidtab
raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              32
persistent-superblock   1
device                  /dev/hdc1
raid-disk               0
device                  /dev/hda1
failed-disk             0

raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              32
persistent-superblock   1
device                  /dev/hdc2
raid-disk               0
device                  /dev/hda2
failed-disk             0

raiddev                 /dev/md2
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              32
persistent-superblock   1
device                  /dev/hdc5
raid-disk               0
device                  /dev/hda5
failed-disk             0

raiddev                 /dev/md3
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              32
persistent-superblock   1
device                  /dev/hdc6
raid-disk               0
device                  /dev/hda6
failed-disk             0

raiddev                 /dev/md4
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              32
persistent-superblock   1
device                  /dev/hdc7
raid-disk               0
device                  /dev/hda7
failed-disk             0

fstabは以下の通り。ジャーナリングfileシステムはext3を使用している。swapはraid化せず両方スワップとして利用している。 理由は、後から追加するディスクのほうが大きくないとRAIDを組めないため、swapを二つにしてパーティションの容量を調整しようと考えたため。 swapをraid-1にする意味はあまりないと思うし。raid-0にしておくメリットは多少あるかも。

## fstab
/dev/md0                /                       ext3    defaults        1 2
/dev/md1                /boot                   ext3    defaults        1 1
none                    /dev/pts                devpts  gid=5,mode=620  0 0
/dev/md2                /usr                    ext3    defaults        1 2
/dev/md3                /var                    ext3    defaults        1 2
/dev/md4                /home                   ext3    defaults        1 2
none                    /proc                   proc    defaults        0 0
/dev/hda3               swap                    swap    defaults        0 0
/dev/hdc3               swap                    swap    defaults        0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,kudzu,ro 0 0

lilo.confは以下のとおり。lilo.conf.hdaとlilo.conf.hdcの違いは、sector,heads,cylindersの値と/dev/hda,hdcの部分、secandaryはprimaryとラベルを書いてあるなど。 パラメータの値は、fdisk -ul /dev/hd{a,c}で取得。

kernel updateした時の用心に、現在の設定をもう一つのラベルとして書いておく。

また、もう一方のliloを呼び出せる用にしてある。 起動できた方からできない方をよんでも意味があるとは思えないが、なんかあったとき手間がかからないからと思い、なんとなく残している。

liloの書き込みは、lilo -v -C lilo.conf.hd{a,c}で実施。

##lilo.conf.hda
lba32

disk=/dev/md0
bios=0x81
sectors=63
heads=255
cylinders=5005

partition=/dev/md1
start=63

boot=/dev/hda

install=/boot/boot.b
map=/boot/map

prompt
timeout=50
default=linux
message=/boot/message

image=/boot/vmlinuz
        label=linux
        read-only
        vga=788
        root=/dev/md0

image=/boot/vmlinuz-2.4.20-99vl1
        label=linux-2.4.20
        read-only
        vga=788
        root=/dev/md0

other=/dev/hdc
        label=Secondary
2003.08.08
MHonArcでhtmlとtextのmime-atlernateなメールを扱う

MLをMHonArcでhtml化して保管しているのだが、Outlook Expresなぞは、 textで十分なhtmlメールにしやがる。htmlメールにしても中身が読めれば問題ないが、 メール本文とマルチパート部分でテキストコードが違うことがままあって、 全く読めない場合がある。何か方法がないかと探していたら、MHonArcのリソースにちゃんとあった。 以下、text/htmlを優先させない方法。

<MIMEAltPrefs>
text/plain
text/enriched
text/html
</MIMEAltPrefs>

2003.08.01
2003.08.01の日記

なんでこれが必要だったかすでに忘れたが、MTAにeximを使用して、Maildir形式を利用、 fetchmail、solid-popという組み合わせの使用方法

eximを Maildir形式に変更する

  local_delivery:
    driver = appendfile
    group = mail
* # mode = 0660
*   mode = 0600
    mode_fail_narrower = false
    envelope_to_add = true
    return_path_add = true
* # file = /var/spool/mail/${local_part}
*   create_directory = true
*   directory_mode = 700
*   directory = /home/${local_part}/Maildir/
*   maildir_format

 address_directory:
   driver = appendfile
   no_from_hack
   prefix = ""
   suffix = ""
*  maildir_format  -->コメントアウトを外す

.fetchmailの設定

poll mail.nifty.ne.jp with protocol POP3:
        timeout 30
        keep
        mda     "/usr/bin/procmail -p -f %F"
	username USERNAME;
        password password;

/etc/spopd.conf (solid-pop3d)の設定

/* Configuration file for Solid POP3 */
/* This is the "conventional" setup:
   this is what you would get with no config file at all */
/* This is for when mail is delivered to a maildir in ~/Maildir */

<Global>
        MailDropName    Maildir
        MailDropType    maildir
</Global>
/*
  see also: /usr/share/doc/solid-pop3d/examples/
*/

2003.05.16
MHonArcをHack

と、言うほどでもないが。 MHonArc 2.6.8で日本のメールを処理すると、JISコードであることを前提に動作しするようで、 html化のときにメール本文の行頭にEsc-(Bを付加するのでそれを行わないようにiso2022jp.plを修正したもの。

といっても行頭のEsc-(Bを無条件で削除するだけ。たぶんeuc専用になったと思われ。

--- iso2022jp.pl        2004-05-17 14:47:17.000000000 +0900
+++ /usr/lib/MHonArc/iso2022jp.pl       2003-08-19 20:53:02.000000000 +0900
@@ -65,12 +65,33 @@
     my $cnt = scalar(@lines);
     my $i = 0;
     foreach (@lines) {
-       # a trick to process preceding ASCII text
-       $_ = "\033(B" . $_ unless /^\033/;
+
+       # Process preceding ASCII text
+       while(1) {
+           if (s/^([^\033]+)//) {      # ASCII plain text
+               $ascii_text = $1;
+
+               # Replace meta characters in ASCII plain text
+               $ascii_text =~ s%\&%\&%g;
+               $ascii_text =~ s%<%\<%g;
+               $ascii_text =~ s%>%\>%g;
+               ## Convert URLs to hyperlinks
+               $ascii_text =~ s%($HUrlExp)%$1%gio
+                   unless $nourl;
+
+               $ret .= $ascii_text;
+           } elsif (s/(\033\.[A-F])//) { # G2 Designate Sequence
+               $ret .= $1;
+           } elsif (s/(\033N[ -.])//) { # Single Shift Sequence
+               $ret .= $1;
+           } else {
+               last;
+           }
+       }
 
        # Process Each Segment
        while(1) {
-           if (s/^(\033\([BJ])//) { # Single Byte Segment
+               if (s/^(\033\([BJ])//) { # Single Byte Segment
                $ret .= $1;
                while(1) {
                    if (s/^([^\033]+)//) {      # ASCII plain text
@@ -113,8 +134,8 @@
            }
        }
 
-       # remove a `trick'
-       $ret =~ s/^\033\(B//;
+#      # remove a `trick'
+#      $ret =~ s/^\033\(B//;
 
        # add back eol
        $ret .= "\n"  unless (++$i >= $cnt);