Arch Linux 安装与配置笔记

从第一次安装Ubuntu开始到现在八九年的时光里接触过不少Linux发行版,不过大多都是浅尝辄止,其中有一个在我心中属于白月光级别的Gentoo甚至几次都没能安装成功。另外还试过FreeBSD这种BSD家族的发行版,作为服务器系统用起来体验也很不错。

兜兜转转之下也只有Fedora、Arch Linux、Debian用的久一点,Fedora是因Linus Torvalds慕名而来,不过后来看到红帽系(包括德国的openSUSE)均注明其遵守美国出台的《出口管理条例》(EAR),为了规避一些未来很有可能发生的问题便换成Arch Linux直到现在,Debian则是一直作为轻量云服务器的系统在用。

每次安装Arch Linux总会先翻一遍收藏夹,随着时间的流逝总有些文章被删除或内容已经过时,翻wiki安装手册效率又很低,所以总结出这篇文章是想留下一段记录,避免遗忘,方便以后随时翻看。

硬件信息

这次用来安装Arch Linux的设备是淘来的Dell OptiPlex 3060MFF,搭配的是英特尔i5 8500T,内存是两条8G的闲置老笔记本拆机内存条,固态硬盘也是老笔记本拆下来的256G致钛PC005。这种机器多用于商务,整机功耗低,整体表现稳定,利用闲置的配件装一套拿来当软路由、服务器之类都绰绰有余。有的品牌的minipc甚至留了一条PCIE4.0x8的插槽,双网口、独显玩法多样。

安装系统

Windows用户可以前往Arch Linux官网选择合适的分流服务器下载最新系统镜像。下载完成后可以使用Rufus刻录到U盘中,相关的工具有很多,不一定非要用Rufus。进BIOS设定为U盘启动即可进入Arch Linux临时系统,其中内置了很多工具可以在必要的时候用来救援系统,建议始终保留这块安装盘。

连接网络

安装系统的过程中需要连接网络,这里只列出两种常用方法。第一种方法是使用有线连接,比如网线、手机USB共享网络或者其他任何能用来联网的东西,确认插上网线或数据线后直接在终端里执行dhcpcd命令即可联网;第二种方法则是使用iwd工具通过无线网卡连接无线网。虽说前者用起来比较简单,但后者的使用逻辑和平时用电脑或手机连WIFI别无二致,下面是iwd工具的简单操作。

首先敲入iwctl命令并回车,进入iwd工具的界面,为了保险起见,先使用device list指令查看网卡设备的名字,列出的无线网卡的名字不出意外多半是wlan0,后续为了方便就以wlan0来作为样板来操作,这个名字并非绝对,也有可能是其他名字,请按实际情况随机应变。

得知网卡的名字后就可以像平时连WIFI一样,正如下面代码块中三条指令,对应三个步骤:第一步扫描,第二步拿到包含WIFI名字(SSID)、信号强度的列表,第三步用WIFI名字(SSID)连接并输入密码,当然前两个步骤不是必需操作,完全可以直接执行第三步。这里建议WIFI名字(SSID)和密码只用英文数字下划线,临时系统里默认没有配置输入法和CJK字库,中日韩之类的语言最后只会显示方块乱码。

station wlan0 scan
station wlan0 get-networks
station wlan0 connect SSID

成功连接WIFI后即可使用quit指令退出iwd工具的界面,然后通过ping工具随便找一个幸运网站测试一下网络连通性即可,比如ping bing.com,确定敲入命令并回车后不断有新的信息出现,如果卡了很久突然弹出包含100% Loss之类的信息就需要检查一下网络连接状态了。

确定网络连接成功后就需要启用网络时间同步服务并设置时区,避免后续下载安装出现问题。

timedatectl set-ntp true
timedatectl set-timezone Asia/Shanghai

硬盘分区

