最新の 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 件のコメント:
コメントを投稿