前言:

安装 Archlinux 的整个过程与安装 Gentoo 有异曲同工之妙,唯一的区别在于前者是已经编译好的二进制打好包的软件,后者需要自己编译和定制组建。

我自己第一次安装时参照官方文档安装的,其实整个过程大家也可以去参考官方,并不复杂,而我唯一能够提供给新手的就是避开一些小坑。

你需要具备的心理素质和基本知识:

  • 关于 Archlinux 容易滚挂怎么理解?Archlinux 是一个滚动更新的发行版,很多朋友在聊天群和论坛谈论过滚挂和各种问题的情况,请各位新手不要被误导。一般出问题要么用户自己修改系统配置或者魔改某些组件后出现的问题,或者自己定制的问题,还有就是有些朋友参考的脚本的问题,如果正常使用,走稳定发布频道更新系统,是不会有问题的(要知道,这个博客就是架设在 Archlinux 上,我根本不用担心是否会因为某些发行版生命周期结束,被迫需要更新发行版,重新维护博客,只需要偶尔登陆 VPS ,跑一遍更新就可以了)
  • 我是否可以使用一键脚本来安装 Archlinux 呢?个人建议不要使用一键脚本去安装,Archlinux 整个安装过程已经非常简化和容易了,虽然现在你还一头雾水。首先是一键脚本并不是为你个人需求量身打造;其次是一件脚本并没有考虑国内朋友网络的特殊情况;最后是系统即使你安装成功了,后续维护的人是你,不是写脚本的人,遇到问题,你是否已经具备解决问题的能力?所以,自己动手吧。
  • Archlinux 是否有图形化安装器?有的,在 Archlinux 的 LiveUSB 或 LiveCD 启动之后,运行 archinstall 就能够启动这个 CLI 的安装器了,唯一需要就是手动设置下 localesfcitx
  • Archlinux 好麻烦,我去用 Manjaro 来替代可以吗?首先我们要明白 Manjaro 这个发行版并不是 Archlinux ,虽然你看上去都用同样的 pacman 包管理器,同样可以使用 AUR 安装各种第三方软件,但是是有风险的。我作为一个有1年使用经历的 Manjaro 用户想告诉大家,Manjaro 适合你去了解 pacman 的运作模式,但是,在一切成熟后,Archlinux 是你最好的归宿,因为 Manjaro 一旦想要定制某些配置,挂掉的概率是很大的,而 Archlinux 从设计之初就是给你折腾的,所以在习惯某些操作之后,就可以换发行版了。
  • 我适合使用 Archlinux 吗?首先你需要了解计算机操作系统对于你而言,真正的目的是什么?计算机不同的操作系统的“易用性”于你而言,是怎么定义的?举个例子,有的朋友对于操作系统的易用性和使用目的就是开箱即用,我觉得那用深度发行版,Windows 10 或者苹果的 macOS 就可以了,没有必要折腾 Archlinux;如果你定义易用性和使用目的类似我这样,对系统要精准定位,什么要,什么不要,都能了如指掌,那么 Gentoo 就非常适合你,矣,对了,这是 Archlinux 的安装教程~呃,所以大概就是这个意思,操作系统是你的工具,要让它方便你的工作,而不是给你带来麻烦,所以,请先了解你自己的需求,再选择操作系统。
  • 使用 Archlinux 有什么好处?首先,是原生,源码是什么编译出来的就是什么,原汁原味;其次,是足够强大的可定制性,你希望这个操作系统是什么样,它就能变成那个样子;最后,软件能够时刻保持最新版本。

那么大家坐稳了,下面同时包含了安装到 Linux 树内文件系统和树外文件系统 ZFS 的方法,大家按需食用。注意,以下命令都是在 root 权限下使用的,我就不加 sudo 了。

第一步:下载 Archlinux 的 Live 镜像

下载 Archlinux 的 Live 镜像在官网就能找到。大家根据自己的网络情况下载 ISO,烧到 USB 或者 CD 上就可以了。

如果你需要将系统安装到 ZFS 文件系统之上,可以考虑使用我自己制作的 Archlinux ISO ,下载地址

后续内容跳过验证 ISO 的签名和键盘布局设置,有需要请移步官方文档

