[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
以获取所有子模块。
make
make test
Makeself现在支持以下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/
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文 本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定 制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号