1022 lines
30 KiB
Bash
Executable File
1022 lines
30 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# makeself 1.6.0-nv4
|
|
#
|
|
# $Id: makeself.sh,v 1.22 2002/04/03 08:10:25 megastep Exp $
|
|
#
|
|
# Utility to create self-extracting tar.gz archives.
|
|
# The resulting archive is a file holding the tar.gz archive with
|
|
# a small Shell script stub that uncompresses the archive to a temporary
|
|
# directory and then executes a given script from withing that directory.
|
|
#
|
|
# Makeself home page: http://www.megastep.org/makeself/
|
|
#
|
|
# Version history :
|
|
# - 1.0 : Initial public release
|
|
# - 1.1 : The archive can be passed parameters that will be passed on to
|
|
# the embedded script, thanks to John C. Quillan
|
|
# - 1.2 : Package distribution, bzip2 compression, more command line options,
|
|
# support for non-temporary archives. Ideas thanks to Francois Petitjean
|
|
# - 1.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.
|
|
# - 1.4 : Improved UNIX compatibility (Francois Petitjean)
|
|
# Automatic integrity checking, support of LSM files (Francois Petitjean)
|
|
# - 1.5 : Many bugfixes. Optionally disable xterm spawning.
|
|
# - 1.5.1 : More bugfixes, added archive options -list and -check.
|
|
# - 1.5.2 : Cosmetic changes to inform the user of what's going on with big
|
|
# archives (Quake III demo)
|
|
# - 1.5.3 : Check for validity of the DISPLAY variable before launching an xterm.
|
|
# More verbosity in xterms and check for embedded command's return value.
|
|
# Bugfix for Debian 2.0 systems that have a different "print" command.
|
|
# - 1.5.4 : Many bugfixes. Print out a message if the extraction failed.
|
|
# - 1.5.5 : More bugfixes. Added support for SETUP_NOCHECK environment variable to
|
|
# bypass checksum verification of archives.
|
|
# - 1.6.0 : Compute MD5 checksums with the md5sum command (patch from Ryan Gordon)
|
|
# - 1.6.0-nv : Patched for use by NVIDIA.
|
|
# - 1.6.0-nv2 : Added support for xz compression and embedding a decompressor in
|
|
# the archive.
|
|
# - 1.6.0-nv3 : Added '--tar-files-from' argument.
|
|
# - 1.6.0-nv4 : Added '--compress-bin' argument.
|
|
# - 1.6.0-nv5 : Expand support for zstd compression
|
|
# - 1.6.0-nv6 : Prevent embedded decompressor from being used unintentionally.
|
|
#
|
|
# (C) 1998-2001 by Stéphane Peter <megastep@megastep.org>
|
|
# (C) 2012 NVIDIA Corporation
|
|
#
|
|
# This software is released under the terms of the GNU GPL
|
|
# Please read the license at http://www.gnu.org/copyleft/gpl.html
|
|
#
|
|
|
|
# Fail immediately on errors.
|
|
set -e
|
|
|
|
VERSION=1.6.0-nv5
|
|
COMPRESS=gzip
|
|
FAST_COMPRESS=
|
|
COMPRESS_BIN=
|
|
KEEP=n
|
|
ADD_THIS_KERNEL=n
|
|
APPLY_PATCH=n
|
|
CURRENT=n
|
|
TAR_ARGS=cf
|
|
PRINT_HELP=n
|
|
VERSION_STRING=0
|
|
PKG_VERSION=0
|
|
TARGET_OS="Unknown"
|
|
TARGET_ARCH="Unknown"
|
|
HELP_SCRIPT=
|
|
SILENT=n
|
|
TAR_DEREFERENCE_SYMLINKS=n
|
|
TAR_FILES_FROM=
|
|
THREADS=
|
|
EMBED_DECOMPRESS=
|
|
|
|
# parse the params portion of the commandline; this is done until we
|
|
# find an argument that names a directory
|
|
|
|
while [ ! -d $1 ]; do
|
|
case $1 in
|
|
"--version")
|
|
echo "Makeself version $VERSION"
|
|
exit 0
|
|
;;
|
|
"--bzip2")
|
|
COMPRESS=bzip2
|
|
;;
|
|
"--xz")
|
|
COMPRESS=xz
|
|
;;
|
|
"--nocomp")
|
|
COMPRESS=none
|
|
;;
|
|
"--zstd")
|
|
COMPRESS=zstd
|
|
;;
|
|
"--fastcomp")
|
|
FAST_COMPRESS=1
|
|
;;
|
|
"--threads")
|
|
shift 1
|
|
THREADS=$1
|
|
;;
|
|
"--compress-bin")
|
|
shift 1
|
|
COMPRESS_BIN=$1
|
|
;;
|
|
"--notemp")
|
|
KEEP=y
|
|
;;
|
|
"--current")
|
|
CURRENT=y
|
|
;;
|
|
"--follow")
|
|
TAR_ARGS=cvfh
|
|
;;
|
|
"--lsm")
|
|
shift 1
|
|
lsm_file=$1
|
|
[ -r $lsm_file ] || {
|
|
echo "can't read LSM file " $lsm_file ;
|
|
lsm_file="no_LSM";
|
|
}
|
|
;;
|
|
"--version-string")
|
|
shift 1
|
|
VERSION_STRING=$1
|
|
;;
|
|
"--pkg-version")
|
|
shift 1
|
|
PKG_VERSION=$1
|
|
;;
|
|
"--target-os")
|
|
shift 1
|
|
TARGET_OS=$1
|
|
;;
|
|
"--target-arch")
|
|
shift 1
|
|
TARGET_ARCH=$1
|
|
;;
|
|
"--pkg-history")
|
|
shift 1
|
|
pkg_history_file=$1
|
|
if [ ! -r $pkg_history_file ]; then
|
|
echo "can't read pkg-history file $pkg_history_file" ;
|
|
pkg_history_file=
|
|
fi
|
|
;;
|
|
"--help-script")
|
|
shift 1
|
|
HELP_SCRIPT=$1
|
|
;;
|
|
"--silent")
|
|
SILENT=y;
|
|
;;
|
|
"--tar-dereference-symlinks")
|
|
TAR_DEREFERENCE_SYMLINKS=y;
|
|
;;
|
|
"--tar-files-from")
|
|
shift 1
|
|
TAR_FILES_FROM=$1
|
|
;;
|
|
"--embed-decompress")
|
|
shift 1
|
|
EMBED_DECOMPRESS="$1"
|
|
;;
|
|
*)
|
|
echo "unrecognized option '$1'"
|
|
PRINT_HELP=y;
|
|
break
|
|
;;
|
|
esac
|
|
shift 1
|
|
done
|
|
|
|
# If a path to a compressor binary was not provided, try to find it in $PATH
|
|
if [ -z "${COMPRESS_BIN}" -a ${COMPRESS} != "none" ] ; then
|
|
if command -v ${COMPRESS} 2>&1 > /dev/null; then
|
|
COMPRESS_BIN=`command -v ${COMPRESS}`
|
|
else
|
|
echo "Unable to locate the ${COMPRESS} program in your \$PATH." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
COMPRESS_CMD=
|
|
COMPRESS_LEVEL=
|
|
PARALLEL_COMPRESS_FLAGS=
|
|
COMPRESS_CMD_EXTRA_FLAGS=
|
|
|
|
UNCOMPRESS_CMD=
|
|
UNCOMPRESS_CMD_EXTRA_FLAGS=
|
|
|
|
if [ -n "$THREADS" ]; then
|
|
PARALLEL_COMPRESS_FLAGS="--threads=$THREADS"
|
|
case "$COMPRESS" in
|
|
gzip|xz|zstd)
|
|
;;
|
|
*)
|
|
echo "Parallel compression not supported with compression method $COMPRESS" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case "$COMPRESS" in
|
|
gzip)
|
|
UNCOMPRESS_CMD_EXTRA_FLAGS="-c"
|
|
if [ -n "$THREADS" ]; then
|
|
if command -v pigz 2>&1 > /dev/null; then
|
|
COMPRESS_BIN=pigz
|
|
PARALLEL_COMPRESS_FLAGS="-p$THREADS"
|
|
else
|
|
echo "Parallel gzip compression requires pigz." >&2
|
|
echo "Unable to locate the pigz program in your \$PATH." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
;;
|
|
xz)
|
|
# Disable integrity checks: xzminidec can't handle the headers
|
|
# they add to the xz archive.
|
|
COMPRESS_CMD_EXTRA_FLAGS="-C none"
|
|
;;
|
|
none)
|
|
COMPRESS_CMD=cat
|
|
UNCOMPRESS_CMD=cat
|
|
;;
|
|
zstd)
|
|
COMPRESS_CMD_EXTRA_FLAGS="--long"
|
|
if [ -n "$FAST_COMPRESS" ]; then
|
|
COMPRESS_LEVEL=9
|
|
else
|
|
COMPRESS_LEVEL=18
|
|
fi
|
|
;;
|
|
bzip2)
|
|
# defaults work: break out
|
|
;;
|
|
*)
|
|
echo "Unsupported compress method $COMPRESS"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ -z "$COMPRESS_LEVEL" ]; then
|
|
if [ -n "$FAST_COMPRESS" ]; then
|
|
COMPRESS_LEVEL=1
|
|
elif [ "$COMPRESS" != "xz" ]; then
|
|
# Use the default compression level for xz, since increasing it
|
|
# increases memory usage on the decompress side. Otherwise, default
|
|
# to level 9 if a compression level hasn't already been set, as this
|
|
# is the highest compression level for most compression programs.
|
|
COMPRESS_LEVEL=9
|
|
fi
|
|
fi
|
|
|
|
COMPRESS_CMD_EXTRA_FLAGS="$COMPRESS_CMD_EXTRA_FLAGS $PARALLEL_COMPRESS_FLAGS"
|
|
|
|
[ -z "$COMPRESS_CMD" ] && COMPRESS_CMD="$COMPRESS_BIN -c $COMPRESS_CMD_EXTRA_FLAGS"
|
|
[ -z "$UNCOMPRESS_CMD" ] && UNCOMPRESS_CMD="$COMPRESS -d $UNCOMPRESS_CMD_EXTRA_FLAGS"
|
|
|
|
if [ "$SILENT" = "n" ]; then
|
|
TAR_ARGS="${TAR_ARGS}v"
|
|
fi
|
|
|
|
if [ "$TAR_DEREFERENCE_SYMLINKS" = "y" ]; then
|
|
TAR_ARGS="${TAR_ARGS}h"
|
|
fi
|
|
|
|
if [ "$KEEP" = "n" -a $# = 3 ]; then
|
|
echo "Making a temporary archive with no embedded command does not make sense!"
|
|
echo
|
|
shift 1 # To force the command usage
|
|
fi
|
|
|
|
COMPRESS_LEVEL_FLAG=
|
|
[ -n "$COMPRESS_LEVEL" ] && COMPRESS_LEVEL_FLAG="-$COMPRESS_LEVEL"
|
|
|
|
[ "$COMPRESS" != "none" ] && COMPRESS_CMD="$COMPRESS_CMD $COMPRESS_LEVEL_FLAG"
|
|
|
|
if [ \( "$COMPRESS" = "xz" -o "$COMPRESS" = "zstd" \) -a -z "$EMBED_DECOMPRESS" ]; then
|
|
echo "$COMPRESS is not installed on all target platforms, so --embed-decompress " >&2
|
|
echo "is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$EMBED_DECOMPRESS" -a ! -f "$EMBED_DECOMPRESS" ]; then
|
|
echo "Can't find decompression program '$EMBED_DECOMPRESS' to embed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ $# -lt 3 -o $PRINT_HELP = "y" ]; then
|
|
echo "Usage: $0 [params] archive_dir file_name label [startup_script] [args]"
|
|
echo "params can be any of these :"
|
|
echo ""
|
|
echo " --version : Print out Makeself version number and exit"
|
|
echo " --bzip2 : Compress using bzip2 instead of gzip"
|
|
echo " --xz : Compress using xz instead of gzip"
|
|
echo " --nocomp : Do not compress the data"
|
|
echo " --compress-bin file"
|
|
echo " : Specify a path to the binary to use for compression"
|
|
echo " (but not decompression)"
|
|
echo " --notemp : The archive will create archive_dir in the"
|
|
echo " current directory and uncompress in ./archive_dir"
|
|
echo " --current : Used with --notemp, files will be extracted to the"
|
|
echo " current directory."
|
|
echo " --follow : Follow the symlinks in the archive"
|
|
echo " --lsm file : LSM file describing the package"
|
|
echo " --embed-decompress file"
|
|
echo " : Embed a decompression program in the archive"
|
|
echo " --tar-files-from file"
|
|
echo " : Pass the given file to tar(1) with '--files-from'"
|
|
echo " to define what files to include in the archive."
|
|
echo ""
|
|
echo "Do not forget to give a fully qualified startup script name"
|
|
echo "(i.e. with a ./ prefix if inside the archive)."
|
|
exit 1
|
|
fi
|
|
|
|
archdir=$1
|
|
archname=$2
|
|
label=$3
|
|
script=$4
|
|
|
|
# Infer the script to use to get help output, if it was not specified
|
|
[ "$HELP_SCRIPT" ] || HELP_SCRIPT=$archdir/$script
|
|
|
|
# We don't really want to create an absolute directory...
|
|
archdirname=`basename "$1"`
|
|
USIZE=`du -Lks --apparent-size $archdir | cut -f1`
|
|
DATE=`date`
|
|
|
|
# The following is the shell script stub code
|
|
echo '#! /bin/sh' > $archname
|
|
echo 'CRCsum=0000000000' >> $archname
|
|
echo 'MD5=00000000000000000000000000000000' >> $archname
|
|
echo skip=__SKIP__ >> $archname
|
|
echo skip_decompress=__SKIP_DECOMPRESS__ >> $archname
|
|
echo size_decompress=__SIZE_DECOMPRESS__ >> $archname
|
|
# echo lsm=\"$lsm_contents\" >> $archname
|
|
echo label=\"$label\" >> $archname
|
|
echo version_string=$VERSION_STRING >> $archname
|
|
echo pkg_version=$PKG_VERSION >> $archname
|
|
echo script=$script >> $archname
|
|
[ x"$4" = x ] || shift 1
|
|
echo targetdir="$archdirname" >>$archname
|
|
shift 3
|
|
echo scriptargs=\"$*\" >> $archname
|
|
echo "keep=$KEEP" >> $archname
|
|
echo "add_this_kernel=$ADD_THIS_KERNEL" >> $archname
|
|
echo "apply_patch=$APPLY_PATCH" >> $archname
|
|
echo "TMPROOT=\${TMPDIR:=/tmp}" >> $archname
|
|
echo "TARGET_OS=\"$TARGET_OS\"" >> $archname
|
|
echo "TARGET_ARCH=\"$TARGET_ARCH\"" >> $archname
|
|
|
|
# output a banner
|
|
|
|
cat <<- EODF >> $archname
|
|
|
|
#
|
|
# $label
|
|
# Generated by Makeself $VERSION
|
|
# Do not edit by hand.
|
|
|
|
# NVIDIA Driver Installation .run file
|
|
#
|
|
# If you were trying to download this file through a web browser, and
|
|
# instead are seeing this, please click your browser's back button,
|
|
# left click on the link, and select "Save as..." (or do whatever is
|
|
# appropriate for your web browser to download a file, rather than view
|
|
# it).
|
|
|
|
# print usage information
|
|
|
|
if [ "\$1" = "-help" -o "\$1" = "--help" -o "\$1" = "-h" ]; then
|
|
echo ""
|
|
echo "\$0 [options]"
|
|
echo ""
|
|
EODF
|
|
|
|
echo "This program will install the $label by unpacking the embedded tarball and executing the $script installation utility." \
|
|
| fmt -w 70 | awk '{print " echo \"" $0 "\"" }' >> $archname
|
|
|
|
echo " echo \"\"" >> $archname
|
|
|
|
echo "Below are the most common options; for a complete list use '--advanced-options'." \
|
|
| fmt -w 70 | awk '{print " echo \"" $0 "\"" }' >> $archname
|
|
|
|
cat <<- EODF >> $archname
|
|
echo ""
|
|
echo "--info"
|
|
echo " Print embedded info (title, default target directory) and exit."
|
|
echo ""
|
|
echo "--check"
|
|
echo " Check integrity of the archive and exit."
|
|
echo ""
|
|
echo "-x, --extract-only"
|
|
echo " Extract the contents of \$0, but do not"
|
|
echo " run 'nvidia-installer'."
|
|
echo ""
|
|
echo ""
|
|
EODF
|
|
|
|
echo "The following arguments will be passed on to the $script utility:" \
|
|
| fmt -w 70 | awk '{print " echo \"" $0 "\"" }' >> $archname
|
|
|
|
echo " echo \"\"" >> $archname
|
|
|
|
$HELP_SCRIPT --help-args-only \
|
|
| awk '{print " echo \"" $0 "\"" }' \
|
|
| sed -e 's/`/\\`/g' >> $archname
|
|
|
|
cat <<- EODF >> $archname
|
|
echo ""
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "-A" -o "\$1" = "--advanced-options" ]; then
|
|
echo ""
|
|
echo "\$0 [options]"
|
|
echo ""
|
|
EODF
|
|
|
|
echo "This program will install the $label by unpacking the embedded tarball and executing the $script installation utility." \
|
|
| fmt -w 70 | awk '{print " echo \"" $0 "\"" }' >> $archname
|
|
|
|
cat <<- EODF >> $archname
|
|
echo ""
|
|
echo "--info"
|
|
echo " Print embedded info (title, default target directory) and exit."
|
|
echo ""
|
|
echo "--lsm"
|
|
echo " Print embedded lsm entry (or no LSM) and exit."
|
|
echo ""
|
|
echo "--pkg-history"
|
|
echo " Print the package history of this file and exit."
|
|
echo ""
|
|
echo "--list"
|
|
echo " Print the list of files in the archive and exit."
|
|
echo ""
|
|
echo "--check"
|
|
echo " Check integrity of the archive and exit."
|
|
echo ""
|
|
echo "-x, --extract-only"
|
|
echo " Extract the contents of \$0, but do not"
|
|
echo " run 'nvidia-installer'."
|
|
echo ""
|
|
echo "--add-this-kernel"
|
|
echo " Build a precompiled kernel interface for the currently running"
|
|
echo " kernel and repackage the .run file to include this newly built"
|
|
echo " precompiled kernel interface. The new .run file will be placed"
|
|
echo " in the current directory and the string \"-custom\" appended"
|
|
echo " to its name, unless already present, to distinguish it from the"
|
|
echo " original .run file."
|
|
echo ""
|
|
echo "--apply-patch [Patch]"
|
|
echo " Apply the patch 'Patch' to the kernel interface files included"
|
|
echo " in the .run file, remove any precompiled kernel interfaces"
|
|
echo " and then repackage the .run file. The new .run file will be"
|
|
echo " placed in the current directory and the string \"-custom\""
|
|
echo " appended to its name, unless already present, to distinguish it"
|
|
echo " from the original .run file."
|
|
echo ""
|
|
echo "--keep"
|
|
echo " Do not delete target directory when done."
|
|
echo ""
|
|
echo "--target [NewDirectory]"
|
|
echo " Extract contents in 'NewDirectory'"
|
|
echo ""
|
|
echo "--extract-decompress"
|
|
echo " Extract the embedded decompression program to stdout"
|
|
echo ""
|
|
echo ""
|
|
EODF
|
|
|
|
echo "The following arguments will be passed on to the $script utility:" \
|
|
| fmt -w 70 | awk '{print " echo \"" $0 "\"" }' >> $archname
|
|
|
|
echo " echo \"\"" >> $archname
|
|
echo " echo \"COMMON OPTIONS:\"" >> $archname
|
|
echo " echo \"\"" >> $archname
|
|
|
|
$HELP_SCRIPT --help-args-only \
|
|
| awk '{print " echo \"" $0 "\"" }' \
|
|
| sed -e 's/`/\\`/g' >> $archname
|
|
|
|
echo " echo \"\"" >> $archname
|
|
echo " echo \"ADVANCED OPTIONS:\"" >> $archname
|
|
echo " echo \"\"" >> $archname
|
|
|
|
$HELP_SCRIPT --advanced-options-args-only \
|
|
| awk '{print " echo \"" $0 "\"" }' \
|
|
| sed -e 's/`/\\`/g' >> $archname
|
|
|
|
cat <<- EODF >> $archname
|
|
echo ""
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "-lsm" -o "\$1" = "--lsm" ]; then
|
|
cat << EOF_LSM
|
|
EODF
|
|
|
|
if [ -f "$lsm_file" ]; then
|
|
cat $lsm_file >> $archname
|
|
else
|
|
echo "no LSM" >> $archname
|
|
fi
|
|
|
|
cat <<- EOF >> $archname
|
|
EOF_LSM
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--pkg-history" ]; then
|
|
cat << EOF_PKG_HISTORY
|
|
|
|
EOF
|
|
|
|
if [ -f "$pkg_history_file" ]; then
|
|
cat $pkg_history_file >> $archname
|
|
fi
|
|
|
|
cat <<-EOF >> $archname
|
|
|
|
EOF_PKG_HISTORY
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--label" ]; then
|
|
echo "\$label";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--version-string" ]; then
|
|
echo "\$version_string";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--pkg-version" ]; then
|
|
echo "\$pkg_version";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--target-os" ]; then
|
|
echo "\$TARGET_OS";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--target-arch" ]; then
|
|
echo "\$TARGET_ARCH";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--target-directory" ]; then
|
|
echo "\$targetdir";
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--script" ]; then
|
|
echo "\$script \$scriptargs"
|
|
exit 0
|
|
fi
|
|
|
|
if [ "\$1" = "--info" ]; then
|
|
echo
|
|
echo " Identification : \$label"
|
|
echo " Target directory : \$targetdir"
|
|
echo " Uncompressed size : $USIZE KB"
|
|
echo " Compression : $COMPRESS"
|
|
echo " Date of packaging : $DATE"
|
|
echo " Application run after extraction : \$script \$scriptargs"
|
|
echo
|
|
if [ x"\$keep" = xy ]; then
|
|
echo " The directory \$targetdir will not be removed after extraction."
|
|
else
|
|
echo " The directory \$targetdir will be removed after extraction."
|
|
fi
|
|
echo
|
|
exit 0;
|
|
fi
|
|
|
|
location="\`pwd\`"
|
|
EOF
|
|
|
|
decompressDir=""
|
|
|
|
if [ -n "$EMBED_DECOMPRESS" ]; then
|
|
cat <<-EOF >> $archname
|
|
catDecompress() {
|
|
tail -n +\${skip_decompress} \$0 | head -n \${size_decompress}
|
|
}
|
|
|
|
if ! command -v "$COMPRESS" > /dev/null 2>&1; then
|
|
decompressDir=\`mktemp -d "\$TMPDIR/makeself.XXXXXXXX" 2> /dev/null\`/
|
|
decompress="\${decompressDir}$COMPRESS"
|
|
(cd "\$location"; catDecompress) > "\$decompress"
|
|
chmod +x "\$decompress"
|
|
trap cleanupDecompress EXIT
|
|
fi
|
|
EOF
|
|
else
|
|
cat <<-EOF >> $archname
|
|
catDecompress() {
|
|
echo "No decompressor embedded in this archive" >&2
|
|
exit 1
|
|
}
|
|
EOF
|
|
fi
|
|
|
|
cat <<-EOF >> $archname
|
|
|
|
cleanupDecompress() {
|
|
if [ -d "\$decompressDir" ]; then
|
|
rm -r "\$decompressDir"
|
|
fi
|
|
decompressDir=""
|
|
}
|
|
|
|
if [ "\$1" = "--list" ]; then
|
|
echo "Target directory: \$targetdir"
|
|
tail -n +\$skip \$0 | "\${decompressDir}"$UNCOMPRESS_CMD | tar tvf - 2> /dev/null
|
|
exit 0;
|
|
fi
|
|
|
|
if [ "\$1" = "--extract-decompress" ]; then
|
|
catDecompress
|
|
exit 0
|
|
fi
|
|
|
|
if [ "\$1" = "--check" ]; then
|
|
sum1=\`tail -n +4 \$0 | cksum | awk '{print \$1}'\`
|
|
[ "\$sum1" != "\$CRCsum" ] && {
|
|
echo "Error in checksums \$sum1 \$CRCsum"
|
|
exit 2;
|
|
}
|
|
if [ \$MD5 != "00000000000000000000000000000000" ]; then
|
|
# space separated list of directories
|
|
[ x"\$GUESS_MD5_PATH" = "x" ] && GUESS_MD5_PATH="/usr/local/ssl/bin /usr/local/bin /usr/bin /bin"
|
|
MD5_PATH=""
|
|
for a in \$GUESS_MD5_PATH; do
|
|
if [ -x "\$a/md5sum" ]; then
|
|
MD5_PATH=\$a;
|
|
fi
|
|
done
|
|
if [ -x \$MD5_PATH/md5sum ]; then
|
|
md5sum=\`tail -n +4 \$0 | \$MD5_PATH/md5sum | cut -b-32\`;
|
|
[ \$md5sum != \$MD5 ] && {
|
|
echo "Error in md5 sums \$md5sum \$MD5"
|
|
exit 2
|
|
} || { echo "check sums and md5 sums are ok"; exit 0; }
|
|
fi
|
|
if [ ! -x \$MD5_PATH/md5sum ]; then
|
|
echo "an embedded md5 sum of the archive exists but no md5 program was found in \$GUESS_MD5_PATH"
|
|
echo "if you have md5 on your system, you should try :"
|
|
echo "env GUESS_MD5_PATH=\"FirstDirectory SecondDirectory ...\" \$0 -check"
|
|
fi
|
|
else
|
|
echo "check sums are OK ; echo \$0 does not contain embedded md5 sum" ;
|
|
fi
|
|
exit 0;
|
|
fi
|
|
|
|
run_script=y
|
|
keep=n
|
|
apply_patch=n
|
|
|
|
while [ "\$1" ]; do
|
|
case "\$1" in
|
|
"--extract-only"|"-x")
|
|
run_script=n;
|
|
keep=y;
|
|
;;
|
|
"--keep")
|
|
keep=y;
|
|
;;
|
|
"--target")
|
|
if [ "\$2" ]; then
|
|
targetdir="\$2";
|
|
keep=y;
|
|
shift;
|
|
else
|
|
echo "ERROR: --target: no target directory specified."
|
|
exit 1;
|
|
fi
|
|
;;
|
|
"--add-this-kernel")
|
|
add_this_kernel=y;
|
|
scriptargs="\$scriptargs \$1"
|
|
;;
|
|
"--tmpdir")
|
|
scriptargs="\$scriptargs \$1 \$2"
|
|
if [ "\$2" ]; then
|
|
TMPROOT="\$2";
|
|
shift;
|
|
else
|
|
echo "ERROR: --tmpdir: no temporary directory specified."
|
|
exit 1;
|
|
fi
|
|
;;
|
|
"--apply-patch")
|
|
if [ "\$2" ]; then
|
|
if [ "\`dirname \$2\`" != "." ]; then
|
|
patchfile="\$2";
|
|
else
|
|
patchfile="\`pwd\`/\$2"
|
|
fi
|
|
run_script=n;
|
|
apply_patch=y;
|
|
shift;
|
|
else
|
|
echo "ERROR: --apply-patch: no patch file specified."
|
|
exit 1;
|
|
fi
|
|
;;
|
|
*)
|
|
scriptargs="\$scriptargs \$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
EOF
|
|
|
|
# output code to check if tmp is executable
|
|
|
|
cat <<-EOF >> $archname
|
|
|
|
# Check that the tmp directory is executable
|
|
# Make path absolute if not already
|
|
if ! echo "\$TMPROOT" | grep -q "^/"; then
|
|
TMPROOT=\`pwd\`/"\$TMPROOT";
|
|
fi
|
|
|
|
if [ ! -d "\$TMPROOT" ]; then
|
|
mkdir -p "\$TMPROOT" || {
|
|
echo "Unable to create temp directory \$TMPROOT"
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
TMPDIR="\$TMPROOT"
|
|
TMPFILE=\`mktemp "\$TMPDIR/makeself.XXXXXXXX" 2> /dev/null\`
|
|
|
|
if [ "a\$TMPFILE" = "a" ]; then
|
|
echo "Unable to create temporary file in \$TMPDIR"
|
|
exit 1
|
|
fi
|
|
|
|
chmod +x "\$TMPFILE"
|
|
|
|
# Try to execute, see what happens
|
|
"\$TMPFILE" > /dev/null 2>&1 || {
|
|
echo "ERROR: Temporary directory \$TMPDIR is not executable - use the " \\
|
|
"--tmpdir option to specify a different one."
|
|
rm "\$TMPFILE"
|
|
exit 1;
|
|
}
|
|
|
|
rm "\$TMPFILE"
|
|
|
|
EOF
|
|
|
|
# output code to do a platform check
|
|
|
|
cat <<-EOF >> $archname
|
|
|
|
# Perform a platform check
|
|
|
|
LOCAL_OS=\`uname 2> /dev/null\`
|
|
LOCAL_ARCH=\`uname -m 2> /dev/null\`
|
|
|
|
[ "\$LOCAL_ARCH" = "i386" ] && LOCAL_ARCH="x86"
|
|
[ "\$LOCAL_ARCH" = "i486" ] && LOCAL_ARCH="x86"
|
|
[ "\$LOCAL_ARCH" = "i586" ] && LOCAL_ARCH="x86"
|
|
[ "\$LOCAL_ARCH" = "i686" ] && LOCAL_ARCH="x86"
|
|
|
|
if [ -z "\$LOCAL_OS" -o -z "\$LOCAL_ARCH" ]; then
|
|
echo "ERROR: missing/broken uname. Cannot perform platform check."
|
|
exit 1;
|
|
fi
|
|
|
|
if [ "\$LOCAL_ARCH" != "\$TARGET_ARCH" -o "\$LOCAL_OS" != "\$TARGET_OS" ]; then
|
|
if [ "\$run_script" = "y" ]; then
|
|
echo ""
|
|
echo "ERROR: this .run file is intended for the"
|
|
echo "\${TARGET_OS}-\${TARGET_ARCH} platform, but you appear to be"
|
|
echo "running on \${LOCAL_OS}-\${LOCAL_ARCH}. Aborting installation."
|
|
echo ""
|
|
exit 1;
|
|
fi
|
|
fi
|
|
|
|
EOF
|
|
|
|
if [ $CURRENT = "n" ]; then
|
|
cat <<-EOF >> $archname
|
|
|
|
if [ "\$keep" = "y" ]; then
|
|
echo "Creating directory \$targetdir"; tmpdir=\$targetdir;
|
|
else
|
|
workingdir="\$TMPROOT/selfgz\$\$"
|
|
tmpdir="\$workingdir/\$targetdir";
|
|
rm -rf \$tmpdir
|
|
fi
|
|
|
|
if [ -d "\$tmpdir" -o -f "\$tmpdir" ]; then
|
|
echo "The directory '\$tmpdir' already exists. Please either"
|
|
echo "move the existing directory out of the way, or specify a"
|
|
echo "different directory with the '--target' option."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p \$tmpdir || {
|
|
echo "Unable to create the target directory '\$tmpdir'."
|
|
exit 1
|
|
}
|
|
EOF
|
|
else
|
|
cat <<-EOF >> $archname
|
|
tmpdir=.
|
|
EOF
|
|
fi
|
|
cat <<-EOF >> $archname
|
|
|
|
echo=echo; [ -x /usr/ucb/echo ] && echo=/usr/ucb/echo
|
|
if [ x\$SETUP_NOCHECK != x1 ]; then
|
|
\$echo -n "Verifying archive integrity... "
|
|
sum1=\`tail -n +4 \$0 | cksum | awk '{print \$1}'\`
|
|
[ \$sum1 != \$CRCsum ] && {
|
|
\$echo "Error in check sums \$sum1 \$CRCsum"
|
|
exit 2;
|
|
}
|
|
echo "OK"
|
|
fi
|
|
if [ \$MD5 != \"00000000000000000000000000000000\" ]; then
|
|
# space separated list of directories
|
|
[ x"\$GUESS_MD5_PATH" = "x" ] && GUESS_MD5_PATH="/usr/local/ssl/bin /usr/local/bin /usr/bin /bin"
|
|
MD5_PATH=""
|
|
for a in \$GUESS_MD5_PATH; do
|
|
if [ -x "\$a/md5sum" ]; then
|
|
MD5_PATH=\$a;
|
|
fi
|
|
done
|
|
if [ -x \$MD5_PATH/md5sum ]; then
|
|
md5sum=\`tail -n +4 \$0 | \$MD5_PATH/md5sum | cut -b-32\`;
|
|
[ \$md5sum != \$MD5 ] && {
|
|
\$echo "Error in md5 sums \$md5sum \$MD5"
|
|
exit 2;
|
|
}
|
|
fi
|
|
fi
|
|
|
|
UnTAR() {
|
|
tar xvf - 2> /dev/null || {
|
|
echo "Extraction failed." > /dev/tty; kill -15 \$$;
|
|
};
|
|
}
|
|
|
|
\$echo -n "Uncompressing \$label"
|
|
cd \$tmpdir ; res=3
|
|
|
|
[ "\$keep" = "y" ] || trap '\$echo "Signal caught, cleaning up" > /dev/tty; cd \$TMPROOT; rm -rf \$tmpdir; exit 15' 1 2 15
|
|
|
|
if (cd "\$location"; tail -n +\$skip \$0; ) | "\${decompressDir}"$UNCOMPRESS_CMD | UnTAR | (while read a; do \$echo -n "."; done; \$echo; ); then
|
|
chown -Rf \`id -u\`:\`id -g\` .
|
|
res=0;
|
|
if [ "\$script" -a "\$run_script" = "y" ]; then
|
|
\$script \$scriptargs \$*; res=\$?
|
|
fi
|
|
|
|
if [ "\$add_this_kernel" = "y" -a "\$res" = "0" ]; then
|
|
repackage_file=y;
|
|
fi
|
|
|
|
if [ "\$apply_patch" = "y" ]; then
|
|
patch=\`command -v patch 2> /dev/null | head -n 1\`
|
|
if [ \$? -eq 0 -a "\$patch" ]; then
|
|
if [ "\$keep" = "y" ]; then
|
|
cp -pR usr/src/nv usr/src/nv.orig
|
|
fi
|
|
\$patch -p0 < "\$patchfile"
|
|
if [ \$? -ne 0 ]; then
|
|
\$echo "Failed to apply patch file \"\$patchfile\"."
|
|
if [ "\$keep" = "y" ]; then
|
|
rm -rf usr/src/nv
|
|
mv usr/src/nv.orig usr/src/nv
|
|
fi
|
|
else
|
|
if [ "\$keep" = "y" ]; then
|
|
rm -rf usr/src/nv.orig
|
|
fi
|
|
rm -rf usr/src/nv/*.orig usr/src/nv/precompiled
|
|
repackage_file=y
|
|
fi
|
|
else
|
|
\$echo "Couldn't locate the 'patch' utility."
|
|
fi
|
|
fi
|
|
|
|
if [ "\$repackage_file" = "y" ]; then
|
|
|
|
cd ..
|
|
|
|
new_targetdir="\`basename \$targetdir | sed -e \"s/-custom//\"\`"
|
|
new_targetdir="\${new_targetdir}-custom"
|
|
|
|
if [ "\$targetdir" != "\$new_targetdir" ]; then
|
|
mv \$targetdir \$new_targetdir
|
|
fi
|
|
|
|
# update the pkg-history.txt file
|
|
chmod 644 ./\$new_targetdir/pkg-history.txt
|
|
|
|
if [ "\$add_this_kernel" = "y" ]; then
|
|
\$echo "\$new_targetdir: Added precompiled kernel interface for: " >> ./\$new_targetdir/pkg-history.txt
|
|
\$echo "\`uname -s -r -v -m 2> /dev/null\`" >> ./\$new_targetdir/pkg-history.txt
|
|
else
|
|
\$echo "\$new_targetdir: Applied patch file: \$patchfile" >> ./\$new_targetdir/pkg-history.txt
|
|
fi
|
|
|
|
\$echo "" >> ./\$new_targetdir/pkg-history.txt
|
|
|
|
# retrieve the lsm file
|
|
tmplsm="\$TMPDIR/nvidia.lsm.\$\$"
|
|
if [ "\`dirname \$0\`" != "." ]; then
|
|
sh \$0 --lsm > \$tmplsm
|
|
else
|
|
sh \$location/\$0 --lsm > \$tmplsm
|
|
fi
|
|
|
|
sh ./\$new_targetdir/makeself.sh \
|
|
--lsm \$tmplsm \
|
|
--version-string \$version_string \
|
|
--pkg-version \$pkg_version \
|
|
--pkg-history ./\$new_targetdir/pkg-history.txt \
|
|
--target-os \$TARGET_OS \
|
|
--target-arch \$TARGET_ARCH \
|
|
\$new_targetdir \$new_targetdir.run \
|
|
"\$label" "\$script"
|
|
|
|
rm -f \$tmplsm
|
|
|
|
[ "\$keep" = "y" ] || mv \$new_targetdir.run \$location
|
|
fi
|
|
|
|
[ "\$keep" = "y" ] || { cd \$TMPROOT; rm -rf \$workingdir; }
|
|
else
|
|
\$echo "Cannot decompress \$0"; exit 1
|
|
fi
|
|
|
|
cleanupDecompress
|
|
|
|
exit \$res
|
|
|
|
END_OF_STUB
|
|
EOF
|
|
|
|
tmpfile="${TMPDIR:=/tmp}/mkself$$"
|
|
|
|
# Replace __SKIP_DECOMPRESS__ and __SIZE_DECOMPRESS__ with the number of lines
|
|
# to skip to find the decompressor program and the size in "lines" of that
|
|
# program, respectively. Add a newline to ensure that the decompressor binary
|
|
# ends on a "line" boundary.
|
|
skip_decompress=`cat $archname | wc -l`
|
|
skip_decompress=`expr ${skip_decompress} + 1`
|
|
if [ -n "$EMBED_DECOMPRESS" ]; then
|
|
size_decompress=`( cat "$EMBED_DECOMPRESS"; echo ) | wc -l`
|
|
( cat "$EMBED_DECOMPRESS"; echo ) >> "$archname"
|
|
else
|
|
size_decompress=0
|
|
fi
|
|
|
|
# replace __SKIP__ with the number of lines to skip to find the package archive
|
|
skip=`expr ${skip_decompress} + ${size_decompress}`
|
|
|
|
sed -e "s/__SKIP__/$skip/" \
|
|
-e "s/__SKIP_DECOMPRESS__/${skip_decompress}/" \
|
|
-e "s/__SIZE_DECOMPRESS__/${size_decompress}/" \
|
|
"$archname" > "$tmpfile"
|
|
mv "$tmpfile" "$archname"
|
|
|
|
# Append the compressed tar data after the stub
|
|
if [ "$SILENT" = "n" ]; then
|
|
echo "Adding files to archive named \"$archname\"..."
|
|
fi
|
|
|
|
if [ "$TAR_FILES_FROM" ]; then
|
|
(cd "$archdir"; tar ${TAR_ARGS} - --files-from "$TAR_FILES_FROM" --no-recursion | $COMPRESS_CMD ) >> "$archname" || { echo Aborting; exit 1; }
|
|
else
|
|
(cd "$archdir"; tar ${TAR_ARGS} - `find . -maxdepth 1 -mindepth 1` | $COMPRESS_CMD ) >> "$archname" || { echo Aborting; exit 1; }
|
|
fi
|
|
|
|
[ "$SILENT" = "n" ] && echo
|
|
# echo Self-extractible archive \"$archname\" successfully created.
|
|
sum1=`tail -n +4 "$archname" | cksum | awk '{print $1}'`
|
|
# space separated list of directories
|
|
[ x"$GUESS_MD5_PATH" = "x" ] && GUESS_MD5_PATH="/usr/local/ssl/bin /usr/bin /usr/local/bin /bin"
|
|
MD5_PATH=""
|
|
for a in $GUESS_MD5_PATH; do
|
|
if [ -x "$a/md5sum" ]; then
|
|
MD5_PATH=$a;
|
|
fi
|
|
done
|
|
|
|
tmpfile="${TMPDIR:=/tmp}/mkself$$"
|
|
if [ -x $MD5_PATH/md5sum ]; then
|
|
md5sum=`tail -n +4 "$archname" | $MD5_PATH/md5sum | cut -b-32`;
|
|
[ "$SILENT" = "n" ] && echo -e "CRC: $sum1\nMD5: $md5sum\n"
|
|
sed -e "s/^CRCsum=0000000000/CRCsum=$sum1/" -e "s/^MD5=00000000000000000000000000000000/MD5=$md5sum/" "$archname" > "$tmpfile"
|
|
else
|
|
[ "$SILENT" = "n" ] && echo -e "CRC: $sum1\nMD5: none, md5sum binary not found\n"
|
|
sed -e "s/^CRCsum=0000000000/CRCsum=$sum1/" "$archname" > "$tmpfile"
|
|
fi
|
|
mv "$tmpfile" "$archname"
|
|
chmod +x "$archname"
|
|
|
|
if [ "$SILENT" = "n" ]; then
|
|
echo "Self-extractible archive \"$archname\" successfully created."
|
|
fi
|