私たちのソフトウェア用のrpmパッケージをビルドする.specファイルがあります。 .specファイルの%preセクションで、ソフトウェアの以前のメジャーバージョンがインストールされていることを確認します。その場合、エラーメッセージとともにインストールが中断されます。以前のRHELバージョンでは、すべてがうまく機能しました。
RHEL 6.7(RHEL 6.5にもあるようです)では、rpmインストーラが%preセクションに到達できないか無視しますか? 「File... from the install of our-software-server-23.01-」について文句を言います。 1.el6". i386 が our-software-server-22.07-1.el6.i386 パッケージのファイルと競合してインストールが中断されます。 。
最新バージョン間でrpm処理がどのように変更されましたか?これまで私は何も見つかりませんでした。
rpm --version は 4.8.0 を表示します。
どんな助けでも大変感謝します!
%pre server
if [ $1 -gt 1 ]; then
# Check for an unsupported major version upgrade
INSTALLED_VER=$(rpm -q our-software-server|sed -e 's/our-software-server-\([0-9]\+\).*/\1/')
echo "Upgrade check:"
echo "installed : $INSTALLED_VER"
echo "new version: %{majorver}"
if [ "$INSTALLED_VER" -ne "%{majorver}" ]; then
echo
echo "ERROR:"
echo "An automatic RPM upgrade across major versions is not supported!"
echo "Please refer to the Upgrade Notes on how to manually perform"
echo "an upgrade and migrate the configuration data."
echo
exit 1
fi
...
答え1
rpm-4.8.0は、%postでrpmを呼び出してrpmの再帰的なインストールを防ぐために、/var/lib/rpm/.rpm.lockにグローバルファイルロックを追加しました。
バラより rpmを使用してパッケージをインストールできないのはなぜですか? 「取引がロックされました」というメッセージが表示されます。
同時に、グローバルプロセス間のロックを持つか使用する必要はほとんどありません。 rpm(およびyumなどのrpmlib依存プロセス)は、グローバルロックを置いて競合することはほとんどありません。
短い答え:%postでrpm -qを試す前にロックファイルの名前を変更し、%postを終了する前にファイルを復元してください。実際、グローバルロックファイルの名前を変更して開くロック競合ウィンドウは非常に小さいです。
%preでrpmを呼び出すのではなく、依存関係を使用しようとするよりも優れたソリューションです。