第5章 RPM パッケージ化を行うためのソフトウェアの準備
RPM を使用してソフトウェアをパッケージ化する準備をするには、まずソフトウェアにパッチを適用し、LICENSE ファイルを作成して、それを tarball 形式でアーカイブします。
5.1. ソフトウェアへのパッチの適用 リンクのコピーリンクがクリップボードにコピーされました!
ソフトウェアをパッケージ化する場合、バグの修正や設定ファイルの変更など、元のソースコードに特定の変更を加えることが必要になる場合があります。RPM パッケージでは、元のソースコードを変更せずにそのままにして、パッチを適用することができます。
パッチは、ソースコードファイルを更新するテキストです。パッチは 2 つのバージョンのテキストの差を示すものであるため、diff 形式を使用します。diff ユーティリティーを使用してパッチを作成し、patch ユーティリティーを使用してそのパッチをソースコードに適用できます。
ソフトウェア開発者は多くの場合、Git などのバージョン管理システムを使用してコードベースを管理します。このようなツールでは、diff やパッチソフトウェアを独自の方法で作成できます。
5.1.1. サンプル C プログラムのパッチファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
diff ユーティリティーを使用して、C 言語で書かれたサンプル Hello World プログラム (cello.c) の元のソースコードからパッチを作成します。このパッチを適用することで、元のソースコードを変更することなく、パッケージ化されたソフトウェアに変更を加えることができます。
詳細は、お使いのシステムの diff(1) man ページを参照してください。
前提条件
システムに
diffユーティリティーをインストールした。# dnf install diffutils
手順
元のソースコードをバックアップします。
$ cp -p cello.c cello.c.orig-pオプションは、モード、所有権、およびタイムスタンプを保持します。必要に応じて
cello.cを変更します。#include <stdio.h> int main(void) { printf("Hello World from my very first patch!\n"); return 0; }パッチを生成します。
$ diff -Naur cello.c.orig cello.c--- cello.c.orig 2016-05-26 17:21:30.478523360 -0500 +++ cello.c 2016-05-27 14:53:20.668588245 -0500 @@ -1,6 +1,6 @@ #include<stdio.h> int main(void){ - printf("Hello World!\n"); + printf("Hello World from my very first patch!\n"); return 0; } \ No newline at end of file+で始まる行は、-で始まる行を置き換えます。注記diffコマンドにはNaurオプションを指定することを推奨します。ほとんどのユースケースに適しているためです。-N(--new-file)-Nオプションは、存在しないファイルを空のファイルとして処理します。-a(--text)-aオプションは、すべてのファイルをテキストとして扱います。その結果、diffユーティリティーがバイナリーとして分類されたファイルを無視しなくなります。-u(-U NUMまたは--unified[=NUM])-uオプションは、統一されたコンテキストの出力の NUM 行 (デフォルトは 3 行) の形式で出力を返します。これは、パッチファイルで一般的に使用される、コンパクトで読みやすい形式です。-r(--recursive)-rオプションは、diffユーティリティーが検出したサブディレクトリーを再帰的に比較します。
ただし、この場合は、
-uオプションのみが必要であることに注意してください。ファイルにパッチを保存します。
$ diff -Naur cello.c.orig cello.c > cello.patch元の
cello.cを復元します。$ mv cello.c.orig cello.c重要RPM パッケージマネージャーは RPM パッケージをビルドするときに、変更されたファイルではなく元のファイルを使用するため、元の
cello.cを保持する必要があります。詳細は、spec ファイルでの作業 を参照してください。
5.1.2. サンプル C プログラムへのパッチ適用 リンクのコピーリンクがクリップボードにコピーされました!
パッチ ユーティリティーを使用して、C 言語で書かれたサンプル Hello World プログラム (cello.c) にコードパッチを適用します。
前提条件
システムに
patchユーティリティーをインストールした。# dnf install patch- 元のソースコードからパッチを作成した。手順は、サンプル C プログラムのパッチファイルの作成 参照してください。
手順
パッチファイルの出力先を
patchコマンド変更します。$ patch < cello.patchpatching file cello.ccello.cの内容に必要な変更が反映されていることを確認します。$ cat cello.c#include<stdio.h> int main(void){ printf("Hello World from my very first patch!\n"); return 1; }
検証
パッチを適用した
cello.cプログラムをビルドします。$ makegcc -g -o cello cello.cビルドした
cello.cプログラムを実行します。$ ./celloHello World from my very first patch!