July 18, 2012

cron.d に置いた設定が反映されない件

/etc/cron.d以下においたファイルがどうも反映されてないっぽい。
なんでかなーとしらべていたら、
Files must conform to the same naming convention as used by run- parts(8): they must consist solely of upper- and lower-case letters, digits, underscores, and hyphens.
(cf. http://manpages.ubuntu.com/manpages/gutsy/en/man8/cron.8.html )
とのこと。あーなるほどですね。

June 9, 2012

Arduino における正確な ADC について

Arduinoにおいて、正確なADCを行うにはコツがいるようだ。
AVccの揺れを補償してやる必要がある。

http://hacking.majenko.co.uk/node/57
http://code.google.com/p/tinkerit/wiki/SecretVoltmeter
によると、
long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result; // Back-calculate AVcc in mV
  return result;
}
という関数を作って、
unsigned int ADCValue;
double Voltage;
double Vcc;

Vcc = readVcc()/1000.0;
ADCValue = analogRead(0);
Voltage = (ADCValue / 1024.0) * Vcc;
という形で、対処してやる必要があるようだ。

_BV()はビットシフトするマクロでREFS0,MUX3,MUX2,MUX1,ADSCは
arduino-1.0.1\hardware\tools\avr\avr\include\avr\iom328p.hに定義されている。


ADC周りのレジスタについては
http://www9.plala.or.jp/fsson/NewHP_elc/AVR/Avr_ADC.html
を参照のこと。

これを踏まえて、readVccにコメントを付けるとするなら、
long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);// ARefに1.1Vを出力し,基準電圧1.1Vをアナログ入力チャンネルに指定
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // 変換開始
  while (bit_is_set(ADCSRA,ADSC));// 変換完了待ち
  result = ADCL;// 変換結果取得(下位8bit)
  result |= ADCH<<8;// 変換結果取得(上位2bit)
  result = 1126400L / result; // 1126400 / ( 1024 * 1.1 / AVcc ) = AVcc*1000(mV)
  return result;
}
という感じか。

May 16, 2012

Windows7 における XBIB-U ( MaxStream PKG-U ) ドライバの導入

XBeeで遊びはじめたのだが、
XBee用USBアダプタであるXBIB-Uのドライバの導入で躓いたのでメモ。

XBIB-U-DEVはまったく問題なく標準USBシリアルドライバで対応できたので、面倒な人はXBIB-U-DEVを購入すべき。
標準USBシリアルドライバではXBIB-U ( MaxStream PKG-U )に対応できない。

FTDIにいって必要な物を入手する。
DLするのは ドライバそのもの(これを書いている時点では2.08.24)と、setup executable(これを書いている時点ではCDM20824_Setup.exe) 

ドライバをDL・展開し、出来たディレクトリをスペースが入らない名前にリネーム(この例ではXBIBDriverとする)してC:\直下に配置する(c:\XBIBDriver)。(このへんはスペースが入っている場合のcmdでのパス表記の仕方に理解がある人ならどうやったっていい) 

編集すべきはftdibus.infとftdiport.infの2つ。

 ftdibus.infは
[FtdiHw]セクションに
%USB\VID_0403&PID_EE18.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_EE18
を追加

[FtdiHw.NTamd64]セクションに
%USB\VID_0403&PID_EE18.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_EE18
を追加

[Strings]セクションに
USB\VID_0403&PID_EE18.DeviceDesc="MaxStream PKG-U"
を追加
ftdiport.infは
[FtdiHw]セクションに
%VID_0403&PID_EE18.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_EE18
を追加

[FtdiHw.NTamd64]セクションに
%VID_0403&PID_EE18.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_EE18
を追加

[Strings]セクションに
VID_0403&PID_EE18.DeviceDesc="USB Serial Port"
を追加

つぎにsetup executableを実行する。
これによって、C:\Users\%ユーザーネーム\AppData\Local\Temp以下に DPInstx64.exe が作成されるので、これをcmdから呼び出して上記で編集したinfをインストールする。
(ユーザーネームには自分のユーザーネームを入れる)

 cmd内で
c:\Users\ユーザーネーム\AppData\Local\Temp\DPInstx64.exe /PATH c:\XBIBDriver
としてインストールして終了。

参考:https://acs.is.nagoya-u.ac.jp/index.php?module=User&action=Diary&id=1010

May 14, 2012

Ubuntu12.04 の guest session を無効化する

guestでログインとか気持ち悪すぎるので、無効化する。 
/etc/lightdm/lightdm.confの[SeatDefaults]の最後に
allow-guest=false
を追記して再起動すれば良い。

May 2, 2012

