当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

W: Failed to fetch http://ppa.launchpad.net/ 404  Not Found

我如何解决这些错误?

最佳解决方案

自动删除

跳至此答案的底部,以便通过脚本方式删除所有Ubuntu 15.04之前版本的Ubuntu版本的software-sources

What are 404 errors

The 404 or Not Found error message is a HTTP standard response code indicating that the client was able to communicate with the server, but the server could not find what was requested.

The web site hosting server will typically generate “404 – Page Not Found” web page, when users attempts to follow a broken or dead link.

update-manager中这些错误的原因是什么?

通常,update-manager中有三个主要区域会导致这些错误

  1. 用户刚升级并且re-enabled一个PPA software-source不再存在

  2. 用户错误地手动输入了新的软件源

  3. 添加了PPA,但维护人员随后删除了部分/全部PPA

这些software-sources在哪里?

PPA通常保存在两个地点之一

  1. /etc/apt/sources.list

  2. /etc/apt/sources.list.d/中带有.list file-extension的适当命名文件中,例如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,或者在点击刷新按钮后单击更新管理器中的详细信息按钮,您将看到以下错误:

apt,ppa,repository,ubuntu

如果错误是由于PPA导致的 – 通常不会使用名称类似的PPA与错误消息中显示的URL解决此问题。

apt,ppa,repository,ubuntu

如果404错误是由于已经添加到/etc/apt/sources.list的附加存储库导致的,那么它更容易将#字符添加到该行的开头,以便将该存储库注释掉即

gksu gedit /etc/apt/sources.list

apt,ppa,repository,ubuntu

对15.04之前的所有Ubuntu版本进行脚本化删除

我编写了一个快速脚本,用于检查出现404错误的PPA和Software-Sources。这适用于15.04之前的所有Ubuntu版本。在15.04以后,执行上述手动方法。

它在我的PPA中:

sudo add-apt-repository ppa:fossfreedom/packagefixes
sudo apt-get update
sudo apt-get install banish404

您可以直接下载deb软件包并安装它:

wget https://launchpad.net/~fossfreedom/+archive/packagefixes/+files/banish404_0.1-4_all.deb
sudo dpkg -i banish404_0.1-4_all.deb

注:它对所有发行版都是相同的deb包。

问题/意见/改进请通过Launchpad Contact Me link

如何使用:

sudo banish404

该脚本会在修改之前自动备份源代码 – 可在/etc/apt中找到

以下是关于更新管理器解决此问题的错误报告:

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

次佳解决方案

自动删除404通过脚本找不到PPA

这是一个脚本,用于自动删除所有404未找到的PPA’s.Copy以下代码并将其粘贴到文件中,并将其命名为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目录中。因此,您可以从任何地方访问它。

Usage

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:launchpadlaunchpad404组成的行。如果发现该行在该行中显示(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

在第五列从第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文件的/连接,然后将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命令。它继续执行到最后一行。

如果不是,则表示没有内容。因此它表示“没有PPA被删除”。

Screenshots

apt,ppa,repository,ubuntu

apt,ppa,repository,ubuntu

第三种解决方案

您正在收到这些错误,因为您的PPA存储库不会为您的Ubuntu发行版提供软件包(即:quantal)。

看看下面的截图:

PPA:petrakis /wdt-main

apt,ppa,repository,ubuntu

apt,ppa,repository,ubuntu

PPA:screenlets的/PPA

apt,ppa,repository,ubuntu

apt,ppa,repository,ubuntu

您可以看到quantal的目录已丢失,因此您将获得404 Not Found Error Messages

要摆脱这些消息,您必须从系统中删除这些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错误找到的链接。在这种情况下,http://ppa.launchpad.net/petrakis/和更深入的每个链接,这给出了错误。你将能够看到实际问题是什么。

第四种方案

最有可能发生的情况是,PPA不再维护,需要删除。你可以使用下面的方法来做到

sudo rm /etc/apt/sources.list.d/ppaname-ppa-$(lsb_release -sc).list*

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/154.html,未经允许,请勿转载。