Cat命令制作.bin安装包
.bin 将Shell脚本与压缩包合并成一个文件,直接在Linux上运行安装。
基础使用
Shell文件
这里命名为install.sh
,可以自定义
内容如下
#!/bin/bash
# 程序名称
name=name
# 卸载脚本名称
unshname=uninstall${name}.sh
# 程序安装路径
installpath=/opt/${name}
# 安装前先卸载旧版本软件
if [ -f "/usr/bin/$unshname" ];then
echo "=========== 卸载旧版本软件 ============="
/usr/bin/$unshname
echo "====================================="
echo ""
fi
# 分离出的压缩包名称
tmpfile_name=/tmp/${name}.tgz
echo -e "\t 准备安装软件..."
#从bin中分离出${tmpfile_name}压缩包,'1,/^exit 0$/!p'代表从一行到以exit开头以0结尾的行即整个shell脚本,!代表取反,
#所以最后分离的是出了shell脚本的部分也即压缩包 $0代表脚本本身即从bin安装包中实现分离
sed -n -e '1,/^exit 0$/!p' $0 > ${tmpfile_name} 2>/dev/null
#将分离出的脚本解压缩到/tmp文件夹下
tar xzf ${tmpfile_name} -C /tmp
#解压完成后删除压缩包
rm -rf ${tmpfile_name}
#转到解压文件的文件夹/tmp下
cd /tmp
# 安装目录不存在则创建
if [ ! -d $installpath ] ;then
mkdir -p $installpath
fi
#安装过程完成后,删除解压后的文件目录
rm -rf ${name}
echo -e "\t 安装完成"
exit 0
使用方法
- 创建空文件
# 创建三个文件
touch 1 2 3
- 将三个文件压缩成压缩包,模拟安装包
tar -czf name.tgz 1 2 3
- 使用
cat
命令合并成.bin
文件
cat install.sh name.tgz > install.bin
- 赋予执行权限
chmod +x install.bin
- 执行
> ./install.bin
准备安装软件...
安装完成
参考文档:
Java程序打包为.bin安装包样例
项目结构
文件 | 说明 |
---|---|
bigdata-monitor-install.sh | 安装服务脚本 |
start-bigdata-monitor | 启动服务脚本 |
mvn-package.sh | 项目打包,生成安装.bin文件 |
bigdata-monitor-install.sh
文件内容
#!/bin/bash
# 程序名称
name=bigdata-monitor
# 卸载脚本名称
install_mark=/usr/bin/.${name}.ok
# 程序安装路径
installpath=/opt/${name}
# 启动脚本名称
start_script_name=start-bigdata-monitor
# 安装前先卸载旧版本软件
if [ -f "$install_mark" ];then
echo "=========== 卸载旧版本软件 ============="
# 删除启动脚本
echo -e "\t 删除启动脚本"
rm -f /usr/bin/${start_script_name}
# 删除已安装标记文件
echo -e "\t 删除已安装标记文件"
rm -f $install_mark
# 删除已安装程序目录
echo -e "\t 删除已安装程序目录"
rm -rf ${installpath}
echo "====================================="
fi
# 分离出的压缩包名称
tmpfile_name=/tmp/${name}.tgz
echo -e "\t 准备安装软件..."
#从bin中分离出${tmpfile_name}压缩包,'1,/^exit 0$/!p'代表从一行到以exit开头以0结尾的行即整个shell脚本,!代表取反,
#所以最后分离的是出了shell脚本的部分也即压缩包 $0代表脚本本身即从bin安装包中实现分离
sed -n -e '1,/^exit 0$/!p' $0 > ${tmpfile_name} 2>/dev/null
#将分离出的脚本解压缩到/tmp文件夹下
tar xzf ${tmpfile_name} -C /tmp
#解压完成后删除压缩包
rm -rf ${tmpfile_name}
#转到解压文件的文件夹/tmp下
cd /tmp
# 安装目录不存在则创建
if [ ! -d $installpath ] ;then
mkdir -p $installpath
fi
# 配置程序安装步骤
cp -r /tmp/${name}/* ${installpath}
echo -e "\t 程序已安装完成"
# 启动脚本复制到bin目录
cp /tmp/${name}/${start_script_name} /usr/bin
rm -f $installpath/${start_script_name}
echo -e "\t 安装程序启动脚本已安装完成"
# 赋予执行权限
chmod +x /usr/bin/${start_script_name}
echo -e "\t 安装程序权限设置完成"
# 安装过程完成后,删除解压后的文件目录
rm -rf /tmp/${name}
echo -e "\t 生成已安装标记"
touch ${install_mark}
echo -e "\t 安装完成"
exit 0
start-bigdata-monitor
#!/bin/bash
cd /opt/bigdata-monitor
nohup java -jar bigdata-monitor.jar &
mvn-package.sh
source /etc/profile
script_dir_name=bigdata-monitor
cd ..
pwd
mvn package -DskipTests=true
cd bin
if [ -d "target" ];then
echo "=========== 删除历史打包 ============="
rm -rf target/*
echo "====================================="
fi
if [ ! -d "target/${script_dir_name}" ] ;then
mkdir -p "target/${script_dir_name}"
fi
# 复制jar包到打包目录
cp ../bigdata-monitor-admin/target/bigdata-monitor-admin.jar target/${script_dir_name}/bigdata-monitor.jar
cp bigdata-monitor/start-bigdata-monitor target/${script_dir_name}
pwd
# 复制启动脚本到打包目录
cp bigdata-monitor/bigdata-monitor-install.sh target/
cd target
# 打压缩包
tar -czf bigdata-monitor.tgz ${script_dir_name}
cat bigdata-monitor-install.sh bigdata-monitor.tgz > install.bin
rm -rf ${script_dir_name}
rm -f bigdata-monitor-install.sh
rm -f bigdata-monitor.tgz