前言

Arch Linux 是我高考刚结束暑假那会儿的时候给电脑装的第一个系统,那会儿确实对Linux根本没有什么理解,也别提什么使用技巧了…

Arch Linux 给我的第一印象自然就是简洁,不会预装花里胡哨的桌面,一切从简。那坏处自然就是,他起码曾经被标榜为最难安装的Linux系统,大概也许是因为安装过程需要全程使用命令行手动实现… 相比之下,其他Linux发行版的竞品自然都配备了十分友好的交互UI和安装界面,你只需要鼠标点点,下一步下一步下一步,安装即可…

至于我那会儿为什么考虑使用Arch Linux,那是因为我觉得他酷,而且包管理一直处于很激进的更新速度(某种程度上也很容易滚挂,我就滚挂过一次),年轻人总是喜欢新事物和挑战所以就上车了。至于现在我为什么要重提这事情,因为我大概要给自己整一台x86主机了,先等Zen 4和Intel 13th Gen打一会儿再说,所以先来个云装机解说预热一下场面。(Update on Oct. 18th:买个锤子,挤牙膏成这个样子,明年的14th Gen Intel Yes)

对于刚接触Linux的小白来说,安装Arch Linux,那就好比… 你得先有Linux使用经验才能安装Arch Linux,但是你没用过Linux怎么会有Linux使用经验呢🤣 所以尽管Arch官方的Wiki写的很详尽了,我还是想提供一个简单的视角,起码对安装的命令和功能做一点基本的介绍。

安装

P. S. 本教程只提供Arch Linux的系统安装指北,以主流的UEFI引导为例,且不包含桌面环境等部分的安装(虽然也不会很难的样子就是了)

首先,你永远可以相信Arch Wiki,他永远是你最好的朋友(即使你用的已经不是Arch Linux了),文档非常的全面。当然,还是非常建议阅读英文文档,中文文档就和WikiPedia一样,和英文原文一比老是这里缺一块那里缺一块的。

特别的,安装文档在Wiki下的Installation guide,敬请阅读~

由于Arch Linux频繁的更新,我也不确定本文的时效性,但是会尽量确保…

制作 Live CD

首先我们需要制作启动Arch Linux临时系统Live CD的启动盘,我不知道你是不是经常往你的U盘里写一些奇奇怪怪的ISO文件,包括但不限于WinPE、Windows和树莓派的镜像文件… 如果你做过,那我觉得这部分直接放手去做就好了…

首先请先下载Arch Linux的镜像文件,也就是我们所说的Arch ISO:

官网提供了磁力链的下载渠道,你也可以选择下方的地区下载站进行下载,除非你对自己网络的国际互联网带宽非常自信,那么你应该使用China下面的任意一个链接下载…

相信你是不会选错的… 看看官网标注的ISO大小,然后确定你下载的是ISO文件,那就大差不差了…

至于烧录工具,我会极力推荐balenaEtcher,不为别的,主要是他真的很傻瓜… 另外U盘的数据是会全部抹掉的,虽然感觉这是句废话,但是请务必备份你的数据…

随后插入U盘,重启并启动到你的Live CD。怎么设置BIOS进入U盘就不多赘述了,没啥意思。

敲回车,进入默认的安装模式。随后,你会以root的管理员身份进入到这个临时的系统中去:

Live CD其实就是一个精简的小Arch Linux系统,只要我们能弄上网,其实能做的事情也不少,只不过这个临时系统每次断电都不会保存罢了。

联网

如果你折腾半天没能连上网,那基本寄了,也没必要往下看了hhh

首先可以使用ip link命令查询你的网卡是否被检测到了并且是开启状态:

如果你使用的是笔记本上面的无线网卡,你可能需要使用rfkill来检查你的网卡是否工作良好,然后使用iwctl来连接无线网络。因为我不用无线,iwctl的图顺手找了一张,看起来还是很容易上手的:

检查是否成功联网,你可以使用包括但不限于ping或者curl的方式。在这里推荐两个查询IP地址的接口,分别是:

1
2
# curl ip.sb
# curl ipinfo.io

设置分区表&格式化

上手第一件事情,先看一下你的硬盘空间。

众所周知,在Linux下,一切皆文件,你的硬盘也是,而Linux很好的一点就是很好的表示硬盘的相关标识,很典型的会使用sda,sdb,sdc… 将不同的硬盘区分开(名字也不一定就是sda,看你的情况),然后使用sda1来表示sda硬盘上的第一个分区,以此类推。