Cisco IP Phone 7940G の SIP ファーム 化について

地味に面倒だったのでメモ。 

まず、dhcp,tftp環境を整える。
SELinuxは、あらかじめ例のあの方にごめんなさいをしてから、切っておく。
Firewallはudpの67,69が開いてれば大丈夫。
# yum install tftp-server
# yum install dhcp
# chkconfig xinetd on
# chkconfig dhcpd on

デフォルトではtftpは/etc/xinetd.d/tftp内の記述で殺されているので、
service tftp
{
 socket_type  = dgram
 protocol  = udp
 wait   = yes
 user   = root
 server   = /usr/sbin/in.tftpd
 server_args  = -s -v /var/lib/tftpboot
 disable   = no
 per_source  = 11
 cps   = 100 2
 flags   = IPv4
}
とでもして起動するようにしておく。
また-vオプションによって/var/log/messagesに詳細なログがはかれるようにしておく。

 dhcpは、/etc/dhcp/dhcpd.confを
ddns-update-style interim;
ignore client-updates;

option voip-tftp-servers code 150 = ip-address;
option voip-tftp-servers 192.168.1.1;

subnet 192.168.1.0 netmask 255.255.255.0 {

  option routers                  192.168.1.1;
  option subnet-mask              255.255.255.0;
  option nis-domain               "";
  option domain-name              "";
  option tftp-server-name         "192.168.1.1";


  range dynamic-bootp 192.168.1.200 192.168.1.250;
  default-lease-time 3600;
  max-lease-time 7200;
}
とでもしておけばよい。

/var/lib/tftpbootには、

Ciscoの提供するSIPファームのzipファイルに由来する

OS79XX.TXT
P003-8-12-00.sbn
P0S3-8-12-00.sb2
P003-8-12-00.bin
P0S3-8-12-00.loads

と、別途用意する

XMLDefault.cnf.xml
SIPDefault.cnf
SIPXXXXXXXXXXXX.cnf
XMLDefault.cnf.xml
dialplan.xml

を入れておけばよい。

後者の内容に関しては
http://www.junic.net/archives/325
を参照。
各項目の説明は
http://www.cisco.com/cisco/web/support/JP/docs/VAUC/IPTelep/SIPIPPhoneSW/AG/001/03_sipmn44.html?bid=0900e4b18252979a
http://www.cisco.com/cisco/web/support/JP/docs/VAUC/IPTelep/SIPIPPhoneSW/AG/001/02_sipins44.html?bid=0900e4b18252979a
を参照。

あとは、7940Gに電源とLANをつないで起動させれば、
勝手にファームを読みにきて、
勝手にファームを書き換えて、
起動してくれる。

Asteriskの設定で気をつけるべきはsip.confの[general]内で"nat = no"を宣言しておくこと。
これは、上記の7940Gに食わせた設定との整合のため。

7940Gの電源が地味に面倒である。
というのもIEEE 802.3af制定前のCiscoの独自規格のPoEを採用しているためである。
今回私はHPのProCurve 2600-PWRをつかった。
何の設定もなしに、一発給電!大変よい買い物であった。

April 16, 2012

スクリプトの存在するディレクトリを調べる

シェルスクリプトを書いていると、
「そのスクリプトが置かれているディレクトリをしりたい」
なんてことがままある。

そんな場合は、
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
とする。
非常に稀なケースとして、スクリプトが存在するディレクトリが消失している場合は、DIRが空になる。
DIRが空かどうかはチェックすべき。

これは.で読み込んだ場合でも正確に動作する。

shではエラーが出る。bashで実行すること。

出典:
http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in

April 9, 2012

Arduino と W5200 ( WIZ820IO )を接続する3

コレの続き。
W5200へのアクセステスト
34時間目にしてついにスタック!
n=3で2回スタックしたし、一週間も持たずにスタックするとかやっぱり信用出来ない。。。

W5200そのもの、あるいはWizNetのライブラリ、もしくはWebServerスケッチかなぁ?

WebServerスケッチとそれ以外の原因の切り分けのために
W5100搭載のEtherシールドをつけたやつも並行して実験しておこうかな。
結果:
W5200は約50時間(147,714回)でスタック!
リセットして再度実験して50分(2,939回)で再度スタック!
リセットして再度実験して4日と8時間(260,602回)で再度スタック!
リセットして再度実験して2日と20時間(181,085回)で再度スタック…
リセットして再度実験して6日と16時間(359,543回)で再度スタック……
リセットして再度実験して4日と10時間(262,735回)で再度スタック……
W5100は20日以上トラブル無く稼働中(854,712回)!
時間と回数が合わないのは1回が取得+1秒ウェイトである上に、
数十万個のファイルがスクリプトを回しているディレクトリ下に作成されていて、
そのあたりも原因っぽい。こんな長時間まわすと思ってなかった…

