rlwrap は readline のラッパー で、sqlplus と合わせて使うと
コマンドラインの履歴が(「↑」キーなどで)呼び出せるようになります。
インストール自体は、一般的な
./configureで十分なのですが、
make
make install
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.specSPECファイルには、下記のように記載しておきます。
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-develrpmbuild コマンドを実行すると、RPMが作成されます。
readline-devel-6.0-3.el6.x86_64
$ 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を作成してみる話でした。