![DEB 安装程序 - 依赖性检查](https://linux22.com/image/963765/DEB%20%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F%20-%20%E4%BE%9D%E8%B5%96%E6%80%A7%E6%A3%80%E6%9F%A5.png)
使用第三方安装生成工具,我为我的应用程序创建了一个.deb 包。
为了让我的应用程序正常运行,用户的 Linux 操作系统上需要存在几个依赖项。具体来说,就是“make”和几个“.so”库,例如等libgcc.so
。libc.so
在运行我的软件包安装程序之前,可能并非所有 Ubuntu 用户都安装了所需的依赖项。
我使用的这个第三方安装程序工具会生成 DEB 包,但不包含依赖性检查。
作为 Ubuntu 社区的成员,您能否评论一下 Linux-Ubuntu 用户如何接收没有依赖性检查的自定义 .DEB 包?
为不检查依赖关系的自定义应用程序提供 .deb 是否足够令人接受?或者是否不常见到足以“激怒”Linux 用户?
答案1
免责声明:这几乎与我的其他答案。
由于您的程序不会生成依赖项信息,我们将自行添加。例如,您需要按照以下Depends:
格式编辑以 开头的行:
Depends: package1, package2|package3
如果你需要第一个套餐,并且套餐 2 或套餐 3 之一。
打开gedit
或nano
粘贴:
#!/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 文件进行分发。
答案2
一个答案已经告诉您如何添加依赖项,我将尝试回答您关于没有依赖项检查的 DEB 的看法的问题:
DEB 文件有两个原因(在这个上下文中并且就我所见):
- 提供“tar”、“make”和“make install”的组合。我的意思是,软件以单个文件的形式提供,而其他软件则以 tar 存档的形式提供,并且可以使用单个命令进行安装,就像其他软件一样,它们通常附带安装脚本。因此
aunpack <packagename>.tar.gz; cd <packagename>; make; make install
可以替换为dpkg -i <packagename>.deb
。 - 通过依赖关系以及对所提供的操作系统版本进行的先前测试,确保一切正常,并且可以毫无问题地管理(安装、卸载)一切。
尽管 1) 中的命令比其替代命令略短,但从我的角度来看,它不值得麻烦,并且只有要点 2) 使 deb 包变得有用。
因此:如果你想创建一个 DEB 包,你必须同时注意:依赖性检查和操作系统版本的测试。如果你不包含依赖性检查或测试,你的用户(Ubuntu 或 Debian)会非常失望。创建没有依赖性检查的 DEB 包就像作弊一样,让用户相信你为他们做了一些你没有做的事情。
我的建议是:如果您不想手动添加检查,就根本不要生成 DEB 包。提供一行简短的信息,例如“通过运行 install.sh 安装软件。”。这样用户就知道会发生什么。