dpkg-deb --build:使用db_input时debconf失败

时间:2018-03-26 11:03:57

标签: debian dpkg debconf

我正在尝试使用dpkg-deb --build命令构建一个包。

当我尝试使用db_input时,它失败了:

dpkg-deb --build audionet-0.0.8b/
dpkg-deb: building package `audionet' in `audionet-0.0.8b.deb'.

lintian audionet-0.0.8b.deb 
W: audionet: binary-without-manpage usr/bin/audionet

sudo dpkg -i audionet-0.0.8b.deb 
(Reading database ... 294473 files and directories currently installed.)
Preparing to unpack audionet-0.0.8b.deb ...
you start preinst file
dpkg: error processing archive audionet-0.0.8b.deb (--install):
 subprocess new pre-installation script returned error exit status 128
you are in postrm file
you start postinst file
you leave postinst file
Errors were encountered while processing:
 audionet-0.0.8b.deb

我的preinst文件是:

#!/bin/sh

# Exit on error
set -e

# echo something
echo "you start preinst file"

# Source debconf library.
. /usr/share/debconf/confmodule

# Ask questions
db_input medium audionet/question1 || true
#~ db_input medium audionet/question2 || true

# Show interface
db_go || true

echo "you leave preinst file"

模板文件:

Template: audionet/question1
Type: select
Choices: YES, no, dont know
Description: presence proxy :
 Do you use a proxy.

Template: audionet/question2
Type: string
Description: proxy def :
 Proxy serverport.

我还注意到安装没有进入配置文件,因为没有显示echo:

#!/bin/sh

# Exit on error
set -e

# echo something
echo "you are in config file"

# Source debconf library.
. /usr/share/debconf/confmodule

#~ # Ask questions
#~ db_input medium audionet/question1 || true
#~ db_input medium audionet/question2 || true

# Show interface
db_go || true

我无法找出问题所在。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为这里可能存在两个问题。首先,您不能在运行 debconf 的脚本中输出到标准输出。在 /usr/share/debconf/confmodule 中运行 preinst 后,preinst 脚本会从头开始重新启动,并再次运行 echo 语句。要解决此问题,请运行 echo 2>&1 in preinst 。在当前脚本中,echo 行将中断与 debconf 的通信通道。

也有可能在访问模板时出现问题。它看起来像 debconf 的前端(请参阅 /usr/share/debconf/frontend 很难在 preinst 脚本中访问模板,但可能存在一些问题。一旦您修复了 preinst 脚本,不要将输出发送到 stdout,肯定会破坏事情并且可能是整个问题,导出 DEBCONF_DEBUG=developer 并重新运行脚本。这将跟踪所有 debconf 操作。