[Share Experiences] 【脚本】简单的deb一键打包脚本
Tofloor
poster avatar
ThinkYoung
deepin
2022-11-05 09:57
Author

具体打包原理,看看 神末 的 [其他] 解包/打包deb教程 一周年重置版

找到这个一键脚本,试了试,改了改,还可以,可以对比借鉴学习!

适合已经编译完的二进制文件包重新打包deb!

二进制包打包,你也可以!!!

debgen.sh:

#!/bin/sh
# 使用 root 权限运行!这是可选的 
if [ "$(id -u)" != "0" ] ; then
    sudo sh ${0}
    exit 1
fi
 
PACKAGE=包名
EXEC=${PACKAGE}
VERSION=1.0.0
SIZE=1024
MAINTAINER=thinkyoung    
ICON=${PACKAGE}.svg
SECTION=utils
DESCRIPTION=${PACKAGE}
ARCH=amd64 

#如何打包如这个样子的 test-1.0.0-amd64.deb 可如下定义变量 自定义指定生成到 /tmp 下生成
DEBDIR=/tmp/${PACKAGE}-${VERSION}-${ARCH}
 
#可执行程序的所在位置 
EXECDIR=/tmp/${PACKAGE}
ICONDIR=/tmp/${PACKAGE}

#获取文件大小 KB
SIZE=`du -s ${EXECDIR} | awk '{print int($1)}'`

#获取系统架构 
#ARCH=$(uname -m)
#if [ ${ARCH} == "x86_64" ] ; then
#    ARCH=amd64
#elif [ ${ARCH} == "aarch64" ]; then
#    ARCH=arm64
#elif [ ${ARCH} == "mips64" ]; then
#    ARCH=mips64el
#fi


#获取当前的操作系统名称 如Ubuntu
#OS=$(awk -F= '$1=="NAME" {gsub("[\" ]", "", $2); print tolower($2)}' /etc/os-release)
#if [ "${OS}" != "${OS#neokylin}" ]; then
#    OS="deepin"
#fi

make_deb()
{
    rm -rf ${DEBDIR}        #先删除原先的 避免混乱
    mkdir -p ${DEBDIR}/DEBIAN
    mkdir -p ${DEBDIR}/opt/${PACKAGE}
    mkdir -p ${DEBDIR}/usr/share/applications
    mkdir -p ${DEBDIR}/usr/share/icons
    cp ${ICONDIR}/${ICON} ${DEBDIR}/usr/share/icons        #假定图片名称和可执行程序名一样
 
cat  << EOF > ${DEBDIR}/DEBIAN/control
Package: ${PACKAGE}
Version: ${VERSION}
Installed-Size: ${SIZE}
Section: ${SECTION}
Priority: optional
Architecture: ${ARCH}
Maintainer: ${MAINTAINER}    
Description: ${DESCRIPTION}

EOF
 
cat  << EOF > ${DEBDIR}/DEBIAN/postinst
#!/bin/sh
echo 'The program has been installed'
# 刷新图标缓存,桌面数据库和mime类型数据库,防止安装后desktop文件不出现在软件列表/没有图标
update-icon-caches /usr/share/icons/hicolor || true
update-desktop-database /usr/share/applications || true
update-mime-database /usr/share/mime || true

EOF

cat  << EOF > ${DEBDIR}/DEBIAN/prerm
#!/bin/sh
echo 'Program ready for uninstallation'

EOF

cat  << EOF > ${DEBDIR}/DEBIAN/postrm
#!/bin/sh
echo 'The program has been uninstalled'

EOF

cp -r ${EXECDIR}/* ${DEBDIR}/opt/${PACKAGE}        #把程序和程序依赖的库复制过去
 
#下面是快捷方式的文件 #gksu 这个命令可以对该程序提权 pkexec 不可以
cat  << EOF  > ${DEBDIR}/usr/share/applications/${EXEC}.desktop
[Desktop Entry]
Name=${PACKAGE}
Type=Application
Exec=/opt/${PACKAGE}/${EXEC}    
Icon=/usr/share/icons/${ICON}
EOF

chmod 775 ${DEBDIR} -R        #有些文件需要权限 在这里将该树下文件都做了修改
dpkg -b ${DEBDIR}        #deb打包命令 -b == --build
}
make_deb        #在脚本中调用函数不需要小括号 直接写函数名执行
 
#end
Reply Favorite View the author
All Replies
jjcui8595
Moderator
2022-11-05 13:48
#1

like

Reply View the author
神末shenmo
Moderator
Spark-App
2022-11-05 18:20
#2

size可以不写死

参考这个

https://gitee.com/deepin-community-store/spark-wine/blob/master/spark-dwine-helper/build.sh#L19

Reply View the author
ThinkYoung
deepin
2022-11-05 20:26
#3
神末shenmo

size可以不写死

参考这个

https://gitee.com/deepin-community-store/spark-wine/blob/master/spark-dwine-helper/build.sh#L19

kissing_heart

收到! 我再改改!

Reply View the author
心平气和
deepin
2022-11-05 23:07
#4

收藏了

Reply View the author
138******91
deepin
2023-06-06 05:35
#5

好文章,收藏一下

Reply View the author
字甲达宾
deepin
2023-06-11 02:10
#6

很不错的打包工具!

几个小建议:

  1. 目录的权限,是 775?755 如何?
  2. 不少网友(以及部分国内软件厂商)自行打包的 DEB,很多 desktop 文件,以及 png, svg 图片,都是 755 权限 (即带有 可执行 权限 )。建议做一些额外的检测和修正工序。这几类文件,一般通常是 644 权限。
Reply View the author
ThinkYoung
deepin
2023-06-11 02:16
#7
字甲达宾

很不错的打包工具!

几个小建议:

  1. 目录的权限,是 775?755 如何?
  2. 不少网友(以及部分国内软件厂商)自行打包的 DEB,很多 desktop 文件,以及 png, svg 图片,都是 755 权限 (即带有 可执行 权限 )。建议做一些额外的检测和修正工序。这几类文件,一般通常是 644 权限。

dpkg-deb要求是: (must be >=0755 and <=0775)

看个人打包内容 具体自己灵活调节吧 就是个参考脚本

Reply View the author