自己解凍式のバイナリって?
身近な例で言うとオラクルがJAVAの配布使ってるような foobar.bin
というような.bin
サフィックスの付いているパッケージングされた実行ファイルのことです。伝統的な./configure && make && make install
式のtarball形式のパッケージとは違って一つの実行ファイルの中にインストールスクリプトとインストールするデータを含めることができです。
利点
- ワンクリックで実行可能。
- いちいち
tar xf
で解凍とか./configure
を実行しなくていい。 - 設定ファイル(
.vimrc
など)等のリソースファイルをそのまま実行ファイルの中に埋め込める。
仕組み
仕組みは至って単純で、リソースファイルをアーカイブしたものの先頭にインストールスクリプトは結合させて一つにまとめただけです。
作り方
- リソースファイルをtarコマンドでアーカイブする。
- お好みの圧縮コマンドで圧縮(
gzip
等) - リソースファイルの名前は(仮に
resource.tgz
としておく) - 以下のスクリプトを用意する
#! /bin/bash -x
DESTINATION= ##{インストール場所}##
ENDLINE=$(grep --line-number --text "^##ENDLINE$" $0 | sed 's/:.*//')
tail --lines=+$(($ENDLINE + 1)) $0 \
| gzip --decompress --to-stdout \
| tar --extract --directory $DESTINATION
########## INSTALL_PROCESS ##########
## ln -sやcpでリソースファイルを設置する.
## リソースファイルは$DESTINATIONに格納されています。
#####################################
exit
##ENDLINE
- これを
INSTALL.sh
としてcat
でリソースファイルと連結する。
cat INSTALL.sh resource.tgz > package.bin
- 完成!!
活用例
- 友人にいちいちビルド手順を説明しなくても実行ファイルを渡して実行してもらえば自動的にインストールできる!!
- 自作ライブラリのポータブルなインストール方法としてクロスプラットフォームな手段になる?
- ちなみに自分は*nixをインストールしては壊して、またインストールしたりするのが趣味なので設定ファイル等の設置を効率化するために定期的にこの実行ファイルを作って保存しています。