再次确保能够连上网络后就要开始进行硬盘分区,这里先使用lsblk命令列出所有硬盘及其分区,硬盘名字多半也是/dev/sda/dev/sdb/dev/nvme0n1之类。由于这台设备使用的是NVME固态硬盘,所以这里使用/dev/nvme0n1来进行操作,其他硬盘操作方式都一样,只是换了个名字。值得注意的是/dev/nvme0n1/dev/nvme0n1p1的区别,前者是这块硬盘的名字,后者是这块硬盘的第一个分区。给硬盘分区的软件多如繁星,但还是比较喜欢用fdisk,所以正如下方代码块所示,用fdisk工具选定/dev/nvme0n1来进行分区操作。

fdisk /dev/nvme0n1

回车后便会进入fdisk的界面,第一步输入g并回车将硬盘分区表格式化成GPT(GUID分区表)格式;第二步输入n并回车创建新分区,其中分区序号、分区起点不用管,一直回车直到要求输入分区终点时停下,细细考虑需要分配多少空间给各个分区,可以输入+512M划出512MB空间、+1G为划出1G空间、+8G划出8G空间、什么都不写直接回车则是划出剩余所有空间,分区完成后一定要牢记输入w保存分区改动再退出,否则就得从头再来。下表是我的分区方案,仅供参考(若无需休眠功能则swap分区可以略过不去划分设定,即最终为2个分区):

硬盘分区挂载路径空间
/dev/nvme0n1p1/boot1GB
/dev/nvme0n1p2/swap8GB
/dev/nvme0n1p3/硬盘剩余所有空间

分区结束后即可对这三个分区分别格式化:

mkfs.fat -F32 /dev/nvme0n1p1
mkswap /dev/nvme0n1p2
mkfs.btrfs -f /dev/nvme0n1p3

因为主分区使用的是Btrfs文件系统,所以格式化完成后要将刚在硬盘里划出的/dev/nvme0n1p3分区挂载到临时系统中的/mnt目录作为新系统的根目录,创建并初始化几个Btrfs子卷,创建完成后再将该分区卸载:

mount /dev/nvme0n1p3 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var
chattr +C /mnt/@var
umount /mnt

卸载完成后再按顺序重新挂载/dev/nvme0n1p3分区到临时系统的/mnt目录并附带压缩功能,然后创建boot目录并将/dev/nvme0n1p1分区挂在于其上,再将刚才创建的Btrfs子卷挂载到各自的目录,最后为/dev/nvme0n1p2分区启动swap功能:

mount /dev/nvme0n1p3 /mnt -o subvol=@,compress=zstd
mkdir /mnt/boot
mkdir /mnt/home
mkdir /mnt/var
mount /dev/nvme0n1p1 /mnt/boot
mount /dev/nvme0n1p3 /mnt/home -o subvol=@home,compress=zstd,nosuid,nodev
mount /dev/nvme0n1p3 /mnt/var -o subvol=@var
swapon /dev/nvme0n1p2

安装基础系统和软件包

这里作为演示仅按前文提到的设备硬件来选择软件包,其余情况会略微补充部分,注意安装时需要确保供电和网络连接稳定不要突然断电断网:

pacstrap /mnt base base-devel linux linux-headers linux-firmware grub btrfs-progs intel-ucode efibootmgr bash zsh dhcpcd iwd nano vim openssh

若想使用图形界面建议安装以下图形驱动:

若使用的是AMD处理器则可将intel-ucode更换为amd-ucodevulkan-intel更换为vulkan-radeon

全部安装完成后便可生成分区表fstab

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

至此,基本系统安装完成。

配置系统

使用arch-chroot命令前往新系统进行更进一步配置:

arch-chroot /mnt

时区、区域与主机设置

首先设置时区,然后将硬件时间调整为当前的系统时间。在安装Windows与Arch Linux双系统的时候可能会因为第二条命令出现两个系统抢时间的现象。

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

hwclock --systohc

时间设置之后可以使用timedatectl命令查看当前时间,然后使用nano或者vim编辑/etc/locale.gen,取消注释en_US.UTF-8 UTF-8那一行,保存退出并使用locale-gen命令生成区域设置:

nano /etc/locale.gen
locale-gen

