PPA 似乎经常处于离线状态。每当我使用 时sudo apt-get update
,都会显示此错误:
W: Failed to fetch http://ppa.launchpad.net/ 404 Not Found
我该如何修复这些错误?
答案1
自动移除
跳到这个答案的底部,以脚本方式删除 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
从终端运行或点击刷新按钮后单击更新管理器中的详细信息按钮,您将看到如下错误:
如果错误是由于 PPA 引起的 - 通常取消勾选错误消息中显示的 URL 名称相似的 PPA 即可解决此问题。
如果 404 错误是由于添加了额外的存储库而导致的,那么在行首/etc/apt/sources.list
添加字符来注释掉有问题的存储库会更容易,即#
gksu gedit /etc/apt/sources.list
更多信息
以下是有关更新管理器的错误报告,用于解决此问题:
如果你在没有 PPA 的情况下遇到这些问题,请查看以下问题:
答案2
通过脚本自动删除 404 Not found 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;
命令的 stdout 和 stderr 均
sudo apt-get update
写入文件/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在中搜索由W:
, launchpad
,组成的行404
/tmp/update.txt
。如果找到,则在该行中显示 (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
从文件中找到列 1 和列 2,/
其中列 1 和列 2 用分隔符连接,然后将标准输出重定向(写入)到/
/tmp/awk.txt
/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
命令。它一直持续到最后一行。
如果没有,则表示没有内容。因此它显示“没有要删除的 PPA”。
截图
答案3
您收到这些错误是因为您的 PPA 存储库没有为您的 Ubuntu 发行版提供软件包(即;quantal
)。
看看下面的截图:
您可以看到quantal
,因此您得到404 Not Found Error Messages
。
要消除这些消息,您必须从系统中删除这些 PPA 存储库。请按照以下问题了解如何删除 PPA:
如何调查这一点并得出这个结论?
这些是您收到的 PPA 错误消息wdt-main
:
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 错误的链接。在这种情况下http://ppa.launchpad.net/petrakis/
,请根据显示错误的链接进行深入研究。您将能够看到实际问题是什么。
答案4
选择较旧的存储库
如果你真的需要来自那存储库,您可以使用旧版本的镜像。
但请注意,并非所有旧版本都向下兼容;其中一些会与您的主软件包存储库发生冲突。
当冲突发生时,你唯一能做的就是从源代码构建或等到提供商发布适用于你的 Ubuntu 版本的存储库。我们不知道确切地当软件包提供商为我们的版本发布软件包时,您是负责检查他们的存储库以查找您的版本的人。
这可以用于任何基于 Debian 的存储库。但是,不能保证这会成功。
脚步
- 添加 PPA/repository 后照常操作
sudo apt update
。您会注意到更新时出现 404 错误;请忽略此错误。 - 使用浏览器打开导致 404 错误的存储库目录;在本例中是
https://dl.winehq.org/wine-builds/ubuntu
。通常,可用的版本位于dists/
。 - 找到后,打开“软件和更新”,将版本名称替换为可用版本;最好是最新版本或 LTS 版本。替换二进制和源代码镜像中的“分发”部分。在本例中,我将替换
bionic
为artful
。 - 再做
sudo apt update
一次。 - 大功告成!现在更新软件包列表时不会再出现 404 错误了。
- 当您的 Ubuntu 版本的软件包发布后,请重复步骤 3 和 4,并将“Distribution”部分替换为您的发行版名称。