假设我的操作是在/tmp目录下完成的,步骤如下:
mkdir -p /tmp/work
cd /tmp/workmkdir DEBIAN
vi DEBIAN/control
'''
Package:thinpc
Version:3.1.2
Section:utils
Priority: optional
Architecture:i386
Maintainer:yangys<yangys@cloud-times.com>
Description:ctos rdp connection
'''
参数说明:
Source: 源码包的名称;
Section: 表示软件分类;
Priority: extra代表优先级,一般可以写optional或者extra。其中optional是普通包最常用的,extra的优先级相比则还要再低一些;
Maintainer: 软件包维护者,格式为:First Last <youremail@example.com>;
Build-Depends: 编译依赖关系,也就是说要安装哪些软件包才可以编译这个程序;
Standards-Version: 表示使用的Debian Policy版本;
Package: deb包的名字;
Architecture: 要编译的硬件构架。any代表所有构架。all代表这个软件包是跨平台的,比如说同python程序文件可以在所有平台上跑,我们打包的是python包,把any改成all。如果打一个C程序的包,则用any;
Depends: ${shlibs:Depends}, ${misc:Depends},这是deb包的依赖关系。${shlibs:Depends}, ${misc:Depends} 是两个变量,表示debhelper自动检测依赖;这个例子中,我们还要添加python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv。添加完的Depends是这样的:Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv;
Description: 简单的描述,要在60个字符以内,要用英语;vi DEBIAN/preinst
(postinst文件内容( 软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst))
'''
#!/bin/sh
dpkg-divert --divert /usr/share/ct-software-center/shell/ct-software-center.sh.org --rename /usr/share/ct-software-center/shell/ct-software-center.sh
'''
vi DEBIAN/postrm
(postrm文件内容( 软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm))
'''
#!/bin/sh
echo $0 $@
PACKAGE=$DPKG_MAINTSCRIPT_PACKAGE
#revert all diverted files
case "$1" in
"remove") #revert all diverted files
dpkg-divert --list $PACKAGE | awk '{print $3}' | while read DIVERTFILE
do
dpkg-divert --remove --rename ${DIVERTFILE}
done
;;
"upgrade")
;;
*)
;;
esac
'''
mkdir -p data/root/.config (目录根据实际要做的deb包的文件所在目录一致)
cd data/root/.config
cp /tmp/ctsc.ini(要做成deb包的文件name) ./
cd /tmp
dpkg-deb -Z gzip -b work/ ct-fix.deb #ct-fix.deb为要生成的deb包name)
小番外,dpkg命令汇总:
安装deb包:
# dpkg -i mydeb-1.deb # 将initrd-vstools.img复制到/boot目录下后,执行postinst,
# postinst脚本在/root目录下生成一个含有"my deb"字符的mydeb.log文件
卸载deb包:
# dpkg -r my-deb # 这里要卸载的包名为control文件Package字段所定义的 my-deb 。
# 将/boot目录下initrd-vstools.img删除后,执行posrm,
# postrm脚本将/root目录下的mydeb.log文件删除
查看deb包是否安装:
# dpkg -s my-deb # 这里要卸载的包名为control文件Package字段所定义的 my-deb
查看deb包文件内容:
# dpkg -c mydeb-1.deb
查看当前目录某个deb包的信息:
# dpkg --info mydeb-1.deb
解压deb包中所要安装的文件
# dpkg -x mydeb-1.deb mydeb-1 # 第一个参数为所要解压的deb包,这里为 mydeb-1.deb
# 第二个参数为将deb包解压到指定的目录,这里为 mydeb-1
解压deb包中DEBIAN目录下的文件(至少包含control文件)
# dpkg -e mydeb-1.deb mydeb-1/DEBIAN # 第一个参数为所要解压的deb包,
# 这里为 mydeb-1.deb
# 第二个参数为将deb包解压到指定的目录,
# 这里为 mydeb-1/DEBIAN