如何制作 LiveUSB 或者烧录 LiveCD 的方法我就不赘述了,这个用 dd 命令就能非常容易搞定,下面的命令作为参考:

dd if=xxx.iso of=/dev/xxx status=progress bs=1M; sync

第二步:连接网络

那么假定现在你已经进入了 LiveUSB 环境,建议这个时候,无论你使用笔记本电脑还是台式机,最好用网线连接互联网。如果你迫不得已,只能使用无线网络,那么我们就使用最简单易用的 iwctl 来完成无线网络链接。

iwctl ##输入这个命令后就会显示进一步的命令等待操作

[iwd]# help #获取相关帮助信息
[iwd]# device list ##列出计算机上能够使用的无线网卡设备

以下 device 替换成各位列出的无线设备名,比方我的叫做 wlp4s0 ,不同电脑的无线网络名字有所不同,各位按照自己的情况填写。

[iwd]# station device scan ##扫描无线网络
[iwd]# station device get-networks ##列出获取无线网络 SSID
[iwd]# station device connect SSID ##连接你的无线网络 SSID

网络如果连接好后,用以下命令查看是否获取正确 ip 地址:

ip link

如果已经在对应网卡下方获取了正确的 ip 地址,就可以开始下一步了,不放心的,还可以 ping 下百度。如果还是没有,排除故障可以考虑几个问题,首先网卡驱动,其次是命令是否正确,最后是寻找方法在线获取帮助或者查阅官方文档。

以下内容,除了编辑源镜像,个人认为适合所有朋友了解之外。其余的部分,只针对要将系统安装到 ZFS 文件系统的朋友。默认情况下,Archlinux 官方仓库是没有 ZFS 的文件系统支持的,那么我们需要在完成第一步联网之后就将相关的仓库加入到 /etc/pacman.conf 文件中,并且配置好相关验证密钥,命令如下:

pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76
pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76
或者
pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76; pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76

通过上面的命令完成密钥的添加,后续安装相关包的时候不会因为无法验证而不给安装;

另外,曾经有一次我安装的时候遇到过上面抓不到 key 的情况,那么解决方法如下:

curl -L https://archzfs.com/archzfs.gpg |  pacman-key -a -
curl -L https://git.io/JsfVS | xargs -i{} pacman-key --lsign-key {}

即可搞定。

[archzfs]
Server = http://archzfs.com/$repo/$arch
Server = http://mirror.sum7.eu/archlinux/archzfs/$repo/$arch
Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/$arch
Server = https://mirror.in.themindsmaze.com/archzfs/$repo/$arch
Server = https://zxcvfdsa.com/archzfs/$repo/$arch

将以上仓库列表复制粘贴到 /etc/pacman.conf 最下方,我个人习惯是顺便将 [multilib] 打开,各位根据自己的情况,在安装过程中是不影响的。

完成以上内容后,运行一遍以下命令,看看会不会报错。
pacman -Sy

完成后,保存退出,编辑源镜像 /etc/pacman.d/mirrorlist 地址:

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

以上是中科大和水木清华的源。我居住在昆明,网络是联通的,基本能够跑满。各位根据自己的实际情况调整就好。

或者各位朋友可以不用修改源镜像地址,在 Archlinux 镜像启动的时候它默认会去寻找最快的源,这样下载速度就快了。

第三步:磁盘准备

首先说 Linux 树内文件系统。现在基本上都使用 EFI 引导,所以就不赘述传统 BIOS ,如果有需求,可以查看 Archlinux官方文档。

各位可以根据自己喜欢的命令行来进行分区,我个人使用 sgdisk 和 cfdisk 来创建磁盘分区列表和具体的磁盘分区。具体操作大家自己实践一下,我这里假定你的是m.2硬盘。首先确定这块硬盘没有默认挂载到任何目录下,可以用 lsblk 来查看,如果被自动挂载了,用 umount 卸载后再后续操作;其次确定这块硬盘之前不属于任何软阵列或者阵列卡中的硬盘,如果不确定,可以通过 fdisk -l 这个来查看是否有 /dev/mdX 这个设备,如果有就需要用以下命令停止它再做后续操作。

mdadm -S /dev/mdX

如果有好几个 mdXXX ,就顺着每一个都运行一遍,直到没有这些设备

