御风灰灰
Published on 2025-04-08 / 2 Visits
0
0

ubuntu平台deb包制作

通用的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/"

Comment