2011年2月18日金曜日

domU(仮想マシン)がネットワークに接続できない

Xen Cloud Platform上で作成したCentOSの仮想マシン(domU)から外部ネットワークに接続しようとしたところ、pingが通らない。XCP(dom0)上から外部ネットワークには正常に疎通しているが、XCPから仮想マシンへは疎通しない。
Googleで検索し、こちらのサイトを参考に修正した。

まず、# ip route showを実行。
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.0
デフォルトルートが登録されていない。そこで、以下のコマンドを実行。
# ip route add default via 192.168.0.1 dev eth0
すると、以下のとおりデフォルトルートが登録され、仮想マシンから疎通できるようになった。
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.0
0.0.0.0 via 192.168.0.1 dev eth0

2011年2月8日火曜日

Xen Cloud Platform 1.0 betaへOpen vSwitch 1.1.0pre2をインストール

Xen Cloud Platform 1.0 betaが昨年11月に公開された。
http://www.xen.org/files/XenCloud/Software/xcp-1.0-beta/
MANIFESTをみると、Open vSwitch 1.0.2がインストールされている模様なので早速インストール。インストール自体はこれまでのバージョン同様得の問題なし。
ただし、DDKが提供されていないためOpen vSwitch 1.1.0pre2をインストールすることはできない。XCP1.0正式版を待たないといけないのだろうか。

2011年2月7日月曜日

Xen Cloud Platformで帯域制御

Open vSwitchを用いて制御する場合、sch_ingressモジュールが必要となる。
デフォルトのXCPではsch_ingressがカーネルで有効化されていないため、カーネルを再構築してsch_ingressを有効化する。XCPでは、DDK上でカーネルのRPMを作成し、dom0にインストールする。

1Mbpsに帯域制御するためのコマンドは以下のとおり。
(参考URL:http://openvswitch.org/?page_id=267

# ovs-vsctl set Interface tap1.0 ingress_policing_rate=1000
# ovs-vsctl set Interface tap1.0 ingress_policing_burst=100

これで送信レートが制限される。
設定するtapは、対応するvifから判断する。vifとXCP上のvif-idとの対応はovs-vsctl list interfaceを実行し、external_idsの項目から判断する。

帯域制御を解除する場合には、上記のコマンドを用いて0で上書きする。

2011年1月23日日曜日

XCP DDKのディスクサイズ変更

Xen Cloud Platform(XCP)のdomain0に対してドライバの導入等でコンパイルが必要なとき、domain0とは別に、DDKという開発環境が提供されている。しかし、このDDKはディスク領域が2GBしかなく、すぐに容量不足になってしまう。
XCP環境で仮想マシンのディスク領域を増加させる方法は以下のURLが参考となった。
http://support.citrix.com/article/CTX127096

2011年1月20日木曜日

Xen Cloud PlatformへBrocade CNAのドライバインストール

DCB(DataCenter Bridging)の試験用に購入したサーバにXCPをインストールしていたため、XCPのdomain0へBrocade CNA (Brocade 1010)のドライバのインストールを行った。
今回XCP0.5上にインストールを行ったが、おそらくCitrix XenServer5.6でも同様の手順でいけると思われる。

まずは公式サイトよりドライバファイルをダウンロード。XCPのdomain0にはX環境がないため、All DistributionではなくDriver Packagesから、Other Distributionsのファイルを選択。"Other Distributions"といいながら、提供されているファイルはRPMであるため、RPMが扱えるディストリビューションの必要がある。
ダウンロードしたファイルを展開し、実行ファイル(brocade_install.sh)を実行すると、
[root@localhost ~]# bash brocade_install.sh
Installing the Brocade driver 2.3.0.0 RPM's
ERROR: Install failure: no gcc and kernel-xen-devel-2.6.27.42 rpm
というエラーに。どうやらgccとkernel-xen-develのRPMパッケージが必要な模様。
とりあえず個別にRPMをインストールしようとすると、bfa_util_linuxのみ成功。
bfa_driver_linuxとbna_driver_linuxでgccとカーネルソースが必要らしい。
XCP環境ではdomain0ではなく、DDKにてgccやkernelソース等が提供されているため、早速DDK上でbfa_driver_linuxとbna_driver_linuxをインストール。DDKの利用方法はこちらのエントリを参照。
bfa_driver_linuxとbna_driver_linuxで追加されたモジュールは
  • /lib/modules/2.6.27.42-0.1.1.xs0.5.0.47.111160xen/kernel/drivers/net/bna.ko
  • /lib/modules/2.6.27.42-0.1.1.xs0.5.0.47.111160xen/kernel/drivers/net/bfaipfc.ko
  • /lib/modules/2.6.27.42-0.1.1.xs0.5.0.47.111160xen/kernel/drivers/scsi/bfa.ko
の3つであるため、これらをdomain0にコピーし、insmodにてインストールし、再起動したところ、新たにeth2というインタフェースを正しく認識した。ethtoolを実行した結果は以下のとおり。
[root@localhost ~]# ethtool eth2
Settings for eth2:
Supported ports: [ FIBRE ]
Supported link modes: 10000baseT/Full
Supports auto-negotiation: No
Advertised link modes: 10000baseT/Full
Advertised auto-negotiation: No
Speed: Unknown!
Duplex: Unknown! (255)
Port: FIBRE
PHYAD: 0
Transceiver: external
Auto-negotiation: off
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000004 (4)
Link detected: no
サポートするリンクが10GbEで認識されている。

正しくない手順ではあるが、とりあえずXCP上でDCBを利用できるようになりそう。

2010年9月24日金曜日

OSGi環境におけるgetResourceAsStream

OSGi環境では、あるバンドルに含まれるリソースのURLを取得(getURL)すると、正しくImport/Exportの設定がされていれば
bundle://11.0:1/jp/sample/service/resources/jaxb.index
のようなURLで表現される。
したがって、他のバンドルからリソースにアクセスしようとした場合でも、Import/Exportの設定さえ正しければ取得することができる。

OSGi環境におけるLinkageError

OSGi環境でWebサービスを構築している際、以下のようなエラーメッセージが発生した。
java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "javax/xml/namespace/QName"
JDKで提供されているはずのjavax.xml.namespace.QNameが異なる??
googleで調べてみると、以下のような解説を発見。
http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html
JDKで提供されているようなクラスであっても、ライブラリ?(OSGiの場合はバンドル)ごとに参照先が異なると発生しうる現象のよう。
で、自分の環境をよくよくみてみると、ひとつのバンドルのPrivate-Packageにjavax.xml.namespaceを含んでしまっていることが判明。これをImport-Packageに変更することで解決された。