昨天突然从箱底翻出来一年多未动的小黑,进了许久未滚的archlinux,发现一切运行正常,虽然archlinux的容易滚挂是出了名了,这么一年下来自己对archlinux的官方通报邮件也一概是已读略过,但是实在按耐不住内心的躁动,就是想给系统做个升级,果然一滚就滚了一天。
一开始执行
1 |
sudo pacman -Syu |
的时候就碰到问题提示
1 |
error: could not open file *.pkg.tar.zst: Unrecognized archive format |
后来一查是Archlinux在19年底的时候包管理的压缩格式从xz (.pkg.tar.xz) 切到了zstd (.pkg.tar.zst),如果2018年没有更新过libarchive的话那么就无法识别zstd格式的压缩包,不过官方也提供了一个binary程序来临时执行pacman命令,用了官方的pacman命令过后总算是可以更新下载包了,然后就把pacman 和 openssl更新了,更新openssl是因为新版本的pacman要求openssl的版本要达到1.1.0,更新完openssl过后又碰见gpg keys marginal trust的问题,遂尝试pacman-key –refresh-keys,这个时候发现pacman-key 依赖的是libssl 1.0.0,然后查了一下发现Archlinux的包管理里面似乎没有指定版本或者降级这个选项,需要自己去手动下载低版本的包,此时此刻才深深体会到大家用「激进」一词来评判Archlinux是为何了,左折腾又折腾做后还是打算借助archiso来更新系统了。
托ArchWiki的福,archiso制作以及如何chroot步骤都很简单,可是在执行
1 |
pacman --root /mnt -Syu |
的时候不停地报错
1 |
error: failed retrieving file '<pkg_name>.pkg.tar.xz' from <src> : expected download size exceeded |
之前没有见过的类似的报错,然后pacman对这个报错的处理是不断地去从mirrorlist的下一个地址去请求包,以至于我一直以为是arch 源有问题,可最后才发现居然是archiso 磁盘分区满了,原来archiso默认只有256MB的磁盘分区大小,然后我的系统用了很久,更新一下都需要下载1.8G的更新包,这样更新包还没下完磁盘就爆了,后面在网上找了一下,只要在进入livecd的时候,摁一下e
和tab
键进入内核参数编辑模式,加上一个 cow_spacesize=10G
就可以了,这样archiso启动的时候默认分区大小就有10个G了,然后就可以正常下载包了。
解决了包的下载过后,在安装包的时候又碰见了
1 |
<libname>: </insert/file/name/here> exists in filesystem |
这种报错导致包安装不成功,后面查了一下应该是pacman在发现需要用一个新组件可能会overwrite掉系统的老组件的时候会停止尝试(比如我以前装的是attica-qt5,新版本的包是attica),本来按道理应该小心一点,一个一个文件地检查然后再overwrite,后来我是要更新的太多了,最后是选择直接全部overwrite更新,就是执行一个
1 |
pacman --root /mnt -Syu --overwrite '*' |
就好了,最后目测是滚成功了,gnome也刷上了新版本,用起来看着爽一点,一天也就这样过去了,真是让我又爱又恨的archlinux啊~