雑記帳

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

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

GroongaのRustバインディングを書いた

Rustがそろそろ1.0.0ということで最初のRustのリリースの時とだいぶ異なった言語になったらしい、
とのことで再度触れてみました。

触れる題材としてGroongaのバインディングを書いてみることに。

そうして出来上がったのが、Rust + GroongaでRuroonga(るーるんが)です。

(○[○]roongaの名前空間がそろそろ苦しい…。)

最近Rustにはcargoというパッケージマネージャが開発され、それが使われているとのことなのでCargoを使ったプロジェクトになっています。

バインディングを手で書いていたのですが、rust-bindgenがRustのHEAD(1.1.0-dev)で使えたのでRustをビルドしてrust-bindgenで作成しなおしました。

RuroongaはひとまずHaskellでのバインディングと同じように、
GroongaコマンドがRustから発行できること、までを目指して開発しました。

Ruroongaをつい先程Cargoのレジストリに登録したのでCargo.tomlに

ruroonga = "0.1.0"

と指定して使いはじめることができます。

haroonga-httpdを書いた話

前にGroongaのHaskellバインディングのHaroongaを書いたので、どうせならHTTP越しにGroongaを使ってみたいと思っていたらつい書いてしまったというお話。

Github – haroonga-httpd

内部でHaroongaに依存しており、Groongaをライブラリとして呼んで使っています。

WebアプリケーションのフレームワークにはScotty(HaskellのSinatraクローン)を使っています。ScottyはSinatraのAPIに似せて作られていますが、内部で使っているWAIがConcurrentなため、ScottyもちゃっかりConcurrentになっています。

GroongaのHTTPのインターフェースほどしっかりパラメータをパースすると言うことはしていないです。。。

http://localhost:3000/d/<Groonga command>

のようなURLでアクセスするとGroongaのcommandがharoonga-httpdの動いているマシンで実行され、結果がGroonga互換のjsonで返ってくるようになっています。

起動のさせ方はGithubのREADMEなどを見ていただけると。

HaskellでもちゃんとGroongaがライブラリとして使えていますね!!

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フォルダに含まれるパッチを自動で当てる機能がついています。

GroongaのArch Linux向けパッケージング

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

全文検索エンジンGroongaはいろんなOSやパッケージマネージャ向けにパッケージングされています。

Arch Linux向けパッケージング

Groongaは元々Arch Linux向けにパッケージングされていて、AURに古いものが登録されていました。
しかし、orphan(メンテナ不在)とマークされていたのでメンテナになってみました。

AUR にアカウントを登録してPKGBUILDを書きました。

書いたGroonga関連のPKGBUILDはこちらです。
また、PKGBUILD自体の管理はGithubでも行っています→https://github.com/cosmo0920/AUR-for-Groonga-family

その他friso(中国語向けトークナイザー)とgroonga-tokenizer-frisoのパッケージも登録しました。

AURに登録してあるGroongaパッケージの制限

他のディストリビューションではinitスクリプトやsystemdのUnitファイルが追加されていることがあります。

これに当たるスクリプトを含めていないので、
現在のAURからGroongaをインストールする方法だとデーモンとしてGroongaを起動することはできません。

AURのパッケージのインストール方法

AURに上がっているパッケージは公式リポジトリではないので、
pacmanのラッパーであるyaourtを使ってインストールすることになります。

yaourtをインストールすると以下のようなコマンドでインストールできるようになります。

% sudo yaourt -Sy groonga

また、Mroongaも登録されているため、

% sudo yaourt -Sy mroonga

とするとMroongaをインストールすることが出来ます。
ただし、MariaDBも含めたソースからのビルドとなるため、かなり時間がかかります。

インストールが終わった段階でMroongaをMariaDBにインストールするためのコマンドが表示されるのでそれに従えばMroongaのインストールが完了となります。
これは上手いやり方が見つからなかったためこのようにしています。。。

参考

AUR―Arch User Repository
PKGBUILD
AUR Metadata/mkaurball

その他

Arch LinuxでPKGBUILDをすぐに検証できるようにVagrantfileも用意しました。
vagrant up するとyaourtとpkgbuild-introspectionが既にインストールされた状態のArch LinuxのVMが起動するようになっています。
Arch Linuxをインストールした実機がなくてもすぐに試せます。