LoginSignup
37
36

More than 5 years have passed since last update.

自己解凍式バイナリの作り方

Posted at

自己解凍式のバイナリって?

身近な例で言うとオラクルがJAVAの配布使ってるような foobar.binというような.binサフィックスの付いているパッケージングされた実行ファイルのことです。伝統的な./configure && make && make install式のtarball形式のパッケージとは違って一つの実行ファイルの中にインストールスクリプトとインストールするデータを含めることができです。

利点

  • ワンクリックで実行可能。
  • いちいちtar xfで解凍とか./configureを実行しなくていい。
  • 設定ファイル(.vimrcなど)等のリソースファイルをそのまま実行ファイルの中に埋め込める。

仕組み

仕組みは至って単純で、リソースファイルをアーカイブしたものの先頭にインストールスクリプトは結合させて一つにまとめただけです。
341ucvdas1daffdas.png

作り方

  1. リソースファイルをtarコマンドでアーカイブする。
  2. お好みの圧縮コマンドで圧縮(gzip等)
  3. リソースファイルの名前は(仮にresource.tgzとしておく)
  4. 以下のスクリプトを用意する
#! /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
  1. これをINSTALL.shとしてcatでリソースファイルと連結する。
cat INSTALL.sh resource.tgz > package.bin
  1. 完成!!

活用例

  • 友人にいちいちビルド手順を説明しなくても実行ファイルを渡して実行してもらえば自動的にインストールできる!!
  • 自作ライブラリのポータブルなインストール方法としてクロスプラットフォームな手段になる?
  • ちなみに自分は*nixをインストールしては壊して、またインストールしたりするのが趣味なので設定ファイル等の設置を効率化するために定期的にこの実行ファイルを作って保存しています。
37
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
36