xenU カーネル

xenUのカーネルを最適化(最小化?)してみようと思いました。

この仮想マシンはサーバとして使っていて、いわゆるハードウェアに依存したコードは必要ないはずである、ということで単純にDevice Drivers の下をざっくり削除。

BusもPCIもISAもEISAもなし :p

Processor type and featuresはハード依存しまくりの部分だがここはどうしょうもないので設定。主に変更したのはサーバ用に関係ありそうな

Preemption Model (No Forced Preemption (Server))
Timer frequency (100 HZ)

だけ設定する。

これで試してみるといらないデバイスドライバをコンパイルしないので結構早い。

Device Driver全部カットしたらさすがに起動しなかったw

Loopback DeviceとRAID and LVMを有効にしないとroot filesystemが読めない
xenのfrontendドライバも必要。これがないとdom0から何ももらえない。

ATAも シリアルポートもUSBもVGAもカット。
ネットワークカードもXEN_NETDEV_FRONTENDがあれば後はいらないようだ。
マウスもキーボードも切りたかったけどさすがにそれはできなかったようだ。

しかしxenだと簡単にテストできていいね

 

 

debuild

前から何度もやりつつ諦めていたパッケージのrebuild

結局どうするのが正解なのかよくわからないまま。

ようするにcpu用に最適化できればそれでいいだけなんですが。

~/.config/dpkg/buildflags.conf
SET CFLAGS -march=native -O3
SET CXXFLAGS -march=native -O3

これで

# debuild -uc -us

でよさげです。

良く使っている気がする bind9, squid3, openldap あたりをrebuildしてみました。

$ apt-get source bind9
$ cd bind9-*
$ emacs debian/changelog
バージョン追加
$ debuild -uc -us
$ cd ..

できているような気がするけど確認する方法がないっつーかw

-O3は危険かもしれないと思いつつ。

i7 サーバー

半日かけてpen4のサーバをi7マシンに移殖。

旧サーバはhdd2つで、一つが起動用(贅沢だw)、1つがlvmで作ったxen domUで動くサーバ本体。

単純にこの2つを新マシンに入れ替えて再起動、で行けるはずだった。が。しかし。

xen hypervisor

i386のhypervisorでamd64のカーネルを動かそうとしていて動かなかった。これは当たり前。
そしてamd64のhypervisorでamd64のカーネルを動かしたら動かなかった。なぜに?
結局、amd64のhypervisorでi386のカーネルの組み合わせのみ起動できた。

title           Xen 4.1-amd64 / Debian GNU/Linux, kernel 3.2.0-4-686-pae
root            (hd0,0)
kernel          /boot/xen-4.1-amd64.gz
module          /boot/vmlinuz-3.2.0-4-686-pae root=UUID=hogehoge ro console=tty0
module          /boot/initrd.img-3.2.0-4-686-pae

