308 lines
16 KiB
Plaintext
308 lines
16 KiB
Plaintext
The following was generated from http://www.megastep.org/makeself/
|
|
-----------------------
|
|
|
|
|
|
#[1]Mobile/PDA
|
|
|
|
makeself - Make self-extractable archives on Unix
|
|
|
|
[2]makeself.sh is a small shell script that generates a self-extractable
|
|
tar.gz archive from a directory. The resulting file appears as a shell
|
|
script (many of those have a .run suffix), and can be launched as is. The
|
|
archive will then uncompress itself to a temporary directory and an optional
|
|
arbitrary command will be executed (for example an installation script).
|
|
This is pretty similar to archives generated with WinZip Self-Extractor in
|
|
the Windows world. Makeself archives also include checksums for integrity
|
|
self-validation (CRC and/or MD5 checksums).
|
|
|
|
The makeself.sh script itself is used only to create the archives from a
|
|
directory of files. The resultant archive is actually a compressed (using
|
|
gzip, bzip2, or compress) TAR archive, with a small shell script stub at the
|
|
beginning. This small stub performs all the steps of extracting the files,
|
|
running the embedded command, and removing the temporary files when it's all
|
|
over. All what the user has to do to install the software contained in such
|
|
an archive is to "run" the archive, i.e sh nice-software.run. I recommend
|
|
using the "run" (which was introduced by some Makeself archives released by
|
|
Loki Software) or "sh" suffix for such archives not to confuse the users,
|
|
since they know it's actually shell scripts (with quite a lot of binary data
|
|
attached to it though!).
|
|
|
|
I am trying to keep the code of this script as portable as possible, i.e
|
|
it's not relying on any bash-specific features and only calls commands that
|
|
are installed on any functioning UNIX-compatible system. This script as well
|
|
as the archives it generates should run on any Unix flavor, with any
|
|
compatible Bourne shell, provided of course that the compression programs
|
|
are available.
|
|
|
|
As of version 2.1, Makeself has been rewritten and tested on the following
|
|
platforms :
|
|
* Linux (all distributions)
|
|
* Sun Solaris (8 tested)
|
|
* HP-UX (tested on 11.0 and 11i on HPPA RISC)
|
|
* SCO OpenUnix and OpenServer
|
|
* IBM AIX 5.1L
|
|
* MacOS X (Darwin)
|
|
* SGI IRIX 6.5
|
|
* FreeBSD
|
|
* UnicOS / Cray
|
|
|
|
If you successfully run Makeself and/or archives created with it on another
|
|
system, then [3]let me know!
|
|
|
|
Examples of publicly available archives made using makeself are :
|
|
* Game patches and installers for [4]Id Software games like Quake 3 for
|
|
Linux or Return To Castle Wolfenstien ;
|
|
* All game patches released by [5]Loki Software for the Linux version of
|
|
popular games ;
|
|
* The [6]nVidia drivers for Linux
|
|
* The installer for the Linux version of [7]Google Earth
|
|
* The [8]Makeself distribution itself ;-)
|
|
* and countless others...
|
|
|
|
Important note for Apache users: By default, most Web servers will think
|
|
that Makeself archives are regular text files and thus they may show up as
|
|
text in a Web browser. The correct way to prevent this is to add a MIME type
|
|
for this file format, like so (in httpd.conf) :
|
|
AddType application/x-makeself .run
|
|
|
|
Important note for recent GNU/Linux distributions: Archives created with
|
|
Makeself prior to v2.1.2 were using an old syntax for the head and tail Unix
|
|
commands that is being progressively obsoleted in their GNU forms. Therefore
|
|
you may have problems uncompressing some of these archives. A workaround for
|
|
this is to set the environment variable $_POSIX2_VERSION to enable the old
|
|
syntax, i.e. :
|
|
export _POSIX2_VERSION=199209
|
|
|
|
Usage
|
|
|
|
The syntax of makeself is the following:
|
|
|
|
makeself.sh [args] archive_dir file_name label startup_script [script_args]
|
|
* args are optional options for Makeself. The available ones are :
|
|
+ --version : Prints the version number on stdout, then exits
|
|
immediately
|
|
+ --gzip : Use gzip for compression (is the default on platforms on
|
|
which gzip is commonly available, like Linux)
|
|
+ --bzip2 : Use bzip2 instead of gzip for better compression. The
|
|
bzip2 command must be available in the command path. I recommend
|
|
that you set the prefix to something like '.bz2.run' for the
|
|
archive, so that potential users know that they'll need bzip2 to
|
|
extract it.
|
|
+ --compress : Use the UNIX "compress" command to compress the data.
|
|
This should be the default on all platforms that don't have gzip
|
|
available.
|
|
+ --nocomp : Do not use any compression for the archive, which will
|
|
then be an uncompressed TAR.
|
|
+ --notemp : The generated archive will not extract the files to a
|
|
temporary directory, but in a new directory created in the current
|
|
directory. This is better to distribute software packages that may
|
|
extract and compile by themselves (i.e. launch the compilation
|
|
through the embedded script).
|
|
+ --current : Files will be extracted to the current directory,
|
|
instead of in a subdirectory. This option implies --notemp above.
|
|
+ --follow : Follow the symbolic links inside of the archive
|
|
directory, i.e. store the files that are being pointed to instead
|
|
of the links themselves.
|
|
+ --append (new in 2.1.x): Append data to an existing archive,
|
|
instead of creating a new one. In this mode, the settings from the
|
|
original archive are reused (compression type, label, embedded
|
|
script), and thus don't need to be specified again on the command
|
|
line.
|
|
+ --header : Makeself 2.0 uses a separate file to store the header
|
|
stub, called "makeself-header.sh". By default, it is assumed that
|
|
it is stored in the same location as makeself.sh. This option can
|
|
be used to specify its actual location if it is stored someplace
|
|
else.
|
|
+ --copy : Upon extraction, the archive will first extract itself to
|
|
a temporary directory. The main application of this is to allow
|
|
self-contained installers stored in a Makeself archive on a CD,
|
|
when the installer program will later need to unmount the CD and
|
|
allow a new one to be inserted. This prevents "Filesystem busy"
|
|
errors for installers that span multiple CDs.
|
|
+ --nox11 : Disable the automatic spawning of a new terminal in X11.
|
|
+ --nowait : When executed from a new X11 terminal, disable the user
|
|
prompt at the end of the script execution.
|
|
+ --nomd5 and --nocrc : Disable the creation of a MD5 / CRC checksum
|
|
for the archive. This speeds up the extraction process if integrity
|
|
checking is not necessary.
|
|
+ --lsm file : Provide and LSM file to makeself, that will be
|
|
embedded in the generated archive. LSM files are describing a
|
|
software package in a way that is easily parseable. The LSM entry
|
|
can then be later retrieved using the '-lsm' argument to the
|
|
archive. An exemple of a LSM file is provided with Makeself.
|
|
* archive_dir is the name of the directory that contains the files to be
|
|
archived
|
|
* file_name is the name of the archive to be created
|
|
* label is an arbitrary text string describing the package. It will be
|
|
displayed while extracting the files.
|
|
* startup_script is the command to be executed from within the directory
|
|
of extracted files. Thus, if you wish to execute a program contain in
|
|
this directory, you must prefix your command with "./". For example,
|
|
./program will be fine. The script_args are additionnal arguments for
|
|
this command.
|
|
|
|
Here is an example, assuming the user has a package image stored in a
|
|
/home/joe/mysoft, and he wants to generate a self-extracting package named
|
|
mysoft.sh, which will launch the "setup" script initially stored in
|
|
/home/joe/mysoft :
|
|
|
|
makeself.sh /home/joe/mysoft mysoft.sh "Joe's Nice Software Package" ./setup
|
|
Here is also how I created the [9]makeself.run archive which contains the
|
|
Makeself distribution :
|
|
|
|
makeself.sh --notemp makeself makeself.run "Makeself by Stephane Peter" echo
|
|
"Makeself has extracted itself"
|
|
|
|
Archives generated with Makeself 2.1 can be passed the following arguments:
|
|
|
|
* --keep : Prevent the files to be extracted in a temporary directory that
|
|
will be removed after the embedded script's execution. The files will
|
|
then be extracted in the current working directory and will stay here
|
|
until you remove them.
|
|
* --verbose : Will prompt the user before executing the embedded command
|
|
* --target dir : Allows to extract the archive in an arbitrary place.
|
|
* --nox11 : Do not spawn a X11 terminal.
|
|
* --confirm : Prompt the user for confirmation before running the embedded
|
|
command.
|
|
* --info : Print out general information about the archive (does not
|
|
extract).
|
|
* --lsm : Print out the LSM entry, if it is present.
|
|
* --list : List the files in the archive.
|
|
* --check : Check the archive for integrity using the embedded checksums.
|
|
Does not extract the archive.
|
|
* --nochown : By default, a "chown -R" command is run on the target
|
|
directory after extraction, so that all files belong to the current
|
|
user. This is mostly needed if you are running as root, as tar will then
|
|
try to recreate the initial user ownerships. You may disable this
|
|
behavior with this flag.
|
|
* --tar : Run the tar command on the contents of the archive, using the
|
|
following arguments as parameter for the command.
|
|
* --noexec : Do not run the embedded script after extraction.
|
|
|
|
Any subsequent arguments to the archive will be passed as additional
|
|
arguments to the embedded command. You should explicitly use the -- special
|
|
command-line construct before any such options to make sure that Makeself
|
|
will not try to interpret them.
|
|
|
|
License
|
|
|
|
Makeself is covered by the [10]GNU General Public License (GPL) version 2
|
|
and above. Archives generated by Makeself don't have to be placed under this
|
|
license (although I encourage it ;-)), since the archive itself is merely
|
|
data for Makeself.
|
|
|
|
Download
|
|
|
|
Get the latest official distribution [11]here (version 2.1.5).
|
|
|
|
The latest development version can be grabbed from the Loki Setup CVS
|
|
module, at [12]cvs.icculus.org.
|
|
|
|
Version history
|
|
|
|
* v1.0: Initial public release
|
|
* v1.1: The archive can be passed parameters that will be passed on to the
|
|
embedded script, thanks to John C. Quillan
|
|
* v1.2: Cosmetic updates, support for bzip2 compression and non-temporary
|
|
archives. Many ideas thanks to Francois Petitjean.
|
|
* v1.3: More patches from Bjarni R. Einarsson and Francois Petitjean:
|
|
Support for no compression (--nocomp), script is no longer mandatory,
|
|
automatic launch in an xterm, optional verbose output, and -target
|
|
archive option to indicate where to extract the files.
|
|
* v1.4: Many patches from Francois Petitjean: improved UNIX compatibility,
|
|
automatic integrity checking, support of LSM files to get info on the
|
|
package at run time..
|
|
* v1.5.x: A lot of bugfixes, and many other patches, including automatic
|
|
verification through the usage of checksums. Version 1.5.5 was the
|
|
stable release for a long time, even though the Web page didn't get
|
|
updated ;-). Makeself was also officially made a part of the [13]Loki
|
|
Setup installer, and its source is being maintained as part of this
|
|
package.
|
|
* v2.0: Complete internal rewrite of Makeself. The command-line parsing
|
|
was vastly improved, the overall maintenance of the package was greatly
|
|
improved by separating the stub from makeself.sh. Also Makeself was
|
|
ported and tested to a variety of Unix platforms.
|
|
* v2.0.1: First public release of the new 2.0 branch. Prior versions are
|
|
officially obsoleted. This release introduced the '--copy' argument that
|
|
was introduced in response to a need for the [14]UT2K3 Linux installer.
|
|
* v2.1.0: Big change : Makeself can now support multiple embedded
|
|
tarballs, each stored separately with their own checksums. An existing
|
|
archive can be updated with the --append flag. Checksums are also better
|
|
managed, and the --nochown option for archives appeared.
|
|
* v2.1.1: Fixes related to the Unix compression (compress command). Some
|
|
Linux distributions made the insane choice to make it unavailable, even
|
|
though gzip is capable of uncompressing these files, plus some more
|
|
bugfixes in the extraction and checksum code.
|
|
* v2.1.2: Some bug fixes. Use head -n to avoid problems with POSIX
|
|
conformance.
|
|
* v2.1.3: Bug fixes with the command line when spawning terminals. Added
|
|
--tar, --noexec for archives. Added --nomd5 and --nocrc to avoid
|
|
creating checksums in archives. The embedded script is now run through
|
|
"eval". The --info output now includes the command used to create the
|
|
archive. A man page was contributed by Bartosz Fenski.
|
|
* v2.1.4: Fixed --info output. Generate random directory name when
|
|
extracting files to . to avoid problems. Better handling of errors with
|
|
wrong permissions for the directory containing the files. Avoid some
|
|
race conditions, Unset the $CDPATH variable to avoid problems if it is
|
|
set. Better handling of dot files in the archive directory.
|
|
* v2.1.5: Made the md5sum detection consistent with the header code. Check
|
|
for the presence of the archive directory. Added --encrypt for symmetric
|
|
encryption through gpg (Eric Windisch). Added support for the digest
|
|
command on Solaris 10 for MD5 checksums. Check for available disk space
|
|
before extracting to the target directory (Andreas Schweitzer). Allow
|
|
extraction to run asynchronously (patch by Peter Hatch). Use file
|
|
descriptors internally to avoid error messages (patch by Kay Tiong
|
|
Khoo).
|
|
|
|
Links
|
|
|
|
* Check out the [15]"Loki setup" installer, used to install many Linux
|
|
games and other applications, and of which I am the co-author. Since the
|
|
demise of Loki, I am now the official maintainer of the project, and it
|
|
is now being hosted on [16]icculus.org, as well as a bunch of other
|
|
ex-Loki projects (and a lot of other good stuff!).
|
|
* Bjarni R. Einarsson also wrote the setup.sh installer script, inspired
|
|
by Makeself. [17]Check it out !
|
|
|
|
Contact
|
|
|
|
This script was written by [18]Stéphane Peter (megastep at megastep.org) I
|
|
welcome any enhancements and suggestions.
|
|
|
|
Contributions were included from John C. Quillan, Bjarni R. Einarsson,
|
|
Francois Petitjean, and Ryan C. Gordon, thanks to them! If you think I
|
|
forgot your name, don't hesitate to contact me.
|
|
|
|
icculus.org also has a [19]Bugzilla server available that allows bug reports
|
|
to be submitted for Loki setup, and since Makeself is a part of Loki setup,
|
|
you can submit bug reports from there!
|
|
_________________________________________________________________
|
|
|
|
|
|
[20]Stéphane Peter
|
|
|
|
Last modified: Fri Jan 4 15:51:05 PST 2008
|
|
|
|
References
|
|
|
|
1. http://mowser.com/web/megastep.org/makeself/
|
|
2. http://www.megastep.org/makeself/makeself.run
|
|
3. mailto:megastep@REMOVEME.megastep.org
|
|
4. http://www.idsoftware.com/
|
|
5. http://www.lokigames.com/products/myth2/updates.php3
|
|
6. http://www.nvidia.com/
|
|
7. http://earth.google.com/
|
|
8. http://www.megastep.org/makeself/makeself.run
|
|
9. http://www.megastep.org/makeself/makeself.run
|
|
10. http://www.gnu.org/copyleft/gpl.html
|
|
11. http://www.megastep.org/makeself/makeself-2.1.5.run
|
|
12. http://cvs.icculus.org/
|
|
13. http://www.icculus.org/loki_setup/
|
|
14. http://www.unrealtournament2003.com/
|
|
15. http://www.icculus.org/loki_setup/
|
|
16. http://www.icculus.org/
|
|
17. http://www.mmedia.is/~bre/programs/setup.sh/
|
|
18. mailto:megastep@@megastep.org
|
|
19. https://bugzilla.icculus.org/
|
|
20. mailto:megastep@@megastep.org
|