5

複数の RPM の構築を担当しています。作成する必要がある各 RPM パッケージの元の SPEC ファイルと、必要な環境をセットアップして RPM をビルドする BASH スクリプトがあります。

これらの RPM をビルドするために、make などの実際のビルド ツールを使用したいと考えています。そうすることで、明確で保守しやすい構成ファイル (make の Makefile に似ています) を優先して、カスタムの難読化 BASH スクリプトの必要性をなくしたいと考えています。しかし、POSIX makeを使用して一連の make ファイルを最新の状態に保つことは、現在 RPM パッケージのビルドに使用している BASH スクリプトを維持することと同じくらいの作業です。make コマンドの機能をラップする cmake や automake などのプログラムには理由があります。これらのツールはより表現力があり、より小さく、よりクリーンな構成ファイルを可能にします。

ただし、C および C++ 開発用に特別に構築されているように見えるため、autoconf / automakeを使用するのも適切ではないようです。sconsを使用することも提案されていますが、これが最良の選択のように思えますが (構成ファイルが実際の python スクリプトであるため)、これも特定の言語に対応しています。

SPEC ファイルを「ソース コード」として使用し、環境を「依存関係」 (RPM の作成に必要な rpmbuild のディレクトリ ツリー構造の設定など) として使用する場合、BASH スクリプトをよりクリーンに置き換えるために使用できる優れたビルド ツールはありますか?保守可能な RPM 構築ソリューション?

編集:「ビルドツール」と言うときに必要なものが不明だったようです。SPEC ファイル (およびバイナリの関連ソース コード) を「ソース コード」として使用して RPM を「コンパイル」するために使用する「コンパイラ」として、既に rpmbuild を使用しています。そのプロセスを調整できるツールを求めています。

4

5 に答える 5

7

実行する必要があることの複雑さによっては、SCons が確かに適切な選択になる可能性があります。私は、Bash よりも Python でスクリプトを作成する方がはるかに簡単だといつも思っています。しかし、それは個人的な好みでもあります。

SCons で RPM を生成するための適切な Python/SCons コードは次のとおりです。

env = Environment(tools=['default', 'packaging'])

rpmSourceFiles = ['file1', 'file2'] # This is a Python list
rpmTargetFile = 'yourRpmFile'

env.Package( source         = rpmSourceFiles,
             target         = rpmTargetFile,
             NAME           = 'foo',
             VERSION        = '1.2.3',
             PACKAGEVERSION = 0,
             PACKAGETYPE    = 'rpm',
             LICENSE        = 'gpl',
             SUMMARY        = 'balalalalal',
             DESCRIPTION    = 'this should be really really long',
             X_RPM_GROUP    = 'Application/fu',
             SOURCE_URL     = 'http://foo.org/foo-1.2.3.tar.gz'
        )

ここに記載されている Package() ビルダーを見つけることができます。に関してはrpmSourceFiles、これは Python リストであり、RPM 入力ファイルをリストする必要があります。SCons を使用してこれらのソース ファイルをインストールした場合は、単純な名前をリストするだけでかまいません。それ以外の場合は、絶対パスを指定する必要があります。

Python のみを使用する場合の別のオプションは、ここで説明されているように、Python で RPM を直接プログラムすることです。

于 2012-10-24T05:27:53.457 に答える
1

私は scons を使用して RPM および Debian パッケージをビルドしたので、Package として統合されたツールは最悪であり、十分ではない最小限の機能しかありません。私の経験に基づいて、bash、python、またはその他のスクリプト言語でビルドスクリプトを作成し、カスタムアクションを使用してsconsから呼び出して、サブプロセスでスクリプトを呼び出し、バイナリ/ライブラリ/その他のアーティファクトから依存関係を設定することをお勧めします。このコマンド。

もちろん、scons をビルド システムとして使用する場合は適用できますが、そうでない場合は無視してください。

于 2012-10-24T07:14:36.260 に答える
1

@Serge が述べたように、rpmbuild は使用したいツールです。すべての RPM ベースのディストリビューションに rpm パッケージ (またはサブパッケージ) が付属しています。RPM ベースのディストリビューションでは、fedora や RH ベースのディストリビューションなど、多くのヘルパー コマンドが利用できます。rpmdevtools パッケージには、多くの便利なスクリプト/コマンドがあります。

ビルダーを探している場合、Fedora プロジェクトはビルダー koji を使用します。これは fedorahosted.org でホストされています。koji サーバーをセットアップし、koji 用のコマンド ライン ツールを使用して RPM を構築できます。Builder で問題が完全に解決されるわけではありませんが、時間があれば見てみてください。

于 2012-10-23T22:41:33.210 に答える
0

結果の RPM が見つからない可能性があります。デフォルトは<YOUR_RPMBUILD_DIR>/RPMS/<ARCH>

アーキテクチャによって異なります。、、またはARCHのいずれかx86_64である可能性があります。i586noarch

次のことができます~/.rpmmacros

%home %(echo $HOME)
%packager NAME OF PACKAGER
%vendor NAME OF VENDER
%_topdir ${home}/rpmbuild

それ以外の場合は、コンパイル、ビルド、tarball のパック、および RPM の生成に次のような Makefile が必要です。

SRCS = LIST OF SOURCE FILES
DATA = LIST OF DATA FILES TO BE PACKED
BINARY = LIST OF FILES AS RESULT OF BUILD
TARBALL = FILENAME_OF_THE_SOURCE_ARCHIVE

all: rpm

rpm: build pack
   rpmbuild -ba <PATH_TO_SPEC>

pack: TARBALL

TARBALL: BINARY DATA
    COMMAND TO PACK TARBALL

build: BINARY

BINARY: SRCS
   BUILD COMMANDS
于 2013-11-12T08:44:54.117 に答える