[ Content contribution] 打包deb的模板目录,给有需要自己打包DEB安装包的人一些思路
Tofloor
poster avatar
酷谷的谷子
deepin
2024-05-17 13:10
Author

打包deb的模板目录,给有需要自己打包DEB安装包的人一些思路

首相讲一下打包目录,也可以叫做一个DEB的项目名称

假设 我的 打包目录叫 DEB-Template 里面 有 opt usr 这写叫做虚拟目录 安装deb后就是 /opt

对应的脚本书写也要对用真实目录

下面是我的一个打包目录的结构图 这个脚本DEB-Template-uninstall更具自己的名字应用名字改成 APP-nama-uninstall 这样应为包多了怕有一样的

脚本有点乱 自己修改 一下 要注意的是,有善后脚本的 一定要拷贝到其他非安装目录,应为要是在安装目录里卸载后就没有了postrm脚本无法调用

lib 目录下的两个脚本的使用

#简单举个例子
MY_USER_DIR=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD 1`
cp -r /opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD ${MY_USER_DIR}

附件下载 :DEB-Template.zipdistrobox 打包成一个deb安装包的实列cn.i8520.distrobox.zip

123.png

下面讲一下 control 文件的主要组成部分

#包名称
Package: deb.template
#版本
Version: 0.1
Prioritt: optional
Architecture: amd64
#包大小
Installed-Size: 168
#Depends: zenity
#维护者信息
Maintainer: [i8520 <[email protected]>]
#版本说明
Description: 版本 1.4.2.1

postinst 脚本

#!/bin/bash
#用户路径相当于$HOME,但是这个有ROOT用户和普通用户的区别建议使用这个
MY_USER_DIR=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD 1`
#用户名
MY_USER_NAME=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD`
#桌面路径,应为有些桌面是中英文的
MY_Desktop=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-Desktop`
#创建删除一个/opt/CN-i8520-MILLET/uninstall 目录用于存放卸载脚本
UninstallDir="/opt/CN-i8520-MILLET/uninstall"  
if [ -d "${UninstallDir}" ]; then  
    echo "目录 ${UninstallDir} 存在."
    cp -r /opt/CN-i8520-MILLET/DEB-Template/DEB-Template-uninstall ${UninstallDir}
    echo "OK卸载脚本已拷贝" 
else  
    echo -e "创建${UninstallDir}目录\n用于拷贝uninstall执行脚本,用于使用卸载命令删除不干净的的问题\nOk已创建"
    mkdir -p ${UninstallDir}
    sleep 1
    #拷贝卸载脚
    cp -r /opt/CN-i8520-MILLET/DEB-Template/DEB-Template-uninstall ${UninstallDir}
    echo "OK卸载脚本已拷贝"
fii
#---------------------------------------------
#添加环境变量
i8520="export distrobox=/usr/local"
i8520X=`cat /etc/profile|grep 'distrobox'|sed -n 1p`
if [[ ! X${i8520} = X${i8520X} ]];then
   #执行的辅助安装脚本
   /opt/CN-i8520-MILLET/distrobox-1.4.2.1/install
   echo 'export distrobox=/usr/local'    | sudo tee -a /etc/profile
   echo 'export PATH=$distrobox/bin:$PATH' | sudo tee -a /etc/profile
   source /etc/profile
else
   echo "OK"
fi
#---------------------------------------------


exit 0  

postrm 脚本

#!/bin/bash
#MY-USER-PWD MY-Desktop 这两个文件卸载后就不存在了,所以需要拷贝到其他地方
#用户路径相当于$HOME,但是这个有ROOT用户和普通用户的区别建议使用这个
MY_USER_DIR=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD 1`
#用户名
MY_USER_NAME=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-USER-PWD`
#桌面路径,应为有些桌面是中英文的
MY_Desktop=`/opt/CN-i8520-MILLET/DEB-Template/lib/MY-Desktop`
UninstallDir="/opt/CN-i8520-MILLET/uninstall" 
#---------------------------------------------------
#删除环境变了
i8520="export distrobox=/usr/local"
#匹配包行distrobox的行并删除
i8520X=`cat /etc/profile|grep 'distrobox'|sed -n 1p`
if [[ ! X${i8520} = X${i8520X} ]];then
   echo "OK 环境变量已经删除"
else
   sed -i "/distrobox/d" /etc/profile
   source /etc/profile
fi
#-------------------------------------------------------
FileUninsta="${UninstallDir}/DEB-Template-uninstall"  
  
# 使用if语句和[ -f ]测试来检查文件是否存在  
if [ -f "$FileUninsta" ]; then  
    #执行善后删除脚本
    bash ${FileUninsta}
    rm -rf ${FileUninsta}
else  
    echo "ok 善后工作已经结束"  
fi
exit 0

打包命令 dpkg-deb -b 打包目录路径 保存的路径/包名称.deb

比如

dpkg-deb -b $HOME/桌面/DEB-Template $HOME/桌面/deb.template.deb

安装 sudo dpkg -i $HOME/桌面/deb.template.deb

卸载 sudo apt-get autoremove --purge deb.template -y

Reply Favorite View the author
All Replies
绍贝格尔
deepin
2024-05-17 13:32
#1

like

Reply View the author
baicailio
deepin
2024-05-17 13:41
#2

点赞 like

Reply View the author
neko
deepin
Ecological co-builder
2024-05-17 15:24
#3

好帖。

这两个文件其实不是一定要有的,根据要打包的应用按需编写。
image.png

打包的话可以简单点直接cd 到包的根目录执行

dpkg -b . ..

这样它就会在上级目录自动生成deb安装包,并自动生成规范的包名。

Reply View the author
liwl
deepin
2024-05-17 17:43
#4
好活当赞
Reply View the author
明天会更好
deepin
2024-05-17 18:51
#5

好贴,留步。

Reply View the author