2007年5月29日火曜日

kqemu

仮想化で使ったことが無かった qemu に挑戦。debian 使っているので、DebianでQEMUを高速化する(kqemuモジュール)がとっても参考になった。細かな話だけど module-assistant の部分はどこかの madwifi のコンパイル方法にもあったが
m-a a-i kqemu
かな。QEMUのサイトにあるlinux-0.2.img.bz2 (8 MB)でも良いけど。debian であれば qemu-make-debian-root なるものがあったり qemu-img もあるけど。その後 ここここを参照しつつ

# dd if=/dev/zero of=disk.img bs=1M seek=2047 count=1
# losetup /dev/loop0 disk.img
# cfdisk -s 63 -h 16 /dev/loop0
....(1つのパーティションで bootable に)
# losetup -o 32256 /dev/loop0 disk.img
# mkfs -t ext3 /dev/loop0
# losetup -d /dev/loop0
# mkdir rootfs
# mount -o offset=32256,loop disk.img rootfs
# debootstrap --arch amd64 etch rootfs http://ring.asahi-net.or.jp/archives/linux/debian/debian
....
# chroot rootfs /bin/bash
# apt-get install kernel-image-2.6-amd64-generic grub
....
# mkdir /boot/grub
# update-grub
# cp /usr/lib/grub/x86_64-pc/* .
# exit
# umount root
# exit
# /usr/sbin/grub --no-floppy
# grub --no-floppy
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) disk.img
device (hd0) disk.img
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /
Done.
grub> quit
quit
# qemu-system-x86_64 disk.img
おぉ...と思ったら slashdot に こんな 記事が。さて...

# 目的のための手段のための手段のための...が目的に

2007年5月28日月曜日

Virtualizationいろいろ

順序間違えてしまった...conntrackd 試すがためにホスト 2台準備するのはツライので何か流行の仮想化を使おうと画策。Vmware Server で試したところ keepalived までは OK。でも肝心の conntrackd の挙動が怪しかったので UML に。と考えていたら、こんな比較が

TechComparison

流行? の上良さげなのは KVM だけど VT, Pacifica 対応の PC ないしぃ。Xen は vanilla に組込まれそうな気配が無さそうとの話だし、Vmware もう一度試してみようか。そうそう Workstation の 6 って良い? version up した方が良い?

2007年5月9日水曜日

conntrackd のコンパイル

以前 libnetfilter_conntrack のコンパイルができたり、できなかったりは pkg-config というパッケージがホストによって入っていたり、入っていなかったりが原因。ごめんなさい。なのでコンパイラ周りと automake libtool pkg-config 等々が必要。途中省略しまくりのログ。

$ svn co https://svn.netfilter.org/netfilter/trunk/libnfnetlink/. libnfnetlink
....
$ svn co https://svn.netfilter.org/netfilter/trunk/libnetfilter_conntrack/. libnetfilter_conntrack
....
$ svn co https://svn.netfilter.org/netfilter/trunk/conntrack-tools conntrack-tools
....
$ cd libnfnetlink
$ ./autogen.sh
....
$ ./configure --prefix=/usr/local
....
$ sudo make install
....
$ cd ../libnetfilter_conntrack/
$ ./autogen.sh
....
$ PKG_CONFIG_DIR=/usr/local/lib/pkgconfig ./configure --prefix=/usr/local
....
$ make
....
$ sudo make install
....
$ cd ../conntrack-tools
$ ./autogen.sh
....
$ PKG_CONFIG_DIR=/usr/local/lib/pkgconfig ./configure --prefix=/usr/local
....
$ sudo make install
....
$
$ cd /usr/local/lib
$ find /usr/local -ctime -20
....


svn も必要か。最近まで sudo 使わずに root になってたけど何となく使うようにしよう。sudores は
chamaken  ALL=(root) NOPASSWD: /usr/bin/make install
みたく

2007年5月8日火曜日

conntrackd のインストールについて

途中からすっげっ嫌になったので、すっげっ意訳となってしまつたぁ...

How to install the conntrack-tools

このドキュメントにて conntrack-tools のセットアップ方法を詳しく述べます。

0. Introduction

conntrack-tools パッケージには二つのプログラムを含みます:
  • conntrack: connection tracking システムとやり取りをするコマンドラインインターフェース。
  • conntrackd: ハイアベイラビリティな GNU/Linux のファイアウォールを配備するために使用し、ファイアウォールの使用統計を収集することができる connection tracking ユーザスペースデーモン。

1. Requirements

