BHyVe hackathon やってきました

この土日、埼玉県某所でBHyVe Hackathon が開催されました。

BHyVe ? という方はこちらをご覧ください
http://www.slideshare.net/AsadaTakuya/bhyve


このスライド書いた id:syuu1228 に「腕の立つ若いの集めてくれ」って言われたので心当たりに声掛けたら主催者って事になったり。そのわりに重役出勤だったり。

事前の動作検証で VMware Player を使ったNested VMMでの動作を確認していたのでてっきりそれを使うもんだと思って何も準備していかなかったのですが、当日実機を渡されたので、初日は環境を構築するので終わりました。

二日目でのっけに配布されているイメージを起動させることは出来たのですが、とりあえず何をするにしても自前のゲストを動かせないと駄目だよねーと思ってダウンロードしてきたソースツリーからゲスト用カーネルを作ったら何故かこいつがログインプロンプトまでいきません。

あーでもないこーでもないと試行錯誤してるうちにどんどん日が陰ってきてしまい、結局bhyve がどんなものかって弄くってるだけで終わってしまいました。後で聞いたらみんな嵌ったみたいなので、きっとチェックアウトしたバージョンのソースが悪いに違いないとは思ったけれど、時間切れ。

合間合間に、こうやったらどうなるかな?という異常系の操作の話が参加者からポツポツ出てきていたので、その異常系の操作を検証したりもしていました。

たとえば、BHyVeゲストが稼働中に/dev/vmm/{vmname} を削除したら?→ホストがpanic します

とか。

具体的には、以下のコマンドを実行します

 # vmmctl --vm={vmname} --destroy


環境の構築は以下の手順書どおりに作業を行ったのですが

Building BHyVe HOWTO
http://d.hatena.ne.jp/syuu1228/20120625/1340655759

これでダウンロードしてくるゲストイメージには、起動用のシェルスクリプトが同梱されています。手順書の最後に言及されているvmrun.sh ですが、これはまず最初に何も考えずに上記のコマンドを実行します。

echo "Wait until 20 seconds after boot for networking to work"
/usr/sbin/vmmctl --vm=myguest --destroy; /usr/sbin/bhyveload -m 768 -M 2048 -h . myguest && /usr/sbin/bhyve -c 2 -m 768 -M 2048 -g 0 -P -H -s 1,virtio-net,tap0 -s 2,virtio-blk,diskdev myguest && sleep 20 && ifconfig tap0 up

ゲストを終了させてもカーネル内のゲスト定義が残ってて掃除してくれないためにこうしているのだと思いますが、同じ名前のゲストが走っていると、ホストがpanicします。ていうかやりました。てへぺろ

なのでpsで見て同じ名前のゲスト動かしてないかチェックするルーチンを追記しました。
同じ名前のゲストが動いてたら終了します。こんな感じ。
あ、ついでに引数とってその名前でゲスト作るようにもしました。

echo "Wait until 20 seconds after boot for networking to work"
if [ $1 ]; then
 GUEST=$1
else
GUEST="myguest"
fi

RET=`ps ax |grep bhyve|grep $GUEST|grep -v grep|wc -l `

if [ $RET -ne 0 ]; then
echo "$GUEST already run. exiting..."
exit
fi
/usr/sbin/vmmctl --vm=$GUEST --destroy;/usr/sbin/bhyveload -m 768 -M 2048 -h . $GUEST && /usr/sbin/bhyve -c 2 -m 768 -M 2048 -g 0 -P -H -s 1,virtio-net,tap0 -s 2,virtio-blk,diskdev $GUEST && sleep 20 && ifconfig tap0 up

結局成果といえるのはこれだけ。とほほ

Debian でgit-emailでGmail経由でメール送信する方法


5月に某社の勉強会でLKMLにパッチ投げた話を発表したんですが
発表資料: https://docs.google.com/presentation/d/1Z2bk68VIYslvY9FrouKaw4P3qpQMR4h7at8nhm6d-C4/edit

PC入れ替えて再び環境構築したので、資料に書かなかった事をまとめとこうかと。

ホストのArchだとなんかSSL周りがあやしくてGmail に繋ぐのがよく分からんかったのでDebianのゲストを作ってもっぱらそっちで作業なうなんですが。

当日聞かれた意見:

Q: Linuxカーネルコンパイル出来る環境って難しくないですか?
A: gcc があればいいです。他は何もいりません

カーネルは単体で動作するので、他のライブラリには依存してないんですよね。
必要なものはカーネルソースの中に全部入っててライブラリとかも自前で用意してあります。すごい。

必要なもの(パッケージ)

  • git-email
  • msmtp
  • ca-certificates
  • gcc
  • git

スーパー牛さんパワーでインストールします。

msmtpの環境設定

