Xen with X Windowでのネットワークトラブル解決

今日の記述量が異常ですね、はい。

でまあ、X WindowいれてからなんかXenのネットワークまわりが変になったって話をしましたが、やっぱり気のせいだったっていうことになりましたが、やっぱり間違ってなかったです。

network-manager

こいつが邪魔してた。
ということで、

# mv /etc/init.d/network-manager /etc/init.d/network-manager.bak
# update-rc.d network-manager remove

ということで。

before

# ping google.com
PING google.com (74.125.45.100) 56(84) bytes of data.
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=3 ttl=49 time=162 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=8 ttl=49 time=162 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=13 ttl=49 time=160 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=18 ttl=49 time=160 ms
^C
— google.com ping statistics —
18 packets transmitted, 4 received, 77% packet loss, time 17023ms
rtt min/avg/max/mdev = 160.291/161.358/162.100/0.825 ms

after

# ping google.com
PING google.com (209.85.171.100) 56(84) bytes of data.
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=1 ttl=241 time=96.5 ms
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=2 ttl=241 time=95.3 ms
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=3 ttl=241 time=95.8 ms
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=4 ttl=241 time=95.2 ms
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=5 ttl=241 time=96.1 ms
64 bytes from cg-in-f100.google.com (209.85.171.100): icmp_seq=6 ttl=241 time=95.5 ms
^C
— google.com ping statistics —
6 packets transmitted, 6 received, 0% packet loss, time 5029ms

network-managerとかデスクトップ環境として普通に使ってても邪魔よね。
/etc/resolv.conf勝手に書き換えたりするし、/etc/network/interfacesの設定変えても反映させてくれないし。

DHCPでDNSもゲートウェイな人だと問題ないのかなぁ。
うちだと固定IPでDNSもサーバ自身みてるからなー。

xen with X Windowでネットワークが動かない件の続き

X Windowを起動したら動かなくなるのかと思ったら、どうやらそうではない模様。
システム起動直後は動くのだが、しばらくするとネットワークがしぬ。
ゲートウェイまでたどり着くのに、そこから外へ出られないっていう。

ifconfig -a してみたら見知らぬpan0とかいうのが生まれていた。
なんだこいつ?
brctl showでみてみるとどうやらブリッジらしい。
起動時のmessagesを眺めてみると、どうやらbluetooth関連らしい。
起動しないようにしてみる。

# mv bluetooth bluetooth.bak
# mv avahi-daemon avahi-daemon.bak
# update-rc.d avahi-daemon remove
# update-rc.d bluetooth remove

avahiも使わないからついでにけした。
でまあそれでも解決しないわけで、関係しそうなところのログを眺める。

[   16.353018] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   16.378871] e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   16.379252] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   27.049312] eth0: no IPv6 routers present
[   55.719604] Bridge firewalling registered
[   55.721531] tmpbridge: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature.
[   56.149371] ADDRCONF(NETDEV_UP): peth0: link is not ready
[   59.789671] e1000: peth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   59.810070] ADDRCONF(NETDEV_CHANGE): peth0: link becomes ready
[   60.225660] device peth0 entered promiscuous mode
[   62.767713] eth0: port 1(peth0) entering learning state
[   62.771833] eth0: topology change detected, propagating
[   62.771894] eth0: port 1(peth0) entering forwarding state

tmpbridge: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature.
この辺が怪しい。

調べてみると、NETIF_F_HW_CSUMってのはハードウェアチェックサムのことらしい。
でまあ、さらにそれらしい回答が漸く見つかった。

"This means that for some reason the UFO flag has been enabled
on the bridge device without also enabling TX checksum offload.
This is an illegal configuration which is why the kernel warns
about it.  As to why the UFO flag is set at all more investigation
is needed on the actual machine.

However, this is harmless as UFO isn't supported by Xen anyway."

とりあえず、要するに気にするなってことなんだが、人によってはそのままでも動くって人もいるし、人によってはネットワークにつながらないという。
とりあえず、ネットワークをリスタートしたら動くって人もいたのでやってみた。
動いた。
死ぬほどパケロスしてるんですけど。