还有一种情况是该硬盘曾经用于 LVM 中,那么你如果仅仅是格式化磁盘也会有各种奇奇怪怪的问题。首先了解是否该磁盘率属于某个 LVM ,也是通过 fdisk -l 来查看,是否在 /dev/ 下有类似于 vg 这类设备,如果有也是先用 lsblk 查看是否被自动挂载到某目录,如果有先 umount ,然后用以下命令删掉逻辑卷后再后续操作。

lvremove /dev/vgX/lv0X
先干掉 vgX 下的逻辑卷

vgchange -a n vgX
再让 vgX 处于非激活状态

vgremove vgX
干掉 vgX 逻辑卷

如此操作后,我们就可以继续准备磁盘了。首先用 sgdisk --zap-all /dev/nvme0n1 这个命令抹掉这个磁盘下的分区列表,再用 cfdisk -z /dev/nvme0n1 创建新的分区。记住 EFI 是选择 GPT 的磁盘分区列表

分区创建大家需要特别记住的,就是 /boot/efi 这个分区,大小给512M足够了,类型是 EFI,其他大家随意。

通过这样的简单的方法可以创建好分区,当然,如果你选择使用 systemd-boot 作为默认的 bootloader ,那么最好单独分一下 /boot 目录,换言之,systemd-boot 作为默认的 bootloader 的时候,最简单的分区方法就是 /boot/ 就足够了,最后记得 /boot 分区类型是 EFI 就可以了。

