RPMパッケージ作成 Dockerを利用して
2022-01-103 min read
目次
はじめに
Dockerを利用してRPM開発環境を用意し、実際にRPM作成を行った際の操作や作業をメモしたものです。
RPMパッケージ
RPMパッケージについて簡単に触れておきます。
特徴
- コンポーネントが必要なファイルやメタデータ(RPMヘッダー)をパッケージ化したもの
- cpioアーカイブで構成されている
パッケージの種類
- ソースRPM(SRPM): ソースコードと SPEC ファイルが含まれる
- バイナリRPM: ソースおよびパッチから構築されたバイナリーが含まれる
step1.環境構築からRPMパッケージングまで
"Hello World" と出力する簡単なshellscriptをrpmにパッケージングするまでを説明します。
事前準備
ツール類の準備
rpmの作成にはrpmbuildなどの構築ツールが必要となります。
dnf install rpmdevtools
ユーザ追加
# useradd ${任意の一般ユーザ}
useradd rpmbuild
ワークスペースの作成
以下のコマンドでワークスペースをセットアップします。
cd ~
rpmdev-setuptree
/home/rpmbuild/
`-- rpmbuild
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
各ディレクトリの役割は以下の通りとなります。
- BUILD
- パッケージを構築すると、ここにさまざまな
%buildroot
ディレクトリーが作成されます。これは、ログ出力で十分な情報を得られない場合に、失敗したビルドを調べるのに場合に便利です
- パッケージを構築すると、ここにさまざまな
- RPMS
- バイナリー RPM は、さまざまなアーキテクチャーのサブディレクトリー (例:
x86_64
およびnoarch
) に作成されます
- バイナリー RPM は、さまざまなアーキテクチャーのサブディレクトリー (例:
- SOURCES
- ここでは、このパッケージャーは、圧縮したソースコードアーカイブとパッチを配置します。
rpmbuild
コマンドは、これらを検索します
- ここでは、このパッケージャーは、圧縮したソースコードアーカイブとパッチを配置します。
- SPECS
- SPECファイルを配置
- SRPMS
rpmbuild
を使用してバイナリー RPM の代わりに SRPM を構築すると、生成される SRPM がここに作成されます
プログラム配置
/home/rpmbuild/rpmbuild/SOURCES/helloworld
ディレクトリを作成し helloworld
という名前のshellscriptを作成します。
#!/bin/bash
echo "Hello World!"
specファイル
specファイルにrpmの構成を記述します。
このファイルは/home/rpmbuild/rpmbuild/SPECS/
に配置します。
helloworld.spec
Name: helloworld
Version: 1.0.0
Release: 1%{?dist}
BuildArch: noarch
License: No License
Summary: "hello world"
Source0: %{name}
%description
"helloworld" command!!
%install
mkdir -p %{buildroot}/%{_bindir}
cp %{SOURCE0}/%{name} %{buildroot}/%{_bindir}
chmod 755 -R %{buildroot}/%{_bindir}
%files
%{_bindir}/%{name}
詳細なspecの記述については、こちらを参照してください
rpmbuild
次のコマンドでbuildを行います。
rpmbuild --bb /home/rpmbuild/rpmbuild/SPECS/helloworld.spec
上記実行後、RPMS/noarch
ディレクトリに/helloworld-1.0.0-1.el8.noarch.rpm
が作成されます。
これでrpmの作成は完了です。
インストール
次のコマンドでインストールを行います。
rpm -ivh helloworld-1.0.0-1.el8.noarch.rpm
インストール完了後、動作確認を行います。
以下のような動作をすれば成功です。
$ helloworld
Hello World!
$ rpm -qa | grep helloworld
helloworld-1.0.0-1.el8.noarch
$ which helloworld
/usr/bin/helloworld
リンク
Recommends
New Posts
Hot posts!
Date
Tags
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author