一部のソフトウェア(たとえば NetBeans IDE )は、Linuxインストーラーを.shファイルで出荷します。 IDE= 'Shell script'を正確に 'パッケージ化'することに興味があるので、エディターでファイルを開きました。私は、「バイナリ」またはプレーンテキストではないと考えています。
私は彼らがプレーンシェルスクリプトをどのように混合し、おそらく「読み取り不可能な」ものを呼び出すのだろうかと思っています。これはバイナリになります。
これに関する洞察はありますか?
基本的に、それは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ファイルを抽出してセットアップスクリプトを実行できます。
あなたはチェックアウトしたいかもしれません makeself.sh
著者のメモから。
makeself.sh ディレクトリから自己抽出可能なtar.gzアーカイブを生成する小さなシェルスクリプトです。結果のファイルはシェルスクリプトとして表示され(多くのファイルには.runサフィックスが付きます)、そのまま起動できます。その後、アーカイブは一時ディレクトリにそれ自体を解凍し、オプションの任意のコマンドが実行されます(インストールスクリプトなど)。
Makeselfアーカイブには、整合性自己検証用のチェックサム(CRCおよび/またはMD5チェックサム)も含まれます。
Makeself.shスクリプト自体は、ファイルのディレクトリからアーカイブを作成するためにのみ使用されます。結果のアーカイブは、実際には圧縮された(gzip、bzip2、またはcompressを使用した)TARアーカイブであり、最初に小さなシェルスクリプトスタブがあります。この小さなスタブは、ファイルの抽出、埋め込みコマンドの実行、および一時ファイルがすべて終了したときの削除のすべてのステップを実行します。そのようなアーカイブに含まれるソフトウェアをインストールするためにユーザーがしなければならないことは、アーカイブを「実行」することです(つまり、スクリプトを実行します)
私はこのスクリプトのコードを可能な限り移植可能にしようとしています。つまり、bash固有の機能に依存せず、機能しているUNIX互換システムにインストールされているコマンドのみを呼び出します。このスクリプトとそれが生成するアーカイブは、圧縮プログラムが利用可能であることを条件に、互換性のあるBourne Shellを備えたUnixフレーバーで実行する必要があります。
最後に、makeself
パッケージ自体は、 makeself.run
。
GNU sharutils:
http://www.gnu.org/software/sharutils/
は、シェルアーカイブを作成するためのツールセットであり、役立つ可能性のある追加機能を提供します(ペイロードが転送中に破損しないようにするためのチェックサムなど)。
最終製品がシェルによって解釈可能でなければならない場合、悪意のある変更から保護することは実際には実行できません。生成手法を理解している人は誰でもチェックサムを変更できます。
また、他の/商用ソフトウェアインストーラービルダー(InstallAnywhereなど)もあり、基本的に独自のバージョンのshar/makeselfがあります。
Netbeansには独自のインストーラーエンジンがあり、その一部はNBIネイティブランチャーコンポーネントで展開と起動を行います。 http://wiki.netbeans.org/NBINativeLaunchers
Linux/Unix/MacOS用のShell(script)アーカイブとWindows用のネイティブ実行可能ファイルを作成します。このツールは、独自のプロジェクトにも使用できます。