バッチ、confファイル配布用単純なrpmの簡単な作り方


バッチ、confファイル配布用単純なrpmの簡単な作り方

概要

CentOS7でbatchやconfファイルの配布専用なrpmを作成する。
ansibleやitamaeでplaybookやrecipeを書けばいいが、それらを導入していない環境で、ownrやパーミッションやパスを正確伝えるのが面倒なので、単純なrpmにしてみる。

本編

前準備

rpm作成ユーザーとテストユーザーの作成

rootで前準備


[root@centos7-admin ~]# groupadd rpmbuilder -g 30001
[root@centos7-admin ~]# groupadd rpmtest -g 30002
[root@centos7-admin ~]# useradd rpmbuilder -u 30001 -g 30001 -s /bin/bash -d /home/rpmbuilder
[root@centos7-admin ~]# useradd rpmtest -u 30002 -g 30002 -s /bin/bash -d /home/rpmtest

rootでも作業ができるが、rpm化の際にrpmにしているつもりで、そのままインストールするのを防ぐために、rpbuild専用ユーザーを作ってそれで作業する

rpm作業前準備

rpmbuilderユーザーで継続

[root@centos7-admin ~]# su - rpmbuilder
[root@centos7-admin ~]# mkdir -p src_rpm/my_test
[root@centos7-admin ~]# mkdir -p rpmbuild/SRPMS
[root@centos7-admin ~]# mkdir -p rpmbuild/SPECS
[root@centos7-admin ~]# mkdir -p rpmbuild/SOURCES
[root@centos7-admin ~]# mkdir -p rpmbuild/RPMS
[root@centos7-admin ~]# mkdir -p rpmbuild/BUILDROOT
[root@centos7-admin ~]# mkdir -p rpmbuild/BUILD

rpm基作業用src_rpm/my_testと rpm化作業用 rpmbuild以下を作成する

rpm化用ファイルとspecファイルの準備

cd src_rpm/my_test
vi test.txt
vi test.sh
vi my_test.spec

rpm化するtest.txtとtest.shとrpm作業に必要なspecファイルを作成する

test.txt
test
test
test
test.sh
#!/bin/bash
date
test.spec
Summary: RPM build test
Name: myrpm_test
Version: 1.0.0
Release: 1%{?dist}
License: Free 
Source1: test.txt
Source2: test.sh
BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
BuildArch: noarch

%description
RPM build test

