makeself

홈페이지: http://megastep.org/makeself/

makeself은 유닉스 계열의 운영체제에서 예전부터 많이 사용하는 인스톨러 스크립트이다.
makeself는 어떤 유닉스 계열이라도 설치되어 있는 tar, gz, sh.. 등을 이용하므로 다양한 유닉스 계열의 머신에서 생성및 설치가 가능하다.

간단 사용법

makeself.sh ./test test.sh "Test Installer" echo "Has been successfully installed."

./test 디렉토리를 묶어서 test.sh 파일을 생성하며, 배포시는 test.sh 파일만 배포하고, 사용자는 단순 실행해서 프로그램을 설치한다.

% ./test.sh
Creating directory test
Verifying archive integrity... All good.
Uncompressing Test Installer............................
Has been successfully installed.

생성된 test.sh 파일은 다양한 옵션을 자동으로 갖는데, 설치시 지정할 수 있다.

% ./test.sh --help

Makeself version 2.1.5
 1) Getting help or info about ./test.sh :
  ./test.sh --help   Print this message
  ./test.sh --info   Print embedded info : title, default target directory, embedded script ...
  ./test.sh --lsm    Print embedded lsm entry (or no LSM)
  ./test.sh --list   Print the list of files in the archive
  ./test.sh --check  Checks integrity of the archive
 
 2) Running ./test.sh :
  ./test.sh [options] [--] [additional arguments to embedded script]
  with following options (in that order)
  --confirm             Ask before running embedded script
  --noexec              Do not run embedded script
  --keep                Do not erase target directory after running
                        the embedded script
  --nox11               Do not spawn an xterm
  --nochown             Do not give the extracted files to the current user
  --target NewDirectory Extract in NewDirectory
  --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
  --                    Following arguments will be passed to the embedded script

다운로드: makeself-2.1.5.run

설치 위치 변경 못하게 막기

아래는 MyTcl 인스톨러에 사용된 코드.

; Directory page
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow
!insertmacro MUI_PAGE_DIRECTORY

Function DirectoryShow
	; 설치 위치 지정 못하도록 막음
	FindWindow $R1 "#32770" "" $HWNDPARENT
	GetDlgItem $R2 $R1 1019 # Dir box
	EnableWindow $R2 0
	GetDlgItem $R2 $R1 1001 # Browse button
	EnableWindow $R2 0
FunctionEnd

installer

레지스트리 키 존재여부 체크

아래는 MyTcl 인스톨러에 사용된 코드.

	ClearErrors
	EnumRegKey $1 "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}\Package" ""
	IfErrors 0 key_exist
		Goto key_no_exist
key_exist:
		MessageBox MB_ICONINFORMATION|MB_OK \
			"Package is installed in your system. please uninstall package(s) first."
		Abort
key_no_exist:
		; 설치 되어 있지 않으므로 진행