プロジェクトで libcurl を使用していますが、実行時に openssl と他の .so の束に依存しています。異なるディストリビューション/バージョンには異なるopensslバージョンが含まれている可能性があるため、この依存関係は一種の厄介な問題です。
たとえば、Ubuntu 9.10 でアプリをコンパイルすると、Ubuntu 11.10 での実行に問題が発生します。
まず、これの何が問題なのですか?古いバージョンの Ubuntu から新しいバージョンに移行する場合、問題は発生しないはずです。私が間違っていなければ、必要なライブラリの最小バージョンを指定するだけでよく、パッケージ マネージャーは適切なバージョンをインストールできるはずです。非推奨の機能を使用していない限り、新しいバージョンのライブラリによって既存のアプリが壊れることはありません。
私のアプリは本当に小さく、パッケージ化/維持するのはやり過ぎです。さらに、要件の 1 つは、ダウンロードして実行できることです。したがって、(1)は私にとってオプションではありません。
Linux (特に Ubuntu、Fedora、およびその他のトップ ディストリビューション) の場合、パッケージ化は実際にアプリケーションを配布する方法です。ダウンロード - インストール - 実行は Windows のものであり、Linux を使用している人がソフトウェアをインストールする方法ではありません (Linux を初めて使用する人はそうかもしれません...)。
また、時間の経過とともに負担を軽減するディストリビューションの受け入れを試みる必要があります。これに向けた最初のステップは、少なくとも Ubuntu では、独自の PPA ( https://help.launchpad.net/Packaging/PPA ) を作成することです。
静的リンク (2) は悪くない解決策ですが、libopenssl、libcrypto、および libcurl に付属するその他の推移的な依存関係の静的バイナリ配布はないようです。
これは通常、非常に悪いことです。ライブラリをアプリに静的にリンクするか、単にバンドルすると、ライブラリを更新する負担がかかり、それらを更新しないと影響があります。したがって、このアプローチはお勧めしません。詳細については、http ://www.dwheeler.com/blog/2012/04/03/#insecure-libraries を参照してください。
Fedora のポリシーは次のとおりです: http://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries
では、ここで質問です。何か足りないものはありますか? Linux の世界 (具体的には Ubuntu) で私がやりたいことをより苦痛の少ない方法で行う方法はありますか? どんな提案も歓迎します。
ここで実際に行うことは 2 つあります。
- パッケージ化: 理想的には、これは Ubuntu/Debian の場合は deb、Fedora/Suse の場合は rpm になります。もう 1 つの一般的な方法は、autotools (autoconf/automake) を使用して、ユーザーが必要な前提条件でアプリケーションをビルドできるようにすることです。最後のオプションは、Makefile と README のみを提供し、ユーザーが正しいことを行うことを期待することです。
- 配布: 理想的には、これはディストリビューション リポジトリを使用します。Ubuntu PPA は良い出発点です。別の方法は、バイナリ/パッケージを自分のサイトでホストすることです。
最も一般的なアプリケーションは、一般的な Linux ディストリビューション用の .deb/.rpm と、異なるパッケージ システムを持つディストリビューションでビルドするための autotools を備えた .tar.gz の両方を提供します。
最後に、お聞きしたいのですが、アプリケーションを提供する際の負担を軽減すること、またはユーザーがアプリケーションを取得する際の負担を軽減することに重点を置いていますか?