makeself

makeself

轻松创建自解压Unix存档的强大工具

makeself是一个用于创建自解压Unix存档的shell脚本工具。它生成的存档文件以shell脚本形式呈现,支持多种压缩算法和完整性校验。makeself生成的存档可在各种Unix系统上运行,无需额外依赖。该工具广泛应用于游戏补丁、驱动程序和软件安装包的分发,为Unix软件打包和分发提供了简便解决方案。

自解压缩归档Shell脚本压缩工具软件打包跨平台Github开源项目

许可证:GPL v2 构建状态

makeself - 在Unix上制作自解压缩档案

[makeself.sh][1]是一个小型shell脚本,用于从目录生成自解压缩的压缩tar档案。生成的文件看起来像一个shell脚本(许多此类文件以**.run**为后缀),可以直接运行。档案会将自身解压到一个临时目录,并可选择执行任意命令(例如安装脚本)。这与Windows世界中WinZip自解压程序生成的档案非常相似。Makeself档案还包括用于完整性自验证的校验和(CRC和/或MD5/SHA256校验和)。

makeself.sh脚本本身仅用于从文件目录创建档案。生成的档案实际上是一个压缩(使用gzip、bzip2或compress)的TAR档案,开头有一个小型shell脚本存根。这个小存根执行提取文件、运行嵌入命令以及完成后删除临时文件的所有步骤。用户只需"运行"档案即可安装其中包含的软件,即sh nice-software.run。我建议对此类档案使用".run"(由Loki Software发布的一些Makeself档案引入)或".sh"后缀,以避免用户混淆,让他们知道这些实际上是shell脚本(尽管附加了相当多的二进制数据!)。

我尽量保持这个脚本的代码尽可能具有可移植性,即不依赖任何bash特定功能,只调用任何功能正常的UNIX兼容系统上安装的命令。只要压缩程序可用,此脚本及其生成的档案应该可以在任何Unix风格的系统上运行,并与任何兼容的Bourne shell一起使用。

Makeself已在以下平台上重写和测试:

  • Linux(所有发行版)
  • Sun Solaris(8及以上版本)
  • HP-UX(在HPPA RISC上测试11.0和11i)
  • SCO OpenUnix和OpenServer
  • IBM AIX
  • macOS(Darwin)
  • SGI IRIX 6.5
  • FreeBSD
  • OpenBSD
  • NetBSD
  • UnicOS / Cray
  • Windows(Cygwin,WSL)

如果您在其他系统上成功运行Makeself和/或使用它创建的档案,请[告诉我][2]!

使用makeself制作的公开可用档案示例包括:

  • [Id Software][3]游戏的Linux版本补丁和安装程序,如Quake 3或重返德军总部;
  • [Loki Software][4]为流行游戏的Linux版本发布的所有游戏补丁;
  • Linux版[nVidia驱动程序][5]
  • Linux版[Google Earth][6]的安装程序
  • Linux版[VirtualBox][7]安装程序
  • [Makeself][1]发行版本身;-)
  • 以及无数其他...

Apache用户重要提示: 默认情况下,大多数Web服务器会将Makeself档案视为普通文本文件,因此它们可能在Web浏览器中显示为文本。防止这种情况的正确方法是为此文件格式添加MIME类型,如下所示(在httpd.conf中):

AddType application/x-makeself .run

某些GNU/Linux发行版重要提示: 在v2.1.2之前使用Makeself创建的档案使用了Unix命令_head_和_tail_的旧语法,这种语法在其GNU形式中正在逐步被废弃。因此,解压缩某些这些档案时可能会遇到问题。解决此问题的一种方法是设置环境变量$_POSIX2_VERSION以启用旧语法,即:

export _POSIX2_VERSION=199209

用法

makeself的语法如下:

