2015年03月24日
自作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リポジトリを変更すれば、直ぐに使える。簡易的なパッケージング用途には十分使えるはずである。
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。