January 30, 2012

CentOS6 における仮想マシンまわりのあれこれ

CentOS6になってKVMがデフォルトとなり,色々勝手がかわっているようなので,
目につくたびにちょこちょこ更新する.


仮想ブリッジの構築
virbrとかNATとかいらない(ことが私の環境では多い)ので,恒久的なブリッジを手で作ることにする.
まず,virbrを破棄
# virsh net-destroy default
# virsh net-autostart default --disable
次いで,NetworkManagerを止めてnetworkに戻す.(この辺はやりようが他にある気がするが…)
# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start
さらに,ブリッジ作成用にbridge-utilsを導入(普通は入っているかも)
# yum install bridge-utils
で,ようやくブリッジを作成する.ブリッジ名をbr0とする.ifcfg-br0を新規作成し,ifcfg-eth0を修正する.
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
HWADDR="9C:8E:99:7B:F4:93"
ONBOOT="yes"
BRIDGE=br0
注意事項として,上記の設定をするとホストマシンのゲートウェイデバイスはeth0ではなくbr0になる.
インターフェイス名を指定して設定してあるものは,eth0をbr0に書き換える必要がある.
このブリッジを仮想マシン構築時にネットワークデバイスとして指定すればよい.


仮想マシンのコピー
下記コマンドでコピーする.LVMで切り出した論理ボリュームをまるっと割り当てている.
# virt-clone --original master_vm --name copy_vm --file /dev/VolumeGroup/LogicalVolumeCopy
注意すべきはNIC.
原因がCentOS6由来なのかKVM由来なのか調べていないが,
ネットワークデバイス名がeth0->eth1となってしまう.
eth0が存在せずeth1があるのは気持ちが悪いので対処しておく.
コピー後に以下の手順で対処する.



  • 一度NICを消してVMを起動
  • そのままVM終了
  • NICを追加して起動

  • NICの消去・追加はGUIからだと楽ちん.
    直接いじりたい人は/etc/libvirt/qemu以下のファイルを編集
    全く別件をいじっていて気がついたのだけど、これってudev関係なので、
    仮想マシンのコピーの前に、/etc/udev/以下のルールでNIC関連のを消しておくだけでいいっぽい。

    January 5, 2012

    Arduino と W5200 ( WIZ820IO )を接続する


    追記(2012/03/24):
    なんか急にアクセスが増えてきたので、フォローをしておくと、
    http://avr.paslog.jp/article/2361305.html
    こんな話もあって、この対策を取ると安定する可能性がある。まだ試せてない。
    3.3V系のArduinoとつないで動かす場合に下記の問題が発生しない、という話もある。
    その辺をまとめて丸っと検証したいが時間がないなう。
    追記(2012/03/30)
    ココで検証はじめました。
    やっぱりなんか怪しい。
    ArduinoのOfficialEthernetShieldにはWizNet社の W5100 が採用されている。
    W5100のパッケージは0.4mmピッチのQFP80pinである。
    私は不器用なので基板を自作する際、0.4mmピッチは実に辛い。

    ところでW5100 はSPI接続とバス接続のいずれかが選択できるようになっているが、上記シールドではSPI接続を選択している。
    よって実はArduinoとW5100は高々7本のラインでしか接続していない。
    しかし0.4mm,80pinものハンダ付けを”強いられているんだ!!”

    これは不合理なので同社製の W5200 に乗り換えたい。
    こちらはW5100のSPI接続専用版で0.5mmピッチのQFN48pinである。(多少スペックが上がっていたりもする)
    QFNである点はイマイチだが0.5mmピッチになり、かつpin数も半分程度になる。
    ぜひW5200に乗り換えるべきである。

    さて、ここで問題になるのは2点。
    ・標準ライブラリこそがArduinoの売りであるためEthernetライブラリからはW5100と同等にみえなければならない
    ・動くか判らんうちから基板をおこすのは怠い

    まず後者を金で解決する。こことかここで評価用基板( WIZ820IO )がうっている。
    OfficialEthernetShieldと比べると半値以下だ。

    そして前者の解決策はここにある。
    そう、ベンダー自らArduinoでW5100と同様に使えるようライブラリを提供してくれているのだ。
    Downloadタブの中に"Library for Arduino + Ethernet ( IDE ver1.0 )"があるのでこれをDLして所定の位置に展開・上書きすれば良い。

    ただしこれを上書きしてしまうと、W5100へのアクセスが出来なくなりそう。
    W5100とW5200の切り替えが出来ると良いなぁ、とおもうのでそのうち手を入れて適当に公開することにしよう。

    というわけで、SPI系をまるっと接続したら即動いた。 拍子抜け過ぎる。
    写真の左、Etherのケーブルが刺さってるコネクタだけのように見えるのがWIZ820IOである。


    追記(2012/01/06):
    どうも挙動が安定しない。
    ExampleのWebServerをそのまま入れて、watchコマンドで5秒に一回取得してみると、1時間ぐらいで死んでしまう。こまった。
    オフィシャルの方でも実験してみて再現するならEthernetライブラリの問題。
    しないならW5200あるいは入れ替えたW5200用Ethernetライブラリの問題。


    追記(2012/01/06):
    W5100で同様の実験を行っているが、9時間異常なし。
    W5200あるいはW5200用Ethernetライブラリに問題があると見ていいんだろうなぁ。。。ガクリ。

    追記(2012/01/07):
    丸一日以上異常なし。
    W5100は安定しておる。