安装debhelper 和dh_make 两个deb包。
man debhelper查看帮助
在线帮助文档:
Debian 新维护人员手册
http://www.debian.org/doc/manuals/maint-guide/
下面以一个简单测试程序,试试制作deb包的流程
用cmake写的make
-----------------------------------
root@debian01:/home/bright/helloworld-1.0# ls
CMakeLists.txt hello_world.h main.cpp
----------------------------------
root@debian01:/home/bright/helloworld-1.0# cat hello_world.h
#include
class HelloWorld
{
public:
HelloWorld() {
std::cout << "hello world!\n" << std::endl;
}
};
------------------------------------
root@debian01:/home/bright/helloworld-1.0# cat main.cpp
#include "hello_world.h"
int main()
{
HelloWorld a;
}
----------------------------------
root@debian01:/home/bright/helloworld-1.0# cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(hello_world)
add_executable(hello_world main.cpp)
#指定install命令
# 最后的目录是 / 因为最后prefix一般都是/usr/ 所以最后组合
# 在一起就是/usr/bin/helloworld-1.0, 这个是debian的要求目录结构
install(TARGETS hello_world
RUNTIME DESTINATION bin/helloworld-1.0)
# 用PROGRAMS指定,好像复制的时候,直接在源码目录下复制。没有正确使用相对build目录。
# 可能用于实现编译好的第三方的程序比较合适。自己编译的程序还是用TARGETS指定比较好
#install(PROGRAMS hello_world
# DESTINATION bin/helloworld-1.0)
参考 cmake install 命令的说明 http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:install
--------------------------------------
root@debian01:/home/brighthelloworld-1.0# cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bright/helloworld
-----------------
cmake生成的install比较复杂,除了Makefile文件之外,还生成了一个cmake_install.cmake 文件。
上面的cmake的配置,默认是安装到下面这个路径。说是要指定CMAKE_INSTALL_PREFIX 这个变量才行。
root@debian01:/home/bright/helloworld-1.0# make install
[100%] Built target hello_world
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/helloworld-1.0/hello_world
这个要看dh_auto_install 能不能识别cmake的install,然后传CMAKE_INSTALL_PREFIX命令过去才行。下面试试看
下面开始制作deb包:
1.dh_make
=========
root@debian01:/home/bright/helloworld-1.0# dh_make --native
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
[s/i/m/l/k/n] s
Maintainer name : root
Email-Address : root@debian01.IN
Date : Mon, 02 Dec 2013 14:26:17 +0800
Package Name : helloworld
Version : 1.0
License : gpl3
Type of Package : Single
Hit to confirm:
Done. Please edit the files in the debian/ subdirectory now. helloworld
uses a configure script, so you probably don't have to edit the Makefiles.
---------------------
当前的目录名字需要是-这种格式,不然会有提示
看上去需要按照文档这样设置一下debian的变量。这里只是简单测试,就免去了。
-----------------------
$ cat >>~/.bashrc <
DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME
EOF
$ . ~/.bashrc
----------------------
生成了很多文件
root@debian01:/home/bright/helloworld-1.0# ls -l debian/
总用量 116
-rw-r--r-- 1 root root 123 12月 2 14:28 changelog
-rw-r--r-- 1 root root 2 12月 2 14:28 compat
-rw-r--r-- 1 root root 522 12月 2 14:28 control
-rw-r--r-- 1 root root 1392 12月 2 14:28 copyright
-rw-r--r-- 1 root root 0 12月 2 14:28 docs
-rw-r--r-- 1 root root 1290 12月 2 14:28 emacsen-install.ex
-rw-r--r-- 1 root root 480 12月 2 14:28 emacsen-remove.ex
-rw-r--r-- 1 root root 1275 12月 2 14:28 emacsen-startup.ex
-rw-r--r-- 1 root root 140 12月 2 14:28 helloworld.cron.d.ex
-rw-r--r-- 1 root root 244 12月 2 14:28 helloworld.default.ex
-rw-r--r-- 1 root root 548 12月 2 14:28 helloworld.doc-base.EX
-rw-r--r-- 1 root root 4298 12月 2 14:28 init.d.ex
-rw-r--r-- 1 root root 1641 12月 2 14:28 manpage.1.ex
-rw-r--r-- 1 root root 4652 12月 2 14:28 manpage.sgml.ex
-rw-r--r-- 1 root root 11009 12月 2 14:28 manpage.xml.ex
-rw-r--r-- 1 root root 135 12月 2 14:28 menu.ex
-rw-r--r-- 1 root root 960 12月 2 14:28 postinst.ex
-rw-r--r-- 1 root root 933 12月 2 14:28 postrm.ex
-rw-r--r-- 1 root root 693 12月 2 14:28 preinst.ex
-rw-r--r-- 1 root root 880 12月 2 14:28 prerm.ex
-rw-r--r-- 1 root root 153 12月 2 14:28 README
-rw-r--r-- 1 root root 175 12月 2 14:28 README.Debian
-rw-r--r-- 1 root root 199 12月 2 14:28 README.source
-rwxr-xr-x 1 root root 442 12月 2 14:28 rules
drwxr-xr-x 2 root root 4096 12月 2 14:28 source
-rw-r--r-- 1 root root 799 12月 2 14:28 watch.ex
按照 http://www.debian.org/doc/manuals/maint-guide/dother.zh-cn.html的说明删掉不需要的那些
Emacs 的配置文件,不需要
root@debian01:/home/bright/helloworld-1.0# rm -f debian/emacsen-*
这个是用来设置后台进程的,暂时不需要
root@debian01:/home/bright/helloworld-1.0# rm debian/helloworld.default.ex debian/init.d.ex
文档相关的不需要
manpage.1.ex manpage.sgml.ex manpage.xml.ex menu.ex
root@debian01:/home/bright/helloworld-1.0# rm debian/docs debian/helloworld.doc-base.EX debian/manpage.*
图形界面菜单相关,不需要
root@debian01:/home/bright/helloworld-1.0# rm debian/menu.ex
很多post pre 脚本相关的,这个简单的例子里面也不需要
root@debian01:/home/bright/helloworld-1.0# ls -l debian/*.ex
-rw-r--r-- 1 root root 140 12月 2 14:28 debian/helloworld.cron.d.ex
-rw-r--r-- 1 root root 960 12月 2 14:28 debian/postinst.ex
-rw-r--r-- 1 root root 933 12月 2 14:28 debian/postrm.ex
-rw-r--r-- 1 root root 693 12月 2 14:28 debian/preinst.ex
-rw-r--r-- 1 root root 880 12月 2 14:28 debian/prerm.ex
-rw-r--r-- 1 root root 799 12月 2 14:28 debian/watch.ex
root@debian01:/home/bright/helloworld-1.0# rm debian/*.ex
最后剩下的文件如下
root@debian01:/home/bright/helloworld-1.0# ls -l debian/
总用量 36
-rw-r--r-- 1 root root 123 12月 2 14:28 changelog
-rw-r--r-- 1 root root 2 12月 2 14:28 compat
-rw-r--r-- 1 root root 522 12月 2 14:28 control
-rw-r--r-- 1 root root 1392 12月 2 14:28 copyright
-rw-r--r-- 1 root root 153 12月 2 14:28 README
-rw-r--r-- 1 root root 175 12月 2 14:28 README.Debian
-rw-r--r-- 1 root root 199 12月 2 14:28 README.source
-rwxr-xr-x 1 root root 442 12月 2 14:28 rules
drwxr-xr-x 2 root root 4096 12月 2 14:47 source
接下来比较重要的是修改Makefile文件里面 make install部分,把文件复制到 /usr/local/bin/这种绝对路径的,全部改成
$(DESTDIR)/usr/local/bin 这种相对路径。就是支持 $(DESTDIR)这个make程序变量。
这样deb的工具编译的时候,通过类似 “make DESTDIR=/tmp/stage install”这样的命令来调用make,才会把程序都安装到debian打包工具指定的临时目录去,才能正确打包到deb包里面去。
参考说明: http://www.debian.org/doc/manuals/maint-guide/modify.zh-cn.html#destdir
但我这里是使用的是cmake,不是原始Makefile 的install target。他采用的cmake的CMAKE_INSTALL_PREFIX参数指定安装目录。后面看看debian的
包制作工具能比能识别这个cmake,然后正确的传参数过去了。
文档给的参考例子,install命令那里使用了 $(DESTDIR)这个变量,
-----------------
BIN = $(DESTDIR)/usr/bin
install: gentoo-target
install -d $(BIN) $(ICONS) $(DESTDIR)/etc
install ./gentoo $(BIN)
install -d $(DESTDIR)/usr/share/doc/gentoo/html
-----------------
2. debian/control
===================
这个文件指定Packag name , Depends 库依赖等信息。
root@debian01:/home/bright/helloworld-1.0# cat debian/control
Source: helloworld
Section: unknown
Priority: extra
Maintainer: root
Build-Depends: debhelper (>= 8.0.0), cmake
Standards-Version: 3.9.3
Homepage:
#Vcs-Git: git://git.debian.org/collab-maint/helloworld.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/helloworld.git;a=summary
Package: helloworld
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description:
参考说明: http://www.debian.org/doc/manuals/maint-guide/dreq.zh-cn.html#control
做一下简单的修改,像下面这样
--------------------------------
root@debian01:/home/bright/helloworld-1.0# cat debian/control
Source: helloworld
Section: unknown
Priority: extra
Maintainer: bright
Build-Depends: debhelper (>= 8.0.0), cmake
Standards-Version: 3.9.3
Homepage:
#Vcs-Git: git://git.debian.org/collab-maint/helloworld.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/helloworld.git;a=summary
Package: helloworld
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description:
Package: helloworld-dev
Architecture: any
Depends: libstdc++6-4.7-dev
Description:
-------------------------------------------
这里注意Depends的的设置
要找出编译你的软件所需的软件包可以使用这个命令:
$ dpkg-depcheck -d ./configure
To manually find exact build dependencies for /usr/bin/foo, execute
$ objdump -p /usr/bin/foo | grep NEEDED
对于列出的每个库,例如 libfoo.so.6,运行:
$ dpkg -S libfoo.so.6
Then just take the -dev version of every package as a Build-Depends entry. If you use ldd for this purpose, it will report indirect lib dependencies as well, resulting in the problem of excessive build dependencies.
3. debian/rules
================
这个其实就是一个makefile文件,可以自己添加 自定义的build install clean 等选项。
-------------------------------
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
------------------------------
默认内容就是 %: 匹配所有的makefile目标,然后转换成执行dh的命令
比如debian/rules clean对应 dh clean,其实最后就执行
dh_testdir
dh_auto_clean
dh_clean
debian/rules build 运行了 dh build,实际执行的命令为:
dh_testdir
dh_auto_configure //这种auto开头的命令就自动去调用cmake ./configure之类的命令来做实际的工作。
dh_auto_build //调用make
dh_auto_test
参考说明: http://www.debian.org/doc/manuals/maint-guide/dreq.zh-cn.html#rules
利用override_dh_auto_configure 改写默认的参数,给cmake传一个参数。
其他的类似dh_auto_XXXX 命令行为应该也很多可以自这里修改的比如
的override_dh_auto_build:
dh_auto_build -- build
------------
root@debian01:/home/bright/helloworld-1.0# cat debian/rules
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
override_dh_auto_configure:
dh_auto_configure -- -DCMAKE_BUILD_TYPE:STRING=Release
------------------------------
4. dh_auto_configure
====================
这个默认会执行./configure ,Makefile.PL 或者cmake等各种命令。
比如像这里事先执行cmake生成makefile,一些cmake的参数可以在这里传给cmake
5. dh_install
=============
这个可以指定把那些文件放到最后的deb包里面去,安装的时候安装到那个目录去。
默认的Makefile里面就有install命令,如果make install 时候就已经把文件的目录到 $(DESTDIR)的了话。
这一步就可以不用配置了。 因为dh_auto_install会自动吧 debian/ 这样的名字当作参数传给make
make install \
DESTDIR=/path/to/package_version-revision/debian/package
make install 的时候就会把文件复制到 debian的目录去,它就可以自动处理了。
这个dh_install是针对 make install里面没有处理的文件的情况。
可以man查看一下帮助
man dh_install
还有 dh_install* 系列命令来做其他事情的, dh_installmodules dh_installdirs dh_installdocs 等等,可以自己man看一下帮助
配置文件
debian/.install
如果在debian/control文件里面只指定一个 package,那么 dh_auto_install 命令是会把这个debian/这样的目录作为临时目录的
,然后把make install安装在这个临时目录的文件全部放到最终的deb文件里面去的。但如果debian/control文件里面指定多个package,那么dh_auto_install就使用 debian/tmp作为
临时目录,然后由你在5步的时候,自己使用dh_install 来决定把那些文件从debian/tmp目录下复制到 debian/ and debian/目录去。最后的
package-1_*.deb和package-2_*.deb才包含改文件。
http://www.debian.org/doc/manuals/maint-guide/modify.zh-cn.html#destdir
注意相对路径的指定,前面是相对 debian/tmp 这样的编译目录,后面是相对 debian/helloword-dev这样package目录。
前面可以是文件或者目录名,后面的如果省略dh_install 就自动根据前面部分的值推测后面部分的目录名。参见dh_install的帮助说明。
-------------
root@debian01:/home/bright/helloworld-1.0/debian# cat helloworld.install
../../helloworld.conf etc/helloworld
usr/bin/helloworld-1.0/hello_world
root@debian01:/home/bright/helloworld-1.0/debian# cat helloworld-dev.install
../../*.h usr/include/helloworld-1.0
6. 最后使用dpkg-buildpackage构建软件包
=====================================
http://www.debian.org/doc/manuals/maint-guide/build.zh-cn.html
检查依赖包是否都已经安装上去了
dpkg-checkbuilddeps
打包源码,会把当前目录打包一个helloworld_1.0.tar.gz文件
dpkg-buildpackage -S
构建deb包
dpkg-buildpackage
--------
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "Release"
-- Installing: /home/bright/helloworld-1.0/debian/tmp/usr/bin/helloworld-1.0/hello_world
可以看到上面面这样输出, cmake已经把文件安装到debian/tmp目录下面去,说明dh_auto_install是能够兼容cmake的,已经把正确的路径传过去了。
或者是cmake本身兼容 标准make的 $(DESTDIR)变量的。可以正确吧CMakeList.txt文件里面install命令指定的文件,放到debian/tmp目录里面去。
7.测试debian包
==============
dpkg-buildpackage 生成的deb包放在父目录里面。
root@debian01:/home/bright/helloworld-1.0# ls -l ../*.deb
-rw-r--r-- 1 root root 1986 12月 2 16:17 ../helloworld_1.0_i386.deb
-rw-r--r-- 1 root root 1874 12月 2 16:17 ../helloworld-dev_1.0_i386.deb
查看deb包的文件列表
root@debian01:/home/bright/helloworld-1.0# dpkg-deb -c ../helloworld_1.0_i386.deb
drwxr-xr-x root/root 0 2013-12-02 16:17 ./
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/doc/helloworld/
-rw-r--r-- root/root 175 2013-12-02 14:28 ./usr/share/doc/helloworld/README.Debian
-rw-r--r-- root/root 135 2013-12-02 14:28 ./usr/share/doc/helloworld/changelog.gz
-rw-r--r-- root/root 1392 2013-12-02 14:28 ./usr/share/doc/helloworld/copyright
root@debian01:/home/bright/helloworld-1.0# dpkg-deb -c ../helloworld-dev_1.0_i386.deb
drwxr-xr-x root/root 0 2013-12-02 16:17 ./
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-12-02 16:17 ./usr/share/doc/helloworld-dev/
-rw-r--r-- root/root 135 2013-12-02 14:28 ./usr/share/doc/helloworld-dev/changelog.gz
-rw-r--r-- root/root 1392 2013-12-02 14:28 ./usr/share/doc/helloworld-dev/copyright
可以看到没有把可执行文件加进去deb包里面。
原因是前面我在debian/control文件里面指定了两个package。 如果只指定一个 package,那么 dh_auto_install 命令是会把这个debian/这样的目录作为临时目录的
,然后把make install安装在这个临时目录的文件全部放到最终的deb文件里面去的。但如果control文件里面指定多个package,那么dh_auto_install就使用 debian/tmp作为
临时目录,然后由你在5步的时候,自己使用dh_install 来决定把那些文件从debian/tmp目录下复制到 debian/ and debian/目录去。最后的
package-1_*.deb和package-2_*.deb才包含改文件。
http://www.debian.org/doc/manuals/maint-guide/modify.zh-cn.html#destdir
因为我前面第5步没有指定 .install package name 2>.install 文件,所以最终的包里面就没有把可执行文件放进去了。
现在先试一下一个package的情况。
==========================
修改debian/control 把 helloworld-dev 注释掉
----------------
root@debian01:/home/bright/helloworld-1.0# cat debian/control
Source: helloworld
Section: unknown
Priority: extra
Maintainer: bright
Build-Depends: debhelper (>= 8.0.0), cmake
Standards-Version: 3.9.3
Homepage:
#Vcs-Git: git://git.debian.org/collab-maint/helloworld.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/helloworld.git;a=summary
Package: helloworld
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description:
#Package: helloworld-dev
#Architecture: any
#Depends: libstdc++6-4.7-dev
#Description:
#
---------------------------------
root@debian01:/home/bright/helloworld-1.0# dpkg-buildpackage
dpkg-buildpackage: source package helloworld
dpkg-buildpackage: source version 1.0
dpkg-buildpackage: source changed by root
dpkg-buildpackage: host architecture i386
dpkg-source --before-build helloworld-1.0
debian/rules clean
dh clean
dh_testdir
dh_auto_clean
dh_clean
dpkg-source -b helloworld-1.0
dpkg-source: info: using source format `3.0 (native)'
dpkg-source: info: building helloworld in helloworld_1.0.tar.gz
dpkg-source: info: building helloworld in helloworld_1.0.dsc
debian/rules build
dh build
dh_testdir
debian/rules override_dh_auto_configure
make[1]: Entering directory `/home/bright/helloworld-1.0'
dh_auto_configure -- -DCMAKE_BUILD_TYPE:STRING=Release
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bright/helloworld-1.0/obj-i486-linux-gnu
make[1]: Leaving directory `/home/bright/helloworld-1.0'
dh_auto_build
make[1]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -H/home/bright/helloworld-1.0 -B/home/bright/helloworld-1.0/obj-i486-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/depend
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
cd /home/bright/helloworld-1.0/obj-i486-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/bright/helloworld-1.0 /home/bright/helloworld-1.0 /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/hello_world.dir/DependInfo.cmake --color=
Scanning dependencies of target hello_world
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/build
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Building CXX object CMakeFiles/hello_world.dir/main.cpp.o
/usr/bin/c++ -O3 -DNDEBUG -o CMakeFiles/hello_world.dir/main.cpp.o -c /home/bright/helloworld-1.0/main.cpp
Linking CXX executable hello_world
/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_world.dir/link.txt --verbose=1
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/hello_world.dir/main.cpp.o -o hello_world -rdynamic
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Built target hello_world
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 0
make[1]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
dh_auto_test
debian/rules binary
dh binary
dh_testroot
dh_prep
dh_installdirs
dh_auto_install
make[1]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -H/home/bright/helloworld-1.0 -B/home/bright/helloworld-1.0/obj-i486-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/depend
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
cd /home/bright/helloworld-1.0/obj-i486-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/bright/helloworld-1.0 /home/bright/helloworld-1.0 /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/hello_world.dir/DependInfo.cmake --color=
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/build
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make[3]: Nothing to be done for `CMakeFiles/hello_world.dir/build'.
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Built target hello_world
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 0
make -f CMakeFiles/Makefile2 preinstall
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make[2]: Nothing to be done for `preinstall'.
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "Release"
-- Installing: /home/bright/helloworld-1.0/debian/helloworld/usr/bin/helloworld-1.0/hello_world ///这里不再是debian/tmp目录了
make[1]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
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_pysupport: This program is deprecated, you should use dh_python2 instead. Migration guide: http://deb.li/dhs2p
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_strip
dh_makeshlibs
dh_shlibdeps
dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/helloworld/usr/bin/helloworld-1.0/hello_world was not linked against libgcc_s.so.1 (it uses none of the library's symbols)
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb:正在新建软件包 helloworld,包文件为 ../helloworld_1.0_i386.deb。
dpkg-genchanges >../helloworld_1.0_i386.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build helloworld-1.0
dpkg-buildpackage: full upload; Debian-native package (full source is included)
root@debian01:/home/bright/helloworld-1.0# dpkg-deb -c ../helloworld_1.0_i386.deb
drwxr-xr-x root/root 0 2013-12-02 17:21 ./
drwxr-xr-x root/root 0 2013-12-02 17:21 ./usr/
drwxr-xr-x root/root 0 2013-12-02 17:21 ./usr/bin/
drwxr-xr-x root/root 0 2013-12-02 17:21 ./usr/bin/helloworld-1.0/
-rwxr-xr-x root/root 4328 2013-12-02 17:21 ./usr/bin/helloworld-1.0/hello_world
drwxr-xr-x root/root 0 2013-12-02 17:21 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-12-02 17:21 ./usr/share/doc/helloworld/
-rw-r--r-- root/root 175 2013-12-02 14:28 ./usr/share/doc/helloworld/README.Debian
-rw-r--r-- root/root 135 2013-12-02 14:28 ./usr/share/doc/helloworld/changelog.gz
-rw-r--r-- root/root 1392 2013-12-02 14:28 ./usr/share/doc/helloworld/copyright
可以看到./usr/bin/helloworld-1.0/hello_world 这个可执行文件已经打包进去了。正确的deb包
---------------------------------------
下面来测试两个package的情况
=======================
root@debian01:/home/bright/helloworld-1.0# cat debian/control
Source: helloworld
Section: unknown
Priority: extra
Maintainer: bright
Build-Depends: debhelper (>= 8.0.0), cmake
Standards-Version: 3.9.3
Homepage:
#Vcs-Git: git://git.debian.org/collab-maint/helloworld.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/helloworld.git;a=summary
Package: helloworld
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description:
Package: helloworld-dev
Architecture: any
Depends: libstdc++6-4.7-dev
Description:
退回第5步,补上两个package 对应的install文件。
root@debian01:/home/bright/helloworld-1.0/debian# cat helloworld.install
../../helloworld.conf etc/helloworld
usr/bin/helloworld-1.0/hello_world
root@debian01:/home/bright/helloworld-1.0/debian# cat helloworld-dev.install
../../*.h usr/include/helloworld-1.0
------------------------------
root@debian01:/home/bright/helloworld-1.0# dpkg-buildpackage
dpkg-buildpackage: source package helloworld
dpkg-buildpackage: source version 1.0
dpkg-buildpackage: source changed by root
dpkg-buildpackage: host architecture i386
dpkg-source --before-build helloworld-1.0
debian/rules clean
dh clean
dh_testdir
dh_auto_clean
dh_clean
dpkg-source -b helloworld-1.0
dpkg-source: info: using source format `3.0 (native)'
dpkg-source: info: building helloworld in helloworld_1.0.tar.gz
dpkg-source: info: building helloworld in helloworld_1.0.dsc
debian/rules build
dh build
dh_testdir
debian/rules override_dh_auto_configure
make[1]: Entering directory `/home/bright/helloworld-1.0'
dh_auto_configure -- -DCMAKE_BUILD_TYPE:STRING=Release
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bright/helloworld-1.0/obj-i486-linux-gnu
make[1]: Leaving directory `/home/bright/helloworld-1.0'
dh_auto_build
make[1]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -H/home/bright/helloworld-1.0 -B/home/bright/helloworld-1.0/obj-i486-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/depend
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
cd /home/bright/helloworld-1.0/obj-i486-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/bright/helloworld-1.0 /home/bright/helloworld-1.0 /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/hello_world.dir/DependInfo.cmake --color=
Scanning dependencies of target hello_world
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/build
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Building CXX object CMakeFiles/hello_world.dir/main.cpp.o
/usr/bin/c++ -O3 -DNDEBUG -o CMakeFiles/hello_world.dir/main.cpp.o -c /home/bright/helloworld-1.0/main.cpp
Linking CXX executable hello_world
/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_world.dir/link.txt --verbose=1
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/hello_world.dir/main.cpp.o -o hello_world -rdynamic
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Built target hello_world
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 0
make[1]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
dh_auto_test
debian/rules binary
dh binary
dh_testroot
dh_prep
dh_installdirs
dh_auto_install
make[1]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -H/home/bright/helloworld-1.0 -B/home/bright/helloworld-1.0/obj-i486-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/depend
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
cd /home/bright/helloworld-1.0/obj-i486-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/bright/helloworld-1.0 /home/bright/helloworld-1.0 /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles/hello_world.dir/DependInfo.cmake --color=
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make -f CMakeFiles/hello_world.dir/build.make CMakeFiles/hello_world.dir/build
make[3]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make[3]: Nothing to be done for `CMakeFiles/hello_world.dir/build'.
make[3]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_report /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 1
[100%] Built target hello_world
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
/usr/bin/cmake -E cmake_progress_start /home/bright/helloworld-1.0/obj-i486-linux-gnu/CMakeFiles 0
make -f CMakeFiles/Makefile2 preinstall
make[2]: Entering directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
make[2]: Nothing to be done for `preinstall'.
make[2]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "Release"
-- Installing: /home/bright/helloworld-1.0/debian/tmp/usr/bin/helloworld-1.0/hello_world
make[1]: Leaving directory `/home/bright/helloworld-1.0/obj-i486-linux-gnu'
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_pysupport: This program is deprecated, you should use dh_python2 instead. Migration guide: http://deb.li/dhs2p
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_strip
dh_makeshlibs
dh_shlibdeps
dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/helloworld/usr/bin/helloworld-1.0/hello_world was not linked against libgcc_s.so.1 (it uses none of the library's symbols)
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb:正在新建软件包 helloworld,包文件为 ../helloworld_1.0_i386.deb。
dpkg-deb:正在新建软件包 helloworld-dev,包文件为 ../helloworld-dev_1.0_i386.deb。
dpkg-genchanges >../helloworld_1.0_i386.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build helloworld-1.0
dpkg-buildpackage: full upload; Debian-native package (full source is included)
---------------------------------------
root@debian01:/home/bright/helloworld-1.0# dpkg-deb -c ../helloworld_1.0_i386.deb
drwxr-xr-x root/root 0 2013-12-02 21:28 ./
drwxr-xr-x root/root 0 2013-12-02 21:28 ./etc/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./etc/helloworld/
-rw-r--r-- root/root 0 2013-12-02 21:04 ./etc/helloworld/helloworld.conf
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/bin/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/bin/helloworld-1.0/
-rwxr-xr-x root/root 4328 2013-12-02 21:28 ./usr/bin/helloworld-1.0/hello_world
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/share/doc/helloworld/
-rw-r--r-- root/root 175 2013-12-02 14:28 ./usr/share/doc/helloworld/README.Debian
-rw-r--r-- root/root 135 2013-12-02 14:28 ./usr/share/doc/helloworld/changelog.gz
-rw-r--r-- root/root 1392 2013-12-02 14:28 ./usr/share/doc/helloworld/copyright
root@debian01:/home/bright/helloworld-1.0# dpkg-deb -c ../helloworld-dev_1.0_i386.deb
drwxr-xr-x root/root 0 2013-12-02 21:28 ./
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/include/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/include/helloworld-1.0/
-rw-r--r-- root/root 120 2013-12-02 13:17 ./usr/include/helloworld-1.0/hello_world.h
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/share/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-12-02 21:28 ./usr/share/doc/helloworld-dev/
-rw-r--r-- root/root 135 2013-12-02 14:28 ./usr/share/doc/helloworld-dev/changelog.gz
-rw-r--r-- root/root 1392 2013-12-02 14:28 ./usr/share/doc/helloworld-dev/copyright
基本符合预期。