使っているカーネルとかのバージョンは上記の設定を見て察してください(ぉ

実際にはupdate-grubで生成したものですので上下にいっぱい付いてますが省略。

書いてみるとこれだけなのなw半日かかったのに。

hypervisorぐらい再インストールしたかったのだが、単なるディスク移動だけで時間かかりすぎたので後回し。

/etc/xen/server はこんな感じ

bootloader ="/usr/lib/xen-default/bin/pygrub"
extra = "/boot/grub/menu.lst"

root="/dev/mapper/rio-root ro"
memory = 7168
name = "rio"
vif = [ 'mac=xx:xx:xx:xx:xx:xx' ]
disk = [ 'phy:sdc,xvda,w' ]
vcpus=8

メモリとディスク名、cpu数を変更した。/dev/sdcはディスク丸ごとlvmのpvになっている

domU

amd64カーネルに変えた。

apt-get install linux-image-3.2.0-4-amd64

domUはあっさりamd64カーネルで動いた。

カーネルの再コンパイルをしようとしたのだが、amd64カーネルが作れなかった。

make-kpkg --revision=1.0 --initrd kernel-image --arch=amd64

で行けるはずなのだが,

dpkg-architecture: warning: specified GNU system type x86_64-linux-gnu does not match gcc system type i486-linux-gnu, try setting a correct CC environment variable
make[2]: amd64-linux-gcc: Command not found

で動かなかった。amd64-linux-gccとかx86_64-linux-gnu-gccとか必要らしいがどこから入れるかわからない orz
これってもしかしてamd64でOSごと再インストールしないとダメとかって話?

今日は未解決のまま終了。

WHR-300

メルコ(現バッファロー)のWHR-300購入しました。

無線LANルータが欲しかったので購入。隣にWZRシリーズもあったのだが、その場で適当に悩んでWHR-300に決定。

RIP

しかしフタを開けてみるとRIP未サポート orz

最近の安いルータはRIPとか入っていないのかな?さすがにRIPNGは期待していなかったが。

IPv6サポートも結局パススルーでフレッツv6使えますよだけだしなぁ。まあv6ルータあったとしてもそんな設定をするわけでもないのだが。あればあったで使い道はいくらでもある。

設定

さすがに設定は楽である。一番最初だけは直結して設定しなければならないと思っていたのだが、説明書によると線をつないでホームページを表示すればいいとのこと。

ホームページとは情けない用語だなと思いつつ適当につないで適当にブラウズしたら、なんと設定画面が出てきた。
どうも未設定状態で接続があると自動設定した後に設定画面に移行するようだ。ここまで簡単になったのね・・・

でもルータにせず単なるブリッジにしたいからどうせ設定変えないとなーといじっていたら、WAN側にDHCP鯖のいるLAN、LAN側に設定PCつなげてルータ自動(機器の物理的選択スイッチ)を選択したら、勝手にWAN側はDHCPクライアントに、LAN側はDHCPスルーでアドレス拾って動いていた。

なんとも便利な世の中になったもんである(しみじみ

携帯電話(N04B)はAOSSで、WEBカメラ(CS-W04G)はWPSで設定した。
無線LANは相変わらずごちゃごちゃ面倒なことをしてしまったのだが、AOSSはサーバクライアントせーのでぽちっとな、で終わってしまうようだ。
WPSを初めて使ったので悩んでしまったが、サーバかクライアントかで相手のpinコードを入力してぽちっとな、で良いようだ

最初に両方にお互いに設定してしまってハマった。結局最終的にどのやり方が良かったのかわからんままだがまあつながっているからいいとしよう。
DHCPリース期間過ぎたらちゃんと再取得してたみたいだし。

結局

明示的に設定したのはntpとsyslogサーバのアドレスぐらいでした。

面倒だからやらないけど、たぶん再初期化してntpとsyslogの設定、AOSSとWPSでクライアント登録したら現状と同じになる気がする。

OCN ipv6

去年書いた記事ですが、サイト移動につき再掲載。

ちゃんとしたIPv6アドレスが欲しくてOCN契約しました。

前はNGN(NTT西日本)のアドレスと6to4アドレスだったわけですが、
NGNのアドレスは外に出れないし、6to4はちょっとなぁ・・・
ということで。

Windows7上でOCN ipv6接続プログラムを動かせば問題なく動作することは確認しました。

問題はおうちサーバのdebianで使えるかどうかです。

ググれば設定例はたくさん出てきますが、一応やったことを。

# apt-get install xl2tpd wide-dhcpv6-client

/etc/xl2tpd/xl2tpd.conf

[global]
auth file = /etc/ppp/chap-secrets
[lac ocnipv6]
lns = 固定プレフィックス用接続サーバ名
hostname = 認証ID
ppp debug = no
pppoptfile = /etc/ppp/peers/ocnipv6
length bit = yes
require chap = yes
require authentication = yes
redial = yes
redial timeout = 10
max redials = 6

/etc/ppp/chap-secrets

認証ID * 認証パスワード *

/etc/ppp/peers/ocnipv6

nodefaultroute
noip
+ipv6
usepeerdns
user 認証ID
mtu 1390
noipdefault
default-asyncmap
nopcomp
noaccomp
noccp
novj
nobsdcomp
nodeflate
lcp-echo-interval 30
lcp-echo-failure 2
lock
noauth
unit 6
ipparam ocnipv6

ipv6のインタフェイス名はppp6に固定にしました。
/etc/ppp/ipv6-up.d/ などで切り分けたいときにどのパラメータを見るか悩んだのですが、
結局インタフェイス名を固定した方が楽そうだということでこうしました。

/etc/ppp/ipv6-up.d/00ipv6

case "$PPP_IFACE" in
ppp6)
/sbin/route -6 add ::/0 $PPP_IFACE
/etc/init.d/wide-dhcpv6-client restart
::
esac

最初、ppp6ができても通信ができない。なぜだー!となったのですが、
dhcp6clientでアドレスを取らないとダメっぽいです。
直にeth0に2001:ほげほげを付けて動かんーと悩んでました。
サーバーなので2001:xx:xx:xx::1にアドレス固定していたのですが、
dhcpで2001:xx:xx:xx:MACアドレスのアレ を取らないとあっち側にルーティングできないっぽいです

/etc/wide-dhcpv6/dhcp6c.conf

interface ppp6 {
    send ia-pd 0;
{
id-assoc pd 0 {
    prefix-interface eth0 {
        sla-id 1;
        sla-len 0;
    };
};

/etc/default/dhcp6c-client

INTERFACES="ppp6"

で、あとは xl2tp-control connect ocnipv6 で接続して動くようです。

こっちはいいんですが、非固定側が面倒・・・
また次回にでも。