轻松打包与分发:使用makeself创建自解压安装包
ahcoder 2025-05-10 19:23 6 浏览
原文链接:轻松打包与分发:使用makeself创建自解压安装包
什么是 makeself
makeself(有时也被称为 makeself.sh)是一个使用 Bash 编写的脚本工具,用于在 Linux/Unix 等类似环境下创建「自解压安装包」(self-extracting archive)。简单来说,借助 makeself,可以将一整个目录(里面包含你想要打包的所有文件)打包压缩成一个 .run 文件。用户在拿到这个 .run 文件时,只需要在命令行执行它(比如 ./xxx.run),该脚本就会自动:
解压缩打包的文件至临时目录或指定目录;
(可选)自动执行你指定的安装或初始化脚本;
在完成后(如果你配置了自动清理)删除临时解包的文件。
这种形式在需要给用户分发软件、安装包时常见,避免了依赖外部解压命令或繁琐的流程。
makeself 的主要优势
单文件分发:所有文件都被打包进一个 .run 脚本中,分发给用户时只需分发一个文件。
自包含:用户无需先安装其它解压工具(例如 tar、gzip、xz、unzip 等)来解包,只要系统自带最基础的 tar 和相应压缩支持即可(一台常规的 Linux 机器一般都有)。
可自动执行安装或配置脚本:打包时可以指定一个脚本在解包后自动执行,帮助用户更快完成软件安装或其它初始化操作。
易于创建:makeself 的语法简单,操作方便,同时可以指定各种参数和钩子(hook)脚本。
易于维护:makeself 是一个 Shell 脚本,整体逻辑简单,文本可读性好,需要定制化的场合也可以直接研究或修改脚本来满足需求。
1.安装makeself
pdsyw@pdsyw1024:~/Desktop$ sudo apt-get install makeself
- makeself 的核心用法
makeself 的核心命令形式为:
makeself [参数] <待打包目录> <输出文件名> <标签文字> <启动脚本> [启动脚本的参数…]
其中几个关键要素解释如下:
<待打包目录>:你要打包进去的整个目录路径。
<输出文件名>:生成的自解压脚本的文件名,一般建议以 .run 结尾,比如 my_app.run。
<标签文字>:在解压/安装过程中会打印出来的文字描述,比如 My Application Installer。
<启动脚本>:解压后会自动执行的脚本(相对于被打包目录下的路径),比如 install.sh;若不需要自动执行脚本,可以指定一个空的脚本名,或者使用相应选项。
[启动脚本的参数…]:传递给自动执行脚本的额外参数,可选。
命令示例
假设我们在当前目录下有一个名为pdsyw1024的目录,里面包含我们的应用程序和一个用于安装的脚本 install.sh。可以执行:
pdsyw@pdsyw1024:~/Desktop$ ll pdsyw1024/
pdsyw@pdsyw1024:~/Desktop$ makeself pdsyw1024 pdsyw1024.run "PDSYW Application Installer" ./install.sh
然后就会在当前目录生成一个pdsyw1024.run文件。打包完成后,你可以将pdsyw1024.run分发给其他用户,使用命令:
pdsyw@pdsyw1024:~/Desktop$ ll
pdsyw@pdsyw1024:~/Desktop$ chmod +x pdsyw1024/install.sh
pdsyw@pdsyw1024:~/Desktop$ ./pdsyw1024.run
运行时它会:
解压pdsyw1024目录至系统的临时目录 /tmp(或其他指定目录);
自动调用其中的 install.sh 脚本;
执行完成后自动清理临时文件(默认行为)。
3.常用选项
makeself 提供了很多可选的参数,最常见的有:
--gzip / --bzip2 / --xz:指定压缩方式,默认是 gzip。
--tar-args "<参数>":在打包时向 tar 命令传额外参数。
--target dir:允许用户在解压时通过命令行指定解压位置,如果不指定一般会使用临时目录。
--keep:打包时指定该选项后,解压完成后不会自动删除解压文件(开发调试时常用)。
--help:查看 makeself 的帮助。
使用 xz 压缩格式示例:
pdsyw@pdsyw1024:~/Desktop$ makeself --xz pdsyw1024 pdsyw1024.run "PDSYW App Installer" ./install.sh
4.自解压脚本的执行流程
makeself 打包生成的 .run文件本质上是一个可执行Shell脚本 + 压缩包的组合。大致流程如下:
当执行 .run 文件时,它会先运行脚本头部的 Shell 脚本逻辑;
脚本会解压内嵌在文件末尾处的压缩包到一个临时目录;
如果打包时指定了启动脚本,则进入临时目录并执行这个脚本;
若未指定 --keep,最后会删除临时目录;
整个流程结束。
因为这一特性,你可以在 .run 文件头部加一些 Bash 判断逻辑,比如检查系统环境、判断依赖是否安装等,这些都可以在正式解压之前进行。
5.常见使用场景
分发可执行程序:将编译好的二进制文件、配置文件、资源文件打包,并附带一个自动配置/安装脚本,以方便用户快速部署。
GUI 安装向导:有些人会在解压后的启动脚本里调用GUI(例如 Zenity、whiptail 等)进行图形/对话框式安装。
离线分发:当你的软件需要离线安装时,没有网络环境无法使用包管理器,这时 makeself 打包好的单文件就非常方便。
内部脚本打包:需要把多个脚本、依赖文件集中到一起,不想暴露给用户太多零碎文件,也可以打成 .run。
容器镜像之外:在某些 CI/CD 流程中,想把一些产物打包起来在不同环境解压测试时,也可以使用。
6.注意事项
可执行权限:在分发 .run 文件时,需要保证它有可执行权限,否则用户可能需要手动chmod +x <file>.run。
依赖系统自带解压工具:虽然在大多数 Linux 上都有 tar 与 gzip/xz,但如果你指定了罕见的压缩方式,接收方未必有对应解压工具,会导致执行失败。
打包大小:如果打包文件非常大,打包和解包过程都会比较慢,也会占用临时目录空间。对大文件进行 makeself 打包需要提前做好空间和时间预估。
兼容性:makeself 本身是脚本,可以在大多数类 Unix 系统上使用,但在 Windows 上并不适用(可通过 WSL 但那又是另一个环境)。
安全性:自解压脚本如果被恶意篡改,可能执行危险操作。要确保你发给用户的 .run 文件没有被中途替换或篡改,可以借助哈希校验(例如 sha256sum)来验证完整性。
makeself 提供了将文件打包成易于分发、易于使用的自解压 .run 文件的能力。其核心使用方式非常简单,对初学者也很友好:指定打包目录、生成文件名、打包标签、以及一个自动运行脚本。配合各种脚本定制,可以做出简单或复杂的安装流程;对内嵌依赖文件进行管理、对环境进行检查等,都可以放进一个单独的 .run 文件里,方便高效。如果你需要一次性把多个脚本、可执行文件和资源文件打包成一个可直接执行的安装包,并自动完成解压和运行,makeself 会是一个非常不错的选择。希望以上内容能帮助你更好地理解和使用 makeself。祝你在打包分发应用时一切顺利!
相关推荐
- Nginx的http块sendfile,keepalive_timeout的配置指令说明,
-
sendfile是用来设置Ngnix服务的一种静态资源的写法sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能这里send...
- Docker安装和配置Nginx(docker-compose部署nginx)
-
下载镜像dockerpullnginx检查Nginx镜像dockerimages创建挂载目录mkdir-p/home/docker-nginx/confmkdir-p/home/doc...
- 记:Nginx 如何配置SSL证书(nginx添加ssl证书)
-
引言最近,有几个其他项目团队的同事问了我几个类似问题:“钦哥,我们微信小程序微信支付,怎么回调不没反应?”“钦哥,我们的项目怎么无法通过https访问的?”然后就有想把配置ssl证书的过程,记录一...
- 多项目nginx部署配置(nginx多站点配置示例)
-
在前后端分离的项目中,前端部署大部分都采用nginx部署。在我参与的一个项目中,后台管理前端和业务应用前端是作为两个独立项目开发的。以往部署时通过不同端口来访问这两个项目,这就导致前端存储的token...
- NGINX最佳缓存配置策略(nginx最佳缓存配置策略有哪些)
-
Nginx可以配置的参数有很多,今天我们来看一下Nginx的缓存如何配置。no-cache和no-store“no-cache”表示必须先与服务器确认返回的响应是否发生了变化,然后才能使用该响应来满足...
- 通过 docker 学习 nginx,附全部配置及 API 测试,使用 apifox 直接打开
-
本篇文章以前端的视角,介绍下nginx的常见配置,并通过docker的方式学习nginx,这保证所有实例配置都能正常运行。我将本文所有关于docker/nginx的配置放置在simple...
- nginx配置负载均衡 以及宕机了后,怎么配置高可用
-
Nginx负载均衡配置是一个分发请求的过程。可以通过将同一个服务的多个实例配置到不同的服务器上,通过Nginx代理请求,将请求分发到这些实例上实现负载均衡。下面详细介绍Nginx负载均衡的配置过程和宕...
- nginx反向代理加https证书和自动跳转配置
-
nginx反向代理加https证书和自动跳转配置如果对运维课程感兴趣,可以在b站上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频1.机器规划:nginx代理机器:192.16...
- 【Nginx基础】Nginx常见负载均衡策略配置示例
-
下面是一些常用的Nginx负载均衡策略及其配置示例:轮询(RoundRobin)这是默认的负载均衡策略,它将请求依次分配给不同的后端服务器。upstreambackend{server...
- nginx中配置固定的JSON响应(nginx指定conf)
-
前提在进行性能测试时,使用mock接口是一种非常有效的方法,可以帮助您模拟真实服务的行为,从而避免对外部系统的依赖。使用Nginx作为mock接口的返回源不仅可以快速配置,还能确保mock接口本身不...
- Nginx基本安全配置(防盗连、隐藏版本号、防嵌套等)
-
在生产环境中nginx有很多安全方案,我在为生产环境部署中得到很多经验,收集到的一些常用配置,简单记录一下。安装Nginx正常安全Nginx大家应该都会,但是各位要知道在安全要求很高的生产环境中,是无...
- nginx如何配置跨域(nginx配置解决跨域)
-
要在Nginx中配置跨域,可以使用add_header指令来添加Access-Control-Allow-*头信息,如下所示:location/api{if($reques...
- Nginx合集-限流配置方案参考(nginx lua限流)
-
Nginx为我们提供了请求限制模块(ngx_http_limit_req_module)、基于令牌桶算法的流量限制模块(ngx_stream_limit_conn_module),可以方便的控制令牌速...
- 韩国站群服务器Nginx反向代理多IP配置指南
-
在站群服务器的运营中,Nginx反向代理技术如同一座智能调度中心,既能隐藏真实服务器架构,又能实现流量精准分发。尤其对于部署在韩国数据中心的站群而言,合理配置多IP反向代理,可显著提升SEO安全性与服...
- Nginx配置前后端服务(nginx配置前端页面部署)
-
nginx安装完成后,可以通过命令查看配置文件nginx-t配置文件nginx.conf,是总的配置,有的人会把配置全部配置到这个文件中,如果服务很多,这个文件变得非常庞大,我见过一个配置很大的,在...
- 一周热门
- 最近发表
-
- Nginx的http块sendfile,keepalive_timeout的配置指令说明,
- Docker安装和配置Nginx(docker-compose部署nginx)
- 记:Nginx 如何配置SSL证书(nginx添加ssl证书)
- 多项目nginx部署配置(nginx多站点配置示例)
- NGINX最佳缓存配置策略(nginx最佳缓存配置策略有哪些)
- 通过 docker 学习 nginx,附全部配置及 API 测试,使用 apifox 直接打开
- nginx配置负载均衡 以及宕机了后,怎么配置高可用
- nginx反向代理加https证书和自动跳转配置
- 【Nginx基础】Nginx常见负载均衡策略配置示例
- nginx中配置固定的JSON响应(nginx指定conf)
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)
- nginx配置 解析 (37)