以下のURLを参考に、~/.msmtprc を作成します

http://d.hatena.ne.jp/janus_wel/20090120/1232481948

# Example for a user configuration file
# Set default values for all following accounts.
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
# My email service
account gmail
host smtp.gmail.com
port 587
from some.user.name@gmail.com
auth on
user some.user.name@gmail.com
password my-secret
# Set a default account
account default : gmail

from,user,password を自分のgmail アカウントに変更。しかるのち chmod 0600 ~/.msmtprc

git の環境設定

git-send-email はデフォルトではlocalhost で動作するSMTPサーバに接続しようとします。
最近のディストリビューションでは動いてない事が多いので嵌ります。嵌りましたてへぺろ

それをmsmtp に変更するには以下のコマンドを実行します。

git config --global sendemail.smtpserver /usr/bin/msmtp

すると、~/.gitconfig に以下の設定が追加されます。

[sendemail]
        smtpserver = /usr/bin/msmtp

後は適当にgit send-email --to 自分 とかやって自分にパッチを投げて
届けば成功です

スマホ

iPhone3GSの二年縛りが解けて速攻HTC J にしたのですが、それから2週間気がついたことをかいてみる。

よかった事

  • まず第一に速い。

さすがデュアルコア。サクサクです。
さすがauというかWiMAXが速い。

  • それから液晶がきれい。

これは周りにすごい言われます。いいなーって
自慢できますね

残念な事

  • 微妙にでかい

AKBみたいなアイドルがCMしてますが、女性の手には余ると思います。
男でも片手で操作するのはコツがいります。まだコツつかめてません

買った次の日にギックリ腰してしまって毎日整体行ってるんですが
うつ伏せ状態で片手で操作するのが難しくていらいらします。

  • メモリが少ない

メモリ1GBと聞いてこれにしたのに、システムだけで400MB以上使っているのでアプリが使える領域が少ない。
しかも表示されるのは800MBくらいしかないことになってます。
Android3.0のXOOMだと色々動かしても256MBも使わなかったのに。
ICSデブですね。3GとWiMAXのスタックでしょうか?

そこにauがアホみたいに常駐アプリインストールしまくるもんだから(ry
とりあえず片っ端から殺してメモリ確認したら半分消えてたのを見たときの残念さといったら…

  • 日本語変換が残念

デフォルトの残念さではことえりに匹敵します。選択肢があるからいいんですけど

全体的に

設定メニューの構成とかAndroidってなんとなくWindowsっぽいですね。

便利さを出したいのかメニューのショートカットが一杯あって雑然としていて全体像がつかみにくいです。
これはサポートの人大変だろうなぁ

Arch Linux でデフォルトのリポジトリにないパッケージを追加する

  • AUR のページからsearch する
  • AUR からtar ball をダウンロード
  • 展開
  • makepkg -s
  • pacman -U <出来上がったパッケージ>


参考

https://wiki.archlinux.org/index.php/Arch_User_Repository

Arch Linux でlibvirt サーバを作る

要求は以下

  • eth0 をホストとゲストで共有する
  • 外部からホストにもssh ログイン出来るようにする。

NIC共有の設定

$ more /etc/network.d/br0
INTERFACE="br0"
CONNECTION="bridge"
DESCRIPTION="bridge br0 static"
BRIDGE_INTERFACES="eth0"
IP='static'
ADDR='192.168.1.6'
GATEWAY='192.168.1.1'
DNS='192.168.1.1'
$ more conf.d/netcfg
NETWORKS=(br0)

## Specify the name of your wired interface for net-auto-wired
WIRED_INTERFACE="eth0"

## Specify the name of your wireless interface for net-auto-wireless
WIRELESS_INTERFACE="wlan0"

多分これで起動時にbr0 とeth0 がつながって、br0 に192.168.1.6が割り当てられる筈。
駄目なら /etc/rc.conf のDAEMON配列に net-profiles を追記。

RedHatlibvirtの文書読んだだけだと共有専用のインターフェースを用意しないとホストは外からつながらなくなるんじゃないかと思ってたんだけど(だから拡張できるマザーボード買ってきたのに)、ホストのsshdはこれでちゃんとbr0で待ち受けてくれるようです。内部どうなってるかよく分かってないけど

ゲスト側の設定

その1
virsh edit して、ネットワークを以下のように書き換える

    
      
      
      
      

その2

virt-install に以下のオプションを加える

 --network bridge=br0 

その3

virt-manager の新規ゲスト作成画面でネットワークの設定をブリッジbr0 にする


どれかやっとけば、DHCPで自宅内ネットワークのIPがもらえました。結構簡単ですな。
前はvirt-manager が作ったホストオンリーネットワークのアドレスしかもらえなくてWebサービスとか作るのめんどくさかったんですが、これで夢がひろがりんぐ