通用的deb打包脚本
shell示例脚本
#!/bin/bash
CUR_DIR=$(pwd)
# cmake的构建空间
BUILD_DIR="${CUR_DIR}/build"
# 定义变量
PACKAGE_NAME="test"
PACKAGE_VERSION="1.2.3"
PACKAGE_ARCH="arm64"
PACKAGE_MAINTAINER="Your Name <your.email@example.com>"
PACKAGE_DESCRIPTION="my desc"
PACKAGE_DEPENDS=""
pushd "${BUILD_DIR}";
# 创建包目录
rm -rf ${PACKAGE_NAME}_package
mkdir -p "${PACKAGE_NAME}_package/DEBIAN"
# 创建控制文件
cat > "${PACKAGE_NAME}_package/DEBIAN/control" <<EOF
Package: ${PACKAGE_NAME}
Version: ${PACKAGE_VERSION}
Section: base
Priority: optional
Architecture: ${PACKAGE_ARCH}
Depends: ${PACKAGE_DEPENDS}
Maintainer: ${PACKAGE_MAINTAINER}
Description: ${PACKAGE_DESCRIPTION}
This is a custom application built from source.
EOF
# 创建预安装脚本 (preinst)
cat > "${PACKAGE_NAME}_package/DEBIAN/preinst" <<EOF
#!/bin/bash
set -e
# 在安装前执行的操作
echo "Starting pre-installation script..."
EOF
# 创建安装后脚本 (postinst)
cat > "${PACKAGE_NAME}_package/DEBIAN/postinst" <<EOF
#!/bin/bash
set -e
# 在安装后执行的操作
echo "Starting post-installation script..."
EOF
# 创建卸载前脚本 (prerm)
cat > "${PACKAGE_NAME}_package/DEBIAN/prerm" <<EOF
#!/bin/bash
set -e
# 在卸载前执行的操作
echo "Starting pre-removal script..."
EOF
# 创建卸载后脚本 (postrm)
cat > "${PACKAGE_NAME}_package/DEBIAN/postrm" <<EOF
#!/bin/bash
set -e
# 在卸载后执行的操作
echo "Starting post-removal script..."
EOF
# 确保脚本具有可执行权限
chmod +x "${PACKAGE_NAME}_package/DEBIAN/"{preinst,postinst,prerm,postrm}
#
# [复制/安装]文件到包目录
#1. cmake安装型, 先自行完成cmake的配置和编译工作,
make install DESTDIR="${PACKAGE_NAME}_package/"
# 生成 .deb 包
dpkg-deb --build "${PACKAGE_NAME}_package" "${PACKAGE_NAME}_${PACKAGE_VERSION}_${PACKAGE_ARCH}.deb"
# 输出结果
echo "Generated .deb package: ${PACKAGE_NAME}_${PACKAGE_VERSION}_${PACKAGE_ARCH}.deb"
popd;
使用方法
1. 修改deb打包空间
用于进行deb打包的工作目录
BUILD_DIR="${CUR_DIR}/build"
2. 修改软件包信息
PACKAGE_NAME="test"
PACKAGE_VERSION="1.2.3"
PACKAGE_ARCH="arm64"
PACKAGE_MAINTAINER="Your Name <your.email@example.com>"
PACKAGE_DESCRIPTION="my desc"
PACKAGE_DEPENDS=""
3. 修改根文件集成方式
需要将安装的根文件按照目录结构安装到指定的目录
我这里采用CMakeLists.txt的方式构建,也可以采用cp方式
make install DESTDIR="${PACKAGE_NAME}_package/"