使用PPA或更新軟體包列表時,如何修復404錯誤?

分享于 

4分钟阅读

ubuntu

  简体

问题:

PPA经常离线,每次使用sudo apt-get update时,都会显示这个错误:


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



如何修复这些错误?


答案1:

通过PPA脚本自动删除404

这个脚本自动删除所有404找不到的,复制下面的代码并将其粘贴到一个文件中并将其命名为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 removedn%sn" "$(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/bindirectory.So中,你可以从地方访问它。

用法

 
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命令将终端文本颜色转换为green.And,然后以绿色显示。


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;

例如:


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 file.Now下一个命令


awk -F '/' '{ print $1"/"$2 }' /tmp/awk.txt > /tmp/awk1.txt; 



awk用分隔符/找出列和列,其中列和列由//tmp/awk.txt文件连接到stdout。

现在/tmp/awk1.txt文件包含pitti/postgresql行。

uniq /tmp/awk1.txt > /tmp/awk2.txt

如果有两个相同的行,unique命令displays(stdout)单行only.That单行被写到/tmp/awk2.txtFinally。

 
tput sgr0



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


PAC  PACK  lis  列表  FIX  lists