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 の詳細は下記参照。
- Windows用バイナリGemをMacでクロスコンパイルする
- Ruby 1.8.7/1.9.1どちらでも使えるWindows用バイナリ入りgemをDebian GNU/Linux上で作る方法 - ククログ(2010-04-21)
主な作業
- 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 は不要でしたので記事を修正しました。手順がスッキリしました。ありがとうございます。
ふつう docker グループにユーザを追加するので、docker 動かすのに sudo は要らないかと
— そのっつ (Naotoshi Seo) (@sonots) July 14, 2018