如何在使用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导致这些错误

  1. 用户刚刚升级并重新启用了不再存在的PPA软件源 在此处输入图像描述
  2. 用户手动输入了错误的新软件源 在此处输入图像描述
  3. 添加了PPA,但维护者随后删除了部分/全部PPA

这些软件来源在哪里?

PPA通常保存在两个位置之一

  1. /etc/apt/sources.list
  2. /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 
  1. sudo apt-get update >> /tmp/update.txt 2>&1;

    命令sudo apt-get update stdout和stderr都写入文件/tmp/update.txt

  2. 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:launchpad404组成的行。如果它在该行中找到它,则显示(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-主 Launchpad徽标

WDT-主

PPA:screenlets的/ PPA Launchpad徽标

screenlets的

您可以看到缺少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的存储库一起使用。 但是,不能保证这会成功。

脚步

  1. 添加PPA /存储库后,通常sudo apt update 。 您可以注意到更新时有404错误; 只是忽略这个。 404错误
  2. 打开存储库目录,导致浏览器出现404错误; 在这种情况下,它是https://dl.winehq.org/wine-builds/ubuntu 。 通常,可用版本位于dists/镜子
  3. 找到它之后,打开软件和更新,并用可用版本替换您的版本名称; 最好是最新的或LTS的。 替换二进制和源代码镜像中的“分布”部分。 在这种情况下,我用artful取代bionic在此处输入图像描述
  4. sudo apt update再次sudo apt update
  5. 你完成了! 现在,在更新包列表时,您不会再出现404错误。 在此处输入图像描述
  6. 当您的Ubuntu版本的软件包发布时,重复步骤3和4,将“分发”部分替换为您的分发名称。

请注意,它已经发生在我身上,我已经脱离了这些情况。 它也适用于我的一个朋友。 即使不能解释原因,也有一些东西可以解决这个问题:

  1. 禁用所有PPA;
  2. 从终端运行sudo apt-get update ;
  3. 再次启用您的PPA;
  4. 运行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。