如何在 Linux 中创建自解压存档或安装程序
虽然典型的存档文件依赖于单独的程序(例如 tar
、gunzip
、7z
)从存档文件中提取内容,但自解压 (SFX) 存档本身就是可执行文件,只需在运行时即可自解压其内容。自解压安装程序执行相同的操作,但它还会将解压的内容复制到适当的目录。
在本教程中,我将解释如何在 Linux 上创建自解压存档或安装程序。
为此,您可以使用名为 makeself
的命令行实用程序。 makeself 工具是一个 shell 脚本,它根据输入目录/文件创建压缩的 TAR 存档,并在存档的开头添加一个小的 shell 脚本存根以启动自解压,并指导解压文件的安装。
在 Linux 上安装 makeself
要安装 makeself
,请下载存档格式的最新版本,然后按如下方式解压下载的存档。归档文件解压后,它将创建一个名为 makeself-2.4.2 的新目录。将目录中的所有 shell 脚本复制到 /usr/bin
中。
$ wget https://github.com/megastep/makeself/releases/download/release-2.4.2/makeself-2.4.2.run
$ chmod 755 makeself-2.4.2.run
$ ./makeself-2.4.2.run
$ cd makeself-2.4.2
$ sudo cp *.sh /usr/bin
makeself.sh
的基本用法如下。
makeself.sh [options] [directory_to_package] [sfx_archive_filename] [label] [startup_script] [optional_script_args]
label
参数是在解压缩 SFX 存档时要打印的消息。
startup_script
参数指定成功提取 SFX 存档后要启动的脚本/命令。当您创建自解压安装程序时,这非常有用。通常,启动脚本会将提取的内容复制/安装到适当的目标目录。启动脚本必须位于要打包的目录内,以便该脚本包含在 SFX 存档中。
以下是 makeself.sh 的一些可用选项:
--gzip
:使用 gzip 进行压缩(默认选项)。--bzip2
:使用bzip2进行压缩。--nocomp
:不压缩。--notemp
:不将文件提取到临时目录中,而是提取到当前目录中创建的新子目录中。--follow
:跟踪所有符号链接,并归档符号链接的文件。
创建自解压存档
要创建包含 ./backup
目录中所有文件的自解压存档,请执行以下操作。这里的启动例程只是打印Extraction did
。
$ makeself.sh --notemp ./backup ./backup.run "SFX archive for backup" echo "Extraction done"
Header is 403 lines long
About to compress 1540 KB of data...
Adding files to archive named "./backup.run"...
./
./jpeg/
./jpeg/1.jpg
.
.
CRC: 2238411397
MD5: 0b0fd3a2ba08ffcec821b9cbaa11b70d
Self-extractible archive "./backup.run" successfully created.
要从存档中提取文件,只需执行存档:
$ ./backup.run
Creating directory backup
Verifying archive integrity... All good.
Uncompressing SFX archive for backup.............
Done
创建自解压安装程序
如果您想创建自解压安装程序,则需要准备一个单独的启动脚本,该脚本将在文件解压时进行安装。这里我假设要打包的程序目录位于./program
。因此,在 ./program
目录中准备一个启动脚本。
$ vi ./program/install.sh
#!/bin/sh
if [ -d $HOME/bin ]
then
cp myprogram $HOME/bin/
fi
然后使启动脚本可执行。
$ chmod 755 ./program/install.sh
继续创建一个自解压安装程序,并将启动脚本与其一起打包,如下所示。
$ makeself.sh ./program ./program.run "SFX installer for program" ./install.sh