Ubuntuに基づいて構築されたアプリケーションをCentOSにデプロイする方法はありますか?それでは、どうすればいいですか?
編集:申し訳ありません。より多くの情報を提供する必要がありました。
Ubuntu 15.10とQt 5.6に基づいて構築されており、Qtに加えて静的にリンクされた依存関係が1つしかありません。依存関係が静的にリンクされているかどうかはわかりませんが、一部のブーストライブラリを使用してUbuntu関連のエントリがないため、問題にならないようです。
答え1
別のディストリビューションで利用可能な必須ライブラリがある限り、別のディストリビューションで1つのLinuxディストリビューション用にコンパイルされたアプリケーションを実行できます。実際、問題はしばしば、異なるディストリビューションがある時点で異なるバージョンのライブラリをリリースすることです。
ライブラリを静的にリンクするのは悪い考えです。これは、アプリのファイルサイズを膨らませ(インターネットの帯域幅が非常に小さい人を除いてほとんどの場合問題ありません)、メモリ内のアプリのサイズを膨らませて(実際には大きな問題です)、アプリケーションがすべてのバグのために停滞する可能性があることを意味します。あなたがリンクしたバージョンから。ユーザーがライブラリのバグ修正、特にセキュリティ修正の利点を享受できるように、ライブラリを動的にリンクします。
また、できる限り走るアプリケーションにカプセル化の問題があります。手動でアプリをインストールするのは痛いです。 CentOS用のRPMパッケージとUbuntu用のdebパッケージをデプロイしないと、ユーザーに有害です。
したがって、すべてのディストリビューションに適したパッケージを作成する必要があります。あなたはできます走るCentOSでUbuntu用に構築されたアプリケーションは、ライブラリの要件に応じて多少の努力が必要ですが、そうすることはできません。展開CentOSでUbuntu用に構築されたアプリケーションです。
答え2
これは、アプリケーションの作成方法とアプリケーションの依存関係によって異なります。 Pythonなどで書かれている場合、通常は互換性のあるPythonインタプリタとモジュールがインストールされている限り実行されます。
elfバイナリの場合は、バイナリ互換性ライブラリをインストールするかどうかによって異なります。一部のライブラリは、使用できないバージョンまたは互換性のないバージョンでのみ使用可能であるか、名前が間違っている可能性があるため、バイナリを静的にリンクしたり、欠落しているライブラリをアプリケーションと共にデプロイしたりできます。
また、使用することができますフラットパックアプリケーションをパッケージ化し、複数のディストリビューションで使用してください。
答え3
他の人が述べたように、アプリケーションをシステムに直接インストール/圧縮解除することは、アプリケーションがスクリプトであるかコンパイルされたバイナリであるか、静的または動的リンク、libバージョンなどに応じて動作する場合も、動作しない場合もあります。
アプリケーションを実行するには、アプリケーションが構築されたオペレーティングシステムのコンテキスト内で実行する必要があります。最も簡単な方法の1つはdockerです。やや強力なソリューションですが、基本的にあるオペレーティングシステムを別のオペレーティングシステム内で実行できます。したがって、Ubuntuコンテナを実行し、その中にアプリケーションを置くことができます。
Ubuntu chrootを設定し、その中でアプリケーションを実行することもできます。これは docker が行うのと似ていますが、はるかに軽いです。
これらのソリューションが解決できない唯一の問題は、アプリケーションがUbuntuにのみ存在する特定のカーネル機能に依存している場合です。しかし、これは可能性が低いです。