第3章 RPM パッケージ化を行うためのソフトウェアの準備
RPM を使用してソフトウェアをパッケージ化する準備をするには、まずソフトウェアにパッチを適用し、LICENSE ファイルを作成して、それを tarball 形式でアーカイブします。
3.1. ソフトウェアへのパッチの適用 リンクのコピーリンクがクリップボードにコピーされました!
ソフトウェアをパッケージ化する場合、バグの修正や設定ファイルの変更など、元のソースコードに特定の変更を加えることが必要になる場合があります。RPM パッケージでは、元のソースコードを変更せずにそのままにして、パッチを適用することができます。
パッチは、ソースコードファイルを更新するテキストです。パッチは 2 つのバージョンのテキストの差を示すものであるため、diff 形式を使用します。diff ユーティリティーを使用してパッチを作成し、patch ユーティリティーを使用してそのパッチをソースコードに適用できます。
ソフトウェア開発者は多くの場合、Git などのバージョン管理システムを使用してコードベースを管理します。このようなツールでは、diff やパッチソフトウェアを独自の方法で作成できます。
3.1.1. サンプル C プログラムのパッチファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
diff ユーティリティーを使用して、元のソースコードからパッチを作成できます。たとえば、C で書かれた Hello world プログラム (cello.c) にパッチを適用するには、次の手順を実行します。
前提条件
システムに
diffユーティリティーをインストールした。dnf install diffutils
# dnf install diffutilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
元のソースコードをバックアップします。
cp -p cello.c cello.c.orig
$ cp -p cello.c cello.c.origCopy to Clipboard Copied! Toggle word wrap Toggle overflow -pオプションは、モード、所有権、およびタイムスタンプを保持します。必要に応じて
cello.cを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow パッチを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow +で始まる行は、-で始まる行を置き換えます。注記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
$ diff -Naur cello.c.orig cello.c > cello.patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 元の
cello.cを復元します。mv cello.c.orig cello.c
$ mv cello.c.orig cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要RPM パッケージマネージャーは RPM パッケージをビルドするときに、変更されたファイルではなく元のファイルを使用するため、元の
cello.cを保持する必要があります。詳細は、spec ファイルでの作業 を参照してください。
3.1.2. サンプル C プログラムへのパッチ適用 リンクのコピーリンクがクリップボードにコピーされました!
ソフトウェアにコードパッチを適用するには、patch ユーティリティーを使用できます。
前提条件
システムに
patchユーティリティーをインストールした。dnf install patch
# dnf install patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 元のソースコードからパッチを作成した。手順は、サンプル C プログラムのパッチファイルの作成 参照してください。
手順
次の手順では、以前に作成した cello.patch ファイルを cello.c ファイルに適用します。
パッチファイルの出力先を
patchコマンド変更します。patch < cello.patch
$ patch < cello.patch patching file cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow cello.cの内容に必要な変更が反映されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
パッチを適用した
cello.cプログラムをビルドします。make
$ make gcc -g -o cello cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドした
cello.cプログラムを実行します。./cello
$ ./cello Hello World from my very first patch!Copy to Clipboard Copied! Toggle word wrap Toggle overflow