我不是apt
用户,但我处于一个场景中,我需要.deb
从存储库中获取一个包。
我不是基于 deb 的发行版的用户,因此我无法轻松安装deb
所需的存储库。由于其他原因,这也是不切实际的。
相反,我认为简单地抓取包然后解压它可能是一个更简单的解决方案,但我在“破译”目录中的存储库条目时遇到了相当大的麻烦sources.list.d
:
deb [arch=amd64] http://apt.domain.de/ stable ubuntu
如何将其转换为某种 URL,以便我可以探测可用包列表之类的内容,或者如果我知道包名称,只需知道该包的 URL?
从本质上讲,在我的情况下,手动访问 debian 存储库并从中获取一个软件包以进行解包和检查等更为实用,而不是安装apt
,然后通过它安装软件包等。
答案1
条目的结构是:
deb [arch=architecture] base-URL version repo-sections...
当您有sources.list.d
条目时:
deb [arch=amd64] http://apt.domain.de/ stable ubuntu
这表明:
- 基本 URL 是
http://apt.domain.de/
- 版本代号是
stable
- 架构是
amd64
ubuntu
仅列出一个存储库部分。
它表明相关二进制包的列表位于<base-URL>/dists/<version>/<repository-section>/binary-<arch>/Packages.(gz|xz)
,因此:
http://apt.domain.de/dists/stable/ubuntu/binary-amd64/Packages.(gz|xz)
并且实际的包裹(最有可能)位于<base-URL>/pool/<repository-section>
:
http://apt.domain.de/pool/ubuntu/
如果存储库包含大量包,则它可能已被拆分为第二个 URL 下的多个子目录:
- 用单个字符命名,与其中包含的包名称中的首字符匹配
- 命名为
libX
其中是单个字符,包含名称不带前缀以相同字符开头X
的库包(即)lib
libX*
如果有一个真的存储库中的包数量较多,可能会有进一步的细分。
因此,如果您正在寻找包“foo”,您将首先下载文件http://apt.domain.de/dists/stable/ubuntu/binary-amd64/Packages.gz
或http://apt.domain.de/dists/stable/ubuntu/binary-amd64/Packages.xz
,然后阅读它以找出该包的哪个版本被认为是该存储库版本ubuntu
部分中的最新版本。stable
你会发现这样的东西:
Package: foo
Source: foo (1.2.3-4)
Version: 1.2.3-4+b1
Installed-Size: 12345
Maintainer: The Developer Guy <[email protected]>
Architecture: amd64
Depends: libfoo (>= 1.2.3-4+b1)
...
Filename: pool/ubuntu/f/foo/foo_1.2.3-4+b1_amd64.deb
...
由此,你会知道:
相关的包是
foo-1.2.3-4+b1.deb
它取决于 package
libfoo
、 version1.2.3-4+b1
或更高版本并且该包可以在以下位置找到:
http://apt.domain.de/pool/ubuntu/f/foo/foo_1.2.3-4+b1_amd64.deb
然后,您可以将包下载到临时目录并开始解压:
mkdir workdir
cd workdir
wget http://apt.domain.de/pool/ubuntu/f/foo/foo_1.2.3-4+b1_amd64.deb
ar x foo_1.2.3-4+b1_amd64.deb
这将为您提供三个文件:control.tar.xz
、data.tar.xz
和debian-binary
.最后一个仅包含包格式的版本号,通常可以忽略。
包含data.tar.xz
该包将安装的实际文件。
包含control.tar.xz
任何安装前/安装后/删除脚本(如果包需要)以及包管理器的一些元数据。