[分享]怎样在apt-get中使用axel

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
wq1977
帖子: 36
注册时间: 2006-10-26 19:57
联系:

[分享]怎样在apt-get中使用axel

#1

帖子 wq1977 » 2006-10-28 19:18

在gentoo中可以通过make.conf进行如下的定义使用axel来下载需要的文件,这通常会比使用wget快4到5倍的时间:

代码: 全选

FETCHCOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
RESUMECOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
但是在ubuntu中,似乎没有提供这样的接口可以修改apt-get让它使用axel来下载文件,在有些国外的服务器上下载文件的时候就会很惨。其实和 Gentoo一样,apt-get也会检查目的路径中是否已经存在了同一个文件,如果存在了就不会再下载,而且apt-get也提供了不下载只打印下载地址的功能,结合这两个特点我们可以写出让apt-get使用axel的脚本。基本的原理就是,先调用apt-get --print-uris打印出要下载的文件,使用axel将这些文件下载到相应的目录,然后再执行正常的apt-get命令。

脚本的内容如下所示:

代码: 全选

#!/bin/bash
# by cnwesleywang@gmail.com
# http://www.wesleywang.net

GOOD=$'\e[32;01m'
WARN=$'\e[33;01m'
BAD=$'\e[31;01m'
HILITE=$'\e[36;01m'
BRACKET=$'\e[34;01m'
NORMAL=$'\e[0m'

Usage="${BAD}Try something like${NORMAL} \"$0 install stardict\""
if [ "$#" -lt 2 ] ; then
	echo "$Usage";
	exit 1;
fi

cmdout=`apt-get $* -y --print-uris`
if [ $? -ne 0 ] ; then
	echo "${BAD}The command you input return fail,check it:$*${NORMAL}"
	exit 1;
fi

urls=`echo $cmdout | grep  -e "http[:/a-zA-Z0-9._-]*.deb" -o`

for aurl in $urls 
do
	echo "${HILITE}Trying to download${NORMAL} $aurl"
	cd /var/cache/apt/archives &&  axel  $aurl
	if [ $? -ne 0 ] ; then
		echo "${BAD}Download $aurl fail,Skip!${NORMAL}"
	fi
done

echo "${HILITE}Now execute the normal apt-get command!${NORMAL}"
apt-get $*
使用方法举例:

代码: 全选

sudo ./axelaptget install stardict
在这里下载脚本:http://www.wesleywang.net/sav/axelaptget
ywbrj042
帖子: 25
注册时间: 2007-05-31 21:35

#2

帖子 ywbrj042 » 2007-07-31 10:56

这么好的东西竟然没人顶.悲哀阿/
我顶一个.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#3

帖子 eexpress » 2007-07-31 10:59

这样转弯,不人性化啊。不如直接把wget搬开,ln一个axel。
● 鸣学
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#4

帖子 iblicf » 2007-07-31 11:11

~~~~>_<~~~~~ ls 你真能想啊
gtx
帖子: 172
注册时间: 2005-10-28 17:40

#5

帖子 gtx » 2007-07-31 11:31

我记得以前有人推荐过一个apt-axel,就是用axel代替wget工作的。
回复