%prep
[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT;

#%setup
#%build

%install
mkdir -p ${RPM_BUILD_ROOT}/home/rpmbuilder/test
mkdir -p ${RPM_BUILD_ROOT}/org/my_rpm
install -m 611 %{SOURCE1} ${RPM_BUILD_ROOT}/home/rpmbuilder/test/
install -m 755 %{SOURCE2} ${RPM_BUILD_ROOT}/org/my_rpm/

%clean
[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT;

#%postun

%files
%defattr(611,rpmtest,rpmtest)
   /home/rpmbuilder/test
   /home/rpmbuilder/test/test.txt
%defattr(755,root,root)
   /org/my_rpm/test.sh



%changelog
* Sun Oct 8 2017 Hirotaka Tajiri <[email protected]> 1-0-0
- first build

test.txtとtest.shはほぼ意味なしtest用の単純なファイル、specに関しては、今回はzip化無し、build無しの既存のファイルをrpm化するだけの全く単縦なrpm化なので#%setup、#%build、#%postunとしてsetupやbuildやpostunは使わず、ほぼ、設定用の部分とdescriptionとchangelog以外は、installとfilesしか使わない。
ちなみに、prepとcleanはお約束なので除外

今回の検証では、全く新設のdirでの配布と既存のアカウントに追加dirを作成しても既存のdirには影響がないことを検証する。
/org/my_rpm これが新設
/home/rpmbuilder/test これが既存に影響なしの検証

rpm化作業前準備

[rpmbuilder@centos7-admin rpmbuild]$ rm -rf ~/rpmbuild/SOURCES/*
[rpmbuilder@centos7-admin rpmbuild]$ ln -s ~/src_rpm/my_test/* ~/rpmbuild/SOURCES/
[rpmbuilder@centos7-admin rpmbuild]$ ln -s ~/src_rpm/my_test/test.spec ~/rpmbuild/SPECS/

必要ファイルをSOURCESにシンボリックリンクする、specファイルをSOURCESへのリンクは不要だが、リンクしておいても害はないのと除外するのが面倒なのでまとめてリンクする、ただ、その作業と別にspecファイルをSPECSにリンンクする

rpm化作本作業

[rpmbuilder@centos7-admin ~]$  cd ~/rpmbuild/SPECS/
[rpmbuilder@centos7-admin SPECS]$ rpmbuild -bb test.spec 

rpm作業後、テスト(インストール)

rootでテスト

[root@centos7-admin ~]# cd /home/rpmbuilder/rpmbuild/RPMS/noarch/
[root@centos7-admin noarch]# rpm -ivh myrpm_test-1.0.0-1.el7.noarch.rpm 
ls -latR /org/
/org/:
合計 4
drwxr-xr-x   2 root root   20 10月  9 20:30 my_rpm
drwxr-xr-x   3 root root   19 10月  9 20:29 .
dr-xr-xr-x. 18 root root 4096 10月  9 20:29 ..

/org/my_rpm:
合計 4
drwxr-xr-x 2 root root 20 10月  9 20:30 .
-rwxr-xr-x 1 root root 16 10月  9 20:30 test.sh
drwxr-xr-x 3 root root 19 10月  9 20:29 ..

[root@centos7-admin noarch]# ls -latrR /home/rpmbuilder/
/home/rpmbuilder/:
合計 16
-rw-r--r--  1 rpmbuilder rpmbuilder  231  9月  7 01:25 .bashrc
-rw-r--r--  1 rpmbuilder rpmbuilder  193  9月  7 01:25 .bash_profile
-rw-r--r--  1 rpmbuilder rpmbuilder   18  9月  7 01:25 .bash_logout
drwxr-xr-x. 8 root       root         88 10月  9 20:08 ..
drwxrwxr-x  3 rpmbuilder rpmbuilder   20 10月  9 20:12 src_rpm
drwxr-xr-x  8 rpmbuilder rpmbuilder   83 10月  9 20:17 rpmbuild
-rw-------  1 rpmbuilder rpmbuilder 3146 10月  9 20:30 .bash_history
drwx------  5 rpmbuilder rpmbuilder  119 10月  9 20:30 .
drw---x--x  2 rpmtest    rpmtest      21 10月  9 20:30 test

/home/rpmbuilder/src_rpm:
合計 0
drwxrwxr-x 3 rpmbuilder rpmbuilder  20 10月  9 20:12 .
drwxrwxr-x 2 rpmbuilder rpmbuilder  51 10月  9 20:30 my_test
drwx------ 5 rpmbuilder rpmbuilder 119 10月  9 20:30 ..

/home/rpmbuilder/src_rpm/my_test:
合計 12
-rw-rw-r-- 1 rpmbuilder rpmbuilder  16 10月  8 13:01 test.sh
-rw-rw-r-- 1 rpmbuilder rpmbuilder  70 10月  8 13:04 test.txt
drwxrwxr-x 3 rpmbuilder rpmbuilder  20 10月  9 20:12 ..
-rw-rw-r-- 1 rpmbuilder rpmbuilder 820 10月  9 20:30 test.spec
drwxrwxr-x 2 rpmbuilder rpmbuilder  51 10月  9 20:30 .

/home/rpmbuilder/rpmbuild:
合計 0
drwxr-xr-x 2 rpmbuilder rpmbuilder   6 10月  8 12:55 BUILD
drwxr-xr-x 2 rpmbuilder rpmbuilder   6 10月  8 13:01 SRPMS
drwxr-xr-x 8 rpmbuilder rpmbuilder  83 10月  9 20:17 .
drwxr-xr-x 2 rpmbuilder rpmbuilder  51 10月  9 20:18 SOURCES
drwxr-xr-x 3 rpmbuilder rpmbuilder  19 10月  9 20:28 RPMS
drwxr-xr-x 2 rpmbuilder rpmbuilder  22 10月  9 20:30 SPECS
drwxr-xr-x 2 rpmbuilder rpmbuilder   6 10月  9 20:30 BUILDROOT
drwx------ 5 rpmbuilder rpmbuilder 119 10月  9 20:30 ..

/home/rpmbuilder/rpmbuild/BUILD:
合計 0
drwxr-xr-x 2 rpmbuilder rpmbuilder  6 10月  8 12:55 .
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..

/home/rpmbuilder/rpmbuild/SRPMS:
合計 0
drwxr-xr-x 2 rpmbuilder rpmbuilder  6 10月  8 13:01 .
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..

/home/rpmbuilder/rpmbuild/SOURCES:
合計 0
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..
lrwxrwxrwx 1 rpmbuilder rpmbuilder 41 10月  9 20:18 test.txt -> /home/rpmbuilder/src_rpm/my_test/test.txt
lrwxrwxrwx 1 rpmbuilder rpmbuilder 42 10月  9 20:18 test.spec -> /home/rpmbuilder/src_rpm/my_test/test.spec
lrwxrwxrwx 1 rpmbuilder rpmbuilder 40 10月  9 20:18 test.sh -> /home/rpmbuilder/src_rpm/my_test/test.sh
drwxr-xr-x 2 rpmbuilder rpmbuilder 51 10月  9 20:18 .

/home/rpmbuilder/rpmbuild/RPMS:
合計 0
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..
drwxr-xr-x 3 rpmbuilder rpmbuilder 19 10月  9 20:28 .
drwxr-xr-x 2 rpmbuilder rpmbuilder 46 10月  9 20:30 noarch

/home/rpmbuilder/rpmbuild/RPMS/noarch:
合計 4
drwxr-xr-x 3 rpmbuilder rpmbuilder   19 10月  9 20:28 ..
-rw-rw-r-- 1 rpmbuilder rpmbuilder 2480 10月  9 20:30 myrpm_test-1.0.0-1.el7.noarch.rpm
drwxr-xr-x 2 rpmbuilder rpmbuilder   46 10月  9 20:30 .

/home/rpmbuilder/rpmbuild/SPECS:
合計 0
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..
lrwxrwxrwx 1 rpmbuilder rpmbuilder 42 10月  9 20:18 test.spec -> /home/rpmbuilder/src_rpm/my_test/test.spec
drwxr-xr-x 2 rpmbuilder rpmbuilder 22 10月  9 20:30 .

/home/rpmbuilder/rpmbuild/BUILDROOT:
合計 0
drwxr-xr-x 8 rpmbuilder rpmbuilder 83 10月  9 20:17 ..
drwxr-xr-x 2 rpmbuilder rpmbuilder  6 10月  9 20:30 .

/home/rpmbuilder/test:
合計 4
-rw---x--x 1 rpmtest    rpmtest     70 10月  9 20:30 test.txt
drwx------ 5 rpmbuilder rpmbuilder 119 10月  9 20:30 ..
drw---x--x 2 rpmtest    rpmtest     21 10月  9 20:30 .

新規dirを作成なら、深い階層でもdir ごと設置されている、また既存dirに対して追加設置に関しても、既存に関してなんら影響がなく、目的のファイルのみ設置できていることを確認できた