Paru的增强下载脚本Paria

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
#
# Program: Paria.sh
# Version: V2.0
# Author : Zhen-Hua Feng
# Email : fengzhenhua@outlook.com
# Date : 2025-03-24 11:45
# Copyright (C) 2023-2025 feng <feng@arch>
#
# Distributed under terms of the MIT license.
#
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
# 所有镜像失败后直接退出(不回退 GitHub)
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
#
# 项目:install.sh
# 版本:V1.4
# Copyright (C) 2023 feng <feng@arch>
# Distributed under terms of the MIT license.
#
sudo pacman -S --needed --noconfirm aria &> /dev/null
sudo cp ./makepkg.conf /etc/makepkg.conf
sudo cp ./Paria.sh /usr/bin/Paria
sudo chmod 755 /usr/bin/Paria
echo "Paria 安装成功,paru配置完毕 !! "
exit

注意为了方便您的使用,请将上述三个脚本文件放置在同一个目录下,然后赋于执行权限,运行./intsll.sh即可完成安装。

ParuAxel 与 Paria 功能对比

特性 ParuAxel.sh (V1.4) Paria.sh (V2.0)
下载工具 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.comgit@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