6

私はspecファイルを書き、RPMを構築するのは初めてです。現在、OSによって異なる2つの可能なディレクトリのうちの1つにいくつかのファイルを展開することになっている1つのRPMがあります。

%files セクション内でそれらを確認するにはどうすればよいですか? 変数を使用できません...どちらかのパスは確実に失敗するため、両方のパスを検証できません... %install セクションの前半でマクロを定義しようとしましたが、一度だけ定義され、再定義されませんすべての RPM インストールで...

ここで何ができますか?

ありがとう

4

4 に答える 4

4

RELEASE ビルドのすべてのファイルに加えて、DEBUG ビルドの場合に追加のファイルが RPM に含まれる同様の状況がありました。

トリックは、ファイルのリストを %files に渡し、その下に通常のファイルのリストを渡すことです:

%install
# Create a temporary file containing the list of files
EXTRA_FILES=$RPM_BUILD_ROOT/ExtraFiles.list
touch %{EXTRA_FILES}

# If building in DEBUG mode, then include additional test binaries in the package
%if %{build_mode} == "DEBUG"
# %{build_mode} is a variable that is passed to the spec file when invoked by the build script
# Like: rpmbuild --define "build_mode DEBUG"
echo path/to/file1 > %{EXTRA_FILES}
echo path/to/file2 >> %{EXTRA_FILES}
%endif

%files -f %{EXTRA_FILES}
path/to/release/file1
path/to/release/file2

あなたの場合、 %install セクションで %if 条件を利用し、渡された仕様変数として OS を使用rpmbuild(または RPM 仕様自体でそれを検出) し、リストを含むファイルをに渡すことができます%files

于 2014-01-30T14:10:47.710 に答える
2

セクションには変数を含める%filesことができますが、通常、これは定義されたパスのようなものになるため、何度も繰り返す必要はありません。so %{long_path}/file_name、 long_path は仕様ファイルで以前に定義されていました。この%filesセクションは、RPM データベースに入るすべての情報であり、RPM のビルド時に作成されるため、インストール時にマシン情報に基づいてこれらの値を変更することはできません。

本当にこれを行いたい場合は、特定の条件に応じて抽出されるメインの tarball 内に tar ファイルを含めることができます (spec ファイルは単なる bash であるため)。これはひどい考えであることを覚えておいてください。ファイルは RPM データベースによって追跡されないため、RPM を削除してもこれらのファイルは残ります。

実際には、2 つの RPM を構築する必要があります。これにより、将来、これを誰かに引き継がなければならない場合に、より良いサポートが可能になります。また、1 年後に RPM を更新する必要がある場合に、自分自身の正気を保つことができます。

于 2013-09-10T05:32:54.133 に答える
2

これが私の問題を解決した方法です

ステップ1 :

   In Build section .. somewhere I wrote :
 %build
  .....
  #check my condition here & if true define some macro
  %define is_valid %( if [ -f /usr/bin/myfile ]; then echo "1" ; else echo "0"; fi )
 #after his normal continuation
 .....
 ...

ステップ 2: インストール セクションで

  %install
  ......
  #do something in that condition
  if %is_valid
  install -m 0644 <file>
  %endif
  #rest all your stuff
  ................

ステップ 3:ファイル セクションで

   %files
   %if %is_valid 
   %{_dir}/<file>
   %endif

それでおしまい

できます。

PS:完全なコードを提供することはできないため、有用なスニペットをすべて提供します

于 2015-02-05T12:43:24.470 に答える