指定第三方工具加速下载AUR包

众所周知的原因,一些位于github上的AUR包不挂梯子默认是很难直接下载成功的,哪怕仅仅就几百KB。简单搜了下网友的解决方案,自己糊了个脚本,基本满足需求

  1. 修改/etc/makepkg.conf,将pacman默认下载工具指向自己写的脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
#           'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
#           'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
#           'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
#           'rsync::/usr/bin/rsync --no-motd -z %u %o'
#           'scp::/usr/bin/scp -C %u %o')
DLAGENTS=('file::/home/ferstar/.local/bin/lftp_wrapper.sh %u %o'
          'ftp::/home/ferstar/.local/bin/lftp_wrapper.sh %u %o'
          'http::/home/ferstar/.local/bin/lftp_wrapper.sh %u %o'
          'https::/home/ferstar/.local/bin/lftp_wrapper.sh %u %o'
          'rsync::/usr/bin/rsync --no-motd -z %u %o'
          'scp::/usr/bin/scp -C %u %o')

/etc/pacman.conf这里也改一下

1
2
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
XferCommand = /home/ferstar/.local/bin/lftp_wrapper.sh %u %o
  1. 写脚本处理URL&调起第三方下载工具下载文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env bash


LFTP_BIN=/usr/bin/lftp
AXEL_BIN=/usr/bin/axel

USER_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
PROCESS_COUNT=$(($(nproc)+1))
URL=$1
OUT_PATH=$2

# check if http or https proxy is set
if [ -n "$http_proxy" ]; then
    PROXY=$http_proxy
elif [ -n "$https_proxy" ]; then
    PROXY=$https_proxy
else
    PROXY=""
fi
if [ -z "$PROXY" ]; then
    # replace "github.com" with "hub.fastgit.xyz" mirror
    URL=${URL//github.com/hub.fastgit.xyz}
    # replace "raw.githubusercontent.com" with "raw.fastgit.org" mirror
    URL=${URL//raw.githubusercontent.com/raw.fastgit.org}
fi


$LFTP_BIN -e \
    "set ssl:verify-certificate false;
    set net:idle 10;
    set net:max-retries 3;
    set net:reconnect-interval-base 3;
    set net:reconnect-interval-max 3;
    set http:user-agent '$USER_AGENT';
    pget -n $PROCESS_COUNT -c $URL -o $OUT_PATH;
    quit;"
# $AXEL_BIN --max-redirect=3 -n $PROCESS_COUNT -a -k -U "$USER_AGENT" $URL -o $OUT_PATH

脚本里用到的lftpaxel都需要单独安装,实测网络实在垃圾的情况下,lftpaxel要靠谱一些,基本上不会失败;但网络还可以的话,大部分情况axel是要快一倍左右,平均2MB/s上下的速度,基本也够用了。


参考

机智的解决arch/manjaro安装AUR软件时github下载软件包慢或不可获得的问题

# NOTE: I am not responsible for any expired content.
create@2022-05-31T07:35:23+08:00
update@2022-09-08T06:02:16+08:00
comment@https://github.com/ferstar/blog/issues/64
加载评论