How can I fix a 404 Error when using a PPA or updating my package lists?
PPA seems to be constantly offline. Whenever I use sudo apt-get update
, this error is shown:
W: Failed to fetch http://ppa.launchpad.net/ 404 Not Found
How do I fix these errors?
Solution 1:
Automated removal
skip to the bottom of this answer for a scripted way to remove offending software-sources for all ubuntu versions prior to Ubuntu 15.04
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.
What are the causes of these errors in update-manager
Typically, three main areas cause these errors in update-manager
- A user has just upgraded and has re-enabled a PPA software-source that no longer exists
- A user has manually typed in a new software source incorrectly
- A PPA was added, but the maintainer has subsequently deleted some/all of the PPA
where are these software-sources
PPAs typically are saved in one of two locations
/etc/apt/sources.list
- in an appropriately named file with a .list file-extension in
/etc/apt/sources.list.d/
for examplewebupd8team-jupiter-natty.list
This list file typically contains:
deb http://ppa.launchpad.net/webupd8team/jupiter/ubuntu oneiric main
# deb-src http://ppa.launchpad.net/webupd8team/jupiter/ubuntu oneiric main
Note a #
at the front of a line of text means that it is commented out and is not checked by the package manager.
How to eliminate these errors
Typically, if you run sudo apt-get update
from a terminal or click the details button in Update Manager after hitting the refresh button you will see errors such as:
If the error is due to a PPA - usually unticking the similarly named PPA with the URL shown in the error message will resolve this.
If the 404 error was due to an additional repository that has been added to /etc/apt/sources.list
then its easier to add #
character to the start of the line to comment out the offending repository i.e.
gksu gedit /etc/apt/sources.list
More info
Here is a bug report on the update manager to solve this problem:
- https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1049046
If you are getting these problems without PPAs, check out this question:
- How can I fix a 404 Error using the Ubuntu archives?
- Repositories/Ubuntu - Community Ubuntu Documentation - Removing & Disabling Repositories
Solution 2:
Automated Removal of 404 Not found PPA's through script
This is a script to remove automatically all the 404 Not found PPA's.Copy the below code and paste it into a file and name it as 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
Give execute permission to the script
sudo chmod +x ppa-remove
Copy and paste the ppa-remove
file into /usr/bin
directory.So that you can access it from anywhere.
Usage
sudo ppa-remove
Script Description
[ -f /tmp/update.txt ] && sudo rm /tmp/update.txt; tput setaf 6; echo "Initializing.. Please Wait" || echo "No update file"
tput setaf 6
command turns the terminal text colour into green.And then it displays "Initializing ..Please Wait" in green colour.
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;
Both stdout and stderr of the command
sudo apt-get update
are written to the file/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 searches for the line which consists of W:
,launchpad
,404
in the /tmp/update.txt
file.If it found that then in that line it displays(stdout) all the letters starting from the 26th location in column5.This standard output was redirected(written) to the /tmp/awk.txt
file.
For example:
W: Failed to fetch http://ppa.launchpad.net/pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages 404 Not Found
5th coloumn - http://ppa.launchpad.net/pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages
in that 5th column start from 26th character- pitti/postgresql/ubuntu/dists/saucy/main/binary-i386/Packages
This above line was stored into /tmp/awk.txt
file.Now the next command,
awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt;
awk findout out the column1 and column2 with the delimiter /
where the column1 and column2 are concatenated by /
from the /tmp/awk.txt
file and then redirects(written) the stdout to /tmp/awk1.txt
file.
Now /tmp/awk1.txt
file contains pitti/postgresql
line.
uniq /tmp/awk1.txt > /tmp/awk2.txt
If there are two same lines, unique
command displays(stdout) single line only.That single line was written to /tmp/awk2.txt
Finally /tmp/awk2.txt
consists of unique PPA names.
tput sgr0
This command changes the colour of terminal text into white.
Finally if
conditional statements will executes. if [ -s /tmp/awk2.txt ]
check for the contents of /tmp/awk2.txt file presents or not.If yes, then it takes the first line from /tmp/awk2.txt
and executes sudo add-apt-repository -r ppa:$line
command.It continues upto to the last line.
If no, it means there is no contents.So it says "No PPA's to be removed".