.deb软件包的创建。为什么我的文件没有被安装?

我是一个新手,对于软件包的创建并不熟悉,所以请随时指正我:)。无论如何,我想创建一个软件包,可以安装和设置所有特定的LDAP相关软件包和配置文件(经过大量定制)。我遇到的问题是,当使用gdebi命令"软件包名称"进行安装时,我的ldap.conf配置文件无法安装到本地系统。我期望ldap.conf文件会被复制到/etc目录下。这是我的结构(通过dh_make创建):
root@clientb-16:~/navldapubuntu-0.1# ls debian ldap.conf root@clientb-16:~/navldapubuntu-0.1# cd debian root@clientb-16:~/navldapubuntu-0.1/debian# ls changelog control docs files README.Debian rules navldapubuntu navldapubuntu.doc-base.EX compat copyright etc install README.source source navldapubuntu.debhelper.log navldapubuntu.substvars root@clientb-16:~/navldapubuntu-0.1/debian#
我在顶级目录中有一个ldap.conf文件,并在install文件中指定如下:
root@clientb-16:~/navldapubuntu-0.1/debian# more install ldap.conf etc
这个包在执行"dpkg --contents"之后肯定存在...我是不是完全错了?我以为文件会自动安装。请帮助一个新手!!

我不是专家,但我确信查看rules文件的内容会有所帮助。我不确定install文件是否真的是一个官方的Debian软件包文件,或者它只是由你的rules脚本使用。所以也许你可以更新问题并附上它的内容? - Timo Kluck
install文件是由dh_install使用的,如果软件包使用debhelper进行构建。 - dsh
你可能在完成一个任务(配置管理)时使用了错误的工具(软件包管理)。你应该看一下Chef:http://wiki.opscode.com/display/chef/Home - LiveWireBT
1个回答

当我想要验证我构建的软件包内容时,我会使用dpkg-deb将其解压到一个临时目录中。
$ mkdir /tmp/t
$ dpkg-deb -x foo.deb /tmp/t
$ ls /tmp/t

包是否成功安装或是否出现错误?dpkg不允许多个软件包提供相同的文件。如果另一个已安装的软件包包含该文件,则您的软件包将无法安装。我在官方软件包的内容中搜索了ldap.conf[1],发现实际存在的是/etc/ldap/ldap.conf。
你可能会发现dpkg-divert对你有用。我自己并没有使用过,但它确实存在。
[1]: http://packages.ubuntu.com/search?mode=exactfilename&suite=quantal&section=all&arch=any&keywords=ldap.conf&searchon=contents

非常感谢!软件包一直都成功安装。我认为问题就是你所说的那样。我构建了一个软件包,然后移除了它,再重新安装。每次重新安装时,文件都无法复制过去。有几个问题:(1)是否可以在postinst或者其中一个pre*脚本中实现这个功能?我考虑使用一个postinst脚本执行"install -b /etc/ldap.conf /etc/ldap.conf"命令。我尝试了这种方法,但是它找不到源ldap.conf文件,所以没有成功。这种方法似乎更简单,但是并没有起作用。再次感谢!! - user2175757
我想补充一下,我使用gdebi来安装我构建的本地软件包时从未遇到过任何错误。 - user2175757
在移除包之后清理它。dh可能会自动将文件标记为conffile,因为它位于/etc目录中。conffiles在包被移除时不会被删除,但在包被清理时会被删除。(这是为了允许在不丢失配置的情况下移除然后重新安装包)你在评论中展示的install命令无法工作,因为如果它工作了,它将是一个空操作(在已经存在的位置安装文件 :)) - dsh