Skip to content

1. 概述

makeself 是一个用于创建自解压归档文件的工具,可将整个目录打包为单个可执行脚本(通常以 .run 为扩展名)。该脚本在运行时自动解压内容到临时目录、执行指定启动脚本,并在结束后清理临时文件。此方法适用于分发闭源命令行工具或简化部署流程。

2. 安装 makeself

在基于 Debian/Ubuntu 的系统上,可通过包管理器安装:

bash
sudo apt update && sudo apt install -y makeself

其他 Linux 发行版也可通过各自包管理器安装,例如在 Fedora/RHEL 系统中使用 dnf install makeself

3. 准备分发内容

创建一个独立的分发目录,包含所有需要交付的文件:

bash
mkdir -p dist
cp build/bin/executable_binary dist/
cp build/bin/startup_script.sh dist/
chmod +x dist/executable_binary dist/startup_script.sh

注意:确保二进制文件与目标平台架构匹配(如 x86_64 或 ARM),不同架构需分别打包。

4. 创建自解压包

使用 makeselfdist/ 目录打包为单个可执行文件:

bash
makeself dist/ package.run "Package Description" ./startup_script.sh

常用选项说明:

  • --follow:跟随符号链接(默认不跟随)
  • --nox11:禁止自动调用 X11(适用于纯命令行工具)
  • --lsm file.lsm:附加元数据文件(含版本、作者等信息)

示例(带版本和元数据):

bash
makeself --follow --nox11 --lsm package.lsm dist/ package-1.0.0.run "Tool v1.0.0" ./startup_script.sh

LSM(Linux Software Map)文件格式示例(package.lsm):

Title:           My Command Line Tool
Version:         1.0.0
Entered-date:    2026-04-15
Description:     A sample CLI tool for demonstration
Keywords:        cli, tool, demo
Author:          Your Name
Maintained-by:   Your Team
Primary-site:    https://example.com
Original-site:   https://example.com
Platforms:       Linux x86_64
Copying-policy:  Proprietary

5. 用户使用方式

终端用户只需赋予执行权限并运行:

bash
chmod +x package.run
./package.run

支持的验证与调试命令:

bash
./package.run --check    # 校验包完整性
./package.run --keep     # 运行后保留临时解压目录(用于调试)
./package.run --list     # 列出包内文件内容
./package.run --target /custom/path  # 指定解压路径

6. 工作原理

  • makeself 将 Shell 启动脚本与压缩后的归档拼接成单一文件;
  • 运行时,脚本部分负责校验、解压至 /tmp/makeself.XXXXXX
  • 自动执行指定的启动脚本(如 ./startup_script.sh);
  • 默认在执行完成后自动清理临时目录。

重要限制makeself 不提供加密功能,仅实现打包与自解压。敏感逻辑应编译为二进制,避免明文暴露。

7. 注意事项

  • 架构兼容性:二进制文件必须与目标系统 CPU 架构一致,x86 与 ARM 需分别构建和打包;
  • 依赖管理:若工具依赖特定系统库,建议静态链接或明确文档说明;
  • 临时目录权限:某些受限环境(如容器、沙箱)可能无 /tmp 写权限,可考虑通过 --target 指定解压路径;
  • 安全性:自解压包内容可被提取分析,不适合保护高价值知识产权。

8. 替代方案简析

工具 适用场景 局限性
makeself 快速分发 CLI 工具 无加密,内容可逆向
AppImage 跨发行版桌面应用 需 FUSE 支持
自定义 tar.gz + installer 完全可控 需自行处理错误恢复与清理

该方案适合内部工具交付或对安全性要求不高的客户分发场景。

基于 VitePress 构建