# ping google.com
PING google.com (74.125.45.100) 56(84) bytes of data.
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=3 ttl=49 time=162 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=8 ttl=49 time=162 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=13 ttl=49 time=160 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=18 ttl=49 time=160 ms
^C
— google.com ping statistics —
18 packets transmitted, 4 received, 77% packet loss, time 17023ms
rtt min/avg/max/mdev = 160.291/161.358/162.100/0.825 ms

どうもこれはxenが元々抱えている問題なようだ。
Xとは関係なさそう。
たまたまXインストールしたタイミングと問題発生したのがかぶっただけのようだ。
bugzillaには登録されているようなので直してくれるのを待とう。

update-initramfsで警告が出る件

最近、update-initramfsが走るとこんなメッセージがでる。

dpkg: warning: obsolete option ‘–print-installation-architecture’, please use ‘–print-architecture’ instead.

どうもdpkgではobsoleteになったオプションを使用しているようだ。
/usr/sbin/initramfsの144行目を

#DPKG_ARCH=`dpkg --print-installation-architecture`
DPKG_ARCH=`dpkg --print-architecture`

に変更。

/usr/share/initramfs-tools/hook-functionsの476行目を

#               DPKG_ARCH=$(dpkg --print-installation-architecture)
                DPKG_ARCH=$(dpkg --print-architecture)

に変更。

そのあと

# update-initramfs -k all -u

とか叩くと幸せになれる。

ああ、debian/sidででます。
lennyだとdpkgのバージョンがまだ古いから出ないんじゃないだろうか。

xenカーネルでX Windowが起動しない件

Xの設定でビデオカードのドライバをvesaに変更したらいけた。

# vi /etc/X11/xorg.conf

Section “Device”
Identifier    “Configured Video Device”
Driver    “vesa”
EndSection

これでとりあえずxenカーネルでもXは起動したんだけども、やはりXを起動するとネットワークがばぐって動かなくなる。
調査引き続き継続。

x windowをデフォルトで起動しない

グラフィカルログインがデフォルトになっていると、ログアウトしてもXのログイン画面に戻って来てしまう。
Xのプロセスをkillしてもやっぱりそう。
で、なんかないかと探したら、あった。

# /etc/init.d/gdm stop

これでXが停止した。
GNOMEだからこれなんだろうけど他のウィンドウマネージャ使ってると違うんだろうな。
起動はご存知の通りstartx。

でまあ、普段は使う予定がないので、デフォルトではXを起動しないようにする。

# mv /etc/init.d/gdm /etc/init.d/gdm.bak
# update-rc.d gdm remove

これでOK。

X Windowいれたった

xenの設定がどうにもうまくいかないので、あったまきたのでX入れてGUIでやってやろうと思った。
そこで

# aptitude install gnome

もりもりたくさんパッケージが追加。
で。

お決まりのネットワーク不具合。

インターフェイスはあるように見えるがなんかうまく動かない。
ゲートウェイまでたどり着けるけどそこから先にいけない。
/etc/resolv.confがかきかえられてたのを見つけて直したけどやっぱだめ。
意味分からんと思いつつxenカーネルじゃなくて普通のカーネルを立ち上げたらさっくりつながった。

でもそれまったく意味ないし。

もういやです。

xenで完全仮想化(挫折)

xenで準仮想化で32bit環境をつくったはいいんだけども、肝心のUSBのワイヤレスNICが認識されない。
設定を調べてみるとPCIデバイスの認識の設定はみつかったんだけど、USBは見当たらない。
しかたがないので、完全仮想化で入れてみようと思った次第。

ところが、debianには完全仮想化についてのドキュメントがデフォルトだとさっぱり見当たらない。
xen-create-imageは完全仮想化に対するオプションを持っていない模様。
いろいろとぐぐって雛形的なものを発見したので、それを元に設定することに。

まず、ディスクイメージを作成する。

# dd if=/dev/zero of=disk_img bs=1024k count=2048
# dd if=/dev/zero of=swap_img bs=1024k count=512
# mke2fs -t ext3 disk_img
# mkswap swap_img

で、こんな設定ファイルを作成。

kernel=’/usr/lib/xen-3.2-1/boot/hvmloader’
builder=’hvm’
device_model=’/usr/lib/xen-3.2-1/bin/qemu-dm’
boot=’cda’
vnc=1
localtime=1
#keymap=ja
usb=1

memory      = ‘128’