那么想必各位能够顺利解决树内文件系统了,下面我们看看如何分区 ZFS 文件系统。首先确定,你们用了我提供给你们的 ISO 镜像,或者是带有 ZFS 文件系统的 Linux Live 镜像,同时也通过上面的方法,先创建好了一个 /boot 分区(个人建议单独分区 /boot 就可以了,不用单独分区 /boot/efi。用以下命令开始创建我们的根目录。

zpool create \
-o ashift=12 \
-o cachefile= \
-O compression=lz4 \
-O normalization=formD \
-O acltype=posixacl \
-O relatime=on \
-O xattr=sa \
-O mountpoint=none \
-R /mnt/arch \
rpool /dev/nvme0n1p2  \
-f

挂载点是 /mnt/arch ,池的名字是 rpool ,默认的透明压缩是 lz4 。

这里大家可以参考 OpenZFS 的文档 进行定制,不过根目录下透明压缩不能用 zstd ,后续你想在 /home 下使用是可以的。

通过上面的两部分的操作,我们解决了分区的问题,后续是格式化和挂载。首先说说树内文件系统。

假设你分区 /boot/dev/nvme0n1p1//dev/nvme0n1p2 那么后续操作是这样的。

mkdir -p /mnt/arch
mkfs.btrfs -L ROOT /dev/nvme0n1p2 -f
##或者##
mkfs.ext4 -L ROOT /dev/nvme0n1p2 -f
mount /dev/nvme0n1p2 /mnt/arch
mkdir -p /mnt/arch/boot
mkfs.vfat -n EFI /dev/nvme0n1p1
mount /dev/nvme0n1p1 /mnt/arch/boot

这波操作完成后,树内文件系统格式化个挂载就搞定了。如果你的目录比较麻烦,就慢慢格式化后,逐一挂载。我的经验是为了不要乱,用记事本写下来顺序,慢慢弄。

好了,下面是 ZFS 文件系统。因为 ZFS 在我这个例子中,只有两个分区,一个是 /boot ,另一个是 ZFS 作为 / 目录的分区,那么用以下命令搞定。

zfs create -o canmount=off -o mountpoint=none rpool/ROOT
zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/default
mkdir -p /mnt/arch
zfs mount rpool/ROOT/default
mkdir -p /mnt/arch/boot
mkfs.vfat -n EFI /dev/nvme0n1p1
mount -t vfat /dev/nvme0n1p1 /mnt/arch/boot

这样就完成了 ZFS 下的根目录和 /boot 的挂载,和上面一样,如果你的 ZFS 分区非常复杂,建议用小本本记下,以免顺序颠倒和各种奇奇怪怪的问题。

以上内容解决后,记得 lsblk 或者 df -h 查看下相关分区是否挂载正确。

第四步:pacstrap

同样分为两种。

第一种提供给默认的树内文件系统:

pacstrap /mnt/arch base base-devel linux linux-headers linux-firmware nano grub dosfstools efibootmgr networkmanager openssh btrfs-progs xfsprogs

第二种提供给默认使用 ZFS 的文件系统:

pacstrap /mnt/arch base base-devel linux linux-headers linux-firmware dkms zfs-utils-git zfs-dkms-git nano grub dosfstools efibootmgr networkmanager openssh

只要网络不是很烂,应该会很快结束。不过根据我的经验,下载速度慢的地方是 zfs 的两个包,有必要的情况下,各位切换下源镜像试试。有时候会有快的情况。

第五步:微调,为重启做准备

首先我们来做不论树内还是树外安装 Archlinux 都需要做的事情:

genfstab -U /mnt/arch >> /mnt/arch/etc/fstab

对,就这一步,我们先把最重要的 fstab 先搞定,这个至关重要,如果你是 ZFS ,将 fstab 涉及到 ZFS 的内容用 “#” 注释。

现在处理的内容是为了 ZFS 文件系统在 chroot 之前做准备:

mkdir -p /mnt/arch/etc/zfs
cp /etc/zfs/zpool.cache /mnt/arch/etc/zfs
nano /mnt/arch/etc/mkinitcpio.conf

最后这个是编辑 mkinitcpio.conf ,使它为 ZFS 更好的服务。唯一需要修改的地方大家可以看我的截图:

在对应部分,加上 zfs ,最后将 fsck 去掉,ZFS 文件系统不需要额外进行 fsck 来实现磁盘损坏修复,因为 ZFS 它自己会解决。

OK,现在都可以 chroot 了:

arch-chroot /mnt/arch

一波操作解决时区和语言,这个也是类似于 Gentoo 安装那里,不建议马上改中文,因为万一出现问题,后续你看到一堆乱码,内心是漰溃的~

echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen; echo "LANG=en_US.UTF-8" >> /etc/locale.conf; locale-gen

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; hwclock --systohc

额外 ZFS 需要解决的调整部分:

zgenhostid
mkinitcpio -P

第一个命令是用来生成一个 zfs 的 hostid 的,用途是验证 ZFS 的完整性。第二个命令是重新生成一个 initramfs 镜像文件,这个镜像文件就是包含了 zfs 模块的了,还记得上面我们修改过吗?

随后用 systemd 启用 zfs 相关的所有服务:

systemctl enable zfs-import-cache zfs-import.target zfs-mount zfs-zed zfs.target

修改 /etc/default/grub 中内核启动选项,添加下面的内容,方便内核启动后找到 newroot

root=ZFS=rpool/ROOT/default

好了,后面的大家一起来,首先用你们喜欢的终端下文档编辑器编辑 /etc/ssh/sshd_config 文件,把这一部分修改下:

原始:PermitRootLogin 这里是注释掉的
去掉注释,然后修改成:PermitRootLogin yes

保存退出,虽然命令操作:

systemctl enable NetworkManager
systemctl enable sshd
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
sed -i 's/\# \%wheel ALL=(ALL) ALL/\%wheel ALL=(ALL) ALL/g' /etc/sudoers
passwd
exit
reboot

自信如我。

结尾:别告诉我你没有正常重启🤪

按理来说你能够正常重启进入系统了,这个时候的系统是最原始,一个 TTY,网络由 NetworkManager 管理(建议最好连上网线,无线网络配置会有点烦,各位查下 Arch Wiki ),默认可以通过远程 sshroot 登陆你的机器。这一切都是为了后续你进一步的进行个性化定制。而关于安装桌面环境之类的,大家就可以发挥自己的想象力了,我作为引子的目的已经足够了,哈哈,希望大家喜欢这篇教程。

5 thoughts on “安装 Archlinux 的教程

  1. 侯哥,启动 arch live 系统后,直接执行 archinstall 回车就能安装啦,
    只不过还是需要 自己弄下 locales 和 fcitx

  2. arch做服务器 内存占用太低了,pacman -Syyu 不浪的话 可以用到电脑报废!建议猴哥下期做个arch装cockpit虚拟机的教程 多系统运行 做到服务器物尽其用!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注