2015年03月24日

この世で一番小さい自作rpm/rpmspecファイルを求めて

このエントリーをはてなブックマークに追加

自作rpmの作成手順を説明する必要があった

何度か自作RPMして来たが、数年前の事であり、スクラッチから作る手順をすっかり忘れていた。今後、同じ事にならぬよう、整理と復習を兼ね、ここに書き残す。

必須項目を知るには、最小構成を知った方が良い

もしも最小構成RPM作成出来たとしたら、何が必須項目かを理解できるはずである。そこで、ファイル数の少ないツールをRPM化しながら進めて行く事にした。自作ツールhansode/makistranoが1ファイルで完結する作りなので、makistranoを使う。

いざ、自作RPMへ!

検証環境

  • CentOS release 6.6
  • rpm-build-4.8.0-37.el6.x86_64

事前準備

1: ビルド環境を構築
$ sudo yum install -y git rpm-build rpmlint
2: rpmbuild事前準備
$ mkdir -p ${HOME}/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

rpm作成作業へ

最小構成が目的であり、美しさは求めていない。

1: rpmspecファイルを作成

検証した限りで最小のrpmspecファイルが下記の通り。

$ cd ${HOME}/rpmbuild/SPECS
$ vi makistrano.spec
Name:           makistrano
Version:        0.1.0
Release:        1%{?dist}
Summary:        makistrano
License:        BSD

%description

%prep
[ -d %{name}-%{version} ] && rm -rf %{name}-%{version}
git clone https://github.com/hansode/makistrano %{name}-%{version}
cd %{name}-%{version}
: # don't delete this line.
%setup -T -D

%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
cp bin/maki $RPM_BUILD_ROOT/usr/bin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
/usr/bin/maki
%doc

%changelog

幾つかの項目を補足。

License: BSD

  • 他で流用する場合は、適切なライセンスに変更する必要あり

%prep

  • git clone https://github.com/hansode/makistrano
  • 一般的なRPMでは${HOME}/rpmbuild/SOURCE配下に事前配置するが、本rpmspecではgit cloneを利用し、手間を省いている

%install

  • bin/maki/usr/bin/makiへインストール

%files

  • /usr/bin/makiをパッケージング対象へ

2: rpmlintでrpmspecファイルの内容を確認

$ rpmlint makistrano.spec
makistrano.spec: W: no-buildroot-tag
0 packages and 1 specfiles checked; 0 errors, 1 warnings.

もしも問題がある場合は、rpmlintが警告してくれる。

3: rpmbuildを実行

$ rpmbuild -bb makistrano.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.LhEZL4
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ '[' -d makistrano-0.1.0 ']'
+ rm -rf makistrano-0.1.0
+ git clone https://github.com/hansode/makistrano makistrano-0.1.0
Initialized empty Git repository in /home/vagrant/rpmbuild/BUILD/makistrano-0.1.0/.git/
remote: Counting objects: 278, done.
remote: Total 278 (delta 0), reused 0 (delta 0), pack-reused 278
Receiving objects: 100% (278/278), 36.30 KiB, done.
Resolving deltas: 100% (106/106), done.
+ cd makistrano-0.1.0
+ :
+ cd /home/vagrant/rpmbuild/BUILD
+ cd makistrano-0.1.0
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.MPZw45
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd makistrano-0.1.0
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Qh0Vp7
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd makistrano-0.1.0
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/makistrano-0.1.0-1.el6.x86_64
+ mkdir -p /home/vagrant/rpmbuild/BUILDROOT/makistrano-0.1.0-1.el6.x86_64/usr/bin
+ cp bin/maki /home/vagrant/rpmbuild/BUILDROOT/makistrano-0.1.0-1.el6.x86_64/usr/bin/
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip
+ /usr/lib/rpm/brp-strip-static-archive
+ /usr/lib/rpm/brp-strip-comment-note
Processing files: makistrano-0.1.0-1.el6.x86_64
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/bash
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/vagrant/rpmbuild/BUILDROOT/makistrano-0.1.0-1.el6.x86_64
warning: Could not canonicalize hostname: vagrant-centos6
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/makistrano-0.1.0-1.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.6iMJEo
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd makistrano-0.1.0
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/makistrano-0.1.0-1.el6.x86_64
+ exit 0

4: 出来上がったrpmをインストールしてみる

$ sudo rpm -ivh sudo rpm -ivh ${HOME}/rpmbuild/RPMS/x86_64/makistrano-0.1.0-1.el6.x86_64.rpm
/rpmbuild/RPMS/x86_64/makistrano-0.1.0-1.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:makistrano             ########################################### [100%]

5: rpmの情報を確認

$ rpm -qi makistrano
Name        : makistrano                   Relocations: (not relocatable)
Version     : 0.1.0                             Vendor: (none)
Release     : 1.el6                         Build Date: Tue 24 Mar 2015 06:44:49 PM JST
Install Date: Tue 24 Mar 2015 06:45:18 PM JST      Build Host: vagrant-centos6
Group       : Unspecified                   Source RPM: makistrano-0.1.0-1.el6.src.rpm
Size        : 2391                             License: BSD
Signature   : (none)
Summary     : makistrano
Description :

6: ファイルリストを確認

$ rpm -ql makistrano
/usr/bin/maki
$ ls -l `rpm -ql makistrano`
-rwxr-xr-x 1 root root 2391 Mar 24 18:44 /usr/bin/maki

期待通り。

7: 削除出来る事を確認

$ sudo rpm -e makistrano
$ rpm -qi makistrano
package makistrano is not installed
$ ls -la /usr/bin/maki
ls: cannot access /usr/bin/maki: No such file or directory

後処理も問題ない。

まとめ

最小構成rpm/rpsmspecを無事に手に入れた。これにより、rpmspecに必要な項目が何であるかが判明した。もしも流用したい場合は、パッケージ名とGitリポジトリを変更すれば、直ぐに使える。簡易的なパッケージング用途には十分使えるはずである。

参考文献




編集
@hansode at 19:30│Comments(0)TrackBack(0)hacks/linux/RHEL 

トラックバックURL

コメントする

このブログにコメントするにはログインが必要です。