makeself.sh [参数] 档案目录 文件名 标签 启动脚本 [脚本参数]
  • 参数 是Makeself的可选选项。可用选项包括:

  • --version:在标准输出上打印版本号,然后立即退出

  • --gzip:使用gzip进行压缩(在gzip常用的平台上,如Linux,这是默认设置)

  • --bzip2:使用bzip2代替gzip以获得更好的压缩效果。bzip2命令必须在命令路径中可用。建议将归档扩展名设置为类似".bz2.run",以便潜在用户知道他们需要bzip2来解压缩。

  • --bzip3:使用bzip3代替gzip以获得更好的压缩效果。

  • --pbzip2:在多CPU机器上使用pbzip2代替gzip以获得更好更快的压缩效果。pbzip2命令必须在命令路径中可用。建议将归档扩展名设置为类似".bz2.run",以便潜在用户知道他们需要bzip2来解压缩。

  • --xz:使用xz代替gzip以获得更好的压缩效果。xz命令必须在命令路径中可用。建议将归档扩展名设置为类似".xz.run",以便潜在用户知道他们需要xz来解压缩。

  • --lzo:使用lzop代替gzip以获得更好的压缩效果。lzop命令必须在命令路径中可用。建议将归档扩展名设置为类似".lzo.run",以便潜在用户知道他们需要lzop来解压缩。

  • --lz4:使用lz4代替gzip以获得更好的压缩效果。lz4命令必须在命令路径中可用。建议将归档扩展名设置为类似".lz4.run",以便潜在用户知道他们需要lz4来解压缩。

  • --zstd:使用zstd代替gzip以获得更好的压缩效果。zstd命令必须在命令路径中可用。建议将归档扩展名设置为类似".zstd.run",以便潜在用户知道他们需要zstd来解压缩。

  • --pigz:使用pigz进行压缩。

  • --base64:将归档编码为Base64格式的ASCII,而不是压缩(需要base64命令)。

  • --gpg-encrypt:使用gpg -ac -z $COMPRESS_LEVEL加密归档。这将提示输入加密密码。假设潜在用户已安装gpg

  • --ssl-encrypt:使用openssl aes-256-cbc -a -salt加密归档。这将提示输入加密密码。假设潜在用户已安装OpenSSL工具。

  • --compress:使用UNIX的compress命令压缩数据。这应该是所有没有gzip可用的平台的默认设置。

  • --nocomp:不对归档使用任何压缩,归档将是未压缩的TAR。

  • --complevel:指定gzip、bzip2、pbzip2、zstd、xz、lzo或lz4的压缩级别。(默认为9)

  • --threads:指定支持并行化的压缩器使用的线程数。省略以使用压缩器的默认值。最有用(且必需)的是选择xz的线程,通常使用--threads=0表示使用所有可用核心。pbzip2和pigz默认是并行的,设置此值允许限制它们使用的线程数。

  • --notemp:生成的归档不会将文件解压到临时目录,而是在当前目录中创建一个新目录。这更适合分发可能自行解压和编译的软件包(即通过嵌入的脚本启动编译)。

  • --current:文件将被解压到当前目录,而不是子目录。此选项隐含上面的--notemp

  • --follow:跟踪归档目录内的符号链接,即存储被指向的文件而不是链接本身。

  • --append(2.1.x新增):将数据附加到现有归档,而不是创建新归档。在此模式下,将重用原始归档的设置(压缩类型、标签、嵌入脚本),因此不需要在命令行上再次指定。

  • --header:Makeself使用一个单独的文件存储头部存根,称为makeself-header.sh。默认情况下,假定它与makeself.sh存储在同一位置。如果存储在其他地方,可以使用此选项指定其实际位置。

  • --preextract:指定预解压脚本。该脚本在与startup_script相同的环境和初始script_args下执行。

  • --cleanup:指定在执行被中断或成功完成时运行的脚本。该脚本在与startup_script相同的环境和初始script_args下执行。

  • --copy:解压时,归档首先将自身解压到临时目录。这主要用于允许存储在CD上Makeself归档中的自包含安装程序,当安装程序稍后需要卸载CD并允许插入新CD时。这可以防止跨多个CD的安装程序出现"文件系统忙"错误。

  • --nox11:禁用在X11中自动生成新终端。

  • --nowait:从新的X11终端执行时,禁用脚本执行结束时的用户提示。

  • --nomd5--nocrc:禁用为归档创建MD5/CRC校验和。如果不需要完整性检查,这可以加快提取过程。

  • --sha256:为归档添加SHA256校验和。除非同时使用了--nomd5,否则这将与MD5/CRC校验和一起添加。

  • --lsm文件:向makeself提供Linux软件地图(LSM)文件,该文件将嵌入到生成的归档中。LSM文件以易于解析的方式描述软件包。稍后可以使用归档的--lsm参数检索LSM条目。

  • --tar-format opt:指定tar归档格式(默认为ustar);你可以使用tar命令接受的任何值(如posix、v7等)。

  • --tar-extra opt:在tar命令行中附加更多选项。

    例如,为了使用GNU tar从打包的归档目录中排除.git目录,可以使用makeself.sh --tar-extra "--exclude=.git" ...

  • --target dir:指定解压缩文件的目录。

  • --keep-umask:保持umask设置为shell默认值,而不是在执行自解压档案时覆盖。

  • --packaging-date date:使用提供的字符串作为打包日期,而不是当前日期。

  • --license 文件:附加一个许可证文件。

  • --nooverwrite:如果指定的目标目录已存在,则不解压档案。

  • --help-header 文件:为档案的--help输出添加一个头部。

  • archive_dir是包含要归档文件的目录名称

  • file_name是要创建的档案名称

  • label是描述包的任意文本字符串。它将在解压文件时显示。

  • startup_script是要从提取文件的目录内执行的命令。因此,如果您希望执行此目录中包含的程序,必须在命令前加上./。例如,./program就可以。script_args是此命令的附加参数。 请注意,对于不在临时目录中解压的档案(即使用--notemp时),startup_script及其参数并非严格要求。

