【问题标题】:How to create deb that install another deb before installation?如何在安装之前创建安装另一个 deb 的 deb?
【发布时间】:2020-03-07 03:17:28
【问题描述】:

我想创建可以安装在开箱即用的 Ubuntu 上的 .deb 文件。

我已经准备好了 control、preinst、postinst 文件。但是当我尝试在新的 Ubuntu 上安装我的软件包时,它会说“无法获得锁 /var/lib/dpkg/lock”。我知道当人们想要同时安装不同的软件时,这是一个常见的问题。但是如何安装python3-pip和nginx呢?

当然,我可以创建 2 个文件:mysofr.deb 和 install.sh。但关键是只有一个文件,所以用户可以只用一个命令安装我的软件。

这是我的任务:

dpkg -s "python3-pip" >/dev/null 2>&1 && {
    echo "python3-pip is installed."
    echo
  } || {
    echo "ERROR: python3-pip is not installed. Now it will be installed from default repo"
#    rm /var/lib/dpkg/lock
#    dpkg --configure -a
    sudo apt install python3-pip
  }

如您所见,我已尝试解锁 dpkg。但在安装过程中这样做是个坏主意。

这是我的帖子:

#!/bin/bash
cd *directory*
dpkg -i nginx_1.14.2-1_stretch_amd64.deb
rm nginx_1.14.2-1_stretch_amd64.deb
systemctl enable nginx
service nginx start

简而言之:我想创建可以检查是否有 python3-pip 和 nginx 以及是否没有这样的软件的 deb - 安装它:来自 .deb 文件的 nginx,来自默认 repo 的 python3-pip。

【问题讨论】:

  • 声明式而不是命令式:不要自己安装依赖项——在包元数据中声明依赖项。

标签: linux ubuntu debian deb dpkg


【解决方案1】:

您应该在控制文件中将这些依赖项声明为 Depends。请参阅man deb-control 中有关这些字段的文档。

完全不支持从维护者脚本中进行安装,并且试图通过删除锁定文件来强制这样做会损坏 dpkg 数据库或安装,请不要这样做。

【讨论】:

    【解决方案2】:

    如果你得到这样的cmets,说明在取消安装之前,对于这个问题你可以使用下面的命令“$rm /var/lib/dpkg/lock”,

    【讨论】:

    • 永远不要删除 dpkg 锁定文件。那肯定会导致 dpkg 数据库和系统损坏。 dpkg 锁定文件是基于范围而不是基于存在的,删除它永远不是正确的答案。见wiki.debian.org/Teams/Dpkg/…
    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2020-08-25
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多