apt-get install 给出 404 not found,但 URL 有效

apt-get install 给出 404 not found,但 URL 有效

我正在尝试建立一个apt 存储库

该存储库实际上正在替换已经存在且运行良好的存储库。我无法从该存储库安装软件包。

在我的中/etc/apt/sources.list,我有这样一行:

deb http://mirror.cs50.net/appliance50/2014/debs/dists/trusty/main/binary-i386 /

一切apt-get update顺利。但随后类似apt-get install appliance50(该存储库中的一个包)的东西给了我:

Err http://mirror.cs50.net/appliance50/2014/debs/dists/trusty/main/binary-i386/  appliance50 2014-0
  404  Not Found
E: Failed to fetch http://mirror.cs50.net/appliance50/2014/debs/dists/trusty/main/binary-i386/./appliance50_2014-0_i386.deb  404  Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

但是,将该 URL 复制到浏览器中就可以正常下载该文件了!我是否缺少一些基本步骤?这是否与该服务器将请求重定向到 S3 这一事实有关?

编辑:

根据评论,这是“sudo apt-get -o Debug::Acquire::Http=true install Appliance50”的输出:

root@ubuntu:~# sudo apt-get -o Debug::Acquire::Http=true install appliance50
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  apt-clone archdetect-deb cifs-utils dmraid dpkg-repack
  gir1.2-appindicator3-0.1 gir1.2-json-1.0 gir1.2-timezonemap-1.0
  gir1.2-xkl-1.0 kpartx kpartx-boot libdebian-installer4
  libdevmapper-event1.02.1 libdmraid1.0.0.rc16 libldb1 libntdb1 libtalloc2
  libtevent0 libtimezonemap1 libwbclient0 localechooser-data lvm2 lzma
  python-crypto python-ldb python-ntdb python-samba python-talloc python-tdb
  python3-icu python3-pam rdate samba-common samba-common-bin samba-libs
  watershed
Use 'apt-get autoremove' to remove them.
The following packages will be upgraded:
  appliance50
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,205 kB of archives.
After this operation, 4,096 B of additional disk space will be used.
0% [Working]GET /appliance50/2014/debs/dists/trusty/main/binary-i386/./appliance50_2014-0_i386.deb HTTP/1.1
Host: mirror.cs50.net
User-Agent: Debian APT-HTTP/1.3 (1.0.1ubuntu2)


HTTP/1.1 404 Not Found
Cache-control: no-cache="set-cookie"
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 Aug 2014 14:23:53 GMT
Server: Apache
Set-Cookie: AWSELB=27CBB9F102866AACDE415904FB505399868B9DB4E22AC5183099E4BEEC583EF1DFA3B6E45DCB1D708481F98DC786A644C763A900F7898475BA865AD219D4E4F1F157545837;PATH=/;MAX-AGE=3600
Content-Length: 0
Connection: keep-alive

Err http://mirror.cs50.net/appliance50/2014/debs/dists/trusty/main/binary-i386/  appliance50 2014-0
  404  Not Found
E: Failed to fetch http://mirror.cs50.net/appliance50/2014/debs/dists/trusty/main/binary-i386/./appliance50_2014-0_i386.deb  404  Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

答案1

这是 上的一个错误apt-get,没有发送正确的 GET 标头,因此服务器以 404 应答。

例如,telnet 到mirror.cs50.net端口 80 (HTTP) 上的服务器,然后输入以下内容(模拟 apt-get 请求):

GET /appliance50/2014/debs/dists/trusty/main/binary-i386/./appliance50_2014-0_i386.deb HTTP/1.1
User-Agent: Debian APT-HTTP/1.3 (1.0.1ubuntu2)
Host: mirror.cs50.net
Accept: */*

然后你会看到以下内容:

telnet mirror.cs50.net 80
Trying 54.84.6.206...
Connected to mirror.cs50.net.
Escape character is '^]'.
GET /appliance50/2014/debs/dists/trusty/main/binary-i386/./appliance50_2014-0_i386.deb HTTP/1.1
User-Agent: Debian APT-HTTP/1.3 (1.0.1ubuntu2)
Host: mirror.cs50.net
Accept: */*

HTTP/1.1 404 Not Found
Cache-control: no-cache="set-cookie"
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 Aug 2014 18:31:01 GMT
Server: Apache
Set-Cookie: AWSELB=27CBB9F102866AACDE415904FB505399868B9DB4E22AC5183099E4BEEC583EF1DFA3B6E45DFCB95EFBFF7B8F8F555126DCFFF8A461898475BA865AD219D4E4F1F157545837;PATH=/;MAX-AGE=3600
Content-Length: 0
Connection: keep-alive

如果我们在 GET 请求中省略点 ( /./),则请求会以重定向响应,即 302,这是正确的。

GET /appliance50/2014/debs/dists/trusty/main/binary-i386/appliance50_2014-0_i386.deb HTTP/1.1
Host: mirror.cs50.net
User-Agent: Debian APT-HTTP/1.3 (1.0.1ubuntu2)

HTTP/1.1 302 Found
Cache-control: no-cache="set-cookie"
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 Aug 2014 19:03:27 GMT
Location: http://dkui3cmikz357.cloudfront.net/appliance50/2014/debs/dists/trusty/main/binary-i386/appliance50_2014-0_i386.deb
Server: Apache
Set-Cookie: AWSELB=27CBB9F102866AACDE415904FB505399868B9DB4E22AC5183099E4BEEC583EF1DFA3B6E45DFCB95EFBFF7B8F8F555126DCFFF8A461898475BA865AD219D4E4F1F157545837;PATH=/;MAX-AGE=3600
Content-Length: 0
Connection: keep-alive

我已经用其他镜子检查过这一点,他们报告了相同的情况:

Trying 64.50.233.100...
Connected to ftp-nyc.osuosl.org.
Escape character is '^]'.
GET /debian/pool/main/e/./efivar_0.10-5_i386.deb HTTP/1.1         
Host: ftp-nyc.osuosl.org
User-Agent: Debian APT-HTTP/1.3 (1.0.6)

HTTP/1.1 404 Not Found
Date: Mon, 04 Aug 2014 18:47:03 GMT
Server: Apache
Content-Length: 307
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /debian/pool/main/e/efivar_0.10-5_i386.deb was not found on this server.</p>
<hr>
<address>Apache Server at ftp-nyc.osuosl.org Port 80</address>
</body></html>
Connection closed by foreign host.

您应该在错误报告中包含 apt-get 应该去除点斜杠的 get 标头。

相关内容