deb包的构建(dpkg-buildpackage)过程详细过程说明

景永望
2023-12-01

/*********************************************************************
 * Author  : Samson
 * Date    : 07/04/2014
 * Test platform:
 *              3.11.0-12-generic #19-Ubuntu
 *              GNU bash, version 4.2.45
 * *******************************************************************/

deb包的构建的命令为:

dpkg-buildpackage


这样会自动完成所有从源代码包构建二进制包的工作,包括以下几个步骤:

0、清理源代码树(debian/rules clean)

1、构建源代码包(dpkg-source -b)

2、构建程序(debian/rules build)

3、构建二进制包(fakeroot debian/rules binary)

4、使用 gpg 签署 .dsc 文件

5、使用 dpkg-genchanges 和 gpg 创建并签署上传用的 .changes 文件

其中0~3这四步中,其实都是调用的dh命令,
第一步执行的其实是:dh clean ;若是想修改默认的clean项的时候,那么可以使用如下语句写入到rules文件中进行重写clean动作内容:
override_dh_auto_clean:
        rm -rf build-deb build-udeb
第三步执行的其实是:dh build ;当然和第一步中的clean一样,也是可以通过override_dh_auto_configure、override_dh_auto_build等类似于第一步中的动作进行重写的;
如:
override_dh_auto_configure:
        dh_auto_configure -Bbuild-deb -- $(confflags)
        dh_auto_configure -Bbuild-udeb -- $(confflags_udeb)

override_dh_auto_build:
        # Debian's /var/log/btmp has inappropriate permissions.
        perl -pi -e 's,.*#define USE_BTMP .*,/* #undef USE_BTMP */,' build-deb/config.h
        perl -pi -e 's,.*#define USE_BTMP .*,/* #undef USE_BTMP */,' build-udeb/config.h

第四步执行的其实是:dh binary; 此步骤会用到各种dh_*的命令,主要包括以下命令:
dh_testroot
dh_prep
dh_installdirs
dh_install
dh_installdocs
dh_installchangelogs
dh_installexamples
dh_installman
dh_installcatalogs
dh_installcron
dh_installdebconf
dh_installemacsen
dh_installifupdown
dh_installinfo
dh_pysupport
dh_installinit
dh_installmenu
dh_installmime
dh_installmodules
dh_installlogcheck
dh_installlogrotate
dh_installpam
dh_installppp
dh_installudev
dh_installwm
dh_installxfonts
dh_installgsettings
dh_bugfiles
dh_ucf
dh_lintian
dh_gconf
dh_icons
dh_perl
dh_usrlocal
dh_link
dh_compress
dh_fixperms
dh_installdeb
dh_md5sums
dh_gencontrol
dh_builddeb

以上的命令都是可以使用 override_dh_auto_$(strstr("dh_*", "*")):
    action…………………………
以上的*是dh_后对应的名称;
当然还会用到强大的安装命令:
install

以上的dh_install*的命令其实是将/debian/deb包名/下的对应的系统中的目录路径的相同的路径名下的东东安装到系统对应的目录下,例如:有一个包名为:openssh-client的包,那么在debian目录下应该就存在一个这样的目录:debian/openssh-client/usr/share/man/pl/man*/, dh_installman是将debian/openssh-client/usr/share/man/pl/man*/目录下的man时的对应帮助文件安装到系统的/usr/share/man/pl/man*/目录下, 其它命令的安装路径请参看命令的帮助信息;

refer:
http://www.debian.org/doc/manuals/maint-guide/build.zh-cn.html

 类似资料: