Linux 設定日記

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

2011.08.07
かなり昔の情報更新

pound用のサーバー証明書は、何度か作っているが、コマンドが間違っていたので修正。

誤	openssl req -x509 -newkey rs:1024 -keyout server.pem -out server.pem -days 365 -nodes
正	openssl req -x509 -newkey rsa:1024 -keyout server.pem -out server.pem -days 365 -nodes

当時はあっていたのが、コマンド拡張されたのかは不明。

2010.05.23
Poundを更新したら変なlogが出るようになった

以前から、バーチャルホスト兼ロードバランサとしてpoundを使っている。 自前でRPM Packageを用意しているのだが、システム更新の際に、2.6.1に以前と同様にPackageを作成したら、それ以降

 pound: libgcc_s.so.1 must be installed for pthread_cancel to work 
 pound: MONITOR: worker exited on signal 6, restarting...
が出るようになった。調べてみると、異なるバージョンのlibgcc_s.so.1がLD_LIBRARY_PATHにあるということらしいが、findしてみてもlibgcc_s.so.1は一つしかない。 実害は無いようなので放置していたが、今回、パッケージを再作成することで対処した。

まずは、ソースの入手。と思い公式サイトにいってみると、公式のバージョンは2.6から2.5に巻き戻っている。 理由はわからないが、仕方がないので2.5でパッケージを作成する。今回は、公式にあったRedHat用SRPMパッケージを再作成してVine用Pakageを作成することとした。

公式サイトに示されていたサイトからPoundのパッケージをとってきて、rpm -ba pound.specで作成すればよいので楽ちん。 と思ったが、google-perftools-develが無いといわれる。

Vineのパッケージには、無いものなので、こちらも前記の場所からとってくる。 で、google-perftoolsのパッケージを作成しようとすると、今度はlibunwind-develがないと言われる。 こちらは、Vineのパッケージに存在するので、apt-getでインストール。

google-perftoolsは、最大パフォーマンスを発揮するためのアプリケーション開発ツールキットとのことだで、64ビット環境やマルチコアなどさまざまなプラットフォーム環境がある中、チューニングなども大変なため必要なライブラリなんだろうと思う。 まあ、うちの環境くらいでは特に性能差がでるようなことはないとは思うけど。

だが一番の問題は、Vine 5.1には既にpoundのパッケージがあることに後で気がついたことだ。Vine使いの人は前記の問題は発生していなかったのかも。

2010.05.04
写真の整理(Perl::Imager)

写真の整理をするために、perl scriptを組んでいるのだが、再インストールした際にライブラリがリセットされてうまく動かなくなった。 エラーが出るたびに、必要なモジュールをインストールしたが、ImagerがJpegサポートされない形でインストールされてしまった。 format 'jpeg' not supported - formats bmp, ico, pnm, raw, sgi, tga available for reading at ... 原因はライブラリ(とヘッダファイル)がインストールされていないため。
CPAN上で、install Imagerとした際に冒頭に

  CPAN.pm: Going to build T/TO/TONYC/Imager-0.73.tar.gz


done.
       gif: includes not found - libraries not found
     ungif: includes not found - libraries not found
      jpeg: includes not found - libraries found
       png: includes not found - libraries not found
      tiff: includes not found - libraries not found
 freetype2: includes not found - libraries found
 freetype2: not available
  T1-fonts: includes not found - libraries not found
  TT-fonts: includes not found - libraries not found
       w32: includes not found - libraries not found
EXIF support enabled
とチェックが走るので、includes found - libraries foundとなるように、 libjpeg-develをインストールし、cpanでclean Imagerをおこなった後、force install Imagerで再インストールすることで、jpegサポートされるようになった。

2009.12.27
RAIDからのboot

次にraidからのbootを設定。 まずは、起動時にraidが認識されるように、mintrdを作成。 ちゃんとraidが認識されている状態で行わないと正しくファイルイメージが作成されない。 昨日の段階でうまくいかなかったのはちゃんとraidが認識されていなかったから。 次回以降は、アップデート時にrpmスクリプトが自動的に行ってくれるので一度行えばよいはず。

mkinitrd -v /boot/initrd-2.6.27-raid-43vl5.img 2.6.27-43vl5
次にgrubの設定。/etc/grub.confを以下のように設定。
# menu.lst generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
default=0
timeout=5

title Vine Linux (Current kernel Raid)
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/md1 rhgb resume=swap:/dev/sdb3 vga=0x314 splash=silent 
        initrd /initrd-2.6.27-raid-46vl5.img
