rpmのパッケージを作ってファイル配置する


リリース作業など複数のサーバにファイルを配置する際、色々な手段がありますがrpmにパッケージして配信しておけばバージョン管理やダウングレードが簡単になります。また長い間RHELやCentOSで継続利用されている仕組みであるため、人の入れ替わりや作業を他のメンバに依頼する場合であってもコマンド体系など学習コストがより少なく済みます。

(参考)有名チュートリアルを参考にする
https://blog.packagecloud.io/rpm/rpmbuild/packaging/2015/06/29/building-rpm-packages-with-rpmbuild/
(参考)手っ取り早くRPMパッケージを作成したかった
https://qiita.com/yukihane/items/fba4929b8b9e812975c1

目的

配信ファイルとSPECファイルを作成してrpmファイルを作成する
rpmコマンド経由で指定ディレクトリにファイルを配信する

環境整備

# rootで実施
$ yum install rpm-build
$ useradd kusakari
$ passwd kusakari
$ su - kusakari
$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

配信ファイル作成

kusakari-1.0/test.sh
#! /bin/sh
echo "test"
kusakari-1.0/date.sh
#! /bin/sh
date

配信ファイルのアーカイブ

tar -zcvf kusakari-1.0.tar.gz kusakari-1.0
mv kusakari-1.0.tar.gz rpmbuild/SOURCES/.

SPECファイルの作成

SPECS/kusakari.spec
Name:           kusakari
Version:        1.0
Release:        1%{?dist}
Summary:        A hello world program

License:        GPLv3+
URL:            https://qiita.com/kaikusakari
Source0:        kusakari-1.0.tar.gz
BuildArch:      noarch

%define BLDDIR %{buildroot}/home/kusakari/work
%description
A helloworld program from the packagecloud.io blog!

%prep
%setup
%build

%install
rm -rf %{BLDDIR}
mkdir -p %{BLDDIR}
install -m 0755 test.sh %{BLDDIR}/test.sh
install -m 0755 date.sh %{BLDDIR}/date.sh

%clean
rm -rf %{buildroot}

%files
/home/kusakari/work/test.sh
/home/kusakari/work/date.sh

ビルド

$ rpmbuild -ba SPECS/kusakari.spec 
Wrote: /home/kusakari/rpmbuild/SRPMS/kusakari-1.0-1.el7.centos.src.rpm
Wrote: /home/kusakari/rpmbuild/RPMS/noarch/kusakari-1.0-1.el7.centos.noarch.rpm

インストール

# rootで実施
$ rpm -qa | grep kusakari
$ rpm -ivh kusakari-1.0-1.el7.centos.noarch.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:kusakari-1.0-1.el7.centos        ################################# [100%]
$ rpm -qa | grep kusakari
kusakari-1.0-1.el7.centos.noarch

$ ls -l /home/kusakari/work/
-rwxr-xr-x 1 root root 16 Apr 28 14:39 date.sh
-rwxr-xr-x 1 root root 23 Apr 28 14:39 test.sh

rpm経由で配置しました。