web-dev-qa-db-ja.com

Linuxバイナリインストーラー(.bin、.sh)はどのように機能しますか?

一部のソフトウェア(たとえば NetBeans IDE )は、Linuxインストーラーを.shファイルで出荷します。 IDE= 'Shell script'を正確に 'パッケージ化'することに興味があるので、エディターでファイルを開きました。私は、「バイナリ」またはプレーンテキストではないと考えています。

私は彼らがプレーンシェルスクリプトをどのように混合し、おそらく「読み取り不可能な」ものを呼び出すのだろうかと思っています。これはバイナリになります。

これに関する洞察はありますか?

62
user59634

基本的に、それはtarアーカイブなどのある種の圧縮アーカイブに付加されるシェルスクリプトです。自分でtailまたはsedコマンド(Bourne Shellの$0変数)を使用して、先頭のシェルスクリプトを取り除き、残りをアンアーカイバに渡します。

たとえば、次のスクリプトをself-extractingとして作成します。

#!/bin/sh -e
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup
exit

上記のsedコマンドは、ファイルの最初の行から「exit」で始まる最初の行までのすべての行を削除し、残りを通過させます。 「exit」行の直後に始まるものがtarファイルである場合、tarコマンドはそれを抽出します。それが成功すると、./project/Setupファイル(おそらくtarballから抽出された)が実行されます。

次に:

mkdir project
echo "#!/bin/sh" > project/Setup
echo "echo This is the setup script!" >> project/Setup
chmod +x project/Setup
tar czf - project >> self-extracting

これで、古いprojectディレクトリを削除すると、self-extractingを実行でき、そのtarファイルを抽出してセットアップスクリプトを実行できます。

86
Curt J. Sampson

あなたはチェックアウトしたいかもしれません makeself.sh

著者のメモから。

makeself.sh ディレクトリから自己抽出可能なtar.gzアーカイブを生成する小さなシェルスクリプトです。結果のファイルはシェルスクリプトとして表示され(多くのファイルには.runサフィックスが付きます)、そのまま起動できます。その後、アーカイブは一時ディレクトリにそれ自体を解凍し、オプションの任意のコマンドが実行されます(インストールスクリプトなど)。

Makeselfアーカイブには、整合性自己検証用のチェックサム(CRCおよび/またはMD5チェックサム)も含まれます。

Makeself.shスクリプト自体は、ファイルのディレクトリからアーカイブを作成するためにのみ使用されます。結果のアーカイブは、実際には圧縮された(gzip、bzip2、またはcompressを使用した)TARアーカイブであり、最初に小さなシェルスクリプトスタブがあります。この小さなスタブは、ファイルの抽出、埋め込みコマンドの実行、および一時ファイルがすべて終了したときの削除のすべてのステップを実行します。そのようなアーカイブに含まれるソフトウェアをインストールするためにユーザーがしなければならないことは、アーカイブを「実行」することです(つまり、スクリプトを実行します)

私はこのスクリプトのコードを可能な限り移植可能にしようとしています。つまり、bash固有の機能に依存せず、機能しているUNIX互換システムにインストールされているコマンドのみを呼び出します。このスクリプトとそれが生成するアーカイブは、圧縮プログラムが利用可能であることを条件に、互換性のあるBourne Shellを備えたUnixフレーバーで実行する必要があります。

最後に、makeselfパッケージ自体は、 makeself.run

52
nik
11
seb

GNU sharutils:

http://www.gnu.org/software/sharutils/

は、シェルアーカイブを作成するためのツールセットであり、役立つ可能性のある追加機能を提供します(ペイロードが転送中に破損しないようにするためのチェックサムなど)。

最終製品がシェルによって解釈可能でなければならない場合、悪意のある変更から保護することは実際には実行できません。生成手法を理解している人は誰でもチェックサムを変更できます。

4
James F

また、他の/商用ソフトウェアインストーラービルダー(InstallAnywhereなど)もあり、基本的に独自のバージョンのshar/makeselfがあります。

Netbeansには独自のインストーラーエンジンがあり、その一部はNBIネイティブランチャーコンポーネントで展開と起動を行います。 http://wiki.netbeans.org/NBINativeLaunchers

Linux/Unix/MacOS用のShell(script)アーカイブとWindows用のネイティブ実行可能ファイルを作成します。このツールは、独自のプロジェクトにも使用できます。

0
eckes