[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已在以下平台上重写和测试:
如果您在其他系统上成功运行Makeself和/或使用它创建的档案,请[告诉我][2]!
使用makeself制作的公开可用档案示例包括:
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以获取所有子模块。
makemake testMakeself现在支持以下maven插件makeself-maven-plugin。请参考该项目的使用方法,并在该项目上报告有关maven插件的任何错误。
Makeself本身受[GNU通用公共许可证][8](GPL)版本2及以上版本的保护。由Makeself生成的档案不必置于此许可下(尽管我鼓励这样做;-)),因为档案本身仅是Makeself的数据。
我很乐意考虑合并您在[GitHub][10]仓库上的拉取请求。但是,请记住以下几点:
在[这里][9]获取最新的官方发行版(版本2.5.0)。
最新的开发版本可以从[GitHub][10]获取。欢迎通过fork和拉取请求过程在那里提交任何补丁。
--nocomp),脚本不再是必需的,自动在xterm中启动,可选的详细输出,以及-target归档选项用于指定文件提取位置。--copy参数,以响应[UT2K3][12] Linux安装程序的需求。--append标志更新现有归档。校验和管理得到改进,归档的--nochown选项也出现了。--tar、--noexec。添加了--nomd5和--nocrc以避免在归档中创建校验和。嵌入的脚本现在通过"eval"运行。--info输出现在包括用于创建归档的命令。Bartosz Fenski贡献了一个man页面。--info输出。在提取文件到当前目录时生成随机目录名以避免问题。更好地处理包含文件的目录权限错误。避免一些竞态条件,取消设置$CDPATH变量以避免设置时的问题。更好地处理归档目录中的点文件。--encrypt用于通过gpg进行对称加密(Eric Windisch)。为Solaris 10上的MD5校验和添加了digest命令支持。在提取到目标目录之前检查可用磁盘空间(Andreas Schweitzer)。允许提取异步运行(Peter Hatch的补丁)。内部使用文件描述符以避免错误消息(Kay Tiong Khoo的补丁)。--noprogress以防止在解压缩期间显示进度。添加了--target目录以允许直接提取到目标目录。(Guy Baconniere)--tar-extra、--untar-extra、--gpg-extra、--gpg-asymmetric-encrypt-sign选项。--tar-format选项以设置tar归档格式(默认为ustar)这个脚本由[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/


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


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


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


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。


AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号