mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-12-20 09:51:46 +00:00
308 lines
15 KiB
Text
308 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
|