linux 制作一个自解压文件

Linux 下的 .run 自执行安装包(适配 ROS Noetic 等场景),核心思路是将安装脚本、待安装文件打包成「自解压 shell 脚本」 ------ 本质是把「解压逻辑 + 自定义安装逻辑」写到一个脚本里,最终生成可执行的 .run 文件。下面给出通用、可落地的制作步骤

一、核心原理(通俗理解)

.run 文件 = 自解压脚本 + 压缩的安装文件(二进制/配置/依赖)

运行 .run 时,脚本先自动解压内部文件,再执行你写的安装逻辑(复制文件、配置环境、创建快捷方式等),全程无需手动解压。

二、制作步骤(分 4 步,ROS 场景示例)

以「制作一个 ROS 工具的 .run 安装包」为例,假设待安装的内容是:

工具二进制文件:~/ros_tool/bin/my_ros_tool

配置文件:~/ros_tool/config/tool_config.yaml

安装脚本:install.sh(自定义安装逻辑)

步骤 1:整理安装文件结构

先把所有待安装的文件 / 脚本放到一个统一目录,方便打包:

cpp 复制代码
 # 创建工作目录
mkdir -p ~/ros_run_builder/{src,dist}
# src:存放待安装的文件+安装脚本;dist:存放最终生成的.run文件
cd ~/ros_run_builder/src

# 复制待安装文件到src目录(按你的实际路径修改)
cp -r ~/ros_tool/bin ./
cp -r ~/ros_tool/config ./

# 创建核心安装脚本 install.sh(关键!自定义安装逻辑)
vim install.sh

写入以下安装逻辑(适配 ROS Noetic,可按需修改):

cpp 复制代码
#!/bin/bash
# install.sh - ROS 工具安装脚本
set -e  # 出错立即退出

# 定义安装路径(可让用户自定义,这里默认安装到 /opt/ros/noetic/tools)
INSTALL_DIR="/opt/ros/noetic/tools"
echo "开始安装 ROS 工具到:$INSTALL_DIR"

# 1. 创建安装目录
mkdir -p $INSTALL_DIR/{bin,config}

# 2. 复制文件到安装目录
cp -r bin/* $INSTALL_DIR/bin/
cp -r config/* $INSTALL_DIR/config/

# 3. 添加可执行权限
chmod +x $INSTALL_DIR/bin/my_ros_tool

# 4. 配置 ROS 环境(可选,让用户无需手动配)
echo "export PATH=\$PATH:$INSTALL_DIR/bin" >> ~/.bashrc
echo "export ROS_TOOL_CONFIG=$INSTALL_DIR/config/tool_config.yaml" >> ~/.bashrc

# 5. 提示安装完成
echo "✅ ROS 工具安装完成!执行 source ~/.bashrc 生效环境变量"

步骤 2:编写自解压脚本(核心模板)

在 ~/ros_run_builder/src 目录下创建 self_extract.sh(自解压核心逻辑):

cpp 复制代码
vim self_extract.sh

写入通用自解压模板(无需修改,直接复用):

cpp 复制代码
#!/bin/bash
# self_extract.sh - 自解压脚本模板
set -e

# 1. 定义分隔符(必须唯一,建议用随机长字符串)
DELIMITER="=====ROS_RUN_DELIMITER_2026====="

# 2. 解压逻辑:找到分隔符位置,解压后面的压缩内容
ARCHIVE_START=$(awk "/^$DELIMITER$/ {print NR + 1; exit}" $0)
tail -n +$ARCHIVE_START $0 | tar zxvf -

# 3. 进入解压后的目录,执行安装脚本
cd ./ros_tool_files
chmod +x install.sh
./install.sh

# 4. 清理临时文件(可选)
cd ..
rm -rf ./ros_tool_files

# 5. 结束
echo "📦 安装包执行完成!"
exit 0

# 分隔符(必须单独一行)
$DELIMITER

步骤 3:打包生成 .run 文件

将「自解压脚本 + 压缩的安装文件」合并,生成最终的 .run 文件:

cpp 复制代码
cd ~/ros_run_builder/src

# 1. 压缩待安装文件(包括install.sh)到 tar.gz 包
tar zcf ros_tool_files.tar.gz bin/ config/ install.sh

# 2. 合并自解压脚本 + 压缩包 → 生成.run文件
cat self_extract.sh ros_tool_files.tar.gz > ../dist/ros_tool_install.run

# 3. 赋予.run文件执行权限
chmod +x ../dist/ros_tool_install.run

# 最终生成的安装包路径:~/ros_run_builder/dist/ros_tool_install.run

步骤 4:测试 .run 安装包

cpp 复制代码
# 切换到dist目录,运行安装包
cd ~/ros_run_builder/dist
./ros_tool_install.run

# 验证安装结果
source ~/.bashrc
my_ros_tool --version  # 能执行则说明安装成功
相关推荐
程序猿老A17 分钟前
轻量应用服务器总是CPU 100%怎么办?
服务器
LHICOD1 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm
余额瞒着我当琳1 小时前
Linux初识:Linux的历史,计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南
linux·运维·服务器
时间售卖铺1 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
垆边人似月.1 小时前
RDMA 文件传输踩坑(四):从固定延时改造为 READY/ACK 协议
linux·服务器·网络
水饺编程1 小时前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
山乐191311 小时前
麒麟系统,安装Nginx并配置https证书
运维·nginx·https
月落汀兰1 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
阿里云基础软件2 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
服务器硬件项目经理2 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习