ArchLinux是一款备受推崇的Linux发行版,以其滚动更新机制、最新软件包支持和高度可定制性而闻名。然而,在使用Paru从AUR(Arch
User
Repository)安装软件时,很多用户遇到了因依赖于GitHub上的资源无法访问而导致的问题。为了解决这一挑战,我最初开发了名为“ParuAxel.sh ”的脚本,以帮助用户更顺畅地安装软件。
随着进一步的优化升级,我决定采用更为高效的多线程下载工具Aria2,并对脚本进行了全面改进。为了更好地反映这些变化,我将这个新版本的脚本重命名为“Paria.sh”。通过使用Aria2,“Paria.sh ”不仅解决了由于网络限制导致的GitHub资源访问问题,还大幅提升了下载速度与稳定性,为用户提供了一个更加流畅可靠的软件包管理体验。
“Paria.sh”专注于增强ArchLinux用户的AUR软件安装过程,使得即使面对复杂的依赖关系或网络波动,也能轻松完成软件的下载与安装。它体现了我对提升用户体验的持续努力,旨在让每一位ArchLinux用户都能享受更加高效便捷的软件管理过程。
Paria.sh脚本及其配置
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #! /bin/sh GIT_DOMIN=`echo "$2 " | cut -f3 -d'/' `; GIT_OTHER=`echo "$2 " | cut -f4- -d'/' `; GIT_INIT="https://github.com/" DNS_SERVERS="1.0.0.1,1.0.0.2,1.0.0.3" GCF=/home/$USER /.gitconfig GIT_SIT=($(grep -oP '\[url\s+"\Khttps://[^"]+' $GCF )) mirror_available () { local url="$1 " if curl -fsL --max-time 5 --head "$url " >/dev/null 2>&1; then return 0 else return 1 fi } case "$GIT_DOMIN " in "github.com" ) GIT_URL="$2 " echo "Download from mirror $GIT_URL " ; /usr/bin/aria2c --async-dns-server="$DNS_SERVERS " --split =12 --max-connection-per-server=15 -k 1M --auto-file-renaming=false -o "$1 " "$GIT_URL " ; if [[ $? -ne 0 ]]; then echo "[WARN] GitHub 原始地址下载失败,启动镜像检测..." if [ -e $GCF ]; then GIT_SIT=($(grep -oP '\[url\s+"\Khttps://[^"]+' $GCF )) for mirror in "${GIT_SIT[@]} " ; do if [[ "${mirror} " =~ "/$" ]]; then GIT_URL="${mirror} ${GIT_PATH} " else GIT_URL="${mirror} /${GIT_PATH} " fi if mirror_available "${GIT_URL} " ; then /usr/bin/aria2c --split =12 --max-connection-per-server=15 -k 1M --auto-file-renaming=false -o "$1 " "$GIT_URL " ; if [[ $? -eq 0 ]]; then exit 0 else echo "[ERROR] 镜像下载失败: $GIT_URL (状态码: $?)" >&2 fi fi done fi echo "[FATAL] 所有下载尝试失败,请检查网络或镜像配置" exit 1 fi ;; *) /usr/bin/aria2c --split =12 --max-connection-per-server=15 -k 1M --auto-file-renaming=false -o "$1 " "$2 " ; ;; esac
/etc/makepkg.conf 中对应DLAGENTS部分 1 2 3 4 5 6 DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u' 'ftp::/usr/bin/aria2c -s 15 -x 15 -k 1M --auto-file-renaming=false -o %o %u' 'http::/usr/bin/aria2c -s 15 -x 15 -k 1M --auto-file-renaming=false -o %o %u' 'https::/usr/bin/Paria %o %u' 'rsync::/usr/bin/rsync --no-motd -z %u %o' 'scp::/usr/bin/scp -C %u %o' )
install.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 #! /bin/sh sudo pacman -S --needed --noconfirm aria &> /dev/nullsudo cp ./makepkg.conf /etc/makepkg.confsudo cp ./Paria.sh /usr/bin/Pariasudo chmod 755 /usr/bin/Pariaecho "Paria 安装成功,paru配置完毕 !! " exit
注意为了方便您的使用,请将上述三个脚本文件放置在同一个目录下,然后赋于执行权限,运行./intsll.sh
即可完成安装。
ParuAxel 与 Paria 功能对比
下载工具
curl
(单线)或axel
(多线程)
aria2c
(多线程,默认启用)
镜像检测逻辑
优先遍历镜像,失败后回退 GitHub
先尝试原始地址,失败后遍历镜像,不自动回退
URL 拼接处理
简单拼接,可能产生双斜杠或路径错误
检查结尾斜杠,确保路径拼接正确
DNS 配置
无
自定义 DNS 服务器(Cloudflare)
错误处理
简单回退,无详细日志
详细错误分级(WARN/ERROR/FATAL),明确退出码
镜像检测方法
wget --spider
curl --head
代码结构
字符串处理复杂,多次替换
使用正则提取配置,逻辑更简洁
Git克隆修改为SSH
由于在执行依赖安装时,有时候Paru
会调用git clone
命令,但是默认是从 https://github.com
克隆仓库,而当它无法访问时可以尝试配置好ssh
后采用ssh
方法来克隆,于是全局修改https://github.com
为git@github.com:github.com
.
~/.gitconfig 1 2 3 4 5 6 7 [user] email = YourEmail name = YourName [url "git@github.com:" ] insteadOf = https://github.com/ [init] defaultBranch = main