在安装期间使用debconf在Ubuntu16.04中配置包时,我遇到了以下问题。
更准确地说,包使用debconf保存配置文件,然后在postinst脚本中立即启动服务。此服务还使用debconf模块加载上一步中保存的配置。
但是,以systemd启动的服务由于错误而失败:
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable据我所知,dpkg仍然使用debconf前端访问这个文件,当它试图启动另一个前端时,服务就会崩溃(环境变量DEBIAN_HAS_FRONTEND没有传递给服务)。我试图在脚本中强制使用env变量DEBIAN_HAS_FRONTEND,但随后出现了其他错误。
我认为我应该在dpkg进程结束之后强制启动守护进程,而debconf已经完成了,有什么想法吗?
发布于 2016-07-03 13:20:58
首先,在独立程序中使用debconf是错误的。要引用man debconf-devel,请参阅其他脚本:
您也可以在其他独立的程序中使用debconf。这里要注意的问题是,debconf不是故意的,也不应该用作注册中心。这毕竟是unix,程序是由/etc中的文件配置的,而不是由某个模糊的数据库配置的(不管怎么说,这只是一个缓存,可能会被毁了)。因此,在一个独立的程序中使用debconf之前,要考虑很长时间。
同一手册页还有助于解决上一节中的实际问题( POSTINST脚本):
如果postinst启动了一个守护进程,那么一定要让debconf在结束时停止,因为debconf可能会对postinst的其他操作感到有点困惑。
也就是说,在启动守护进程之前先发出db_stop (即使它本身不使用debconf )。
https://unix.stackexchange.com/questions/293307
复制相似问题