最近在学习Linux包管理(https://superuser.com/questions/393681/how-to-find-out-which-versions-of-a-package-can-i-install-on-apt,https://askubuntu.com/questions/340530/how-can-i-check-the-available-version-of-a-package-in-the-repositories,为什么不同的 Linux 发行版有不同的包格式(和包管理器)?,https://itsfoss.com/ubuntu-repository-mechanism/,https://itsfoss.com/sources-list-ubuntu/)
如果我理解正确的话,/etc/apt/sources.list
(和.list
/.sources
中的文件/etc/apt/sources.list.d/
)控制从何处apt-get
(和相关实用程序)获取包/源代码。
由于我当前的版本是 jammy,因此我的条目sources.list
如下:
deb http://archive.ubuntu.com/ubuntu/ jammy main restricted
deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted
...我认为这意味着(之后running apt-file update
)apt-cache policy libuv1
将查找libuv1
at的所有可用版本http://archive.ubuntu.com/ubuntu/dists/jammy/main/
$ apt-cache policy libuv1
libuv1:
Installed: 1.43.0-1
Candidate: 1.43.0-1
Version table:
*** 1.43.0-1 500
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
$
$ apt-cache madison libuv1
libuv1 | 1.43.0-1 | http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
libuv1 | 1.43.0-1 | http://archive.ubuntu.com/ubuntu jammy/main Sources
$
我的问题是:有没有办法libuv1
在不进行编辑的情况下查询除 jammy 以外的版本的软件包的可用版本sources.list
?
从上面的apt-cache
输出来看,1.43.0-1 似乎是唯一可用的版本 - 无论是作为包还是作为源。但我知道libuv 作者有更新的版本。我想了解是否可以查询非 Jammy 软件包存储库以获取较新的libuv1
软件包或源代码的可用性。出于过度的谨慎,我对添加诸如deb-src http://archive.ubuntu.com/ubuntu/ mantic main restricted
to 之类的条目感到紧张sources.list
,因为我担心我可能会忘记,然后不小心运行apt-get upgrade
- 那岂不是冒着创建一个弗兰肯Debian?
我只是想知道——如果只是出于好奇——无论新版本的libuv1
源代码/包存在于除我当前版本之外的版本中,没有编辑带来的风险sources.list
- 有没有办法?换句话说:是否需要sources.list
同时进行编辑以查询可用性和安装软件包,或者是否可以在不编辑文件的情况下查询软件包可用性?
答案1
康斯坦丁AB的回答提及但未详细说明;rmadison
是您正在寻找的工具。
安装devscripts
包:
$ sudo apt install --no-install-recommends devscripts wget
(devscripts
有很多可选依赖项,因此显式--no-install-recommends
; rmadison
need wget
,这是这些可选依赖项之一),然后运行rmadison
以查询在线数据库:
$ rmadison libuv1
libuv1 | 1.8.0-1 | xenial/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el, s390x
libuv1 | 1.18.0-3 | bionic | source, amd64, arm64, armhf, i386, ppc64el, s390x
libuv1 | 1.34.2-1ubuntu1 | focal | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.34.2-1ubuntu1.3 | focal-security | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.34.2-1ubuntu1.3 | focal-updates | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.43.0-1 | jammy | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.44.2-1 | lunar | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.44.2-1 | mantic | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.46.0-2ubuntu1 | noble | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
libuv1 | 1.46.0-3 | noble-proposed | source, amd64, arm64, i386, ppc64el, riscv64, s390x
语法非常简单,rmadison
后面是您感兴趣的二进制文件和/或源代码包的名称。
由于是libuv1
直接从 Debian 导入的,大多数时候没有更改,您可能也想检查一下:
$ rmadison -u debian libuv1
libuv1 | 1.24.1-1+deb10u1 | oldoldstable | source, amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
libuv1 | 1.24.1-1+deb10u1 | oldoldstable-debug | source
libuv1 | 1.40.0-2 | oldstable | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
libuv1 | 1.44.2-1 | stable | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
libuv1 | 1.46.0-2 | testing | source, amd64, arm64, armel, armhf, i386, mips64el, ppc64el, s390x
libuv1 | 1.46.0-3 | unstable | source, amd64, arm64, armel, armhf, i386, mips64el, ppc64el, riscv64, s390x
libuv1 | 1.46.0-3 | unstable-debug | source
所以libuv
1.47.0还没有被打包,无论是Debian还是Ubuntu。
(对于使用 Debian 的读者,默认设置是相反的:rmadison
不带-u
选项查询 Debian,rmadison -u ubuntu
查询 Ubuntu。)
答案2
那天我使用了rmadison
devscripts 包中的 。
这些天,我太懒了,做了一些过度的事情:
podman run -it --rm debian:$version sh -c "apt-get update > /dev/null; apt-get info $package"
(很容易设置$version
,$package
相应地从三行 shell 脚本中的 $1、$2 开始)。
当然,这会启动(如果尚未存在,则下载)一个完整的 Linux 容器来回答一个简单的问题。但这样我就不必记住另一个工具的语法,并且可以使用相同的技巧来回答更复杂的问题,例如“在带有 xfce 的 Debian 13 上,安装 clementine 需要多少下载量?”...