SLES15 SP4 | "/usr/lib/1sb/install _initd: 対応するファイルまたはディレクトリが存在しない" のために %post スクリプトが失敗すると、rpm パッケージのインストールが失敗する

SLES15 SP4 |

.specrpmインストールファイルがあります。インストール後、次のコードがあります(%postスクリプトレット)。

%post -n %{package_name}
# Enable the service at boot time
%if %{?suse_version:1}0
  /usr/lib/lsb/install_initd %{_initrddir}/%{package_name}
%else
  chkconfig --add %{package_name}
%endi

インストール後の手順では、zypper install package_name次のエラーが原因で失敗します。

/var/tmp/rpm-tmp.Z5R29N: line 2: /usr/lib/1sb/install _initd: No such file or directory
warning: %post (package_name.sles15.x86_64) scriptlet failed, exit status 127

rpm用の.specファイルを初めて使用しますが、/usr/lib/lsb/SLES 15 SP4にディレクトリがないため、このスクリプトレットは失敗します。

私の質問は次のとおりです

  1. このスクリプトは正確に何をしていますか?
  2. /lsb/SLES 15 SP4でこのパスを作成できるように、このパッケージをどこで入手できますか? SLES 15 SP4にlsb-xxxパッケージがプリインストールされていることを確認しましたが、ここでは機能しませんか?
  3. このスクリプトレット内でsles 15 SP4のケースチェックを実行する必要がありますか?良い:
%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}
// do somthing
%endif

ベストアンサー1

この仕様は非常に古いです。

このスクリプトは正確に何をしていますか?

このコードスニペットが行うことは、init.d次の場所にスクリプトをインストールすることです。sysv-init、起動時にサービスを開始します。

SLE 12以降のSUSE(および移行された他のほとんどのディストリビューション)はsystemdinit.d完全に古い、サービスへの移行が保証されます。

SLES 15 SP4でこのパスを作成できるように、この/lsb/パッケージをどこで入手できますか? SLES 15 SP4にlsb-xxxパッケージがプリインストールされていることを確認しましたが、ここでは機能しませんか?

できません。現在のサービスを開始し管理するこれらの方法のサポートは非​​常に限られています。そのうちの1つは次のとおりです。systemd-sysv-generatorsystemd、これはソリューションですが、これが重要なソフトウェアである場合は、基本的なソリューションを使用します。

chkconfigただし、そのコードスニペットはSLES 15では実行されず、実行できないため、完全に書き直す必要があります。

このスクリプトレット内でsles 15 SP4のケースチェックを実行する必要がありますか?良い:

それでもサポートを受けており、SLE < 12既存の方法を維持する必要がある場合は、そうすることができます。


ネイティブにしたい場合は、次のことを行う必要があります。

  • インストールしたいスクリプトを見つけます。
  • このスクリプトを参考にしてシステムサービスユニットファイル
  • ソースがあり、編集できる場合はソースに追加してください。変更するソースコードがない場合は、ビルド時にパッチを適用する必要があります。
  • その部分を取り除き、それに従ってください。ガイド(openSUSEでは、SLEではうまく機能します)これをコードに構築してください

%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}

参考までに、これはopenSUSE Leap 15.4にのみ一致し、SLE 15.4には一致しない条件です。 LeapとSLEは同じなので問題にはなりませんが、意外なこともあります。

おすすめ記事