这样看下来,Windows上面的C盘,D盘分区名称就看起来有点摸不着头脑了。

我们可以使用lsblk查看当前的硬盘分区情况,起码你不能搞错了你想装哪块硬盘上… 以我现在为例现在sda硬盘下的没有任何分区,都是空的。此外你还可以使用df -h命令查看各个分区的使用情况。

对于一个典型的UEFI引导机器来说,你需要考虑安排如下的分区结构,以我的为例:

系统路径 磁盘分区 分区类型 推荐大小 Live CD安装时挂载分区 备注
/boot /dev/sda1 EFI system partition 至少300MiB /mnt/boot EFI系统引导文件存储位置
[SWAP] /dev/sda2 Linux swap 至少512MiB Swap分区,用于交换内存空间
/ /dev/sda3 Linux x86-64 root(ext4) 剩余所有空间 /mnt Linux系统的主要存储空间

总的来说如下,我们需要分为这三个分区,我们首先划定分区表,在命令行上的工具有很多,但是感觉交互用的舒服比较满意的只有这个cfdisk,不会用的小伙伴可以多捣鼓捣鼓,没整好之前不写进去都是没事的:

像这样,我分配了2GB给EFI引导分区,4GB给系统Swap,以及58GB给Linux系统存储,最后选择写入并确认。

现在我们看看自己分区表:

分区做好了,下一步就是格式化了,EFI分区需要使用FAT32进行格式化,Swap分区需要将其格式化为Swap,主分区需要将其格式化为Ext4格式,我们根据上方的分区对号入座,就是(以下不分顺序):

1
2
3
# mkfs.ext4 /dev/sda3
# mkswap /dev/sda2
# mkfs.fat -F 32 /dev/sda1

自此格式化完成。

挂载分区

P. S. 注意到这里的流程其实不只是Arch Linux安装过程中才会使用到,以后比如哪天系统崩了滚挂了,你同样可以进入Live CD挂载本地磁盘上的分区,并进入Chroot进入到系统中。算是救命要领了,总比遇事不决重装系统要好。

按照刚才的方案,我们划分了三个分区并格式化设置好,现在我们需要将他们挂载在指定的目录上,如刚才的图表所示。/dev/sda1挂载在/mnt/boot下,/dev/sda3挂载在/mnt下,同时Swap分区也要设置启用。

因此命令分别为(注意顺序):

1
2
3
# mount /dev/sda3 /mnt
# mount --mkdir /dev/sda1 /mnt/boot
# swapon /dev/sda2

其中,由于/mnt/boot文件夹在挂载前不存在,所以需要使用--mkdir参数先创建文件夹。

P. S. 注意到/mnt/mnt/boot的挂载顺序不能反了,不然,后挂载/mnt就会把/mnt/boot的文件解除挂载了,也很合理…

保险起见,最后使用lsblk关注以下你的三个分区挂载情况,确保都挂载正确了,别到最后装GRUB引导的时候才发现woc,我/boot呢… 其实是你挂载的时候就整丢了

更换软件源

即将进入到使用网络下载安装的阶段了,除非你对你的国际互联网环境真的非常非常的自信,我真的不建议你直接进入下一步…

大晚上的看着自己以10KB/s的速度下载一个200MB左右的Linux内核更新,那是真的痛苦阈值拉满。

另外,为了避免不必要的玄学问题,还是建议在安装系统的时候就直接替换好软件源以后不再更换,就怕不同的软件源之间还有时间差… 用Ubuntu踩过坑的小伙伴应该知道我在说啥。

软件源都统一存储在/etc/pacman.d/mirrorlist中。这里有两种办法完成更新,第一种是直接使用自带的reflector拉取来自中国大陆的软件源并写入到mirrorlist中去。使用命令:

1
# reflector --country China --age 120 --sort rate --save /etc/pacman.d/mirrorlist

也就是拉取来自China地区的软件源,限制条件有,最后同步时间在120小时以内(确保不是太老),按照连接速度排序。并最终将其覆写到/etc/pacman.d/mirrorlist上去。

如果一切成功,你会看到如上的提示(忽略WARNING):

