随笔-开发-将安装脚本和安装文件打包成一个文件
需要在服务器安装一些工具,除了安装脚本还需要安装文件,可以打包成一个文件方便管理
示例:
.
├── makefile
└── pushgateway
├── gtw_install.sh
└── pushgateway-1.4.3.linux-amd64.tar.gz
makefile:
PRJ_ROOTDIR=$(shell pwd;)
UINST_FILE_NAME=pushgateway-install
PUSHGATEWAY_SRC=pushgateway-1.4.3.linux-amd64.tar.gz
$(info PRJ_ROOTDIR : ${PRJ_ROOTDIR})
all:
# 新建output
mkdir -p $(PRJ_ROOTDIR)/output
# 拷贝文件
cp -af -r $(PRJ_ROOTDIR)/pushgateway/* $(PRJ_ROOTDIR)/output/
# 压缩成一个可执行文件
cd $(PRJ_ROOTDIR)/output/ && cp gtw_install.sh $(UINST_FILE_NAME) && cat $(PUSHGATEWAY_SRC) >> $(UINST_FILE_NAME) && rm -rf gtw_install.sh $(PUSHGATEWAY_SRC)
echo "usage: 拷贝可执行文件到MCU, 执行./$(UINST_FILE_NAME) "
安装脚本(key:先把安装文件提取出来):
#!/bin/bash
# 安装包安装参数
EXEC_FILE_PATH=$(dirname $(realpath $0))
EXEC_FILE_NAME=$(basename $0)
USER_CONF_FILE=$1
#提取文件参数
ENDLINE=$(sed -n '/'"^#ENDTAG"'/=' $EXEC_FILE_NAME)
ENDLINE=`expr ${ENDLINE} + 1`
#压缩文件名
ARCHIVE_FILE=pushgtw.tgz
#解压ARCHIVE_FILE后的文件夹名
ARCHIVE_DIR=pushgateway-1.4.3.linux-amd64
# 安装路径
INST_TMP_PATH="/home/app/pushgtw"
function aio_log () {
local lvl="DEBUG"
local c="31"
local date=`date +%F\ %T.%N`
case "$1" in
"err"|"error"|0)
lvl="ERR"
c="31m"
;;
"info"|1)
lvl="INFO"
c="32m"
;;
"syslog")
lvl="INFO"
c="32m"
;;
"debug"|3|*)
lvl="DEBUG"
c="33m"
;;
esac
# echo -e "\033[$c$date [$lvl] -- $2\033[0m"
echo "$date [$lvl] -- $2"
}
function install_prepare() {
#创建目录
if [ ! -d ${INST_TMP_PATH} ]; then
mkdir -p ${INST_TMP_PATH}
fi
#提取压缩文件
tail -n +${ENDLINE} ${EXEC_FILE_PATH}/${EXEC_FILE_NAME} > ${INST_TMP_PATH}/${ARCHIVE_FILE}
if [ ! -s "${INST_TMP_PATH}/${ARCHIVE_FILE}" ]; then
aio_log error "dump ${ARCHIVE_FILE} filed! Terminating..."
exit 1
fi
#解压压缩文件
aio_log debug "extract install package to ${INST_TMP_PATH}/..."
#先清除之前安装的旧文件
# aio_log debug "clear previous install file($INST_TMP_PATH)..."
# [ -d "${DOCKER_COMPOSE_REAL_DIR}.bak" ] && rm -rf ${DOCKER_COMPOSE_REAL_DIR}.bak
aio_log debug "tar -zxvf ${ARCHIVE_FILE} -C ${INST_TMP_PATH}/..."
tar -zxvf ${INST_TMP_PATH}/${ARCHIVE_FILE} -C ${INST_TMP_PATH}/
if [ $? != 0 ]; then
aio_log error "extract ${ARCHIVE_FILE} filed! Terminating..."
exit 1
fi
}
function install_pushgtw()
{
[[ ! -e "${INST_TMP_PATH}/${ARCHIVE_DIR}/pushgateway" ]] && {
aio_log error "pushgateway binary file no exist"
exit 1
}
cp ${INST_TMP_PATH}/${ARCHIVE_DIR}/pushgateway /usr/local/bin/
chmod +x /usr/local/bin/pushgateway
cat <<- _EOF_ > /etc/systemd/system/pushgateway.service
[Unit]
Description=Pushgateway
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/pushgateway
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
_EOF_
systemctl daemon-reload
systemctl start pushgateway
systemctl status pushgateway
}
# 提取压缩文件并解压到INST_TMP_PATH
install_prepare
# 安装
install_pushgtw
exit 0
#ENDTAG
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/17922850.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统