2017年12月23日土曜日

シェルスクリプトとバイナリを結合してインストーラにする

シェルスクリプトと tar.gz とかのバイナリアーカイブを結合して、1 ファイルのインストーラにする方法。
最近、よく目にするようになった。
コピペで使えるようにしておく。

仕組みは、自スクリプトの末尾に __ARCHIVE__ マーカーを書いておいて、その後ろにアーカイブを結合。
スクリプト実行時に grep で検索して開始行を取得、tail で切り取って展開という流れ。

1. ベースとなるシェルスクリプトを作成

まずは、ベースとなるシェルスクリプトを作成。
末尾 __ARCHIVE__ の後ろに空行を入れないようにします。

$ vi base.sh

#!/bin/sh

# ここに処理を書いても良い

# アーカイブの開始位置を取得
ARCHIVE_OFFSET=$(($(grep -na -m1 "^__ARCHIVE__$" $0 | cut -d ':' -f1) + 1))

# アーカイブを解凍
tail -n +${ARCHIVE_OFFSET} $0 | tar zxf -

# ここに処理を書いても良い

# exit 0 を忘れずに
exit 0

__ARCHIVE__

2. 上のスクリプトとアーカイブ (tar.gz の例) を cat で結合

$ cat base.sh hogehoge.tar.gz > installer.sh

● シェルスクリプト, インストーラ, 結合, shell script, installer, cat, archive, tar.gz, 自己解凍

0 件のコメント: