雑記帳

ちょっとした文章とかメモ書きとか。

カテゴリーアーカイブ: Windows

MroongaのWindows向けビルド

Groongaアドベントカレンダー22日目の記事です。

はじめに

MroongaはWindows向けにも提供されています。MroongaのWindows向けビルドはすんなりいく時もあれば、MaroaDBにバグ報告をしないといけない時も有ります。

Groongaの開発MLにMroongaのWindows向けビルドの協力者を募るメールにやってみたいです。と返信したのが始まりでした。

自動化を考える

Windowsに於いて、自動化を考える時にまず最初に思いつくのはRubyまたはPythonのようなLLを使う事です。これならば普段使い慣れているLinux上で動かしながらWindows固有の部分だけWindowsで動かして開発する事ができます。

しかし、自動化をするに当たって選択したのはPowerShellでした。

PowerShellはWindows7以降であれば標準で2.0以上がインストールされています。
自動化を考える要件として、なるべくOS標準のものを使い、追加でインストールを要求しないという要件がありました。PowerShellはまさにそれに合致していたのです。

自動化の要件

Mroongaのインストール自動化に必要なものは次の通りです。

  • Mroongaのzipパッケージをダウンロードする。
  • ダウンロードしたMroongaのパッケージをunzipする。
  • ビルドバッチが仮定する位置にソースを配置する
  • Mroongaが提供するビルドバッチを実行する
  • ビルドバッチが固めたzipを再度unzipする
  • unzipしたパッケージ内のMySQLサーバーを起動し、Mroongaストレージエンジンを登録する。
  • Mroongaを登録したパッケージを再度zipに固める。

おおざっぱに言うとここまで自動化すれば良い事になります。(欲を言えばGithubのリリースページまでアップロードする事でしょうか。)

これらの機能はPowerShelとそれから使えるコマンドやライブラリに備わっています。
一部.NET Frameworkの機能を拝借してきます。

  • Invoke-WebRequest # wget風のコマンドレット
  • [System.IO.Compression.ZipFile]::ExtractToDirectory # from .NET 4.5、unzip
  • cmd /c build-$vcVer-zip-32.bat # cmd.exe呼び出し
  • New-Item/Move-Item/Remove-Item
  • cmd /c .\bin\mysql.exe -uroot <$installSqlDir\install.sqlなど # cmd.exe呼び出し
  • [System.IO.Compression.ZipFile]::CreateFromDirectory # from .NET 4.5、zip

作成したPowerShell

これらの要件を満たすPowerShellを作成して、実際にリリースやnightlyパッケージのCIに用いています。

作成したPowerShellはこちらです。実行しているWindowsはWindows 8.1なので想定しているPowerShellのバージョンは4.0です。

次のような設定を書いたスクリプトを実行すると指定したVisual Studio向けにビルドが出来ます。

/powershell以下にビルドに用いるPowerShellが有るので、cloneしたディレクトリで作業する場合は以下のようになります。

# for VC++ 2010

$vcVer = "vc2010"
cd .\powershell
.\build-vc-core.ps1

# for VC++ 2013

$vcVer = "vc2013"
cd .\powershell
.\build-vc-core.ps1

参考

Windows PowerShell Reference

ZipFile メソッド|.NET Framework 4.5

その他

開発者向けの機能として、MinGWのpatchを使用し、patchesフォルダに含まれるパッチを自動で当てる機能がついています。

広告