erlang rpmを作ってみる

はじめに

ubfとかebfとかっていうバイナリフォーマットに興味があってerlangをインストールしようとしました.CentOS5.5で,yumを使ってさくっとインストールしてみたんですが,肝心のプログラムがmakeできません.識者に聞いてみた所,バージョン古すぎとご神託を授かりました.そこで最新のバージョンをインストールとあいなったのですが,せっかくなのでrpm化しようとしてはまってしまいました.今回はrpm化するまでの苦闘の道のりです.

環境づくり

vmware上のcentosrpmを作ってみました.しばらくほっといたvmなので,まずはupdateから実行して開発環境をインストールします.

$ sudo yum update
$ sudo yum groupinstall "Development Tools"
$ sudo yum install rpmdevtools
$ mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo "%_topdir /home/daiba/rpm" > ~/.rpmmacros

これで基本的な環境はできあがったので,希望するerlangソースをダウンロードページから落とします

$ cd rpm/SOURCES
$ wget http://www.erlang.org/download/otp_src_R13B04.tar.gz

後はspecファイルを作ればOK.が,これが大変なわけです.

spec file

ぐぐってみたら,FC用のerlang spec fileを見つけました.これをベースに作ってみたspec fileは次のようになります.

Name:           my-erlang
Version:        R13B
Release:        13.4%{?dist}
Summary:        General-purpose programming language and runtime environment
Group:          Development/Languages
License:        Erlang Public License
URL:            http://www.erlang.org
Source:         otp_src_R13B04.tar.gz

BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root

BuildRequires:  ncurses-devel

%description
Erlang is a general-purpose programming language and runtime
environment. Erlang has built-in support for concurrency, distribution
and fault tolerance. Erlang is used in several large telecommunication
systems from Ericsson.

%prep
[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT;
%setup -n otp_src_R13B04

%build
%configure
make

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%doc AUTHORS EPLICENCE README.md
%{_bindir}/*
%{_libdir}/erlang

%post
%define erlangdir %{_libdir}/erlang
%{erlangdir}/Install -minimal %{erlangdir} >/dev/null 2>/dev/null

ここまで作るのに涙なくしては語れないあれやこれやはありましたが,それはまた別の機会に.まねして作成したspec fileなのでよくわからないんですが,postセクションでInstallというコマンドを実行してるので,postunセクションで何か作業をしないといけない気がするんですが,よくわかりませんでした.とりあえず,インストールしても問題なかったので,しばらく使ってみようと思っています.

rpmを作る

spec file をerlang.specという名前にしてSPECSディレクトリに置いてbuildrpmを実行します.

$ cd ~/rpm
$ cd SPECS
$ vi erlang.spec
$ rpmbuild -bb erlang.spec

そうすると延々またされたあげくにRPMS配下にmy-erlang-debuginfo-R13B-13.4.x86_64.rpmとmy-erlang-R13B-13.4.x86_64.rpmというrpmファイルができます.これでできあがり,

$ sudo rpm -ivh my-erlang-R13B-13.4.x86_64.rpm

とやればインストールできます.インストールできたか試すと

$ erl
Erlang R13B04 (erts-5.7.5) [source] [64-bit] [rq:1] [async-threads:0] [kernel-poll:false]

Eshell V5.7.5  (abort with ^G)
1> 123456789 * 9 .
1111111101

となりました.多分問題ないんでしょう.さて,最初にやろうとしたmakeは通るかなー