我创建了一个deb
个包,说abc.deb
。现在很少有像python-dev, python-mysql
等依赖项,这些依赖项需要作为deb安装本身的一部分进行安装。
(即,当用户运行dpkg -i abc.deb
时,依赖项也应自动安装。)
我正在使用control
文件,其中包含一些参数,例如preinst, postinst
等。我尝试将Depends
添加到控制文件中,但我想,Depends
只停止如果不存在依赖关系,则打包安装。我如何安装依赖项作为deb软件包安装本身的一部分?我正在寻找一种适用于Ubuntu 12.04
的解决方案。
P.S。当我尝试在postinst
脚本中安装依赖项
sudo apt-get install python-dev -y
我给了我一个错误:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?`
答案 0 :(得分:1)
您无法通过dpkg
执行此操作;这是apt-get
的用途。如果您在.deb
控制文件中正确指定了依赖项,然后使用apt-get
进行安装,它将自动为您安装。您不应该尝试从较低级别的工具调用更高级别的工具。到那时,为时已晚。
答案 1 :(得分:1)
dpkg
只能安装单个包。
您应该在控制文件的Depends
字段中声明所有程序包的依赖项。
如果您的用户随后使用dpkg -i package.deb
安装软件包,则会收到缺少依赖项的消息。然后,用户可以调用apt-get -f install
来修复程序包存储库中缺少的依赖项(假设您的依赖项实际上在官方存储库中)。
另一种方法是使用gdebi
等工具来安装您的包裹; gdebi
知道如何获取缺少的依赖项,使apt-get -f install
步骤变得不必要。
我的建议是将您的package.deb
文件(带有适当的依赖声明)发送给您的用户,并建议他们使用gdebi
进行安装。
答案 2 :(得分:0)
我实现这一目标的方法是使用preinst
脚本。此脚本在从Debian存档(“.deb”)文件解压缩该包之前执行。
我在preinst
脚本中检查了依赖项,如果找不到依赖项,则退出并显示错误。以下示例sh代码显示了如果不可用,如何检查和安装依赖项:
dpkg -s "python-pip" >/dev/null 2>&1 && {
echo "python-pip is installed."
echo
} || {
echo "ERROR: python-pip is not installed."
//you may install python-pip here if you wish
}
然后将此脚本提供给控制文件的Preinst:
参数。