DEB 安装程序 - 依赖性检查

DEB 安装程序 - 依赖性检查

使用第三方安装生成工具,我为我的应用程序创建了一个.deb 包。

为了让我的应用程序正常运行,用户的 Linux 操作系统上需要存在几个依赖项。具体来说,就是“make”和几个“.so”库,例如等libgcc.solibc.so

在运行我的软件包安装程序之前,可能并非所有 Ubuntu 用户都安装了所需的依赖项。

我使用的这个第三方安装程序工具会生成 DEB 包,但不包含依赖性检查。

作为 Ubuntu 社区的成员,您能否评论一下 Linux-Ubuntu 用户如何接收没有依赖性检查的自定义 .DEB 包?

为不检查依赖关系的自定义应用程序提供 .deb 是否足够令人接受?或者是否不常见到足以“激怒”Linux 用户?

答案1

免责声明:这几乎与我的其他答案

由于您的程序不会生成依赖项信息,我们将自行添加。例如,您需要按照以下Depends:格式编辑以 开头的行:

 Depends: package1, package2|package3

如果你需要第一个套餐,并且套餐 2 或套餐 3 之一

打开geditnano粘贴:

#!/bin/bash

if [[ -z "$1" ]]; then
  echo "Syntax: $0 debfile"
  exit 1
fi

DEBFILE="$1"
TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1
OUTPUT=`basename "$DEBFILE" .deb`.modfied.deb

if [[ -e "$OUTPUT" ]]; then
  echo "$OUTPUT exists."
  rm -r "$TMPDIR"
  exit 1
fi

dpkg-deb -x "$DEBFILE" "$TMPDIR"
dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIAN

if [[ ! -e "$TMPDIR"/DEBIAN/control ]]; then
  echo DEBIAN/control not found.

  rm -r "$TMPDIR"
  exit 1
fi

CONTROL="$TMPDIR"/DEBIAN/control

MOD=`stat -c "%y" "$CONTROL"`
vi "$CONTROL"

if [[ "$MOD" == `stat -c "%y" "$CONTROL"` ]]; then
  echo Not modfied.
else
  echo Building new deb...
  dpkg -b "$TMPDIR" "$OUTPUT"
fi

rm -r "$TMPDIR"

将文件与 相同debedit.sh,并使用 使其可执行chmod +x debedit.sh

然后,运行debedit.sh deb_file_output.deb该文件,并编辑正确的行(或添加它)。保存,然后使用新创建的 .deb 文件进行分发。

来源:http://ubuntuforums.org/showthread.php?t=636724

答案2

一个答案已经告诉您如何添加依赖项,我将尝试回答您关于没有依赖项检查的 DEB 的看法的问题:

DEB 文件有两个原因(在这个上下文中并且就我所见):

  1. 提供“tar”、“make”和“make install”的组合。我的意思是,软件以单个文件的形式提供,而其他软件则以 tar 存档的形式提供,并且可以使用单个命令进行安装,就像其他软件一样,它们通常附带安装脚本。因此aunpack <packagename>.tar.gz; cd <packagename>; make; make install可以替换为dpkg -i <packagename>.deb
  2. 通过依赖关系以及对所提供的操作系统版本进行的先前测试,确保一切正常,并且可以毫无问题地管理(安装、卸载)一切。

尽管 1) 中的命令比其替代命令略短,但从我的角度来看,它不值得麻烦,并且只有要点 2) 使 deb 包变得有用。

因此:如果你想创建一个 DEB 包,你必须同时注意:依赖性检查和操作系统版本的测试。如果你不包含依赖性检查或测试,你的用户(Ubuntu 或 Debian)会非常失望。创建没有依赖性检查的 DEB 包就像作弊一样,让用户相信你为他们做了一些你没有做的事情。

我的建议是:如果您不想手动添加检查,就根本不要生成 DEB 包。提供一行简短的信息,例如“通过运行 install.sh 安装软件。”。这样用户就知道会发生什么。

相关内容