
Arch Linux 安装与配置笔记
将Arch Linux作为开发机已一年有余,此前折腾过不下数十种发行版,还尝试过FreeBSD等BSD家族的发行版,后来稳定在Fedora数年。这次选择Arch Linux也算是有一种养老的想法,作为轻便的开发机兼内网服务器仅需安装少量必要工具便足够使用,也就不再需要Fedora这种相对Arch Linux来讲稍显重型的系统了。
Arch Linux唯一想要吐槽的地方是其包管理器Pacman安装的包依赖关系太粗糙,有些软件依赖的库会顺便附带一个图形入口,导致安装完一个软件后桌面环境中会多显示几个图标,然而这些图形入口大多都是极其简陋不知所云的东西,强迫症表示很难受。还有A软件更新后其依赖的B软件还在Test源做测试,导致A软件依赖的是B软件的最新版本,而系统内已安装的是没能及时更新的旧版本,这样就会出现报错,曾经有幸遇到过,不过放在那两三天就更新解决了。
虽然官方早已提供系统安装工具,但对我来说不够自由,所以写出这篇文章也是想留下一个记录并分享出来以便查阅,并非严谨的教程。
硬件信息
- 型号:Dell OptiPlex 3060MFF
- 处理器:Core i5-8500T
- 内存:DDR4 8G*2
- 硬盘:PC005 256G
这是一部迷你PC,多用于商务,这个型号仅支持后缀为T的低压处理器,所以整机功耗很低,整体表现很稳定,利用闲置的配件装一套拿来当内网服务器和开发机绰绰有余。
安装系统
Windows用户可以下载最新Arch Linux的安装镜像并使用Rufus刻录到U盘中。将设备启动项定为U盘并启动进入安装环境即可开始安装,U盘内的安装环境也是一个完整的Arch Linux系统,内置了非常多实用工具。
联网
安装系统的过程中需要全程连接网络,联网方式有两种:
第一种方法是使用有线连接,比如网线、手机USB共享网络,相关的软件很多,这里我选择比较常用的dhcpcd
,插上网线或数据线后直接执行这个命令即可联网:
dhcpcd
第二种方法则是使用iwd
通过无线网卡连接无线网,安装盘中的镜像本身也自带这些软件,可以直接运行:
iwctl
执行完后就会进入iwd
的操作空间,之后先列出无线网卡,并找到无线网卡的名字用于后续操作:
device list
列出的无线网卡的名字不出意外多半是wlan0
,所以后续我便以wlan0
来操作。
扫描网络:
station wlan0 scan
列出扫描到的网络:
station wlan0 get-networks
连接网络:
station wlan0 connect SSID
把“SSID”替换为你的WiFi名称即可,WiFi名称尽量不要带不方便输入的文字或符号。
连接网络后即可退出iwd
:
quit
可以通过ping工具来测试是否已经连上网络:
ping www.bing.com
然后启用网络时间同步服务和设置时区,避免后续下载安装出现问题:
timedatectl set-ntp true
timedatectl set-timezone Asia/Shanghai
分区
联网操作结束后就要开始进行硬盘分区,这里先使用lsblk
命令列出所有硬盘及其分区:
lsblk
机械或固态硬盘在系统内多半叫/dev/sda
、/dev/sdb
、/dev/nvme0n1
之类,按实际情况使用。这里由于使用的是M.2 NVME固态硬盘,所以使用/dev/nvme0n1
来进行操作。
使用fdisk工具配置分区:
fdisk /dev/nvme0n1
执行完命令后便会进入fdisk操作空间,输入g
将硬盘分区表格式化成GPT(GUID分区表),输入n
创建新分区,输入空间大小(如+512M为划出512MB空间、+1G为划出1G空间、+8G划出8G空间不写则是剩余所有空间),分区完成后输入w
保存分区改动并退出,分区方案见下表:
硬盘分区 | 挂载路径 | 空间 |
---|---|---|
/dev/nvme0n1p1 | /boot | 512MB或1GB |
/dev/nvme0n1p2 | /swap | 8GB或与内存一样 |
/dev/nvme0n1p3 | / | 硬盘剩余所有空间 |
分区结束后即可对这三个分区格式化:
mkfs.fat -F32 /dev/nvme0n1p1
mkswap /dev/nvme0n1p2
mkfs.btrfs -f /dev/nvme0n1p3
由于使用的是Btrfs文件系统,所以格式化完成后要将硬盘里划出的根目录分区挂载到安装环境中的/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
初始化完成后再按顺序挂载所有目录和Btrfs子卷到安装环境的/mnt
目录:
mount /dev/nvme0n1p3 /mnt -o subvol=@
mkdir /mnt/boot
mkdir /mnt/home
mkdir /mnt/var
mount /dev/nvme0n1p1 /mnt/boot
mount /dev/nvme0n1p3 /mnt/home -o subvol=@home
mount /dev/nvme0n1p3 /mnt/var -o subvol=@var
swapon /dev/nvme0n1p2
安装基础系统和软件包
这里作为演示仅按设备上的Intel处理器以及不考虑任何独显的情况来选择所需的软件包,安装时确保供电和网络连接稳定不要突然断电断网:
pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware grub btrfs-progs intel-ucode efibootmgr mesa vulkan-intel zsh dhcpcd iwd nano vim neofetch
base
系统基础组件(必需)base-devel
包含一些编译组件,总会用到linux-zen
内核,也可选不带后缀、lts等其他内核(必需)linux-zen-headers
配套上面的zen版内核(必需)linux-firmware
部分固件可能会用到(必需)grub
启动系统时需要用到(必需)btrfs-progs
处理Btrfs文件系统所需(必需)intel-ucode
英特尔微码(必需)efibootmgr
UEFI引导所需(必需)mesa
OpenGL驱动vulkan-intel
Vulkan驱动zsh
shell工具,可选的还有bashdhcpcd
与iwd
皆为网络工具,前文已提及使用方式nano
文本编辑器,比vi/vim系简单很多vim
文本编辑器,有些地方会用到neofetch
查看系统信息
对于九代及之后的酷睿处理器也可以安装intel-media-driver
来启用硬件视频加速。若使用的是AMD处理器则可将intel-ucode
更换为amd-ucode
,vulkan-intel
更换为vulkan-radeon
,其余可不用改动。
安装完成后便可生成分区表fstab
:
genfstab -U /mnt >> /mnt/etc/fstab
生成分区表后即可进入安装的系统:
arch-chroot /mnt
配置系统
时区、区域与主机设置
设置时区并将硬件时钟调整为与目前的系统时钟一致,在此仅作为单系统安装,Windows+Arch Linux双系统互相抢时间的情况均不考虑。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
使用nano编辑/etc/locale.gen
,取消注释en_US.UTF-8
和zh_CN.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
找到MODULES
那一行,在括号里的最后添加一个btrfs
,括号里会有其他东西,不要删减。
MODULES = ( btrfs )
添加完成后顺便在HOOKS
那一行括号里的最后添加一个resume
,用于休眠,后面将会提到。
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
不出意外即可顺利完成配置。
完成后再配置休眠,使用nano编辑/etc/default/grub
并找到GRUB_CMDLINE_LINUX_DEFAULT
并在引号内最后添加resume
字段:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet resume=UUID=2af5c358-dde7-4fcd-895e-8193ca4cace8"
resume后面的UUID就是swap分区的UUID,可以通过blkid
命令得知。
配置完成后重新生成grub配置文件:
grub-mkconfig -o /boot/grub/grub.cfg
进入新系统后即可通过hibernate
命令休眠:
systemctl hibernate
按下电源键便会恢复。
安装完成之前的收尾
最后还需一些细微配置:
systemctl enable iwd
systemctl enable dhcpcd
systemctl enable sshd
pacman -S sway kitty swaybg wayland wlroots seatd
systemctl enable seatd
添加用户并将用户加入wheel与seatd组,这里作为演示用Name,实际可自定义其他用户名:
useradd -m -G wheel,seatd -s /bin/zsh Name
为刚创建的用户设置密码:
passwd Name
设置root权限,进入文件后取消注释%wheel ALL=(ALL) ALL
:
EDITOR=nano visudo
全部设置完成后千万不要忘了:
passwd
这个命令是为root用户设置的密码,和前面提到的用户密码不同,Linux系统中普遍会存在一个默认的root用户,日常使用时应创建相应的普通用户来保证一定程度的权限安全。
到这里安装基本已经完成,可以退出重启进入新系统了:
exit
umount -R /mnt
reboot now
启动之后输入用户名和密码进入系统即可正常使用乌漆麻黑的TTY界面了。前面所安装的sway就是窗口管理器,类似众多Linux发行版中常见的Gnome、KDE等桌面环境中所包含的Mutter、KWin组件。因此sway并不算是一个完整的桌面环境,这样的好处在于轻便简洁容易配置。
成功登入系统后执行sway即可进入图形界面,在还未配置时显示效果可能会比较差。若需要锁屏功能也可以安装swaylock
。
这里是我的简陋配置:https://github.com/khitezza/dotfiles