2013年11月10日日曜日

rlwrap の RPMを作成してみる(EL6系)

今回は、sqlplus と併用することが多い、rlwrap のRPMを作成してみます。

rlwrap は readline のラッパー で、sqlplus と合わせて使うと
コマンドラインの履歴が(「↑」キーなどで)呼び出せるようになります。

インストール自体は、一般的な
./configure
make
make install
で十分なのですが、
rpm コマンドで情報がみられると便利かもしれないと思って
練習ついでにRPMにしてみました。


RPM化するソースファイル

あらかじめ、下記URLのあたりからrlwrapのソースファイルを入手しておきます。
http://sourceforge.jp/projects/freshmeat_rlwrap/releases/
http://utopia.knoware.nl/~hlub/rlwrap/

今回は、DLした下記のファイルをRPM化します。
rlwrap-0.37.tar.gz

今回RPMを作成する環境です。
$ cat /etc/oracle-release
Oracle Linux Server release 6.2
$ uname -r
2.6.32-300.3.1.el6uek.x86_64

RPM作成の手順

RPMの作成中のディレクトリ削除等で事故を避けるため、
rootではなく一般ユーザで実施します。

最初に、rpm-build がインストールされていることを確認します。
$ rpm -q rpm-build
rpm-build-4.8.0-19.el6.x86_64

RPM作成用で利用するディレクトリを作成しておきます。
$ mkdir -p rpmbuild/BUILD
$ mkdir -p rpmbuild/BUILDROOT
$ mkdir -p rpmbuild/RPMS
$ mkdir -p rpmbuild/SOURCES
$ mkdir -p rpmbuild/SPECS
$ mkdir -p rpmbuild/SRPMS

ソースファイルを配置します。
.tar.gzファイル は、rpmbuild が自動的に解凍できるので
そのまま置いておきます。
$ mv rlwrap-0.37.tar.gz rpmbuild/SOURCES/

SPECファイルを作成します。
このファイルに、RPMをどう作成するかを記載しておきます。
$ vi SPECS/rlwrap.spec
SPECファイルには、下記のように記載しておきます。

rlwrap.spec ファイルの記載例
Name:           rlwrap
Version:        0.37
Release:        0%{?dist}
Summary:        Wrapper for GNU readline
License:        GPLv2
URL:            http://utopia.knoware.nl/~hlub/rlwrap/
Source0:        rlwrap-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root)
BuildRequires:  readline-devel

%description
Wrapper for GNU readline.
readline wrapper => rl-wrap => rlwrap

%prep
%setup -q

