经过几周的努力,我能够创建一个中型本地包debian包,可以很好地安装和删除包。
作为http://www.quietsche-entchen.de/cgi-bin/wiki.cgi/-wiki/CreatingDebianPackages Debian维基 http://wiki.debian.org/HowToPackageForDebian http://www.debian.org/doc/manuals/maint-guide/这些对于初学者来说是非常好的材料,
我有基本的问题,在更新包时,所有文件data.tar.gz都会默认更新。
我想根据存储在所有文件中的关键变量,只在data.tar.gz中更新几个文件。
执行preinst脚本的解包后,data.tar.gz中的所有文件都已更新..
我的想法是在升级包之前重新备份文件,并检查文件中的关键变量..如果关键变量大于当前变量,则替换它..
这意味着我正在编写一个简单的备份脚本..并在postinst文件中执行..
我不认为这是个好主意..而且更多超过破折号脚本的限制使它成为一项非常艰巨的工作..
答案 0 :(得分:1)
你想在这里完成什么?在重新安装(或升级)Debian软件包期间,用最新版本替换所有非conffiles正是所谓的发生的事情。如果自上次安装的软件包版本以来文件没有更改,那么无论如何更新它都没有坏处,如果已经更改了,它应该会更新。
如果您有特定文件可能被用户修改并且应该在升级期间保留,请制作conf文件。包系统将提示用户并询问他们是否要保留包维护者的版本或本地修改版本。
(但如果您要将每个文件都设为conf文件,那么您可能做错了。)
要使文件成为conffile,请在debian/conffiles
中列出。但是如果文件将安装在/etc
下,那么您不需要这样做,因为dh_installdeb
会为您执行此操作。
编辑以下评论中的其他信息:
假设您的包中有文件test1.sh
和test2.sh
(以及其他文件)。在Debian世界中,它们要么被最终用户修改,要么它们不是。
conffiles应该在数量上相对较少且尽可能短,以最大限度地减少必须协调包维护者所做的更改与最终用户所做的冲突更改的负担。
如果最终用户可能希望调整的代码中混合了某些内容,请尝试将它们分解为配置文件。如果您将该文件放在/etc
中,则甚至不必手动将其指定为conffile。
如果最终用户需要对非conffile进行更改,则应使用dpkg-divert协议(1)将原始文件移到一边,以及(2)编辑副本。包升级会尊重转移的文件。使用dpkg-divert
的最终用户应该意识到升级后事情可能会中断,因为软件包维护者没有预见到最终用户会修改这些文件,而且本地修改后的版本可能与新升级的不同文件版本。应谨慎使用dpkg-divert
。