如何在使用 PPA 或更新我的软件包列表时修复 404 错误?

Ped*_*dro 300 apt ppa repository

PPA 似乎一直处于离线状态。每当我使用时sudo apt-get update,都会显示此错误:

W: Failed to fetch http://ppa.launchpad.net/ 404  Not Found
Run Code Online (Sandbox Code Playgroud)

如何修复这些错误?

fos*_*dom 334

自动移除

跳到此答案的底部,以脚本方式删除 Ubuntu 15.04 之前所有 ubuntu 版本的违规软件源

什么是 404 错误

404 or Not Found 错误消息是一个 HTTP 标准响应代码,表示客户端能够与服务器通信,但服务器找不到请求的内容。

当用户尝试访问损坏或死链接时,网站托管服务器通常会生成“404 - 找不到页面”网页。

更新管理器中这些错误的原因是什么

通常,三个主要方面导致这些错误 update-manager

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

这些软件源在哪里

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

  1. /etc/apt/sources.list
  2. 与.LIST文件扩展名以适当命名的文件/etc/apt/sources.list.d/例如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
Run Code Online (Sandbox Code Playgroud)

注意#一行文本前面的 a 表示它被注释掉并且不被包管理器检查。

如何消除这些错误

通常,如果您sudo apt-get update从终端运行或在点击刷新按钮后单击更新管理器中的详细信息按钮,您将看到如下错误:

在此处输入图片说明

如果错误是由 PPA 引起的 - 通常取消勾选带有错误消息中显示的 URL 的类似名称的 PPA 将解决此问题。

在此处输入图片说明

如果 404 错误是由于已添加到其他存储库,/etc/apt/sources.list则更容易#在行的开头添加字符以注释掉有问题的存储库,即

gksu gedit /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

更多信息

这是解决此问题的更新管理器的错误报告:

如果您在没有 PPA 的情况下遇到这些问题,请查看以下问题:


Avi*_*Raj 54

通过脚本自动删除 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
Run Code Online (Sandbox Code Playgroud)

授予脚本执行权限

sudo chmod +x ppa-remove
Run Code Online (Sandbox Code Playgroud)

ppa-remove文件复制并粘贴到/usr/bin目录中。这样您就可以从任何地方访问它。

用法

sudo ppa-remove
Run Code Online (Sandbox Code Playgroud)

脚本说明

[ -f /tmp/update.txt ] && sudo rm /tmp/update.txt; tput setaf 6; echo "Initializing.. Please Wait" || echo "No update file"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)
  1. sudo apt-get update >> /tmp/update.txt 2>&1;

    命令的 stdout 和 stderrsudo apt-get update都写入文件/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搜索它由线W:launchpad404/tmp/update.txt文件。如果它发现然后在该行它显示器(标准输出)从column5.This标准输出被重定向的第26位置开始的所有字母(写入)到该/tmp/awk.txt文件中。

例如:

W: Failed to fetch http://ppa.launchpad.net/pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages  404  Not Found
Run Code Online (Sandbox Code Playgroud)

第五栏—— 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;  
Run Code Online (Sandbox Code Playgroud)

AWK findout出列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
Run Code Online (Sandbox Code Playgroud)

此命令将终端文本的颜色更改为白色。

最后if将执行条件语句。if [ -s /tmp/awk2.txt ]检查 /tmp/awk2.txt 文件的内容是否存在。如果是,则从第一行开始/tmp/awk2.txt执行sudo add-apt-repository -r ppa:$line命令。它继续到最后一行。

如果没有,则表示没有内容。所以它说“没有要删除的PPA”。

截图

在此处输入图片说明

在此处输入图片说明


Adi*_*tya 22

您收到这些错误是因为您的 PPA 存储库没有为您的 Ubuntu 发行版(即; quantal)提供软件包。

看看下面的截图:

ppa:petrakis/wdt-main 启动台徽标

wdt-main

ppa:screenlets/ppa 启动台徽标

小屏幕

您可以看到quantal缺少的目录,因此您将获得404 Not Found Error Messages.

要摆脱这些消息,您必须从系统中删除这些 PPA 存储库。请遵循有关如何删除 PPA 的问题:


如何调查并得出这个结论?

这些是您收到的wdt-mainPPA错误消息:

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
Run Code Online (Sandbox Code Playgroud)

打开浏览器选项卡并打开提供 404 Not Found Errors 的链接。在这种情况下http://ppa.launchpad.net/petrakis/,根据给出错误的链接更深入。您将能够看到实际问题是什么。


Bra*_*iam 19

最有可能发生的情况是 PPA 不再维护,需要删除。您只需使用以下方法即可:

sudo rm /etc/apt/sources.list.d/ppaname-ppa-$(lsb_release -sc).list*
Run Code Online (Sandbox Code Playgroud)

  • 这只是从发布中保存了一个重复的问题.. 我准备好了我的 Q 的正文,就在我开始输入我的标题时找到了链接.._他们为什么不把所有的列表都放在一个地方!_有一些列在`/etc/apt/sources.list` 中,我确实检查过但不知道我也必须查看`/etc/apt/sources.list.d/` ..谢谢.. (3认同)