Ubuntu ポータブル実行ファイルに相当するもの

Ubuntu ポータブル実行ファイルに相当するもの

私は、ある程度の依存関係を持つアプリケーションを開発しており、そのために外部ツールを使用しています。 一例として、Java プログラムからリモート マシンに Telnet/SSH 接続するために、PuTTY のコマンドライン ツール plink.exe を使用しています。

今、Ubuntu に切り替えると、同じことを実行するユーティリティ sshpass があります。問題は、sshpass がまだインストールされていないことと、インストールされるまでプログラムが動作しないことです。

Windows では、何かがない場合は、プログラムにポータブル実行可能ファイル (例: plink.exe) をパッケージ化し、実行時に使用して作業を行うことができます。Ubuntu では、.exe のようなファイルをパッケージ化して、引数を付けて呼び出すだけで同様のタスクを実行できる方法があるかどうかを知りたいです。

基本的に知りたいのは、Ubuntu でファイルをインストールせずに実行する方法があるかどうかです。ある場合、どのように可能ですか?

答え1

Linux では、Windows と同様に、すべての依存関係を静的ファイルとしてリンクして任意のプログラムをコンパイルできます。ただし、Linux ではこれが通常の方法ではないという点が異なります。

Linux では、各プログラムを 1 回だけインストールします。shhpass を使用する必要がある場合は、ソフトウェアにバンドルするのではなく、インストール パッケージ (Ubuntu の場合は deb ファイル) に依存関係としてリストする必要があります。パッケージ マネージャーは、プログラムをインストールするときに取得してインストールします。

この動作には、効率性 (共有メモリの使用) からセキュリティ (バンドルされたプログラムにセキュリティ バグが同梱される可能性がある) まで、いくつかの理由があります。他のすべてと同様に、このアプローチにも欠点があり、主にソフトウェアをインストールするための集中的な場所が必要になりますが、回答の重要な点は、物事がどのようになっているかであり、物事がどのようになる可能性があるかではありません。

簡単に答えると、はい、できます。しかし、それは難しいでしょう。Unix のような OS の文化と設計と戦うことになります。バンドルしたいすべてのプログラムの独自のバージョンをコンパイルする必要がある可能性が高く、ほとんどのパッケージ作成者とユーザーはそれを好まないでしょう。

答え2

Ubuntu での慣用的なアプローチは、生のプログラムではなく、プログラムとその依存関係をリストした .deb パッケージを提供することです。その後、パッケージをインストールすると、不足している依存関係が自動的にインストールされます (標準ソースから入手できると仮定)。

いくつかの文書がありますここパッケージの作成について。

よりWindowsっぽい(そしてややOSXっぽい)別のアプローチとしては、すべての依存関係を静的にリンクしたビルドをアプリにバンドルし、それを実行場所の一時ディレクトリに展開するというものがあります。次のようなツールを使うことができます。自分をこれを行うには、必要なすべての実行可能ファイル、jar、および適切な起動スクリプトをディレクトリに配置すると、残りの作業は自動的に実行されます。

答え3

Linux では、任意のファイルを実行できます (権限がある限り)。Java プログラムからは、パッケージ化した任意の .exe ファイルを呼び出すことができます。

ただし、.exe ファイルが Linux で実行可能であることを確認する必要があります。.exe のほとんどは、1 つのオペレーティング システムに固有のものです。たとえば、putty の Web サイトでは、実行可能ファイルにコンパイルする必要がある UNIX 用のソース コードのみを提供しています (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)。Windows の場合、実行可能ファイルは既にコンパイルされていますが、Linux/UNIX では実行できない可能性があります。

関連情報