如何在使用PPA或更新我的包列表时修复404错误?
PPA似乎一直处于脱机状态。 每当我使用sudo apt-get update
,都会显示以下错误:
W: Failed to fetch http://ppa.launchpad.net/ 404 Not Found
我该如何解决这些错误?
自动删除
跳到这个答案的底部,以脚本方式删除Ubuntu 15.04之前的所有ubuntu版本的有问题的软件源
什么是404错误
404或Not Found错误消息是HTTP标准响应代码,表示客户端能够与服务器通信,但服务器无法找到所请求的内容。
当用户尝试关注断开或死链接时,网站托管服务器通常会生成“404 – 找不到页面”网页。
更新管理器中出现这些错误的原因是什么
通常,三个主要区域会在update-manager
导致这些错误
- 用户刚刚升级并重新启用了不再存在的PPA软件源
- 用户手动输入了错误的新软件源
- 添加了PPA,但维护者随后删除了部分/全部PPA
这些软件来源在哪里?
PPA通常保存在两个位置之一
-
/etc/apt/sources.list
- 在
/etc/apt/sources.list.d/
带有.list文件扩展名的适当命名文件中,例如webupd8team-jupiter-natty.list
此列表文件通常包含:
deb http://ppa.launchpad.net/webupd8team/jupiter/ubuntu oneiric main # deb-src http://ppa.launchpad.net/webupd8team/jupiter/ubuntu oneiric main
请注意,文本行前面的#
表示它已被注释掉,并且不会被包管理器检查。
如何消除这些错误
通常,如果您从终端运行sudo apt-get update
或在点击刷新按钮后单击Update Manager中的详细信息按钮,您将看到如下错误:
如果错误是由PPA引起的 – 通常用错误消息中显示的URL来解释类似命名的PPA将解决此问题。
如果404错误是由于添加到/etc/apt/sources.list
的其他存储库引起的, /etc/apt/sources.list
容易将#
字符添加到行的开头以注释掉有问题的存储库,即
gksu gedit /etc/apt/sources.list
更多信息
以下是有关解决此问题的更新管理器的错误报告:
如果您在没有PPA的情况下遇到这些问题,请查看以下问题:
- 如何使用Ubuntu存档修复404错误?
- 存储库/ Ubuntu – 社区Ubuntu文档 – 删除和禁用存储库
自动删除404未通过脚本找到PPA
这是一个自动删除所有404 Not found PPA的脚本。复制下面的代码并将其粘贴到一个文件中,并将其命名为ppa-remove
。
#!/bin/bash sudo rm /tmp/update.txt; tput setaf 6; echo "Initializing.. Please Wait" sudo apt-get update >> /tmp/update.txt 2>&1; awk '( /W:/ && /launchpad/ && /404/ ) { print substr($5,26) }' /tmp/update.txt > /tmp/awk.txt; awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt; sort -u /tmp/awk1.txt > /tmp/awk2.txt tput sgr0 if [ -s /tmp/awk2.txt ] then tput setaf 1 printf "PPA's going to be removed\n%s\n" "$(cat /tmp/awk2.txt)" tput sgr0 while read -r line; do echo "sudo add-apt-repository -r ppa:$line"; done < /tmp/awk2.txt > out bash out else tput setaf 1 echo "No PPA's to be removed" tput sgr0 fi
授予脚本执行权限
sudo chmod +x ppa-remove
将ppa-remove
文件复制并粘贴到/usr/bin
目录中。这样您就可以从任何地方访问它。
用法
sudo ppa-remove
脚本描述
[ -f /tmp/update.txt ] && sudo rm /tmp/update.txt; tput setaf 6; echo "Initializing.. Please Wait" || echo "No update file"
tput setaf 6
命令将终端文本颜色变为绿色。然后它以绿色显示“正在初始化…请等待”。
sudo apt-get update >> /tmp/update.txt 2>&1; awk '( /W:/ && /launchpad/ && /404/ ) { print substr($5,26) }' /tmp/update.txt > /tmp/awk.txt; awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt; uniq /tmp/awk1.txt > /tmp/awk2.txt
-
sudo apt-get update >> /tmp/update.txt 2>&1;
命令
sudo apt-get update
stdout和stderr都写入文件/tmp/update.txt
-
awk '( /W:/ && /launchpad/ && /404/ ) { print substr($5,26) }' /tmp/update.txt > /tmp/awk.txt; awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt;
Awk在/tmp/update.txt
文件中搜索由W:
, launchpad
, 404
组成的行。如果它在该行中找到它,则显示(stdout)从第5列中的第26个位置开始的所有字母。此标准输出被重定向(写入)到/tmp/awk.txt
文件。
例如:
W: Failed to fetch http://ppa.launchpad.net/pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages 404 Not Found
第五届 – http://ppa.launchpad.net/pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages
在第5列从第26个字符开始 – pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages
上面这行存储在/tmp/awk.txt
现在是下一个命令,
awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt;
awk使用分隔符/
找出column1和column2,其中column1和column2由/tmp/awk.txt
文件连接,然后将stdout重定向(写入)到/tmp/awk1.txt
文件。
现在/tmp/awk1.txt
文件包含pitti/postgresql
行。
uniq /tmp/awk1.txt > /tmp/awk2.txt
如果有两条相同的行,则unique
命令只显示(stdout)单行。这一行写入/tmp/awk2.txt
最后/tmp/awk2.txt
由唯一的PPA名称组成。
tput sgr0
此命令将终端文本的颜色更改为白色。
最后, if
条件语句将执行。 if [ -s /tmp/awk2.txt ]
检查/tmp/awk2.txt文件的内容是否存在。如果是,则从/tmp/awk2.txt
获取第一行并执行sudo add-apt-repository -r ppa:$line
command.It继续到最后一行。
如果不是,则表示没有内容。所以它说“没有PPA被删除”。
截图
您收到这些错误是因为您的PPA存储库不提供您的Ubuntu分发包(即; quantal
)。
看下面的截图:
PPA:petrakis / WDT-主
PPA:screenlets的/ PPA
您可以看到缺少quantal
的目录,因此您将收到404 Not Found Error Messages
。
要删除这些消息,您必须从系统中删除这些PPA存储库。 关注如何删除PPA的问题:
- 请参阅本答案中的“如何消除这些错误”一节 。
- 或者, 如何移除PPA?
如何调查并得出这个结论?
这些是您收到的wdt-main
PPA的错误消息:
W:Failed to fetch http://ppa.launchpad.net/petrakis/wdt-main/ubuntu/dists/quantal/main/source/Sources 404 Not Found , W:Failed to fetch http://ppa.launchpad.net/petrakis/wdt-main/ubuntu/dists/quantal/main/binary-amd64/Packages 404 Not Found , W:Failed to fetch http://ppa.launchpad.net/petrakis/wdt-main/ubuntu/dists/quantal/main/binary-i386/Packages 404 Not Found
打开浏览器选项卡,然后打开提供404 Not Found Errors的链接。 在这种情况下http://ppa.launchpad.net/petrakis/
并根据给出错误的链接更深入。 你将能够看到实际问题是什么。
它最可能发生的是PPA不再需要维护并需要删除。 你可以这样做:
sudo rm /etc/apt/sources.list.d/ppaname-ppa-$(lsb_release -sc).list*
选择旧版存储库
如果您确实需要该存储库中的软件包,则可以使用旧版本中的镜像。
但请注意,并非所有旧版本都向后兼容 ; 其中一些导致与主包存储库冲突。
冲突时唯一能做的就是从源代码构建或等到提供者为您的Ubuntu版本发布存储库。 我们不确切知道软件包提供程序何时会为我们的版本发布其软件包,因此您负责检查其存储库以获取您的版本。
这可以与任何基于Debian的存储库一起使用。 但是,不能保证这会成功。
脚步
- 添加PPA /存储库后,通常
sudo apt update
。 您可以注意到更新时有404错误; 只是忽略这个。 - 打开存储库目录,导致浏览器出现404错误; 在这种情况下,它是
https://dl.winehq.org/wine-builds/ubuntu
。 通常,可用版本位于dists/
。 - 找到它之后,打开软件和更新,并用可用版本替换您的版本名称; 最好是最新的或LTS的。 替换二进制和源代码镜像中的“分布”部分。 在这种情况下,我用
artful
取代bionic
。 -
sudo apt update
再次sudo apt update
。 - 你完成了! 现在,在更新包列表时,您不会再出现404错误。
- 当您的Ubuntu版本的软件包发布时,重复步骤3和4,将“分发”部分替换为您的分发名称。
请注意,它已经发生在我身上,我已经脱离了这些情况。 它也适用于我的一个朋友。 即使不能解释原因,也有一些东西可以解决这个问题:
- 禁用所有PPA;
- 从终端运行
sudo apt-get update
; - 再次启用您的PPA;
- 运行
sudo apt-get update
;
突然间它奏效了。 别问我为什么。
如果您尝试从官方存储库(而不是PPA)获取安全性或系统文件时出现404错误,则可以选择其他镜像来解决此问题。
你可以:
A)通过查看此列表并选择最新镜像来手动确定一个。 (您可能希望考虑其他因素,如距离和带宽)或
B)自动选择一个。
无论哪种方式,您都可以从软件和更新应用程序开始,如下所示:然后选择“下载”,然后选择“其他”。 然后,您可以从列表中手动选择所选镜像,也可以单击“选择最佳服务器”按钮,该按钮将运行某些测试,并根据当前条件为您选择最佳服务器。
我已经尝试了所有可能的答案,但唯一的解决方案是将Ubuntu 16.04 Xenial默认的/etc/apt/sources.list文件复制到我的/etc/apt/sources.list
。
来源: https : //gist.github.com/rohitrawat/60a04e6ebe4a9ec1203eac3a11d4afc1
这节省了我的Linux。