#
#  Disk device(s).
#
root        = ‘/dev/hda2 ro’
disk        = [
‘file:/home/xen/domains/i386hvm/disk.img,hda2,w’,
‘file:/home/xen/domains/i386hvm/swap.img,hda1,w’,
‘phy:/dev/cdrom,hdc:cdrom,r’
]

#
#  Physical volumes
#

#
#  Hostname
#
name        = ‘i386hvm’

#
#  Networking
#
#vif         = [ ‘ip=192.168.1.100,mac=00:16:3E:FE:83:92,bridge=eth0′ ]
vif         = [ ‘mac=00:16:3E:FE:83:93′ ]

#
#  Behaviour
#
on_poweroff = ‘destroy’
on_reboot   = ‘restart’
on_crash    = ‘restart’

インストーライメージを持ってきてつっこむ。

# wget http://cdimage.debian.org/debian-cd/5.0.1/multi-arch/iso-cd/debian-501-amd64-i386-powerpc-netinst.iso
# xm create i386hvm.cfg boot=d

ここでつまづいた。
インストール画面を出さなきゃ話が進まないんだが、コンソール接続もVNC接続もできない。
netstatはじいてみても5900番台のポートにバインドしている様子もなく、画面が出せないのでインストールができない。
そこでごちゃごちゃ調べたんだけども、virtinstというパッケージを発見。
RedHat、CentOSなんかはこれがデフォルトのxenのマネージをするやつらしい。
ということでインストールして実行。

# aptitude install virtinst
# virt-install

こけた。

libvirt error: unable to connect to ‘localhost:8000′: connection refused (code=38)

RHELのサイトに答えがあった。

xend-port Determines the port that the http management server uses(defaults 8000)

どうやらxendのhttpを使っているらしいので、xend-config.sxpを開いて(xend-http-server yes)を設定してxendを再起動。
再びvirt-installを叩いたがまたこけた。

ERROR    A name is required for the virtual machine.

RHELやCentだとインタラクティブにやってくれるのに、debianの子はインタラクティブにはやってくれないらしい。
しかたがないので引数をずらずらつなげてやることに。

# virt-install -n i386hvm -r 128 –arch=i386 –os-type=linux –os-variant=debianlenny -v –accelerate -c /home/xen/debian-501-amd64-i386-powerpc-netinst.iso –disk path=/home/xen/domains/i386hvm/disk.img,path=/home/xen/domains/i386hvm/swap.img -w bridge:eth0 –vnc –vncport=5900
ERROR    Host does not support virtualization type ‘hvm’ for arch ‘i386′

。。。なんだと。。。
amd64とかやっても怒られるので、仕方なくarchオプション消してやってみたら今度はdiskで怒られたからswap.imgの指定もけした。
一応createはしりはじめたようだが、コンソール接続できず、VNCもやっぱりつながらない。

。。。今日のところはこのくらいにしておいてやる。

64bit環境のdomain0に32bitのdomainUをのせる

xenのドメインUのカーネルはドメイン0のファイルシステムからフルパスで指定する。
そのため、ドメイン0がamd64で運用されていると、ドメインUのカーネルもamd64になってしまう。
ドメインUを32bit環境にしたい場合、まず、ドメインUを作成する時、xen-create-imageで–arch i386を指定する。
/etc/xen-tools/xen-tools.confでarch=i386を指定してもいい。

作成したらドメインを起動・接続し、32bitカーネルをインストールする。

# xm create -c i386.cfg

Debian GNU/Linux 5.0 i386 hvc0

i386 login: root

i386:~# aptitude install linux-image-2.6.26-2-xen-686
i386:~# shutdown -h now

一旦ドメインを停止して、ディスクイメージをローカルにマウントして、適当なところにつっこむ。

# mount -o loop /home/xen/domains/i386/disk.img /mnt/xen/i386/
# cp -pr /mnt/xen/i386/boot /home/xen/domains/i386

ドメインUで使うカーネルを変更する。

# vi /etc/xen/i386.cfg

kernel      = ‘/home/xen/domains/i386/boot/vmlinuz-2.6.26-2-xen-686′
ramdisk     = ‘/home/xen/domains/i386/boot/initrd.img-2.6.26-2-xen-686′

これで起動すると完全な32bit空間ができあがる。

ところでこれ、ドメインUのカーネルがアップデートされるたびにやらなきゃいけないんだけど、もっといい方法ないものかね。