CentOS7(x86_64) で Windows版 numo-narray (x86-mingw32/x64-mingw32)を build する場合の手順

numo-narray の Windows 版は linux でクロスコンパイルし、そのまま配布する fat gem の作成が可能なのですが、 ただ、その方法でハマったので対処方法のメモです。

具体的には numo-narray の Windows 向けビルドで rake-compiler.gem, rake-compiler-dock.gem を使うようになっているのですが、 docker コマンドの操作に root権限が必要なため、sudo 経由で rbenv を実行しないと docker コマンドの操作でdocker グループにユーザーを追加しておかないと、docker のステータスを認識できずに処理が止まります。

rake-compiler/rake-compiler-dock の詳細は下記参照。

主な作業

  • ruby 2.1 以上を rbenv でインストール (手順は割愛)
    • ここでハマったのですが、自分はホームディレクトリに rbenv を入れていたため sudo 実行時 rbenv コマンドを認識できませんでした。
    • 今回のケースはシステム側に rbenv をインストールした方がいいと思います。(未確認)
  • sudo の secure_path 変更

    $ sudo visudo

    • 修正前 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
    • 修正後 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims:/home/ユーザー名/.rbenv/bin:/home/ユーザー名/.rbenv/shims
      • /home/ユーザー名/.rbenv/bin:/home/ユーザー名/.rbenv/shims の部分は、gem env コマンドで SHELL PATHを確認。
      • システム側に rbenv をインストールした場合は /home/ユーザー名/.rbenv/bin:/home/ユーザー名/.rbenv/shims 部分は不要なはず。
  • Docker インストール & グループ追加 & 起動 & 一旦ログアウトして反映。

$ sudo yum install docker
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ sudo systemctl start docker
$ exit
  • Docker のサービス確認。
$ sudo systemctl status docker.service 

Docker のサービスがactive なのを確認する。

  • Docker コマンド動作確認。
$ docker ps

sudo なしに実行してエラーしないことを確認。

  • gem インストール
$ gem install rake-compiler
$ gem install rake-compiler-dock
  • numo-narray を git clone
$ git clone https://github.com/ruby-numo/numo-narray.git
$ cd numo-narray

sudo 経由で rake コマンドが動作することを確認。

  • Windowsビルド 管理者権限でビルドを行います。(ここでハマっていた。) docker グループに入って入れば管理者権限は不要です。
$ rake build:windows

ビルドが完了し、pkg 配下に numo-narray-x.x.x.x-x86-mingw32.gem, numo-narray-x.x.x.x-x64-mingw32.gem が作られたら成功。

追記

先ほど、@sonots さんから、docker グループに追加すべきとコメント頂き、sudo は不要でしたので記事を修正しました。手順がスッキリしました。ありがとうございます。