这里有一个例子,假设用户在**/home/joe/mysoft中存储了一个软件包镜像,他想生成一个名为mysoft.sh**的自解压包,该包将启动最初存储在/home/joe/mysoft中的"setup"脚本:

makeself.sh /home/joe/mysoft mysoft.sh "Joe的优秀软件包" ./setup

这里还展示了我如何创建包含Makeself发行版的[makeself.run][9]档案:

makeself.sh --notemp makeself makeself.run "Stephane Peter制作的Makeself" echo "Makeself已自行解压"

使用Makeself生成的档案可以传递以下参数:

  • --keep:防止文件被解压到临时目录中,该目录将在嵌入脚本执行后被删除。文件将被解压到当前工作目录,并保留在此处直到您删除它们。
  • --verbose:在执行嵌入命令前提示用户
  • --target dir:允许将档案解压到任意位置。
  • --nox11:不生成X11终端。
  • --confirm:在运行嵌入命令前提示用户确认。
  • --info:打印关于档案的一般信息(不解压)。
  • --lsm:如果存在LSM条目,则打印出来。
  • --list:列出档案中的文件。
  • --check:使用嵌入的校验和检查档案的完整性。不解压档案。
  • --nochown:默认情况下,解压后会在目标目录上运行chown -R命令,以便所有文件属于当前用户。如果您以root身份运行,这主要是必需的,因为tar会尝试重新创建初始用户所有权。您可以使用此标志禁用此行为。
  • --tar:在档案内容上运行tar命令,使用以下参数作为命令参数。
  • --noexec:解压后不运行嵌入的脚本。
  • --noexec-cleanup:不运行嵌入的清理脚本。
  • --nodiskspace:在尝试解压之前不检查可用磁盘空间。
  • --cleanup-args:指定要传递给清理脚本的参数。将值用引号括起来以指定多个参数。