どうもWebServerスケッチではなく、W5200かW5200用ライブラリがおかしい。
そしてW5100は安定しておるように見える。

どっから手をつけたもんかなー。
W5200の個体差というか、ハズレ個体なのかもしれんので、
もう一個買ってみるかー。

追記:4/16
実験結果更新


追記:4/22
実験結果更新

April 7, 2012

CentOS6 における gitサーバ の構築

gitの管理系としてgitoliteを採用し、環境を構築する。 
まずは各種のインストール。
gitoliteは公式レポジトリにないので、EPELから取ってくる。
# yum install git
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
# yum install gitolite
これでgit及びgitoliteが導入された。
gitをホストするためにgitoliteという名前のユーザーがインストール時に作成されている。

注意すべきは、gitoliteアカウントがgitサーバにおけるすべてのレポジトリの所有者であり、
唯一必須のgitサーバのシステムアカウントである点である。
すべてのユーザーはgitoliteアカウントとしてgitサーバにアクセスすることになる。
各ユーザーはSSH公開鍵によって区別される。
このあたりがしばらく理解できなくて苦しんだ。

つぎにgitの管理ユーザーのための設定を行う。
gitoliteは管理情報をgitで管理するため、管理ユーザーすらgitサーバに、
(共用であるgitoliteアカウント以外には)システムアカウントを必要としない。

gitのクライアントとなる端末(サーバと同居してもいいが)のユーザーでsshの鍵を作り、
gitoliteが導入されているサーバにコピーしておく。
以下はクライアントでの作業
$ ssh-keygen -t dsa
これで、~/.ssh/id_dsaと~/.ssh/id_dsa.pubが出来ているはずである。

また、sshのコンフィグファイルを作っておくと便利である。
以下はクライアントでの作業
$ vim ~/.ssh/config
host gitserver #gitserverは適当に名前を変えてもよし
    user gitolite
    hostname 192.168.1.2 #gitserverのIPかDNSでひけるホスト名
    port 22
    identityfile ~/.ssh/id_dsa

id_dsa.pubをgitサーバにコピーし、/tmp/admin.pubなどにおいておく
(セットアップが終わったらいらなくなるのでtmpでよい) 
gitoliteは鍵の名前でユーザー名を管理することになるため注意。
(この例では管理ユーザーの名前はadminとなる)
以下はgitサーバでの作業
# chmod a+r /tmp/admin.pub 
# su -l gitolite
$ gl-setup /tmp/admin.pub
このあと設定ファイルをいじるためにvimが起動するが
ESC→:q→リターン
で抜ける。 

この時点で管理データレポジトリがたっており、あとはすべて外からgitを介して設定できる。



March 30, 2012

Arduino と W5200 ( WIZ820IO )を接続する2

ちょっとまえにこんなことをやっていた。
それの続き。

まずはおさらい。

Wiz820ioのピンアサインはこれ。














Wiz820ioとArduinoの接続は以下の表の7本。
Arduino Wiz820IO
3.3V VIM3.3
GND GND
RESET nRESET
D10 nSS
D11 MOSI
D12 MISO
D13 SCLK













入手はココ
ソフトのArduino1.0用ライブラリのDLはココ

で、前回は接続してライブラリが動く、ところまで確認した。
課題として残っていたのは、
「Wiz820ioに負荷をかけると一時間程度で死んでしまう」という点だった。
今回はこれを解決する。

解決の糸口としては、
「ライブラリに問題があるんじゃね? by マイコン風雲録さん」
が有力な気がするので、ここから手を付ける。

まず、素のW5200ライブラリだとどんな感じなのか、もう少し詳しくチェックする。
ExamplesのWebServerをロードして、Linuxから
$ watch --interval=1 wget 192.168.1.177
で一秒に一回データを取りに行き続けることで負荷をかける。

結果:
12時間ぶっ続けで負荷をかけても異常なし。
あれ????
1月にやった時は確かに不安定だったんだけどな????
前回、今回の差分とすれば、母艦がWindowsかLinuxか、という点と気温ぐらいしか…
(Arduinoは1.0のままだし、WizNetもライブラリの更新とかしてない、タイムスタンプ的には。)
Linuxに切り替えるのも面倒だし、気温依存とか考えたくもないな…

よし。あれは気のせいだった!「勝ったッ!第3部完!」
いや、えー…気のせいじゃないと思うんだけどなぁ…

