Groonga族とHomebrew
Groonga Advent Calendar 2015の4日目の記事です。
はじめに
Groonga族はOS Xでも動かすことが出来るものもあり、Homebrewでもインストールすることができるものもあります。
特に、GroongaはHomebrew本体に取り込まれているため、以下のコマンドでインストールすることが出来ます。
$ brew install groonga
また、MroongaはFormulaが複雑なため、homebrew-mroonga | GitHubをTapすることでインストールすることができます。
今年はGroonga族に新たにPGroonga | pgroonga GitHub pages が増えました。こちらも現在ではHomebrew本体に取り込まれているため、
$ brew install pgroonga
でインストールすることができます。
Homebrewの今年の大きな変更点
- サンドボックスの機能が導入された
- testブロックの強制
- audit機能の強化
が導入されました。さて、PGroongaを導入するにあたり、サンドボックスの機能がかなりの障害となりました。
最初の壁
まず、サンドボックスの機能を知らなかった頃のPull Requestについたコメントを見てみましょう。
https://github.com/Homebrew/homebrew/pull/41174#issuecomment-119891498
おや?何か不穏ですね。
新しく追加しようとした diffの中で https://github.com/Homebrew/homebrew/pull/41174/files#diff-c5d7671658e19815af8d05dabe4d7515R20 としてしまっており、これだとなんとPGroongaではなくPostgreSQLのCellarにインストールしようとしてしまいます!
これではサンドボックスの保護下にある他のFormulaのCellarにインストールしようとしてしまうため、取り込んでくれそうにありません。
Mega Formula化?
では、先のPull Requestでのhttps://github.com/Homebrew/homebrew/pull/41174#discussion_r34240474 にある optional resources
とは一体何を意味していたのでしょうか。
その回答は、こちら https://github.com/Homebrew/homebrew/pull/44739 でした。これはPostgreSQLのFormulaへresourceを追加して、--with-pgroonga
オプションを追加したものです。これで、サンドボックス問題は解決できた、ヨカッタヨカッタ。。。…と胸を撫で下ろしていると、次の問題が起こります。
--with-pgroongaがbrew upgradeでハンドルされない
ある日のこと、 brew upgrade postgresql
を行った際に、なんとPGroongaがPostgreSQLから消え去ってしまいました。これはイカン。。
そうこうしているうちに、次のIssueが立ちました。Possible way to handle sandbox issues for Postgres's plugins | Homebrew Issue in GitHub
このIssueでは、PostgreSQLのプラグインがサンドボックス環境下で壊れていることを問題にしています。
そうして、このIssueを解決するようにしたPull Requestがこちら。
このPull Requestのキモとなる箇所はこの部分で、stageへ一旦インストールしてから、必要なファイルだけインストールする動作となっています。同時に、PostgreSQLのCellarでハードリンクをし、PostgreSQLから正常にプラグインが見えるようにしています。
そうして、PostgreSQLのFormulaの--with-pgroonga
オプションは無事pgroonga.rbとして分離されたのでした。
testブロックの強制
こちらはGroonga 5.0.5への更新のプルリクエスト: https://github.com/Homebrew/homebrew/pull/41185/files で指摘されてしまいました。後日このテストは宜しくないと思ったので https://github.com/Homebrew/homebrew/pull/46451/files#diff-ae999bc11356b00a9a7b143428fe540dR67 にてより実際に近いテストケースにしておきました。
audit機能の強化
これはHomebrewのCIでこれまではbrew audit formula-name
となっていたものが、 brew audit --strict --online formula-name
に変わりました。これにより、より整ったFormulaで無いと取り込まれなくなりました。また、homepageがHomebrewのCI環境からアクセス可能でないと本家に取り込んでくれなくなりました。
おまけ
実はサンドボックスの機能の影響を groonga-normalizer-mysql
のFormulaも受けることになってしまいました。こちらも既にこのプルリクエストにより修正済みです。
おわりに
この記事はGroonga周り、特にPGroongaのFormulaのインストール方法が brew install postgresql --with-pgroonga
から brew install pgroonga
に変わった経緯を文章化していないなぁと思い、それを解説するために半ば勢いで書き上げられました。
新たなGroonga族が加わったことでより使い道が広がったGroonga族で良い全文検索を!
Let's full-text search with Groonga family!