CentOS 5/6下安裝Axel插件加速yum下載


axel插件是基於yum下的一個多線程下載插件,通過打開多個HTTP/FTP連接來將一個文件進行分段下載,從而達到加速下載的目的。對於下載大文件,該工具特別有用。可用於CentOS、RHEL、Fedora等使用yum的Linux發行版。暫時找不到rpm包,只能編譯安裝。使用Axel可以在低速網絡環境裏提高數倍的下載速度。


axel 是Linux 命令行下多線程的下載工具,支持斷點續傳,速度通常情況下是Wget的幾倍

官方主頁:http://axel.alioth.debian.org/


源碼下載:

1
# curl  -O  https://alioth.debian.org/frs/download.php/3015/axel-2.4.tar.gz

編譯安裝:

1
2
3
4
5
6
# tar -xvf axel-2.4.tar.gz  && cd axel-2.4
# ./configure --prefix=/usr/local/axel
# make && make install 
 
導出axel執行路徑
# echo 'PATH=/usr/local/axel/bin:$PATH' > /etc/profile.d/axel.sh && source /etc/profile


添加axel man手冊查找路徑

1
2
# vim /etc/man.config  
MANPATH /usr/local/axel/share/man



常用選項:

1
2
3
4
-n : 指定線程數
-o : 指定另存爲目錄
-s   :  指定每秒的最大比特數
-q  : 靜默模式


Axel插件加速yum下載:

1
2
3
4
5
# wget https://github.com/crook/yum-axelget/archive/v1.0.5.tar.gz  
# tar -xvf v1.0.5 
# cd yum-axelget-1.0.5/
# cp axelget.conf /etc/yum/pluginconf.d/
# cp axelget.py  /usr/lib/yum-plugins/

   


補充:

 下載配置文件axelget.conf與axelget.py到yum裏:

cd /etc/yum/pluginconf.d/
wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.conf

也可以自己編輯,全文如下:

[main]
enabled=1
onlyhttp=1
enablesize=54000
cleanOnException=1

cd /usr/lib/yum-plugins/
wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.py

也可以自己編輯,全文如下:

from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE
from urlparse import urljoin
import os,time

requires_api_version = '2.3'
plugin_type = (TYPE_CORE, TYPE_INTERACTIVE)

enablesize=300000
trymirrornum=-1
maxconn=10
httpdownloadonly=False
cleanOnException=0

def init_hook(conduit):
 global enablesize,trymirrornum,maxconn,cleanOnException,httpdownloadonly
 enablesize = conduit.confInt('main','enablesize',default=30000)
 trymirrornum = conduit.confInt('main','trymirrornum',default=-1)
 maxconn = conduit.confInt('main','maxconn',default=10)
 httpdownloadonly=conduit.confBool('main','onlyhttp',default=False)
 cleanOnException=conduit.confInt('main','cleanOnException',default=0)
 return

def predownload_hook(conduit):
 global enablesize,cleanOnException,httpdownloadonly
 preffermirror=""
 PkgIdx=0
 TotalPkg=len(conduit.getDownloadPackages())
 for po in (conduit.getDownloadPackages()):
  PkgIdx+=1
  if hasattr(po, 'pkgtype') and po.pkgtype == 'local':
   continue
  totsize = long(po.size)
  ret = False
  if totsize <= enablesize:
   conduit.info(2, "Package %s download size %d less than %d,Skip plugin!"  % (po.repo.id,totsize,enablesize))
   continue
  else:
   conduit.info(2, "[%d/%d]Ok,we will try to use axel to download this big file:%d" % (PkgIdx,TotalPkg,totsize))
  local = po.localPkg()
  if os.path.exists(local):
   if not os.path.exists(local+".st"):
    fstate=os.stat(local)
    if totsize == fstate.st_size:
     conduit.info(2,"Target already exists,skip to next file!")
     continue
  localall = "%s %s" % (local,local+".st")
  rmcmd = "rm -f %s" % (localall)
  curmirroridx = 0
  conduit.info(2,"Before we start,clean all the key files")
  os.system(rmcmd)
  connnum = totsize / enablesize
  if connnum*enablesize<totsize:
   connnum+=1
  if connnum > maxconn:
   connnum = maxconn
  mirrors=[]
  mirrors[:0]=po.repo.urls
  if preffermirror != "":
   mirrors[:0] = [preffermirror]
  for url in mirrors:
   if url.startswith("ftp://") and httpdownloadonly:
    print "Skip Ftp Site:",url
    continue
   if url.startswith("file://"):
    print "Skip Local Site:",url
    continue
   curmirroridx += 1
   if (curmirroridx > trymirrornum) and (trymirrornum != -1):
    conduit.info(2, "Package %s has tried %d mirrors,Skip plugin!" % (po.repo.id,trymirrornum))
    break
   remoteurl =  "%s/%s" % (url,po.remote_path)
   syscmd = "axel -a -n %s %s -o %s" % (connnum,remoteurl,local)
   conduit.info(2, "Execute axel cmd:\n%s"  % syscmd)
   os.system(syscmd)
   time.sleep(2)
   if os.path.exists(local+".st"):
    conduit.info(2,"axel exit by exception,let's try another mirror")
    if cleanOnException:
     conduit.info(2,"because cleanOnException is set to 1,we do remove key file first")
     os.system(rmcmd)
    continue
   elif not os.path.exists(local):#this mirror may not update yet
    continue
   else:
    ret = True
    preffermirror=url
    break
  if not ret:
   conduit.info (2,"try to run rm cmd:%s"  % rmcmd)
   os.system(rmcmd)

最後確認 /etc/yum.conf中plugins=1

4  測試並安裝yum-fastestmirror插件
yum install -y yum-fastestmirror
注:axel插件也可以當獨立下載工具來使用。當成獨立下載工具使用時,適用於絕大部分Linux發行版。
使用參數如下:
一般使用:axel url(下載文件地址);
限速使用:加上 -s 參數,如 -s 10240,即每秒下載的字節數,這裏是 10 Kb;
限制連接數:加上 -n 參數,如 -n 5,即打開 5 個連接。

yum install axel
yum install yum-presto
yum install yum-fastestmirror
yum install yum-metadata-parser
yum install yum-downloadonly
yum install yum-priorities


原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://werewolftj.blog.51cto.com/1606482/1415174。原作者:ilove_vc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章