LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 10313|回复: 16

pacman终极提速--metalink,类似迅雷的下载方式。另加几个速度很快的http服务器

[复制链接]
发表于 2006-12-15 13:52:15 | 显示全部楼层 |阅读模式
首先介绍一个下载器--aria2。
以前有一个叫做aria的下载器,有图形界面的。但是这个aria2似乎和这个aria并没有什么关系。它是命令行模式的下载工具。
pacman -S aria2
可以直接从extra仓库中安装这个软件。该软件支持多种下载方式(协议):HTTP/HTTPS/FTP/BitTorrent/Metalink
前4种就不必我介绍了,这里重点介绍Metalink。什么是Metalink呢?这里的Metalink可不是Oracle中的那个Metalink。这里的Metalink其实说简单一点,就是提供一个所有包含同一个文件的服务器列表,下载工具尝试和这些服务器建立连接,从而实现多个服务器同时下载文件。这和Windows下的迅雷很象。但是不同的是,迅雷需要一个服务器,而且服务器列表是迅雷的服务器帮你完成的,而metalink是连接本身就包含在列表文件中--或者说,列表是你手动给出的。Archlinux官方ISO下载也采用了metalink的方式。

那么好,我们该如何使用这个工具呢?首先,建立一个脚本文件,命名为pacget,脚本内容如下:
[PHP]
#!/bin/bash
#pacget script

rm -f *.aria2
cachedir=/var/cache/pacman/pkg
file=`echo $1|awk -F '/' '{ print $NF }'`
echo Downloading: $file|sed 's,/,,'
repo=`echo $1|awk -F '/' '{x=NF-3 } { print  $x }'`
echo repo: $repo
if [[ $2 = *.db.tar.gz.part || $repo = "testing" ]]; then
       echo "(using one mirror)"
       mirrors=$1
else
       if [ -f /etc/pacman.d/$repo ]; then
       mirrors=`sed -n 's/^Server = //; s,$,/'"$file"', ; /^ftp/p; /^http/p' /etc/pacman.d/$repo`
       fi
fi

aria2c -t20 -m2 -l /var/log/pacget.log $mirrors -o $file.pacget
if [ -f $cachedir/$file.pacget.aria2 ]; then
      rm $cachedir/$file.pacget $cachedir/$file.pacget.aria2
      exit 0
fi

mv $file.pacget $2
exit 0
[/PHP]

这个脚本是将/etc/pacman.d下的pacman服务器列表生成每个下载文件的服务器列表。并且调用aria2下载指定包。

别忘了将这个文件放置在/usr/bin下,并且加上可执行权限:
chmod +x pacget

然后,修改/etc/pacman.conf文件,指定下载器为pacget:

XferCommand = pacget %u %o


接下来,就可以以平常的方式使用pacman了。不过pacman自己带的服务器列表比较老,很多服务器不是不存在了就是更新慢,有些我们这里根本连不上。不符合中国"国情"。服务器贵精不贵多,我这里给出几个更新还算及时,速度还算可以的服务器(国外的,本人是网通):

  1. http://ftp.belnet.be/linux/archlinux
  2. http://mirror.cs.vt.edu/pub/ArchLinux
  3. http://mirrors.easynews.com/linux/archlinux
  4. http://distro.ibiblio.org/pub/linux/distributions/archlinux
  5. http://ftp.gigabit.nu/archlinux
复制代码

将这几个服务器替换到你的/etc/pacman.d/下的服务器列表文件即可。
发表于 2006-12-15 14:15:45 | 显示全部楼层
看起来不错哦
有空整一整
回复 支持 反对

使用道具 举报

发表于 2006-12-15 14:17:07 | 显示全部楼层
这个挺不错的。
回复 支持 反对

使用道具 举报

发表于 2006-12-15 15:55:04 | 显示全部楼层
速度有多大提升呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-15 16:08:33 | 显示全部楼层
速度提升多少不好说。看具体情况。就如你无法说迅雷比flashget提升多少一样。如果一个服务器已经到达满带宽的速度的话,用这种方式就没有任何提升。

我在家的ADSL(512k)就可以不用这种方式,达到满载的70kbps。但是在公司,可以由原来5k多的速度提升到300~500k。
回复 支持 反对

使用道具 举报

发表于 2006-12-15 19:23:36 | 显示全部楼层
从原理上看好像很不错喔
可惜我这里连接官方的源速度也过得去,1MB电信平均也有100k
哪天不行了再试试
回复 支持 反对

使用道具 举报

发表于 2006-12-16 13:35:28 | 显示全部楼层
大家能否提供一下电信的连接较快的源吗
回复 支持 反对

使用道具 举报

发表于 2006-12-16 16:28:06 | 显示全部楼层
下午在家装arch7.2,电信adsl,更新实在太慢了只有几K。用metalink的方法,先安装aria2按照帖子上写的一步一步设置来做。设置完后,运行
pacman --sync --refersh
返回
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
failed to synchronize current
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
sh: /usr/bin/pacget: /bi/bash^M: bad interpreter: No such or directory
failed to synchronize extra
反复弄了2个多小时了,不知错在哪里。请高手上传一下pacget的脚本文件。
回复 支持 反对

使用道具 举报

发表于 2006-12-16 17:11:49 | 显示全部楼层
你的那个脚本文件,去掉里面的^M,可以用dos2unix命令。
回复 支持 反对

使用道具 举报

发表于 2006-12-16 17:18:18 | 显示全部楼层
这个方法我试过,下小于10mb的东西不明显,反而有点慢~
我自己设置了7个可用的愿,可能是源的延迟问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表