2016年7月24日日曜日

Elixir 1.3.1 を CentOS で yum install

最新の Elixir を CentOS 6/7 にインストールしたい

ググるとソースからビルドするという記事が出てきます。

調べてみると、以下の状況。

  • CentOS6(EPEL)は、Elixir入ってない。
  • CentOS7(EPEL)は、Elixir入ってるが、0.12.5(ドキュメントほとんどないし、開発環境が違いすぎる)。
  • Fedoraは、Elixir入っているて、yumでインストールできる。
  • CentOS6/7でも、ソースからなら、問題なく入る。

Fedoraで動いていれば、rpmを作り直せば、そのまま使えそうなので、作りました。 コンテナもいいですが、手に馴染んだ環境にサクッとyum installで入るのは魅力的ですよね。

すぐに使ってみたい方は、こちら。Fedora公式RPMホスティングサービスのCOPRを使いました。

# CentOS7
$ curl -OL https://copr.fedorainfracloud.org/coprs/ynishi/elixir/repo/epel-7/ynishi-elixir-epel-7.repo
$ mv ynishi-elixir-epel-7.repo /etc/yum.repos.d/
# CentOS6
$ curl -L https://copr.fedorainfracloud.org/coprs/ynishi/elixir/repo/epel-6/ynishi-elixir-epel-6.repo
$ mv ynishi-elixir-epel-7.repo /etc/yum.repos.d/
$ sudo yum install elixir

COPRのプロジェクトページ

https://copr.fedorainfracloud.org/coprs/ynishi/elixir/

CentOS7ので、公式のElixirをとにかく触ってみたい(Phoenixもmixもいらない)という方はこちら。

$ sudo yum install epel-release
$ sudo yum install elixir

一応mixも入るのですが、最新のmixに用意されてるタスクとは随分違っていて、最低限の状態です。

CentOS7の場合

基本的なやり方はここと同じです。 http://qiita.com/bellflower2015/items/d33ca026b7d9c626adc9

rpmを作る一般的なやり方はこちら。

https://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/ https://osdn.jp/magazine/14/01/10/090000/

COPRというサービスは、RPMソースをアップして、サーバ上でRPMビルドして、できたRPMをホスティングしてくれますので、作業用インスタンスで、ビルド・インストールの確認をして、できたRPMソースをアップしました。

COPRについてはこちら。

http://qiita.com/hnakamur/items/336758b1d9564b759d49

コマンドはまとめて、Githubにあげました。build.shの通りでできるはずです。

https://github.com/ynishi/elixir-rpm

Erlangのインストール

まずは、Erlangを入れます。これは、Fedoraの最新版ソースからそのままリビルドできました。

ビルド中にメモリ使用量が最大で1GBくらいまで行きました。 メモリ500MBくらいの一番安いインスタンスだと厳しかったです。 ビルド時間は1時間弱くらいでした。(GCPの共有CPUインスタンスで)

 CXX  x86_64-redhat-linux-gnu/wxe_funcs.o
 g++: internal compiler error: Killed (program cc1plus)
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See <http://bugzilla.redhat.com/bugzilla> for instructions.
 make[3]: *** [x86_64-redhat-linux-gnu/wxe_funcs.o] Error 4
 make[3]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib/wx/c_src'
 make[2]: *** [opt] Error 2
 make[2]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib/wx'
 make[1]: *** [opt] Error 2
 make[1]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib'
 make: *** [libs] Error 2
 エラー: /var/tmp/rpm-tmp.X8FB4G の不正な終了ステータス (%build)


RPM ビルドのエラー:
    /var/tmp/rpm-tmp.X8FB4G の不正な終了ステータス (%build)

インスタンス上でビルドできることを確認したら、COPRにFedoraのRPMソースを指定して、ビルドします。

Elixir

これもFedoraの最新版をほぼそのまま使えました。

ただ、現行のElixirのgitリポジトリは、Erlangのビルドツール rebar のバイナリが含まれていて、単体でビルドできるようになっています。

ですので、Elixirのgitリポジトリのビルド方法を使うことにしました。

そうするとLOCALEがUTF8でないという警告が出るので、LOCALE指定も追加しました。

こちらは、オリジナルで作ったRPMソースをWeb上にアップロードして、それをCOPR に指定しました。

こちらは5分くらいでビルドできました。

COPRでは、ビルドするときのyum レポジトリを外部リポジトリとして設定することで、EPELにない、rpmを読み込みます。

最初、Erlang用のレポジトリを作って、Elixirのリポジトリから呼び出してましたが、Elixirのリポジトリにまとめて入れておけば、ビルドもインストールも簡単になるので、一つにまとめました。

Cent OS7は以上です。

Cent OS6 の場合

Erlang

CentOS6と、Fedora/CentOS7との最大の違いはsystemdです。(Erlangのrpm ビルドを考えると)

結局、specファイルでsystemdがないバージョンは回避するようになっていたのですが、いくつか修正が必要でした。

  • makeのオプションにベタ書きされていた
  • empdのサービスファイルが全てのバージョンで使われてた

あと、erlang, elixir のtar.gzソースファイルを自分で設置する必要がありました。 その辺りも、build.shに残しました。

また、依存関係のrpmは、CentOS7では、Fedoraの最新rpmソースからまとめてインストールしていたのですが、CentOS6では、systemdがないため、インストールできませんでした。

そのため、一旦EPELのErlangをインストールしてからビルドしましたが、いくつか手動でパッケージを追加しました。

上記対応をして、ビルドしたRPMソースをCentOS7の時と同様にCOPRでビルドしました。

Elixir

CentOS7とほぼ同じものでうまくできました。 ただ、testの際に、改めてLOCALEを設定しないと、テストが通らず、インストール完了しませんでした。

上記修正して、同じくCOPRにアップしました。

今後

今回、必要なファイルだけのリポジトリを切って作りましたが、RPMの本元のリポジトリからフォークして作成した方が、今後の保守性を考えると良いと思います。

また、COPRは、今回初めて知りましたが、カスタムRPMを作って配布するプラットフォームとしては、かなり良いと思いました。

簡単に使えて、プレーンな環境でビルドしなおしているので、一定の動作は保証できるためです。

パッケージをメンテナンスしている方のおかげで、さっくりと使えるRPMができました。

0 件のコメント:

コメントを投稿