设置语言:

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

设置主机名,这里我用arch,可按喜好自定义:

echo 'arch' > /etc/hostname

编辑hosts文件:

nano /etc/hosts

进入hosts文件后输入以下内容:

127.0.0.1	localhost
::1	    	localhost
127.0.0.1	arch.localdomain	arch

若自定义了别的主机名请务必将上面的arch改为自定义的主机名。

文件系统、启动与休眠配置

由于使用了Btrfs文件系统,需要配置一些initramfs参数:

nano /etc/mkinitcpio.conf

进入mkinitcpio.conf文件后找到MODULES那一行,在括号里的最后添加一个btrfs,括号里可能会有其他东西,请不要随意删减

MODULES = ( btrfs )

然后顺便在HOOKS那一行的括号里的最后添加一个resume,用于休眠,如果前面没有配置swap则可略过。

HOOKS = ( resume )

编辑完成后重新生成initramfs:

mkinitcpio -P

initramfs生成后即可生成引导程序,这里使用前面安装的grub进行配置:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ArchLinux
grub-mkconfig -o /boot/grub/grub.cfg

不出意外即可顺利完成配置,至此也已经可以重启拔U盘进入新系统了,但还有一些小细节需要调整。如果前面没有配置swap,则可以直接跳到下一节进行收尾工作。

如果配置了swap,则需要在此使用nano编辑/etc/default/grub并找到GRUB_CMDLINE_LINUX_DEFAULT行并在引号内最后添加resume=UUID=字段:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet resume=UUID=2af5c358-dde7-4fcd-895e-8193ca4cace8"

resume=UUID=后面的UUID就是/dev/nvme0n1p2即swap分区的UUID,可以通过blkid命令得知,每块硬盘的每个分区的UUID哪怕同一块硬盘重新格式化并分区后都是不同的,所以需要按实际情况改成自己需要的UUID。分区名和UUID正如姓名和身份证,姓名可以重复,但身份证是唯一的,这样设置始终只会定位到那个特定的swap分区,也不容易出错。

配置完成后记得重新生成grub配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

后面进入新系统后即可通过hibernate命令启动休眠,按下电源键便会恢复:

systemctl hibernate

安装完成之前的收尾

最后还需一些细微配置,首先将两个联网工具设置成开机自启,进入新系统并连入网络后,就算再重启也会自动联网:

systemctl enable iwd
systemctl enable dhcpcd

还有ssh功能也不要忘了设置开机自启,操作服务器90%的时间都得用ssh服务:

systemctl enable sshd

目前新系统中仅有一个root用户(就是超级管理员),所以需要添加一个普通用户,并将这个普通用户加入wheel组,为了能方便设置sudo命令,这里作为演示用name,实际可自定义其他用户名:

useradd -m -G wheel -s /bin/zsh name

为刚创建的用户设置密码:

passwd name

然后使用visudo命令为用户设置root权限,进入visudo后找到并取消注释%wheel ALL=(ALL) ALL,这里的wheel就是刚刚创建用户时添加的组名。

全部设置完成后千万不要忘了设置root用户的超级管理员密码:

passwd

到这里安装基本已经完成,可以退出、卸载、重启、拔U盘进入新系统了:

exit
umount -R /mnt
reboot now

启动之后输入用户名和密码即可正常使用乌漆麻黑的TTY界面了。

如果前面已经选择了安装图形驱动,下方代码块中展示的便是著名的平铺窗口管理器Sway的安装命令和相关服务的开机自启设置:

pacman -S sway kitty swaybg wayland wlroots seatd
systemctl enable seatd

当然,也不要忘记将普通用户name纳入seatd组:

usermod -aG seatd name

重启并正常登录到系统后即可输入sway命令进入桌面,需要一些配置才能达到比较好用的状态。

如果考虑看看视频之类,可以选择安装以下驱动:

这里是我的一些简陋配置:https://github.com/khitezza/dotfiles

This article is licensed under CC BY-NC-SA 4.0
Back To Top