7

私たちのチームは、RHEL/CentOS で配布されるさまざまなパッケージのカスタマイズを頻繁に実行します。私たちのワークフローには、SRPM のインストール、rpmbuild -bpソースのアンパックとパッチの実行、変更の実行、specfile に含まれる .patch の作成、後でモックで使用するための新しいカスタマイズされた SRPM のビルドが含まれます。

$ rpm -i grub-0.97-13.5.1.src.rpm
$ rpmbuild -bp rpmbuild/SPECS/grub.spec
$ cp -a rpmbuild/BUILD/grub-0.97 grub-0.97.orig
$ cd rpmbuild/BUILD/grub-0.97
  # Make modifications, generate .patch against ".orig" copy
$ vim rpmbuild/SPECS/grub.spec
  # Add custom .patch to specfile, update version, etc
$ rpmbuild -bs rpmbuild/SPECS/grub.spec
$ mock -r default-x86_64.cfg rpmbuild/SRPMS/grub-0.97-13.5.1.custom-1.src.rpm

このプロセスはうまく機能しますが、現在、変更や仕様ファイルの変更を追跡するためにソース管理の形式を使用していません。私の (確かに基本的な) git の理解に基づいて、git をこのワークフローに挿入し、その力の一部を活用していくつかのステップを最適化することが可能であると思います (SCM の通常の利点に加えて)。

たとえば、ソースのコピーをdiff後で作成するのではなく、アップストリームにパッチが適用されたソースの最初のコミットを作成してから、変更を加えることができます。準備ができたら、 を使用git format-patchして機能パッチを作成し、specfile に追加します。

また、スペックファイルのバージョン管理も行いたいと考えていますが、それを実現する最善の方法はわかりません。


だから私の質問は3つあります:

  1. アップストリーム パッケージをカスタマイズするときに SCM を使用している人はいますか?
  2. Git をワークフローに統合する最も効果的な方法は何ですか?
  3. バージョン管理されたカスタム RPM オーサリングをより助長する、より良いワークフローはありますか?

追加クレジット: git ベースのワークフローを想定すると、プッシュを受け入れる中央リポジトリをどのように構築すればよいでしょうか? サブモジュールを含む 1 つのレポ? パッケージごとに 1 つのレポ?

4

1 に答える 1

9

アップストリーム パッケージをカスタマイズするときに SCM を使用している人はいますか?

もちろん。これはかなり一般的です。

Git をワークフローに統合する最も効果的な方法は何ですか? バージョン管理されたカスタム RPM オーサリングをより助長する、より良いワークフローはありますか?

最も効果的な方法についてはわかりませんが、これが私がしていることです。次の~/.rpmmacrosファイルから始めます。

%_topdir    %(echo ${RPM_TOPDIR:-$HOME/redhat})
%_specdir   %{_topdir}/PACKAGES/%{name}/%{version}
%_sourcedir %{_topdir}/PACKAGES/%{name}/%{version}/sources
%_rpmdir    %{_topdir}/PACKAGES/%{name}/%{version}/rpms

パッケージ (たとえば、foo-1.0-1.src.rpm) をインストールすると、spec ファイルは .xml ~/redhat/PACKAGES/foo/1.0/foo.specになり、ソース tarball (およびすべてのパッチ) は~/redhat/PACKAGES/foo/1.0/sources.

ここで、パッケージ ディレクトリを git リポジトリとして初期化します。

cd ~/redhat/PACKAGES/foo/1.0
git init
git add foo.spec sources/*.patch
git ci -m 'initial commit'

spec ファイルへの変更を記録することについて特別なことは何もありません:

git ci -m 'made some really spiffy changes' foo.spec

パッケージのソース ファイルを変更する必要がある場合は、次のようにします。

rpmbuild -bp foo.spec

次に、一時的な git リポジトリを作成します。

cd ~/redhat/BUILD/foo-1.0
git init
git add .
git ci -m 'initial commit'
git tag upstream

この時点から、変更を加えると、次のようにアップストリーム パッケージに対してパッチを生成できます。

git diff upstream

または、一連のコミットを行った場合は、git のformat-patchコマンドを使用して一連のパッチを作成できます。

$ git format-patch upstream
0001-added-text.patch
0002-very-important-fix.patch

そして、これらを適切なsourcesディレクトリにコピーして、仕様ファイルに追加できます。

ビルド ディレクトリ内の変更を追跡するために作成した一時的な git リポジトリは、次に を実行したときに消去されることに注意してくださいrpmbuild

于 2011-09-24T01:45:28.307 に答える