我正在使用 Ubuntu 20.04,并且有一个软件包名称列表,我想检查它是否是默认 Ubuntu 存储库的一部分。
到目前为止,我正在使用以下脚本对列表进行迭代检查:
#!/bin/bash
input="modified_list.txt"
RED='\033[0;31m'
NC='\033[0m'
if [ ! -f $input ];
then
echo -e "file does not exist: $input"
exit 1
fi
while read -r line
do
if [[ $(apt policy $line 2> /dev/null | grep 'focal' | wc -l) -gt 0 ]];
then
# print package name normal if part of ubuntu default repo
echo -e "$line\t"
else
# print package name red if not in default repo
echo -e "${RED}${line}${NC}"
fi
done < $input
在这里我注意到该包xvnc4viewer
(根据脚本)不是存储库的一部分。执行apt policy xvnc4viewer
终端输出时:
xvnc4viewer:
Installed: 4.1.1+xorg4.3.0-37.3ubuntu2
Candidate: 4.1.1+xorg4.3.0-37.3ubuntu2
Version table:
*** 4.1.1+xorg4.3.0-37.3ubuntu2 100
100 /var/lib/dpkg/status
当在其他软件包上使用该命令时,我找到了一个 URL 或其他东西,可以帮助我找出软件包的来源,但在这种情况下,我无法弄清楚。使用apt-cache search xvnc4viewer
软件包可以找到,但类似的命令apt-cache showpkg
也没有帮助我。那么,我该如何找出软件包的来源呢?
答案1
在 Ubuntu 18.04 之后,该xvnc4viewer
软件包已从 Ubuntu 存储库中删除。
$ rmadison xvnc4viewer
xvnc4viewer | 4.1.1+xorg4.3.0-37ubuntu5 | trusty/universe | amd64, armhf, i386, powerpc
xvnc4viewer | 4.1.1+xorg4.3.0-37ubuntu5.0.2 | trusty-security/universe | amd64, arm64, armhf, i386, powerpc
xvnc4viewer | 4.1.1+xorg4.3.0-37ubuntu5.0.2 | trusty-updates/universe | amd64, arm64, armhf, i386, powerpc
xvnc4viewer | 4.1.1+xorg4.3.0-37.3ubuntu2 | xenial/universe | amd64, arm64, armhf, i386, powerpc, ppc64el, s390x
xvnc4viewer | 4.1.1+xorg4.3.0-37.3ubuntu2 | bionic/universe | amd64, arm64, armhf, i386, ppc64el, s390x
- 该
rmadison
命令包含在devscripts
包中。 - 你可以通过浏览以不同的格式获取相同的信息http://packages.ubuntu.com
请注意,该软件包位于 -universe 包中,并且仍可用于 Ubuntu 18.04(但不适用于较新的版本)。Universe 软件包不是 Ubuntu 的常规安装的一部分。它们仍然是 Ubuntu 软件包,我们仍然支持它们。它们只是不包含在 Ubuntu 安装程序中。
另外,请记住,执行版本升级(例如从 18.04 升级到 20.04)不一定会删除旧软件。如果存在 20.04 软件包,它将替换 18.04 软件包。如果不存在 20.04 软件包,那么只要兼容,18.04 软件包就会继续安装在 20.04 系统上。
答案2
xvnc4viewer
不是 Ubuntu 20.04(Focal Fossa)的默认存储库的一部分,但它是 Ubuntu 18.04(Bionic Beaver)默认存储库的一部分。软件包的确切版本4.1.1+xorg4.3.0-37.3ubuntu2
也与之匹配。因此,我假设所讨论的系统之前运行的是 18.04,并且从那时起进行了升级。
apt policy
仅提及当前位于系统源列表中的存储库。因此,系统可能之前已设置 Bionic 的存储库,并xvnc4viewer
从那里安装,后来在升级过程中将 Bionic 存储库替换为 Focal 存储库。在这种情况下,软件包最初来自的存储库不再位于源列表中,因此apt policy
无法列出它。
另一种可能性,正如 Artur Meinild 已经提到的那样,是该软件包是使用 手动安装的dpkg
,而apt
从未对该软件包发挥作用。
答案3
最有可能的是,该包已下载,然后使用 手动安装sudo apt install <package name>
。
在网上搜索软件包名称,可以发现该版本的软件包仅在仿生宇宙仓库。
您无法总是看到手动下载的包的来源,因此您必须采用除apt
实用程序之外的其他方法。
答案4
正如 Artur Meinild 所说,该软件包仅适用于 Ubuntu 18.04仿生的。
它出现在您的系统中可能有两个原因。
您安装了该软件后电力供应协议并将其发布名称更改为 focal。
这意味着您使用自定义 PPA 安装了此软件包,或者您使用任何第三方依赖项或修改后的源代码从源代码构建了它。安装软件后,您已删除软件包的源代码/PPA。您将此软件包标记为手动安装。这意味着您在使用 升级到 Ubuntu 20.04 之前正在运行 Ubuntu 18.04
do-release-upgrade
。这个包应该被删除,因为它不适用于 focal。但是,它可能被标记为依赖项或手动安装的包。在此过程中不会删除依赖项和手动安装的包。这也可能是之前作为通过 PPA 或源存储库安装的任何自定义包的依赖项安装的(必须将 PPA 与包本身一起删除,并将此包保留为手动安装。也许它被标记为手动安装的?)