档案的任何后续参数都将作为附加参数传递给嵌入命令。您必须在任何此类选项之前明确使用--特殊命令行结构,以确保Makeself不会尝试解释它们。

启动脚本

启动脚本必须是常规的Shell脚本。

在启动脚本中,您可以使用$USER_PWD变量获取执行自解压脚本的文件夹路径。这对于访问与脚本位于同一文件夹中的文件特别有用,如下例所示。

my-self-extracting-script.sh --fooBarFileParameter foo.bar

构建和测试

克隆git仓库并执行git submodule update --init --recursive以获取所有子模块。

  • 要进行发布:make
  • 要运行所有测试:make test

Maven使用

Makeself现在支持以下maven插件makeself-maven-plugin。请参考该项目的使用方法,并在该项目上报告有关maven插件的任何错误。

许可证

Makeself本身受[GNU通用公共许可证][8](GPL)版本2及以上版本的保护。由Makeself生成的档案不必置于此许可下(尽管我鼓励这样做;-)),因为档案本身仅是Makeself的数据。

贡献

我很乐意考虑合并您在[GitHub][10]仓库上的拉取请求。但是,请记住以下几点:

  • Makeself的主要目的之一是可移植性。不要提交会破坏支持平台的补丁。越是平台无关越好。
  • 请清楚地解释补丁的目的,以及您是如何实现的。

下载

在[这里][9]获取最新的官方发行版(版本2.5.0)。

最新的开发版本可以从[GitHub][10]获取。欢迎通过fork和拉取请求过程在那里提交任何补丁。

