背景
Centos 7で実行する必要があるC ++アプリケーションを作成しています。ビルドはCentos 7.9で行われ、以前のバージョンのCentos 7との互換性を制限するC ++ 11およびC ++ 17機能を使用しています。ユーザーがアプリケーションを実行する前にいくつかのチェックを実行するインストーラがあります。
質問
開発中のアプリケーションがサポートする最小Centos 7バージョンを自動的に確認するにはどうすればよいですか?
私が現在持っているもの
ldd
これで、ビルド後に必要なライブラリのリストを取得するためにおよびを使用していますreadelf
(参照:https://stackoverflow.com/questions/6242761/define-direct-shared-object-dependent-of-a-linux-binary)。このリストを使用して、ユーザーが持っているものと自分のアプリケーションに必要なものを比較できます。ユーザーのバージョンが必要なバージョンより低い場合は、インストーラからアップグレードするように指示します。しかし、このアプローチでは、私のリストは、最も古い互換バージョンではなく、ビルドシステムにあるライブラリのバージョンを伝えます。
私がすることは、ビルドマシンをCentos 7のいくつかのバージョンにダウングレードし、アプリがコンパイルされている場合は、そのバージョンが最小サポートバージョンであると言うことです。その後、インストーラはユーザーのライブラリバージョンを生成されたリストと比較します。つまり、新しいバージョンが私が使用するバージョンと下位互換性があるという約束をしたいのですが、CentosやRed HatのWebページではそのようなコンテンツが見つかりません。サポートされていない以前のオペレーティングシステムのバージョンでは、セキュリティの問題もあります。
2番目のオプションは私のビルドシステムのすべてをサポートすることですが、一部のユーザーはアップグレードする必要があるかもしれませんし、気に入らないかもしれません。
3番目のオプションは、アプリケーションをビルドし、以前のバージョンのCentosで実行してみることです。
最大の問題は、パケットマネージャの外部にLinuxアプリケーションをデプロイする方法の知識が不足していることです。 Windowsでは、すべてのDLLをEXEにパッケージ化します(ほとんどの場合)。しかし、Linuxではそうすることはできません(つまり、RPATHを台無しにすることができるという意味です...)。
答え1
これただサポートされているすべてのRHELバージョンは$release
この$latest
バージョンです。たとえば、7の場合は7.9です。以前のバージョンを対象とするのは時間とリソースの無駄です。視聴者が7.9以外のバージョンを実行している場合、重大なセキュリティホールが発生します。
最大の問題は、パケットマネージャの外部にLinuxアプリケーションをデプロイする方法の知識が不足していることです。
- flatpak/snap/appimage として公開します。 (私は通常このアプローチが好きではありませんが、Linuxディストリビューションは埋められてから古くなっています。最下位ビット)
- アプリケーションがオープンソースの場合は、すべての項目と静的にリンクできます(これは非常に悪い考えです)。
- ソースコードの形式で配布し、必要な人が自分でコンパイルするようにしてください。