諦めきれずArduinoへの電源供給をACアダプタに切り替えて、再度実験したところ、
3時間弱、10630回アクセスした所でスタックした!!!!
おー。ACアダプタがキーなのかはわからんが、ともかく不具合は再現するな。
よーしよしよし。イイコだ。不安定だな!!!!

さすがにn=2で何かを語るのもあれなので、
そのまま、もう一回トライ。
おおおお、24時間たっても異常なし。

一番面倒なタイプの障害っぽい雰囲気。なんだこれ。。。
商用電源が揺らいだ、とかそういうのかなぁ?一応実験施設なので電源は安定してると思うんだが。

これ、シリアルコンソールつないでエラーだしておくと詳細分かる可能性があるな。
あと、W5200のresetをAVRのデジタルIOにつないでおいて、
スタックした場合にW5200のみリセットして初期化、とかそういうので切り分けてみようかな。

(追記:4/2)
とりあえず、34時間でスタックしたので、やっぱW5200だめっぽい。
特定個体の問題である可能性もあるので、もう一個買ってみよう。
というか、W5200ってリビジョン変わったりしてるんだろうか?

(追記:4/9)
とりあえず、W5100とならべて、10日ぐらいテストしてる。
http://mogtechblog.blogspot.jp/2012/04/arduino-w5200-wiz820io-3.html
もりもりW5200が固まるので難儀している。
ハズレ個体かもしれないので、他に買ってみるかなー。
なにか情報ないもんかなぁ。。。

March 24, 2012

2TB以上のHDDに CentOS6.2 をインストールする

2TB以上のディスクにCentOSなりRHELをインストールするにはひと手間いるので、メモ。

普通にDVDをいれて起動、GUI画面まではいつもどおり。
GUI画面でCtrl+Alt+F2でCUIに移行
# parted /dev/sda #sdaはインストールしたいディスク
(parted) mklabel gpt
(parted) quit
# 
としてpartedでgptに設定をし直し、partedを抜ける。
その後Ctrl+Alt+F6でGUIに復帰

あとはディスクの設定時に「すべての領域を使用する」を選ばず、カスタム設定を選ぶこと。

以上

参考:
http://godwood.allnet.ne.jp/vioret/d/?date=20110815

ML110 G7 の HP Smart アレイ B110i SATA RAIDコントローラ で作ったRAIDに CentOS6.2 を導入する

ちょっと実験したいことがあったので、
ML110G7のB110iでRAID0を作ってCentOS6.2を導入してみた。
結構めんどいので手順を残しておく。

USBメモリとネットにつながる別のLinuxマシンが別途必要なので用意しておくこと。 

まず、HPから"Driver Diskette"をDLしてくる。
Driverじゃないことに注意。
Driverはrpmで提供されるが、DriverDisketteはディスクイメージをgzで固めたものが提供される。
この記事を書いている時点での最新版はココ

DLしたらUSBメモリをアンマウントしてから
$ gunzip hpahcisr-1.2.6-11.rhel6u1.x86_64.dd.gz
$ sudo dd if=hpahcisr-1.2.6-11.rhel6u1.x86_64.dd of=/dev/sdb #sdbはUSBメモリ
としておく。

次にML110G7のB110iの設定を行う。
・POST画面でF9を押してRBSUに入って、Advanced Optionを選択
・SATA ConfigurationでRAIDを選択
・RBSUをぬけて、再起動
・POST画面でF8を押してORCAに入ってCreate RAIDで各種設定
・ORCAをぬける
でB110iの設定は終了。今回は2TBのHDDを2玉、RAID0にして4TBとした。

用意したUSBメモリを起動前のML110G7に挿す。
CentOS6.2のインストールディスクをつかってML110G7を起動。

Grubの起動画面っぽいところでESCを押しboot:プロンプトを出す。
boot: linux dd blacklist=ahci
として、ドライバを導入させる。ahciを殺さないとHDDが個別に認識されてしまう。
導入が済むと、さらに他のドライバを導入するかを聞かれるのでNoで先に進む。

あとは普通にグラフィカルなインストール画面に戻る。

RHEL5.7以降(6を含む)ならば、これだけで問題ないはず。

参考:
http://ml110.web.fc2.com/
http://h50146.www5.hp.com/products/software/oe/linux/mainstream/product/hardware/option/array/b110i.html

ML110 G7 を開けてみた

実験用にML110G7を購入した。
HDDの換装のためケースを開けてみて、G6からの変化にビビったのでレポート。

まずはG6の中身をおさらい。



















