0

プログラムの RPM を構築しようとしていますが、いくつかの問題が発生しています。sedpostinstall/preremove でandコマンドをスクリプトとして実行しようとしていlnますが、変更が加えられていないようです。RPM をビルドするために maven rpm プラグインを使用しています。selinuxをオフにすると役立つかもしれないとどこかで読みましたが、それでも機能しません。CentOS 7 を使用しています。

pom.xml から:

  <postinstallScriptlet>
    <script>sed -i 's/foo/bar/g' /path/to/file</script>
  </postinstallScriptlet>
  <preremoveScriptlet>
    <script>sed -i 's/bar/foo/g' /path/to/file</script>
  </preremoveScriptlet>

これは手動で実行すると機能しますが、rpmの一部としては機能しません

4

1 に答える 1

0

これは、新規インストールで機能するはずです。ただし、パッケージをアップグレードしているときは機能しません。注文だから。https://fedoraproject.org/wiki/Packaging:Scriptlets#Scriptlet_Orderingを参照してください。

rpm は、最初に新しいパッケージの postinstallScriptlet を呼び出してインストールし、次に古いバージョンのパッケージの preremoveScriptlet を呼び出して古いバージョンを削除します。sed -i 's/foo/bar/g' /path/to/fileしたがって、基本的にはすぐに呼び出してからsed -i 's/bar/foo/g' /path/to/file.

おそらく次のようなものが必要です。

<preremoveScriptlet>
    <script>
if [ 0$1 -eq 0 ] ; then
  sed -i 's/bar/foo/g' /path/to/file
fi
</script>
  </preremoveScriptlet>

実際にパッケージをアンインストールする場合にのみ、sed を呼び出します。アップグレード中ではありません。インストール後のスクリプトレットについても同様です。https://fedoraproject.org/wiki/Packaging:Scriptlets#Syntaxを参照してください

于 2016-06-29T20:56:07.320 に答える