conntrack-tools を動作させるために以下のソフトウェアをインストールしなければなりません。先に進む前にこれらが正しくインストールされているか確認して下さい。
  • linux kernel バージョン >= 2.6.18 (http://www.kernel.org)とサポートできるようにするのは:
    • connection tracking system (quite obvious ;)
    • nfnetlink
    • ctnetlink (ip_conntrack_netlink)
    • connection tracking event notification API
  • libnfnetlink: オフィシャルリリース netfilter.org から取得可能な netfilter netlink ライブラリ。
  • libnetfilter_conntrack:
    オフィシャルリリース netfilter.org から入手できるnetfilter conntrack ライブラリ。
2. Basic Installacion

conntrack-tools をコンパイル、インストールためには、ただ一般的な以下のステップに従うだけです。
./configure
$ make
# make install
この時点でコマンドラインインターフェース `conntrack' を使うことが できます。しかし `conntrackd' と呼ばれるユーザスペースデーモンを動 作させるためにはいくつかの魔法の言葉が必要です。

3. Setting up conntrackd

現在 conntrackd は二つの動作モードを持ちます: 統計モードと同期モード双方の詳細について以下述べます。

3.1. Synchronization mode

conntrackd は Linux 上のステートフルファイアウォールの接続の状態を複製することができます。この章ではデーモンを同期モードで設定する方法を述べます。

3.1.1. Requirements

Keepalived バージョン 1.x (http://www.keepalived.org): 使用しているディストリビューションが最近のバージョンのものかチェックして下さい。

3.1.2. Configuration

  1. keepalived のインストールと設定:
    keepalived 1.x の最新のバージョンをダウンロード、インストールします。使用しているディストリビューションに含まれているかチェックして下さい。シンプルなプライマリ/バックアップのシナリオを設定するのであれば conntrackd の tarball 内のサンプルファイルを使用することができます。
    • node 1 に対しては: conntrackd-x.x.x/examples/sync/node1/keepalived.conf
    • node 2 に対しては: conntrackd-x.x.x/examples/sync/node2/keepalived.conf

  2. これらのファイルは仮想 IP 192.168.0.100 を eth0 で、また 192.168.1.100 を eth1 で持つ二つの端末から構成されるシンプルな VRRPクラスタを設定するのに用いることができます。keepalived に詳しくないのであれば http://www.keepalived.org の公式ドキュメントを読んで下さい。step2 に進む前に keepalived が正しく稼働しているか確認して下さい。

  3. Setting up conntrackd:
    'conntrackd' を同期モードで設定するためには設定ファイルを /etc/conntrackd に置かなければなりません。
    node1 上では
    # cp examples/sync/_type_/node1/conntrackd.conf /etc/conntrackd.conf

    node2 では
    # cp examples/sync/_type_/node1/conntrackd.conf /etc/conntrackd.conf

    _type_ は現在二つある同期タイプ、パーシステントモードか NACK モード、を選びます。パーシステントモードは NACK モードよりリソースを消費しますが、NACK モードは、まだ実験的です。

    配備した設定に合うよう、これらファイルを編集するのを忘れないで下さい。

    設定ファイルを /etc/conntrackd 配下に置きたくないのであればconntrackd にオプション -C でどこを探すか教えてやって下さい。

  4. Running conntrackd

    conntrackd はコンソールモードで稼働することができます。この場合、ただ 'conntrackd' とタイプして下さい。あるいはデーモンモードで稼働させていのであれば 'conntrackd -d' とタイプして下さい。

  5. Checking that conntrackd is working fine
    conntrackd には、ステータスをチェックするための、いくつかの方法があります:
    • (別名内部キャッシュと呼ばれる) 現在このノードによって処理されている接続のキャッシュをダンプ:
      # conntrackd -i

    • (別名外部キャッシュと呼ばれる) ネットワーク内の別ノードから送信された接続についてのキャッシュをダンプ:
      # conntrackd -e

    • 複製デーモンによって収集された統計情報のダンプ:
      # conntrackd -s

  6. Setting up interaction with keepalived

    keepalived はアクティブノードが落ちたと検知すると、落ちたアクティブを置き換えるノード候補を指定します。このイベントにて外部キャッシュ、例えば? 別のノードによって処理された接続を含むキャッシュが (カーネルに?) 引渡されなければなりません。外部キャッシュを引渡すためには

    # conntrackd-c
    とタイプします。

    keepalived は別プログラムとやり取りするためのインターフェースとしてシェルスクリプトを提供しているので以下に紹介する行を keepalived の設定ファイルに記述することにより、外部キャッシュを引渡す処理を自動化できます。

    'script_master.sh' 内には以下の記述があります:
    #!/bin/sh
    /usr/sbin/conntrackd -c # commit external cache
    /usr/sbin/conntrackd -R # resync with kernel conntrack table
    よって、(アクティブノードが) 落ちたイベントにて次候補となるノードが仮想 IP と落ちるノードが処理していた接続を引き継ぎます。NACK モードでは、このファイルは異なることを見て下さい。

  7. Disable TCP window tracking
    適切なパッチがカーネルのメインラインに入るまで TCP window tracking を不能としなければなりません。以下をとりあえずの解決策とすることを検討して下さい:
    # echo 1 >  /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_be_liberal

3.2. Statistic mode

conntrackd は統計デーモンとして稼働することも可能です。興味が無いようであれば飛ばして下さい。同期モードを稼働させる必要はありません。この章ではデーモンを統計モードで設定するための方法を述べます。
  1. Configuration

    conntrackd を統計モードで設定するのは、幾分簡単です。設定ファイルをコピーするだけです。

    # cp examples/stats/conntrackd.conf /etc/conntrackd.conf

  2. Running conntrackd in statistics mode

    To run conntrackd in statistics mode:

    # conntrackd -S

    Alternatively, you can run conntrackd in daemon mode:

    # conntrackd -S -d

    In order to dump the statistics, just type:

    # conntrackd -s

    To dump the current connection forwarded, just type:

    # conntrackd -i