版本历史

  • v1.0: 初始公开发布
  • v1.1: 归档文件现可传递参数给嵌入的脚本,感谢John C. Quillan
  • v1.2: 界面更新,支持bzip2压缩和非临时归档。许多想法感谢Francois Petitjean。
  • v1.3: 来自Bjarni R. Einarsson和Francois Petitjean的更多补丁:支持无压缩(--nocomp),脚本不再是必需的,自动在xterm中启动,可选的详细输出,以及-target归档选项用于指定文件提取位置。
  • v1.4: 来自Francois Petitjean的多个补丁:改进UNIX兼容性,自动完整性检查,支持LSM文件以在运行时获取包信息。
  • v1.5.x: 大量错误修复和其他补丁,包括通过使用校验和进行自动验证。1.5.5版本长期以来一直是稳定版本,尽管网页并未更新;-)。Makeself也正式成为[Loki Setup安装程序][11]的一部分,其源代码作为该包的一部分进行维护。
  • v2.0: Makeself的完全内部重写。大幅改进了命令行解析,通过将存根与makeself.sh分离,极大地改善了包的整体维护。此外,Makeself还被移植并测试到多种Unix平台。
  • v2.0.1: 新2.0分支的首次公开发布。之前的版本正式废弃。此版本引入了--copy参数,以响应[UT2K3][12] Linux安装程序的需求。
  • v2.1.0: 重大变更:Makeself现在可以支持多个嵌入的tar包,每个都单独存储并有自己的校验和。可以使用--append标志更新现有归档。校验和管理得到改进,归档的--nochown选项也出现了。
  • v2.1.1: 修复了与Unix压缩(compress命令)相关的问题。一些Linux发行版做出了不提供它的疯狂选择,尽管gzip能够解压这些文件,此外还修复了提取和校验和代码中的一些错误。
  • v2.1.2: 一些错误修复。使用head -n以避免POSIX兼容性问题。
  • v2.1.3: 修复了在生成终端时的命令行问题。为归档添加了--tar--noexec。添加了--nomd5--nocrc以避免在归档中创建校验和。嵌入的脚本现在通过"eval"运行。--info输出现在包括用于创建归档的命令。Bartosz Fenski贡献了一个man页面。
  • v2.1.4: 修复了--info输出。在提取文件到当前目录时生成随机目录名以避免问题。更好地处理包含文件的目录权限错误。避免一些竞态条件,取消设置$CDPATH变量以避免设置时的问题。更好地处理归档目录中的点文件。
  • v2.1.5: 使md5sum检测与头部代码一致。检查归档目录是否存在。添加了--encrypt用于通过gpg进行对称加密(Eric Windisch)。为Solaris 10上的MD5校验和添加了digest命令支持。在提取到目标目录之前检查可用磁盘空间(Andreas Schweitzer)。允许提取异步运行(Peter Hatch的补丁)。内部使用文件描述符以避免错误消息(Kay Tiong Khoo的补丁)。
  • v2.1.6: 将每个文件的一个点进度替换为实时进度百分比和旋转光标。添加了--noprogress以防止在解压缩期间显示进度。添加了--target目录以允许直接提取到目标目录。(Guy Baconniere)
  • v2.2.0: 多年来的第一个重大新版本!包括许多错误修复和用户贡献。请查看[GitHub上的项目页面][10]了解所有详细信息。
  • v2.3.0: 支持通过GPG或OpenSSL进行归档加密。添加了LZO和LZ4压缩支持。设置打包日期和防止umask被覆盖的选项。可选忽略提取时可用磁盘空间检查。新选项在提取前检查root权限。
  • v2.3.1: 各种兼容性更新。在GitHub仓库中为Travis CI添加了单元测试。新的--tar-extra--untar-extra--gpg-extra--gpg-asymmetric-encrypt-sign选项。
  • v2.4.0: 添加了可选的SHA256归档完整性校验和支持。
  • v2.4.2: 新的--cleanup和--cleanup-args参数用于清理脚本。为支持的压缩器添加了线程支持。现在支持zstd压缩。
  • v2.4.3: 创建显式POSIX tar归档以提高兼容性。
  • v2.4.4: 修复了各种兼容性问题(不再使用POSIX tar归档),GitHub Actions用于检查Solaris和FreeBSD。
  • v2.4.5: 添加了--tar-format选项以设置tar归档格式(默认为ustar)
  • v2.5.0: 扩展支持NetBSD、OpenBSD、Busybox和其他最小发行版,如Alpine Linux。添加了bzip3压缩支持并扩展了GPG参数。

链接

  • 查看["Loki Setup"][11]安装程序,用于安装许多Linux游戏和其他应用程序,我是其共同作者。自Loki消亡后,我现在是该项目的官方维护者,它现在托管在GitHub上。
  • Bjarni R. Einarsson还编写了受Makeself启发的setup.sh安装程序脚本。[快来看看!][14]

联系

这个脚本由[Stéphane Peter][15](megastep at megastep.org)编写。欢迎任何改进和建议。

John C. Quillan、Bjarni R. Einarsson、Francois Petitjean、Ryan C. Gordon以及GitHub上的许多贡献者都提供了贡献。如果你认为我遗漏了你的名字,请随时与我联系。

这个项目现在托管在GitHub上。欢迎在[项目页面][10]上提交补丁和错误报告。


[Stephane Peter][2] [1]: http://makeself.io/ [2]: mailto:megastep@megastep.org [3]: http://www.idsoftware.com/ [4]: http://www.lokigames.com/products/myth2/updates.php3 [5]: http://www.nvidia.com/ [6]: http://earth.google.com/ [7]: http://www.virtualbox.org/ [8]: http://www.gnu.org/copyleft/gpl.html [9]: https://github.com/megastep/makeself/releases/download/release-2.5.0/makeself-2.5.0.run [10]: https://github.com/megastep/makeself [11]: https://github.com/megastep/loki_setup/ [12]: http://www.unrealtournament2003.com/ [13]: http://www.icculus.org/ [14]: http://bre.klaki.net/programs/setup.sh/ [15]: https://stephanepeter.com/

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多