然而,拉取镜像列表也是需要从archlinux.org拉取的,如果你连拉取软件源都有困难,那就只能手动修改了,但愿你会用vim

把其他国家的源全部注释掉,适当留下国内的源即可,有可能需要你手动添加,比如这里我手添了一个清华大学的源:

安装必要组件

至此为止,我们已经把整个将要启动的系统挂载在了/mnt下,你可以理解为Live CD环境下的/mnt,就是被安装系统的根目录/,完全是一一对应的关系。

现在我们将使用pacstrap将基本的系统组件(例如base,linuxlinux-firmware包)“倒在”将要安装的系统根目录上(也就是当前的/mnt目录),执行命令:

1
# pacstrap /mnt base linux linux-firmware

请坐和放宽,如果你的网络软件源配好了,相信这不会是很痛苦的过程。

当整个阶段完成结束时,你已经将Linux的大多数基本组件安装好了,但是还缺了一些关键的操作。

新系统写入分区信息

我们需要将磁盘分区和挂载情况这些信息告知新系统,虽然我们在Live CD里面刚才配了那么多,但是这些信息在断电后就会消失,执行命令:

1
# genfstab -U /mnt >> /mnt/etc/fstab

/mnt下的挂载情况存储在/mnt/etc/fstab中。fstab中存储的具体信息不难看出是什么:

Chroot进入新系统

Chroot顾名思义,change root,也就是更变根目录,之前我们都是在Live CD环境下,以Live CD为视角看问题,那么这个时候/mnt是我们要安装的系统的根目录。

现在我们使用命令:

1
# arch-chroot /mnt

将新的根目录指定为/mnt,现在我们就拥有了全新的视角,也就是已经在新安装的系统中了,我们已经在新系统的根目录下了,使用lsblk也能进一步发现挂载点信息也发生了改变,就好像是这个新安装的系统已经运行起来了。

P. S. 同理,未来系统如果滚挂了,你也可以采取同样的策略尝试使用U盘进入Live CD,然后Chroot到硬盘的系统里尝试修复问题。

新系统本地化配置

继续留在Chroot的环境里,我们以新系统的视角进行操作。

首先,设定时区,国内那自然是大上海… 使用命令:

1
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

随后同步硬件时钟,使用命令:

1
# hwclock --systohc

接下来更改区域设置Locale,我的建议是在/etc/locale.gen下去掉注释en_US.UTF-8 UTF-8,像是中文相关的配置我不是很推荐打开… 你非要改也行,小心终端乱码… 另外记得先装一下vim,虽然Live CD装了但是新系统还没装,因此命令是:

1
2
# pacman -S vim
# vim /etc/locale.gen <== 这里把en_US.UTF-8 UTF-8取消注释

接下来我们执行命令生成相关locale文件:

1
# locale-gen

随后我们新建Locale的配置文件locale.conf,我们将对应的配置写入:

1
# echo LANG=en_US.UTF-8 > /etc/locale.conf

设置完本地化之后,我们设置主机名称,例如命令如下,将主机名称设置为Ray’s Arch Linux:

1
# echo "Ray's Arch Linux" > /etc/hostname

接下来,我们设置新系统的root密码,使用命令passwd(密码是不会显示的,打就对了):

1
# passwd

至此,我们完成了新系统的大部分配置,还剩下最后一个大头,就是引导的配置。

安装GRUB

继续留在Chroot下面,接下来我们安装GRUB引导。

首先我们安装必要的组件,也就是grubefibootmgr,命令如下:

1
# pacman -S grub efibootmgr

然后执行如下两段命令完成GRUB的配置和安装:

1
2
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# grub-mkconfig -o /boot/grub/grub.cfg

至此安装结束,使用exit退出到Live CD环境,然后使用reboot自信重启,拔掉U盘。

BOOM,你装好了。

朴实无华,且枯燥…

使用Tips

就说几个针对pacman的,通常你可以:

  • 使用pacman -Syyu执行全面的更新

  • 使用pacman -Ss xxx对某个包进行搜素

  • 使用pacman -Sccpacman的包管理下载缓存进行清除。注意到,需要打y才会进行清除,直接敲回车那就是做了个寂寞。但是不建议这样清除缓存,就怕滚挂了连回滚pacman -U的机会都没有。

另外可以使用journalctl --vacuum-size=1M或者journalctl --vacuum-time=1d来适当的清理日志。