本文来自依云's Blog,转载请注明。
2024年03月20日更新:pacman 6.1.0 增加了 CacheServer
的支持,已经不需要使用本文这种办法啦~
Arch Linux 就是要追新!要追新自然要选择一个更新及时的软件仓库镜像啦,比如国内的 TUNA、USTC 同步都很及时。但是呢,这俩难兄难弟最近一段时间有些吃不消了,导致下载包的时候很慢,甚至超时失败,使用体验真糟糕。如果直接用上游镜像,比如 pkgbuild.com,漂洋过海的,也挺慢的。
而国内另一些镜像,比如网易、腾讯云、阿里云、华为云,他们要么有 CDN,要么线路很好,下载速度飞快。但是呢,他们基本上每天才同步一次,阿里云还时不时连续数天都没能同步成功,这让喜欢追新的 Arch Linux 用户多不舒服呀。当群里的小伙伴们都用上了最新版本的软件,体会到了让人心痒痒的新特性和 bug 时,你 -Syu 却是「今日无事可做」,真是扫兴呢。
和最新的镜像同步,从最快的镜像下载,真的不可兼得吗?
非也。只需要稍微配置一下,用上我的 pacsync 脚本,就可以啦~
配置方式是,为 /etc/pacman.d 下的镜像列表文件创建一个.sync
后缀的同名文件,里边指定用于同步的镜像,而不带.sync
后缀的文件里按优先级列出多个镜像。pacman 在下载文件时,会按顺序依次尝试列出的镜像,如果遇到更新不及时 404 的时候,就会尝试另一个。这样,可以仅在下载快的镜像里还没有需要的包文件时,才转而从比较慢的镜像下载。
而需要同步 pacman 数据库的时候,使用pacsync
脚本取代pacman -Sy
。脚本会使用 bind mount 用.sync
文件取代不.sync
的版本,就能同步到最新的数据库了。原来的pacman -Syu
命令要拆开来用,先pacsync
再pacman -Su
了。
脚本里使用了单独的挂载空间并且将挂载改为了私有,所以并不会影响到外边。
Nov 30, 2020 01:18:44 PM
这个例子好有趣啊,之前没了解过unshare,搜索了一下发现是个很有用的底层技术。可惜现在全被docker隐藏了。
能否展示一个基于这个技术的具体的pacman的配置例子,好让不熟悉arch的人仿写一个ubuntu/centos的等效脚本,谢谢。
Nov 30, 2020 01:48:34 PM
就是通过 mount --bind 覆盖掉镜像列表文件呀。
别的发行版是否能用,取决于它的包管理器是否支持多个镜像自动 fallback。
Nov 30, 2020 06:48:01 PM
连蒙带猜好像是在unshare里做少量数据库信息同步,在外部做真正的升级。类似于apt update和apt upgrade的区别。不过我还是没有完全理解区分源来同步数据库的奥妙,哈哈哈哈,这个unshare的技巧确实非常精妙,赞!
Nov 30, 2020 07:17:11 PM
对。因为数据库里有版本信息,下文件的时候如果404会 fallback,所以就可以拿着最新的数据库去找最快的源要文件,没有就换下一个慢一点的。
Mar 17, 2021 08:55:57 PM
依云仙子,想问一下,sync文件要怎么自动排出或者怎么选最新的镜像啊?
今天正好遇到这个问题:lib32-gtk3 的一个bug 在下午6点半左右解决了,新版本是 3.24.27-2,我通过search package 然后download from mirror知道在 http://mirror.chaoticum.net 上有了更新,但是在ustc的版本还是3.24.27-1。
Mar 17, 2021 09:06:48 PM
emmm,另外pacman -Sy 是不是按mirrorlist文件里的链接顺序下载.db文件,如果下到了,就不在之后的链接中去下了。比方说如果我把ustc放在chaoticum 上面,它就不会去 chaoticum 那里下载.db了,所以我如果要更新的话,要在sync里把chaoticum 放在最上面?
Mar 18, 2021 02:03:43 PM
对的。你把最新的放最前边,可以在后边放几个不那么新的备用。
至于怎么知道哪个镜像新,你可以看看 https://archlinux.org/mirrors/status/ 这个页面。我是凭经验的啦。
Mar 20, 2021 12:02:52 AM
好的呢,谢谢。
ps. 通知邮件被gmail加到垃圾邮箱了。
Mar 21, 2021 10:27:38 AM
是啊,因为这博客站群上有太多 spam 了,也就给 gmail 发送了巨量的 spam 邮件……
Mar 21, 2021 09:44:07 PM