自动移除

自动移除

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

  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从终端运行或点击刷新按钮后单击更新管理器中的详细信息按钮,您将看到如下错误:

在此处输入图片描述

如果错误是由于 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
  1. sudo apt-get update >> /tmp/update.txt 2>&1;

    命令的 stdout 和 stderr 均sudo 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:, 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)。

看看下面的截图:

ppa:petrakis/wdt-mainLaunchpad 徽标

wdt 主程序

ppa:screenlets/ppaLaunchpad 徽标

屏幕片段

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

脚步

  1. 添加 PPA/repository 后照常操作sudo apt update。您会注意到更新时出现 404 错误;请忽略此错误。 404 错误
  2. 使用浏览器打开导致 404 错误的存储库目录;在本例中是https://dl.winehq.org/wine-builds/ubuntu。通常,可用的版本位于dists/镜子
  3. 找到后,打开“软件和更新”,将版本名称替换为可用版本;最好是最新版本或 LTS 版本。替换二进制和源代码镜像中的“分发”部分。在本例中,我将替换bionicartful在此处输入图片描述
  4. 再做sudo apt update一次。
  5. 大功告成!现在更新软件包列表时不会再出现 404 错误了。 在此处输入图片描述
  6. 当您的 Ubuntu 版本的软件包发布后,请重复步骤 3 和 4,并将“Distribution”部分替换为您的发行版名称。

相关内容