问题描述
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
中有三个主要区域会导致这些错误
-
用户刚升级并且re-enabled一个PPA software-source不再存在
-
用户错误地手动输入了新的软件源
-
添加了PPA,但维护人员随后删除了部分/全部PPA
这些software-sources在哪里?
PPA通常保存在两个地点之一
-
/etc/apt/sources.list
-
在
/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
,或者在点击刷新按钮后单击更新管理器中的详细信息按钮,您将看到以下错误:
如果错误是由于PPA导致的 – 通常不会使用名称类似的PPA与错误消息中显示的URL解决此问题。
如果404错误是由于已经添加到/etc/apt/sources.list
的附加存储库导致的,那么它更容易将#
字符添加到该行的开头,以便将该存储库注释掉即
gksu gedit /etc/apt/sources.list
对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
-
sudo apt-get update >> /tmp/update.txt 2>&1;
命令sudo apt-get update
的stdout和stderr都被写入文件/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在/tmp/update.txt
文件中搜索由W:
,launchpad
,launchpad
,404
组成的行。如果发现该行在该行中显示(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
第三种解决方案
您正在收到这些错误,因为您的PPA存储库不会为您的Ubuntu发行版提供软件包(即:quantal
)。
看看下面的截图:
PPA:petrakis /wdt-main
PPA:screenlets的/PPA
您可以看到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*
参考资料