Not only is the Internet dead, it's starting to smell really bad.:2015年03月分

2015/03/27(Fri)

[チラシの裏] サーバ移行

@さくらのVPS + NetBSD

ここのチラシの裏、 さくらのVPS1Gプラン(HDD 100GB)だったんですが、ディスク容量余ってるしで SSD 30GB に変更しました。

以前から オレオレBSDのためにこのVPS上に継続的インテグレーションと自動テスト環境を動かしてたんですが、SSDにしたら build release にかかる時間が半分程度に短縮されますた。

この移行作業によって大阪リージョン(v3)から東京リージョン(v4)に変更になったんですが、最初にひいたインスタンスでは N のインストールが正常に終了した後

  • N6 … ブートローダーから論理ディスク(ld0)が見えずkernelを読み込めない
  • N7 … ブートローダーがそもそも起動しない
  • N HEAD … ブートローダーからら論理ディスクが見えるも kernelからは認識せず vfs_mountroot で失敗する

ちゅー問題でてしばし頭抱えました、 ググると結構大勢の人(世界で3人)がGRUBから起動したりして回避しとるようですな。

うちの場合は標準OS(CentOS 6)なら起動するけど、カスタムインストールから入れた Ubuntu も起動できない状態だったので GRUBで回避もできそうにないので諦めて一旦解約し別のインスタンス引いたら、さっきまでが嘘のように問題もなく試した全てのバージョンのNが起動するように。

よって問題があったらとりあえず当たりのインスタンスが出るまでガチャってみるのも、無駄な時間費やさないために試した方が良さげ。

@継続的インテグレーション(Continuous Integration)と自動テスト(Test Automation)

美味しいから大丈夫じゃない方の CI は日本だと Jenkins*1あたりが有名ですが、そもそも N は Java が微妙なので某所でお勧めされたこともあって Python 製の buildbotを導入しました、すでに pkgsrc にあるので

  • devel/py-buildbot
  • devel/py-buildbot-slave

をインストールして、設定は N の wiki にある Continuous NetBSD release building and testingでも読んでどうぞ。

難点は欧米のUIにありがちな異常な文字の小ささすかね、読めねぇしワイ眼精疲労から全身症状でるタイプなのでな…

そしてTAについては元々 N のソースツリーには ATFという自動テストフレームワークが統合されてるので

# cd /usr/tests
# atf-run | atf-report

とするだけでもいいんですが、テストをする前にはテスト対象のビルドをインストールする必要があるわけで、さすがに外部公開サーバでそれやるわけにもいかない訳です。

そこで役に立つのが Anitaです、QEMUあるいはXen上にNetBSDを仮想マシンとしてインストールしてさっきのATFを全て実行してくれます。

こいつもすでにpkgsrcにありますので

  • misc/py-anita
  • emulators/qemu0

を入れるだけ、あとは

# anita test /usr/obj.amd64/releasedir/amd64/

と、引数にリリースディレクトリ *2を指定して実行すれば、仮想マシンの作成とインストールそしてATFの実行を全自動でやってくれます。

テスト結果はXML/XSL+CSSで出力されます。

$ cd work-file----usr-obj.amd64-releasedir-amd64-+a4/tests/
$ ls
test.status         test.xml            tests-results.dtd
test.tps            tests-results.css   tests-results.xsl

ですがXMLなんざ扱いめんどくさいだけなので、バイナリ形式ログのtest.tpsを atf-report(1) に食わせればおk

$ atf-report < test.tps
...
Summary for 521 test programs:
    3055 passed test cases.
    4 failed test cases.
    44 expected failed test cases.
    69 skipped test cases.

@Apache やめました

深い意味はありません、ですがあの httpd.conf に飽きました。

twitterあたりで OpenBSD が 5.8 で relaydというロードバランサーをベースに独自で httpd を実装した*3という話が評判になってましたが、いつものごとく

the typical NetBSD style we did not document/advertise it.

の言葉通り、ドキュメントも書かないし宣伝もしませんが NetBSD にももっと昔から軽量な独自 httpd 実装は ありまぁす!

そら宣伝しないからねちかたないね、まぁ宣伝されてもsnprintfの返却値チェック漏れで情報漏洩やらかす( CVE-2014-5015)ような実装だと使う気にならんですけどね…

@nginx の導入

ということで bozohttpd はスルーして nginx を導入しました。

nginx を使う上での一番の難関は、ググる時にIMEオンにしたままだと「んぎ」に誤変換され、サジェストに「ンギモッヂイイ」が浮上することですかね。 これまでも nginx の名前の由来については「 片栗粉X」の女性版「 人参X」であるとの学説を提唱してきましたが、「ンギモッヂイイ○ックス」の略をこれから推していく所存。

次回は nginx の導入と設定についてメモ書き程度に何か書く予定。

*1:ヘイラッシャイの声が聴こえる人はテレホーダイ時代からの古参オッサン
*2:mk.conf の RELEASEDIR あるいは build.sh の -R で変更可能
*3:5.7 でこれまでの apache 1.3系の fork を捨てて nginx に置き換えたんだけどいろいろ本家とゴタゴタがあってわずか半年で捨てることになったそうで。