OSSGateワークショップに参加した感想

OSSGate

投稿日 2016年09月26日


2016年9月24日にクラウドワークスにて開催されたOSS Gateワークショップに参加してきました。

そもそもOSS Gateとは?

OSS開発に参加する人を増やす取り組み、2015年12月15日から始まったようです
詳しくはこちらから

活動を知ったきっかけ

twitterのフォロワーさんの情報から知りました
9月に開催されたRubyKaigi2016 in Kyotoで須藤さんの話の中でも取り上げられ、知った人は多いのではないかと思います

参加者の種類

  • ビギナー:OSSの開発未経験な人(今回の対象)
  • メンター:OSS開発経験者
  • サポートメンター:メンターのサポートをする人
  • 司会役
  • レポーター:OSSGateの様子をレポートとしてまとめる人

勉強会の進め方

  1. イベントの説明
  2. 題材となるOSS決定
    • 今回私は、「groonga」を選択しました。
  3. ワークタイム
    • Githubにissueを作成し、やったこと、思ったことを事細かにメモしていく
    • 触ってみてドキュメント不備やエラーがあった場合の報告の仕方などをメンターさんに教えてもらう
  4. 振り返り
    • 一日を通して何をしたかを担当してくれたメンターではないメンターさんに説明し、説明できていれば理解できていると自信がつく

実際に当日起こったこと

当日のissue

すでに、Homebrewでgroongaをインストールしていたので一旦削除し、ドキュメント通りに、ソースからコンパイルしてインストールしようとしたら
私のMacではconfigureの途中でエラーで失敗した。

Mac OSX Groonga インストール手順

当日たどり着いた答え

homebrewでインストールしたopensslのライブラリのフォルダが読み込まれていない
インストールする際にgroonga-httpd(groongaのWebGUI)がインストールされるのだが、ここでエラーが発生した
メンターさんにいろいろ教わり、読み込んでいる箇所を特定し、Homebrewで利用しているopensslのフォルダパスを追加したらconfigureは通った

当日やった試行錯誤

公式どおりに下記を実行

ソースをダウンロードします:
% curl -O http://packages.groonga.org/source/groonga/groonga-6.0.8.tar.gz
% tar xvzf groonga-6.0.8.tar.gz
% cd groonga-6.0.8

configureを実行します( configure のオプションについては configure を参照してください):
% ./configure

configureの途中でエラーが発生

auto/configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

Failed to configure groonga-httpd. Details:

〜〜〜〜略〜〜〜〜
〜
〜〜〜〜略〜〜〜〜
checking for OpenSSL library ... not found
checking for OpenSSL library in /usr/local/ ... not found
checking for OpenSSL library in /usr/pkg/ ... not found
checking for OpenSSL library in /opt/local/ ... not found

ここでまずopensslが入っていないことを疑ったので以下のコマンドを実行しました

% openssl version
OpenSSL 0.9.8zh 14 Jan 2016

一応古いけどopensslは入っていることを確認
次にhomebewのopensslのバージョンを調べる

% brew info openssl
openssl: stable 1.0.2i

こっちのが新しい
zshを使っているので.zshrcにhomebrewのopensslを使うように設定を追加した

# openssl
OPENSSL_PATH=/usr/local/opt/openssl
if [ -d "$OPENSSL_PATH=" ];then
  export PATH=$OPENSSL_PATH/bin:$PATH
  export LD_LIBRARY_PATH=$OPENSSL_PATH/lib:$LD_LIBRARY_PATH
  export CPATH=$OPENSSL_PATH/include:$LD_LIBRARY_PATH
fi

ターミナルを開き直すのを忘れて少しハマりました

その後再度configureを実行するが結果は変わらず

エラーの内容をよく見てみると

checking for OpenSSL library ... not found
checking for OpenSSL library in /usr/local/ ... not found
checking for OpenSSL library in /usr/pkg/ ... not found
checking for OpenSSL library in /opt/local/ ... not found

先ほど指定した/usr/local/opt/opensslがないことに気が付きました
ここからcheckしている箇所をgrepで探す作業を行いました

% grep -rl "/usr/pkg" .

./vendor/nginx-1.11.3/auto/lib/geoip/conf
./vendor/nginx-1.11.3/auto/lib/libgd/conf
./vendor/nginx-1.11.3/auto/lib/libxslt/conf
./vendor/nginx-1.11.3/auto/lib/openssl/conf
./vendor/nginx-1.11.3/auto/lib/pcre/conf
./vendor/nginx-1.11.3/objs/autoconf.err

このファイルの中身を確認していき、最終的に./vendor/nginx-1.11.3/auto/lib/openssl/confで設定していることがわかりました

Github

今回はここにHomebewでインストールされる/usr/local/opt/opensslを追記しました

if [ $ngx_found = no ]; then

    # Homebrew

    ngx_feature="OpenSSL library in /usr/local/opt/openssl/"
    ngx_feature_path="/usr/local/opt/openssl/include/"

    if [ $NGX_RPATH = YES ]; then
        ngx_feature_libs="-R/usr/local/opt/openssl/lib -L/usr/local/opt/openssl/lib -lssl -lcrypto $NGX_LIBDL"
    else
        ngx_feature_libs="-L/usr/local/opt/openssl/lib -lssl -lcrypto $NGX_LIBDL"
    fi

    . auto/feature
fi

追記を行ったあと再度configureを実行し完了することを確認しました。

最後に

今回はパッチを送るまでは到達しませんでしたが、OSSGateを通じてOSS活動というものに触れられたのは貴重な経験でした
これからもOSS活動を頑張っていこうと思います。


2016 GakuBlog