我正在使用 Ubuntu 18.04LTS,使用代理。这个问题是由以下问题引发的(但完全独立于此)apt-get 安装代理后-无法获取
当我检查包的位置时yudit-common
(apt install --print-uris
例如,实际上作为的先决条件feh
),我得到的http://us.archive.ubuntu.com/ubuntu/pool/universe/y/yudit/yudit-common_2.9.6-7_all.deb
是文件在 Web 中的位置deb
。请参阅下面的注释 1。
然后当我安装时yudit-common
,一切正常,这意味着deb
我的电脑知道文件在哪里 http://us.archive.ubuntu.com/ubuntu/pool/universe/y/yudit/yudit-common_2.9.6-7_all.deb
在网络上,并且可以下载安装前请先检查。请参阅下面的注释 2。
但如果我尝试打开wget
文件,我的电脑甚至不知道deb
文件在哪里(这样当然就拿不到了)。见下文注释3。
apt
您在哪里wget
寻找信息?
我可以强制wget
使用相同的域查找吗apt
?
如果防火墙允许apt
成功获取 IP 地址并从网络中提取文件,并阻止wget
执行此操作,我可以通过某种方式“传送”wget
请求吗apt
?
笔记
.deb
包文件的位置
$ apt install --print-uris feh 2> /dev/null
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
yudit-common
Suggested packages:
yudit-doc yudit
The following NEW packages will be installed:
feh yudit-common
0 upgraded, 2 newly installed, 0 to remove and 51 not upgraded.
Need to get 1.760 kB of archives.
After this operation, 9.775 kB of additional disk space will be used.
'http://us.archive.ubuntu.com/ubuntu/pool/universe/y/yudit/yudit-common_2.9.6-7_all.deb' yudit-common_2.9.6-7_all.deb 1637644 MD5Sum:987ef69fa59b1c3034bfa28955e612d9
'http://us.archive.ubuntu.com/ubuntu/pool/universe/f/feh/feh_2.23.2-1build1_amd64.deb' feh_2.23.2-1build1_amd64.deb 122020 MD5Sum:b5f42ee280ee4aada1cbd93ec0007e68
- 安装
yudit-common
$ sudo apt-get install yudit-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
yudit-doc yudit
The following NEW packages will be installed:
yudit-common
0 upgraded, 1 newly installed, 0 to remove and 51 not upgraded.
Need to get 1.638 kB of archives.
After this operation, 9.411 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 yudit-common all 2.9.6-7 [1.638 kB]
Fetched 1.638 kB in 9s (174 kB/s)
Selecting previously unselected package yudit-common.
(Reading database ... 488875 files and directories currently installed.)
Preparing to unpack .../yudit-common_2.9.6-7_all.deb ...
Unpacking yudit-common (2.9.6-7) ...
Setting up yudit-common (2.9.6-7) ...
wget
档案yudit-common
.deb
$ wget http://us.archive.ubuntu.com/ubuntu/pool/universe/y/yudit/yudit-common_2.9.6-7_all.deb
--2020-09-20 06:32:21-- http://us.archive.ubuntu.com/ubuntu/pool/universe/y/yudit/yudit-common_2.9.6-7_all.deb
Resolving us.archive.ubuntu.com (us.archive.ubuntu.com)... failed: Name or service not known.
wget: unable to resolve host address ´us.archive.ubuntu.com´
- 有趣的:
答案1
我不知道我的电脑、代理、防火墙和 DNS 服务器之间的确切关系和互操作。
但我发现,apt
在我的情况下,原因wget
是我缺少正确的代理配置wget
。当我添加文件~/.wgetrc
时
http_proxy = http://username:password@proxy:port
ftp_proxy = http://username:password@proxy:port
proxy_user = username
proxy_password = password
use_proxy = on
它开始工作了。(请注意,这有点不安全,因为密码是以纯文本形式存储的……我想知道是否有任何方法可以要求输入密码;或者在与 具有相同安全级别的目录中wget
设置全局密码)。另一方面,依赖于,它已经到位。.wgetrc
apt.conf
apt
/etc/apt/apt.conf
至于问题:
apt
您在哪里wget
寻找信息?
该序列的一部分涉及设置代理。
apt
并且wget
如上所述,具有不同的机制(我知道也可以设置环境变量,这至少对于来说是有效的wget
)。
我可以强制wget
使用相同的域查找吗apt
?
我设想了一种原始人的方法...解析apt.conf
并使用该信息wget
。也许有更简洁的方法。
如果防火墙允许apt
成功获取 IP 地址并从网络中提取文件,并阻止wget
执行此操作,我可以通过某种方式“传送”wget
请求吗apt
?
根据上述发现,该问题由上一个问题取代。
答案2
是的,您的 Ubuntu 系统知道在哪里找到 .debs。这是一个三步过程。
你的系统知道档案在哪里(来源) 位于。其位于
/etc/apt/sources.list
。$ cat /etc/apt/sources.list deb http://us.archive.ubuntu.com/ubuntu/ focal main universe deb http://us.archive.ubuntu.com/ubuntu/ focal-updates main universe deb http://security.ubuntu.com/ubuntu focal-security main universe
- 最初的来源由 Ubuntu 安装程序放置。您可以更改这些源;它只是 root 拥有的文本文件。但是,您也有可能破坏系统,因此请确保您知道如何恢复原始文件。
Apt 保存了所有已知软件包的数据库,这些软件包来自所有已知的来源. 名称、描述、版本、大小、URI 等。Apt 使用其数据库来计算可用的升级,并了解从中获取包的 URI。
每次运行时
sudo apt update
,apt 都会从每个源下载一个 Release 文件,并使用该 Release 文件来更新 apt 的数据库。数据库位于 /var/lib/apt/lists。它被设计为机器可读,而不是人类可读。使用 apt 命令(
apt search
或apt list
或apt-cache
等)查询数据库。这就是为什么大多数说明都说在安装新软件之前运行
apt update
- 所以 apt 的数据库具有正确的 URI。
当您告诉 apt 时
sudo apt install foo
,apt 会查阅其数据库来查找正确的版本、未卸载的依赖项以及它所需的所有包的 URI。