Project Icon

makeself

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

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

许可证: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/

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号