mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-11-24 21:32:40 +00:00
307 lines
15 KiB
Text
307 lines
15 KiB
Text
The following was generated from http://www.megastep.org/makeself/
|
||
-----------------------
|
||
|
||
|
||
makeself - Make self-extractable archives on Unix
|
||
|
||
[1]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 [2]let me know!
|
||
|
||
Examples of publicly available archives made using makeself are :
|
||
* Game patches and installers for [3]Id Software games like Quake 3
|
||
for Linux or Return To Castle Wolfenstien ;
|
||
* All game patches released by [4]Loki Software for the Linux
|
||
version of popular games ;
|
||
* The [5]nVidia drivers for Linux
|
||
* The [6]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 [7]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 [8]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 [9]here (version 2.1.3).
|
||
|
||
The latest development version can be grabbed from the Loki Setup CVS
|
||
module, at [10]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 [11]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
|
||
[12]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 --nomd5 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.
|
||
|
||
Links
|
||
|
||
* Check out the [13]"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
|
||
[14]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. [15]Check it out !
|
||
|
||
Contact
|
||
|
||
This script was written by [16]St<53>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 [17]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!
|
||
_________________________________________________________________
|
||
|
||
|
||
[18]St<53>phane Peter
|
||
|
||
Last modified: Sun May 2 00:08:49 PDT 2004
|
||
|
||
References
|
||
|
||
1. http://www.megastep.org/makeself/makeself.run
|
||
2. mailto:megastep@REMOVEME.megastep.org
|
||
3. http://www.idsoftware.com/
|
||
4. http://www.lokigames.com/products/myth2/updates.php3
|
||
5. http://www.nvidia.com/
|
||
6. http://www.megastep.org/makeself/makeself.run
|
||
7. http://www.megastep.org/makeself/makeself.run
|
||
8. http://www.gnu.org/copyleft/gpl.html
|
||
9. http://www.megastep.org/makeself/makeself-2.1.3.run
|
||
10. http://cvs.icculus.org/
|
||
11. http://www.icculus.org/loki_setup/
|
||
12. http://www.unrealtournament2003.com/
|
||
13. http://www.icculus.org/loki_setup/
|
||
14. http://www.icculus.org/
|
||
15. http://www.mmedia.is/~bre/programs/setup.sh/
|
||
16. mailto:megastep@@megastep.org
|
||
17. https://bugzilla.icculus.org/
|
||
18. mailto:megastep@@megastep.org
|