%build
%configure
make %{?_smp_mflags}

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

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc AUTHORS COPYING NEWS README
%{_bindir}/rlwrap
%{_mandir}/*/rlwrap.*
%{_datadir}/rlwrap
/usr/share/man/man3/RlwrapFilter.3pm.gz

%changelog
* Sat Nov 9 2013 gowatana <mail-address> 0.37-0
- Initial RPM Package.

ビルド前のディレクトリは下記のようになっています。
$ pwd
/home/gowatana/rpmbuild
$ ls *
BUILD:

BUILDROOT:

RPMS:

SOURCES:
rlwrap-0.37.tar.gz

SPECS:
rlwrap.spec

SRPMS:

RPM作成コマンド「rpmbuild」を実行します。

ちなみに、今回は rlwrap と依存関係がある readline-devel
すでにインストール済みです。
$ rpm -q readline-devel
readline-devel-6.0-3.el6.x86_64
rpmbuild コマンドを実行すると、RPMが作成されます。
$ rpmbuild -ba SPECS/rlwrap.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.8s03OH
+ umask 022
+ cd /home/gowatana/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
(省略)
Processing files: rlwrap-debuginfo-0.37-0.el6.x86_64
伸張ファイルの検査中: /usr/lib/rpm/check-files /home/gowatana/rpmbuild/BUILDROOT/rlwrap-0.37-0.el6.x86_64
警告: ホスト名を正式なものにできません: sv1
書き込み完了: /home/gowatana/rpmbuild/SRPMS/rlwrap-0.37-0.el6.src.rpm
書き込み完了: /home/gowatana/rpmbuild/RPMS/x86_64/rlwrap-0.37-0.el6.x86_64.rpm
書き込み完了: /home/gowatana/rpmbuild/RPMS/x86_64/rlwrap-debuginfo-0.37-0.el6.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.QS6y6g
+ umask 022
+ cd /home/gowatana/rpmbuild/BUILD
+ cd rlwrap-0.37
+ rm -rf /home/gowatana/rpmbuild/BUILDROOT/rlwrap-0.37-0.el6.x86_64
+ exit 0

上記のRPM作成直後、ディレクトリの中身は下記のようになりました。
ちゃんとRPMが作成されています。
$ pwd
/home/gowatana/rpmbuild
$ ls -R *
BUILD:
rlwrap-0.37

BUILD/rlwrap-0.37:
AUTHORS    Makefile.am  aclocal.m4     configure          filters
BUGS       Makefile.in  completions    configure.ac       src
COPYING    NEWS         config.h       debugfiles.list    stamp-h1
ChangeLog  PLEA         config.h.in    debuglinks.list    test
INSTALL    README       config.log     debugsources.list  tools
Makefile   TODO         config.status  doc

BUILD/rlwrap-0.37/completions:
coqtop  testclient

BUILD/rlwrap-0.37/doc:
Makefile     Makefile.in  rlwrap.man
Makefile.am  rlwrap.1     rlwrap.man.in

BUILD/rlwrap-0.37/filters:
Makefile          RlwrapFilter.pm   listing       pipeto
Makefile.am       censor_passwords  logger        scrub_prompt
Makefile.in       count_in_prompt   null          simple_macro
README            ftp_filter        paint_prompt  template
RlwrapFilter.3pm  history_format    pipeline      unbackspace

BUILD/rlwrap-0.37/src:
Makefile       main.c          ptytty.o    string_utils.c
Makefile.am    main.o          readline.c  string_utils.o
Makefile.in    malloc_debug.c  readline.o  term.c
completion.c   malloc_debug.h  redblack.h  term.o
completion.o   malloc_debug.o  rlwrap      utils.c
completion.rb  pty.c           rlwrap.h    utils.o
filter.c       pty.o           signals.c
filter.o       ptytty.c        signals.o

BUILD/rlwrap-0.37/test:
testclient  testit

BUILD/rlwrap-0.37/tools:
config.guess  config.sub  depcomp  install-sh  missing

BUILDROOT:

RPMS:
x86_64

RPMS/x86_64:
rlwrap-0.37-0.el6.x86_64.rpm
rlwrap-debuginfo-0.37-0.el6.x86_64.rpm

SOURCES:
rlwrap-0.37.tar.gz

SPECS:
rlwrap.spec

SRPMS:
rlwrap-0.37-0.el6.src.rpm

作成したRPMの情報を見てみます。
$ rpm -qpi RPMS/x86_64/rlwrap-0.37-0.el6.x86_64.rpm
Name        : rlwrap                       Relocations: (not relocatable)
Version     : 0.37                              Vendor: (none)
Release     : 0.el6                         Build Date: 2013年11月10日 08時21分24秒
Install Date: (not installed)               Build Host: sv1
Group       : Unspecified                   Source RPM: rlwrap-0.37-0.el6.src.rpm
Size        : 200508                           License: GPLv2
Signature   : (none)
URL         : http://utopia.knoware.nl/~hlub/rlwrap/
Summary     : Wrapper for GNU readline
Description :
Wrapper for GNU readline.
readline wrapper => rl-wrap => rlwrap

ためしにインストール

root ユーザになってからインストールします。
$ su
パスワード:    ★パスワードを入力
# rpm -ivh RPMS/x86_64/rlwrap-0.37-0.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:rlwrap                 ########################################### [100%]
# which rlwrap
/usr/bin/rlwrap

補足:rlwrapの使い方

rlwrap を使用するには、下記のような感じで sqlplus を起動します。
$ rlwrap sqlplus /nolog

自分のホームディレクトリにある .bash_profile ファイルに
下記のエイリアスを追記しておくと、
sqlplus 起動のたびに rlwrap とつけなくても使用できるようになります。
alias sqlplus='rlwrap sqlplus'


最近気づいたのですが、RHEL系Linuxでは
設定ファイルなどがRPMで提供されることも多いようです。

以上、RPMを作成してみる話でした。

0 件のコメント:

コメントを投稿