ずっとliloを使ってきてきていたため、grubにはなれておらず、ここでも結構、はまってしまった。
root (hd0,0)は、grubが起動して、ルートとしてマウントするパーテション。 (hd0,0)は一つ目のデバイスの一つ目のパーテションを指す。 うちの環境の場合は/dev/sda1で、最終的にマウントされるのは、/boot。 kernelやinitrdは/bootをルートと見立てたディレクトリで指定しなければならない。
rootは、initrdが起動した後の本来のrootデバイスであり、うちの環境では/dev/md1になる。

この関係がわからず、

mount: error mounting /dev/root on /sysroot as ext3:Imvalid argument
Setting up other filesystems.
Setting up new root fs
setuproot: moving /dev failed: No such file or directory
no fstab.sys, mounting initernal defaults
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
Switching to new root and running init.
unmounting old /dev
unmounting old /proc
unmounting old /sys
switchroot: mount failed: No such file or directory
Kernel panic -not syncing: Attempted to kill init!
を何度も見る羽目になった。

以上の設定をしたら、grubを起動ディスクに書き込む。 raidで起動する前であれば、grub-install /dev/sdaで書き込むことができるが、raid起動後は手動でgrubに書き込む必要がある。

[root@argus pc2m]# grub
Probing devices to guess BIOS drives. This may take a long time.


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename. ]
grub> device (hd0) /dev/sda
device (hd0) /dev/sda
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
grub> quit
quit
ポイントはここもディレクトリの指定。(hd0,0)は/bootなので、/bootをrootとしたディレクト指定となる。 /dev/sdbに対しても同様に書き込みを行う。

2009.12.26
Vine 5.0 インストール

クリーンインストールなので、Western digital WD15EADS-00P8B0などを買ってみた。 旧ディスクの片割れと、新ディスクでRAIDを組んで、普通にvine 5.0のインストーラからインストールしようとするが、フルRAIDのせいかうまくいかない。 起動したあと

md: md1 stopped.
md: bind
と出たのち、/dev/rootが見つからないといってkernel panicになってしまう。

なので、以前のようににインストールすることにした。 以前のようにというものの、自宅サーバははるか昔、 会社のサーバでも結構前なのですっかり忘れている。

こちらに、まずはVine 5.0をインストール。 その後、以前のディスクにRAID-1を組んでから、再度このディスクをRAIDデバイスとして追加するため、パーテションのサイズは新しいディスクと合わせておく必要がある。 また、パーテションタイプはfdに変更しておく。

インストールが完了したら、旧ディスクをRAIDデバイスとして作成。新ディスクが/dev/sda, 旧ディスクが/dev/sdbであるため、

mdadm --create /dev/md0 --level=1 --raid-device=2 /dev/sdb1 missing
mdadm --create /dev/md1 --level=1 --raid-device=2 /dev/sdb2 missing
mdadm --create /dev/md2 --level=1 --raid-device=2 /dev/sdb5 missing
mdadm --create /dev/md3 --level=1 --raid-device=2 /dev/sdb6 missing
mdadm --create /dev/md4 --level=1 --raid-device=2 /dev/sdb7 missing
こんな感じで作成。/dev/sdbだけでRAIDデバイスを作成したのち、/dev/sdbを/opt以下にマウントする。 その上で必要なファイルを/dev/sdaからコピーしてあげる。こんな感じ。
mkdir -p {/opt/bin,/opt/boot,/opt/dev,/opt/etc,/opt/home,/opt/initrd,/opt/lib,/opt/lib64,/opt/media,/opt/misc,/opt/mnt,/opt/net,/opt/opt,/opt/proc,/opt/root,/opt/sbin,/opt/selinux,/opt/srv,/opt/sys,/opt/tmp,/opt/usr,/opt/var}
\cp -ap {/bin,/boot,/dev,/etc,/home,/initrd,/lib,/lib64,/media,/misc,/net,/root,/sbin,/srv,/tmp,/usr,/var} /opt
で、次に、/opt/etc/fstabを修正。デフォルトではlabelになっているので、/dev/md に e2labelでラベルを設定しても動作するかもしれないが、 ややこしいので、デバイスを指定した。
/dev/md1                /                       ext3    defaults        1 1
/dev/md0                /boot                   ext3    defaults        1 2
none                    /dev/pts                devpts  gid=5,mode=620  0 0
none                    /dev/shm                tmpfs   defaults        0 0
/dev/md4                /home                   ext3    defaults        1 2
none                    /proc                   proc    defaults        0 0
none                    /sys                    sysfs   defaults        0 0
/dev/md2                /usr                    ext3    defaults        1 2
/dev/md3                /var                    ext3    defaults        1 2
/dev/sda3               swap                    swap    defaults        0 0
/dev/sdb3               swap                    swap    defaults        0 0
以上完了したら、raidが正しく認識されているか再起動してみたが、さっきのように/dev/mdがstopしてしまう。 どうやら古いmdadm.confが残っていたためのようで mdadm.confを再作成したら問題なくなった。