といった感じで見た目は普通のPCと同じでかなり質素。
iLOとかついていて痒いところに手が届くし、
PCIe x16とかも普通につかえて、ATXの電源をのせかえればGPGPUとかの実験にも使える。
激安”パソコン”風サーバでした。

一方、G7は、















と、ミドルクラスサーバっぽい雰囲気に!

細かくみていくと…
















ファンが前部に追加&メンテナンス性が向上してたり、




















サイドパネルやHDDへのアクセスを制限する鍵がついたり、




















HDDがトレイ式にかわってたり、




















それにあわせて、ストレージ用にバックプレーンがついてmini-SAS式になったりしてます。

また、G6には内部にUSBのポートがありましたが、
G7では内部USBポートは廃止され、SDカードスロットが追加されています。





















機能面でもiLO3の搭載をはじめいろいろ近代化していて面白いです。
一番試したかった機能はML110G7では無理なようでしょんぼりですが…

というわけで、
安さを追求した質素なG6、
エントリークラスの”サーバ”であるという主張をうるさいぐらいにしてくるG7、
と言った感じ。

これなら電源の冗長化までオプションに入れちゃってもよかったんじゃないかなぁ?
BTOオプションで対応してるみたい。総額4万追加すると460Wの冗長化電源に対応。
これで「パワーもメモリもいらないけど、物理サーバがほしいな」という案件には十分対応可能になった。すごい!
でも、HPのストアで買うとやっぱり高いのよね…

G6ほどの安さはもはや望めないのでどうしたものかなーと。ぐぬぬ。
とおもっていたら、2台で2万みたいなキャンペーンしててワロタwwwww
NTT-Xストアの在庫も△になってるしそろそろモデルチェンジ?ML110 G8も出たら買うよ!

March 20, 2012

MACアドレスの申請・取得について(IABタイプ)

仕事で"とあるネットワーク機器"を販売することになり、MACアドレスの申請・取得を行った。
その手順をまとめておく。

まずIEEEの登録関係のTOPから IAB関連ページに飛ぶ。

つぎに、申請フォームに移動する。

一番上の設問にAgreeした後は、順に記入していく。
Part1では申請者の情報、Part2では管理者の情報、を記入する。

Part3では、
・今回が初めての申請か否か
・初めてでないならば何故追加の申請をするのか
・親会社か子会社か
を記入する。
親会社でも子会社でないならばPart4は飛ばして良い。


Part5では、今回の申請内容を秘密にするか否か、秘密にする場合はその理由を記入する。
秘密にする場合は初回及び年毎に手数料が発生する。年間1000$とかで結構高い。
試作機等をフィールドテストする場合等、
MACアドレスと会社名を結び付けたくない場合に利用するようだ。

Part6では、支払い方法等を記入する。 今回はクレジットカードで決済する。

クレジットカードでの支払いの場合のフォームは普通に埋めてOK

すべてが終わると、こんな味気ないメッセージが出る。

人手で審査しているようなので即発行というわけではない。
しばらく待っていると、メールに添付される形で
割り当てられたMACアドレスの範囲が書かれたPDFが送らえてる。

なんら詰まること無く、さらっと終わってしまった。
なんというか、拍子抜けではある。
しかしコレで堂々と使えるMACアドレスが手に入った。 

たかだか625$で4096個のMACアドレスが使えるようになるので、
今回のように"ネットワーク機器を販売する"といった場合以外にも、
"VMを納品したい"みたいな時にもつかえるかも? 

ちなみにIABのMACアドレス単価は15¢程度だがOUIでとったら0.01¢位になる。
それはそうと、IABではなくOUI-36でとればよかったかなー。
なんでIABを選んだのかすでに覚えていない。

March 8, 2012

Express5800/GT110d に Ubuntu10.04 TLSを導入する

DVDから普通に導入したらどうもNICを認識していない。
Ubuntuにしては大変珍しい、という印象。
BCM5718用のドライバをBroadcomから取ってきて導入する。

ここからリンクをたどってDLする。
この記事を書いてる時点では、2012年1月末リリースの3.122gが最新の様子。
適当にDLして~/local/srcにでも置いておく。
$ cd ~/local/src
$ unzip linux-3.122g.zip
$ cd ./Server/Linux/Driver
$ tar zxvf tg3-3.122g.tar.gz
$ cd tg3-3.122g/
$ make
$ sudo make install
$ sudo modprobe -r tg3
$ sudo modprobe tg3
これで認識されるようになる。

Kernelをアップデートするたびにコンパイルして入れ直しなので注意。
これどうやったらやらなくて良くなるんだっけ。。。?
DKMSとか使えばいいの?ゲロめんどい。

February 17, 2012

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は安定しておる。