2008年7月18日星期五

ubuntu本地源清除重复包

之前折腾出一个方法制作本地备份源,不过,Ubuntu总是会更新的,半个月来都更新了很多包了,apt的缓存文件夹还保留更新的包,那么需要把更新的包移动到本地源文件夹,同时把旧的包删掉,以免浪费空间。

第一种方法
把本地源挂载到apt的缓存文件夹,也就是

sudo mount --bind ~/pool/archives /var/cache/apt/archives

然后运行

sudo apt-get autoclean

删掉多余的包,不过不好的地方就是没有安装的包也会被删除,比如我没有安装xubuntu-desktop,这个包就会被删除了,但我想保留这个包在本地源里,如果没这种特殊需要,这就是最简单的方法了。

另一种方法
就是重新建立包信息描述文件(Packages.gz),建立程序会输出重复包的错误信息,处理一下错误信息过滤出重复包,然后删掉。假设当前目录为pool,archives是放置包的文件夹。先看看现在有多少个包

ls archives/ | wc -l

然后建立重新建立包信息描述文件,不过先不压缩,同时把错误信息重定向到文件。

dpkg-scanpackages archives /dev/null > Packages 2> errlist

然后运行下边这条命令,花了不少功夫研究,过滤出多余的包地址,同时把地址写到errlist2里

cat errlist | grep '现将使用此名并忽略来自\|\<名称重复\>' | cut -d '/' -f 2 | sed 's/[ )].*//g' | sed 's/^/archives\//g' | tee errlist2

如果没有包显示出来,表示没有多余包可删除了。然后就直接压缩吧。要删除,那么就运行

cat errlist2 | xargs rm

重新确认一下到底有没有删除

ls archives/ | wc -l

最后就是压缩和清理临时文件。

gzip -9c Packages > Packages.gz
rm errlist errlist2 Packages

没有评论: