一篇详尽的 Arch Linux 安装指南以及安装过程的踩坑记录。
前言#
自从 3 月份从 Arch 换到 Fedora 系统之后,刚开始感觉还不错,因为大部分东西都已经帮你搞定了,自己只要会用就可以了,但是用的久了,感觉 Fedora 的软件包管理器真心不如 Arch 的 pacman 好用,有些中文软件在仓库中根本找不到,自己配置起来很麻烦,但是如果用 Arch 的话,构建起来就很简单了,所以最终还是决定重新拥抱 Arch。 刚一开始我还准备按照我之前总结的安装记录进行安装,毕竟当时记录的还是很详细的,但是没想到刚进入 Live 系统就碰到了一个难题:wifi-menu命令不存在! ! EXCUSE ME?? 我明明验证过镜像完整性的,没问题啊,这是怎么回事?还好,机智的我知道这里面有问题,查阅了一点资料之后就发现(这里不得不吹一波 Arch 的用户社区,真心给力,盲猜是最活跃的 Linux 发行版社区)原来是官方弃用了,改用iwd+systemd-networkd来管理网络了,莫得办法,那就换吧,查了查 iwd 的基本命令使用,发现还挺简单的,一次配置,永久使用,比wifi-menu用起来要流畅许多!
archlinux 的 iso 镜像文件自 2020.06.01 开始改了很多东西,大概就这几个方面:
- archiso 默认的 shell 是 zsh,不再是 bash 了。
- archlinux 摒弃了之前的
wifi-menu,改为使用 iwd 来管理网络。 - 对于镜像源的管理,采用 reflector 进行管理,终于不用去手动更改镜像源的位置了,使用 reflector 一条命令就搞定了。
必需条件#
- 一台可以使用的电脑
- 一个 4G 以上内存的 USB 存储器
- 一个可以查看本文的电子设备:)
制作 USB 启动盘#
- 首先在这里找一个延迟低的官方镜像站下载 ArchLinux 的 iso 镜像,我下载的是最新版本,参数如下:
- Current Release: 2020.07.01
- Included Kernel: 5.7.6
- ISO Size: 647.0 MB
在镜像站下载 PGP 签名,然后使用
gpg验证签名确保镜像完整性以及安全性,命令如下:gpg --keyserver-options auto-key-retrieve --verify archlinux-version-x86_64.iso.sig然后使用磁盘烧录工具将镜像写入你的 USB 存储器。 Linux 系统建议使用
dd这个神器。 Windows 系统的话,建议使用开源软件rufus,最好不要使用那个 UltralISO,很容易出问题。
开始安装#
验证启动模式#
进入 Live 环境然后验证你的机器的启动模式是 UEFI 还是 BIOS 模式,以下方式二选一:
# 有输出说明是 UEFI 模式
ls /sys/firmware/efi/efivars
# 输出 64/32 说明是对应的 UEFI 模式,否则是 BIOS 模式
cat /sys/firmware/efi/fw_platform_size
连接网络#
前面已经说过了,Archiso 的默认的无线网络管理改为 iwd 了,所以这里就讲一下如何使用 iwd 连接 wifi,如果想深入了解一下iwd,可以参考我写的另一篇文章
Blog post
iwd 的使用教程
- 在终端中输入
iwctl进入 iwd 提示符:
[root@archiso~] iwctl
[iwd#]
- 在
[iwd#]中输入device list查询机器的网卡设备。 - 使用以下命令查询附近可用的 wifi 网络:
[iwd#] station <devicename> scan
[iwd#] station <devicename> get-networks # 显示扫描的结果
- 在提示符中输入
station <devicename> connect <wifi-ssid>连接 wifi 网络,如果 wifi 加密,会提示你输入密码
更新系统时间#
使用timedatectl命令来确保时间是同步的:
timedatectl set-ntp true
timedatectl status # 确保设置成功
磁盘分区#
首先使用lsblk或者其他磁盘工具(例如fdisk)查看磁盘设备:
lsblk
// or
fdisk -l
然后使用fdisk或者cfdisk创建磁盘分区,这里有一点要注意的是,在创建分区的时候, 必需要确保有一个 root 分区/ ,此外,对于 UEFI 模式的设备还需要一个额外的 EFI 系统分区,我的分区方式如下:
| 挂载点 | 分区类型 | 大小 |
|---|---|---|
| /mnt/boot | EFI system partition | 1G |
| /mnt | Linux x86-64 root | 32G |
| swap | Linux swap | 16G |
| /home | Linux home | Remainder of the device |
无论是fdisk还是cfdisk,用起来都很简单,所以这里不再具体介绍了,想要具体了解的可以查阅fdisk 官方文档、cfdisk 官方文档。对于新人小白,个人推荐cfdisk,有一个伪图形界面,很容易上手。
格式化分区#
按照上面的步骤建立好分区之后,我们需要将每个分区用对应的文件系统进行格式化。
我的分区名称对应的挂载点
| 挂载点 | 分区名称 |
|---|---|
| /mnt/boot | /dev/sda1 |
| /mnt | /dev/sda2 |
| swap | /dev/sda3 |
| /home | /dev/sda4 |
对于 root 分区、home 分区等直接使用ext4文件系统进行初始化:
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda4
如果你的机器是 UEFI 启动模式,使用以下命令初始化 EFI 系统分区:
mkfs.fat -F32 /dev/sda1
对于交换分区,不能使用上述命令进行格式化,而需要使用mkswap将其初始化:
mkswap /dev/sda3
挂载分区#
首先挂载root分区:
mount /dev/sda2 /mnt
对于其他分区(swap 分区除外,不需要),需要自己手动创建挂载点:
mount --mkdir /dev/sda1 /mnt/boot
mount --mkdir /dev/sda4 /mnt/home
挂载交换分区:
swapon /dev/sda3
选择镜像源#
文件/etc/sudo pacman.d/mirrorlist定义了软件包会从哪个镜像源下载。在 Live 启动的系统上,所有的镜像都被启用。 在列表中越前的镜像在下载软件包时有越高的优先权。你可以相应的修改文件/etc/sudo pacman.d/mirrorlist,并将地理位置最近的镜像源挪到文件的头部来保证下载速度。而且这个文件接下来还会被 pacstrap 拷贝到新系统里,在这里设置好之后就可以一劳永逸了。
手动修改文件或者可以使用 reflector,执行下面的命令会自动修改 mirrorlist:
reflector -c cn -p https --ipv4 -l 5 --save /etc/sudo pacman.d/mirrorlist
NOTE
感觉这一步其实现在可以省略了,因为现在在 live 环境中使用reflector进行镜像的管理,貌似你一连接网络,live 系统会自动执行 reflector 命令来帮你选择镜像源,默认的是根据下载速率进行排序,感兴趣的小伙伴可以自己确认一下(连接网络之前备份一下/etc/sudo pacman.d/mirrorlist文件,然后连接网络之后,使用diff对比前后两个文件的差异)。
安装必需软件包#
使用 archiso 内置的脚本pacstrap安装一些基本的软件包、内核及常规的硬件固件:
pacstrap /mnt base linux linux-firmware base-devel
这里要注意的是,上面的命令并不包括所有的基本程序,如网络管理程序、文本编辑器等,如果你想安装这些程序,可以将名字添加到
pacstrap后,并用空格隔开。你也可以在 Chroot 进新系统后使用pacman手动安装软件包或组。
配置系统#
生成 fstab 文件#
用以下命令生成fstab文件,其中-U选项用来设置 UUID:
genfstab -U /mnt >> /mnt/etc/fstab
然后使用cat /mnt/etc/fstab命令检查以下文件是否正确(每个分区占一行,查看是否包含所有分区)
进入到安装的系统#
arch-chroot /mnt
安装文本编辑器#
现在的新系统连默认的文本编辑器nano都没有了,所以需要自己手动安装一个,不然后面的一些配置无法实现,所以我选择最强的vim:
pacman -S vim
时区#
使用下面的命令设置时区:
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
然后使用hwclock生成/etc/adjtime文件:
hwclock --systohc
本地化设置#
本地化的程序与库若要本地化文本,都依赖Locale,后者明确规定地域、货币、时区日期的格式、字符排列方式和其他本地化标准等等。在下面两个文件设置:
locale.gen与locale.conf。
- 首先编辑
/etc/locale.gen文件,然后将需要的地区的注释移除,建议将en_US UTF-8和zh_CN UTF-8都取消注释。 - 执行
locale-gen命令生成 locale。 - 创建
locale.conf文件并编辑LANG这一变量(将系统 locale 设置为en_US.UTF-8,系统的Log就会用英文显示,这样更容易问题的判断和处理。):
LANG=en_US.UTF-8
这里最好不要设置为中文 locale,会导致 TTY 乱码
网络设置#
- 创建
/etc/hostname文件设置主机名 - 配置
/etc/hosts文件,将以下内容添加进去:
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname
note: 如果系统有一个永久的 IP 地址,请使用这个永久的 IP 地址而不是 127.0.1.1。
设置 root 密码#
使用passwd命令设置 root 密码即可。
这里不得不说一句,使用 arch 是真的让人舒服的一批,不会出现一些令人无语的问题,我还记得第一次使用 linux 的时候,用的是 fedora,当时想要使用su进入 root,但是发现需要密码,但是我不记得安装的时候设置过 root 密码啊,后来查阅了一些资料才发现,fedora 并没有设置 root 密码,需要自己手动设置(使用sudo passwd root)。
安装及配置引导程序#
IMPORTANT
安装引导程序之后才能进入系统
微码更新#
安装 GRUB之前建议安装对应 CPU 的 ucode,例如我的是 amd 的 CPU,所以安装的是:
pacman -S amd-ucode
# 如果是 Intel 的 CPU
pacman -S intel-ucode
这样在下面生成 GRUB 的配置文件的时候,会包含进去这部分。
GRUB 引导程序#
我用的引导程序是GRUB,首先安装必要的软件包:
pacman -S grub efibootmgr
这里详细介绍一下 UEFI 系统如何安装配置 GRUB:
- 首先使用以下命令安装到系统:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ArchLinux
note: 因为我的 EFI 分区在/boot目录下,所以上述命令的--efi-directory参数就设置为/boot
- 使用
grub-mkconfig生成 grub 配置文件:
grub-mkconfig -o /boot/grub/grub.cfg
安装 wifi 网络管理工具#
推荐使用iwd,命令简单方便又强大:
pacman -S iwd
重启#
- 输入
exit或按Ctrl+d退出chroot环境 - 用
umount -R /mnt手动卸载被挂载的分区 - 执行
reboot重启系统
再配置新系统#
因为还没有设置普通用户,所以重启后需要使用
root来进入新系统
添加普通用户#
- 使用以下命令添加一个用户
useradd -m -G "附加组" -s "登陆 shell" "用户名"
其中:
-m/--create-home:创建用户主目录/home/[用户名]-G/--groups:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始同名组。-s/--shell:用户默认登录 shell 的路径
- 赋予用户 root 权限
- 安装 sudo 软件包:
sudo pacman -S sudo - 在
/etc/sudoers文件中的root ALL=(ALL) ALL行下添加yourname ALL=(ALL) ALL,如果是多用户,可以加入wheel组,赋予该组成员sudo权限:%wheel ALL=(ALL) ALL
配置网络#
如果你没有安装 wifi 网络管理工具,或者你安装的工具需要 gui 支持,那么恭喜你,你的系统还是无法联网,恭喜你可以重新体验一次完整的 archlinux 安装流程:),则需要重新 USB 进入安装系统,arch-chroot新系统然后安装一个 Wi-Fi 网络管理工具。
如果你按照我上面写的安装了 wifi 工具iwd,那么你还需要做一些额外的工作才能正常使用它:
- 启动 iwd 服务,为了以后的使用,建议直接设置为开机自启动,详细方法可以参考systemd
systemctl start iwd.service # 启动服务
systemctl enable iwd.service # 开机自启动服务
- 因为
iwd默认使用的是系统的 DHCP 和 DNS 服务器,所以你还需要启动systemd-networkd.service和systemd-resolved.service才行,因为新系统默认不会自启动这两个服务,需要你手动开启。当然,你也可以使用iwd内置的 DHCP 服务器,开启方法可以参考我之前写的一篇文章。
到这里你才能正常使用iwd这个工具,具体使用方法可以参考前文网络设置部分
安装显示服务器#
因为个人比较喜欢 i3,所以我安装的是 xorg,你也可以选择新的显示协议wayland。 使用下面的命令安装开源的 xorg
# 安装所有 xorg 相关包
sudo pacman -S xorg
# 以下命令可以只安装必要的 xorg 包,可以避免不必要的包的安装,
sudo pacman -S xorg-server
# 但是有些可能其他功能需要的包会缺失,导致功能不完善
# 所以如果你不太理解这其中的关系,建议除了 xorg-server 之外,也安装 xorg-apps 包组
sudo pacman -S xorg-server xorg-apps
安装显卡驱动#
我的机器使用的是 ASUS 的 AMD 显卡6700XT-TUF。
对于 AMD 显卡,安装开源的 amdgpu 驱动:
sudo pacman -S xf86-video-amdgpu
p.s. AMD 的显卡驱动有点问题,会导致系统不稳定黑屏/卡死/卡顿等问题,所以可能需要一些额外的配置,这部分我会单独写出来
对于 NVIDIA 显卡,安装开源驱动nouveau即可:
sudo pacman -S mesa xf86-video-nouveau
安装桌面环境#
前面说了,我比较喜欢 i3,所以我通常不会安装类似 gnome,kde 这种集成的桌面环境。
安装窗口管理器#
安装 i3-wm 包组:
sudo pacman -S i3-wm
# 推荐安装 i3lock,可以很方便的集成锁屏功能
sudo pacman -S i3lock
TODO:配置
安装显示管理器#
WARNING
如果使用 wayland 协议的管理器,推荐安装sddm
由于只安装了一个窗口管理器 i3,并不包含显示管理器(DM),所以还需要自己选择一个 DM 进行安装,我选择的是lightdm:
- 安装 lightdm 和 greeter:
sudo pacman -S lightdm
# 安装默认的 greeter
sudo pacman -S lightdm-gtk-greeter
- 设置为开机自启动:
systemctl enable lightdm.service
TIP
如果你安装的不是lightdm-gtk-greeter,还需要额外的配置,编辑/etc/lightdm/lightdm.conf设置默认的 greeter:
[Seat:*]
...
greeter-session=<lightdm-greeter-name>
...
个性化系统#
TIP
如果你使用的是 i3,第一次登录进入 gui 之后,会提示你初始化一个配置,选择 mod 键(一路回车 mod 是 win 键)。打开命令行的默认快捷键是$mod + return。
快捷键/自启动的配置都是基于i3的配置。
安装 AUR 助手#
因为有一些软件包并没有收录进官方的仓库里,所以为了安装方便,最好安装一个 AUR 助手,推荐paru,rust 语言写的,用起来很方便,性能也很好。
#首先安装一些构建软件必需的包
sudo pacman -S --needed base-devel
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si
之后,就可以使用paru来安装一些非官方的包了,命令行参数和官方的pacman基本一致。
安装中文输入法#
archlinux 中文输入法框架有fcitx/ibus/fcitx5,其中fcitx5貌似是刚刚出现的,之前没见过,所以我就试了试,安装配置起来还挺简单的:
- 安装
fcitx5软件包 - 创建
~/.pam_environment并配置环境变量:
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
安装中文输入法引擎fcitx5-rime
sudo pacman -S fcitx5-rime
安装雾凇拼音词库(optional),该词库并没有在官方仓库,需要在 AUR 仓库安装:
paru -S rime-ice-git
安装浏览器#
sudo pacman -S firefox
note: 安装 Firefox 浏览器的时候会让你选择一种字体以及 jack 音频连接套件,我选择的是ttf-dejavu和pipewire-jack(选这个是因为我的音频配置是基于pipewire的)。
安装 Terminal#
i3 默认的是xterm,功能简单,外观一般,推荐alacritty或者kitty,还有一个wezterm,和alacirtty一样都是 rust 的,性能方面没的说,配置用的 lua,不过我用习惯了alacritty懒得换了。
sudo pacman -S alacritty
安装字体#
# 英文字体
sudo pacman -S ttf-dejavu ttf-ibm-plex ttf-roboto ttf-fira-code ttf-fira-sans
# 中文字体
sudo pacman -S noto-fonts-cjk
# 表情符号
sudo pacman -S noto-fonts-emoji ttf-joypixels
编程字体推荐: 手动安装,在这个网站里选择自己喜欢的nerdfonts下载下来,放入~/.local/share/fonts/目录下,个人比较喜欢FiraCode,Hack,Jetbrains系列。
Vercel新开源的字体也很不错,推荐使用,在这里下载。
安装 zsh#
安装一个好看而且功能强大的 shell 很有必要,比如说 zsh。配置 zsh 的话,我推荐使用oh my zsh这个框架个性化 zsh,配置 zsh 起来简单方便。
- 安装 zsh
- 使用 curl 安装 ohmyzsh,这个脚本还可以帮你自动更改默认的 shell
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
p.s. 手动更换默认 shell 的方法:sudo chsh -s /usr/bin/zsh <username>
自定义配置 zsh,推荐使用Oh My Zsh框架,简单易上手,具体可以参考 ohmyzsh 的官方 wiki。
安装文件管理器#
我个人比较喜欢thunar(XFCE 的内置文件管理器,很轻便,功能也很强大,支持分屏,F3是分屏快捷键)。
sudo pacman -S thunar
配置相关特性#
thunar 还有两个推荐安装的 feature 插件thunar-archive-plugin和thunar-volman,分别用来处理压缩包和硬盘分区。
sudo pacman -S thunar-archive-plugin thunar-volman
安装压缩插件还需要一些压缩/解压缩工具:
sudo pacman -S zip p7zip unzip
推荐安装一个图形化压缩工具,用来文件管理器的右键菜单,推荐xarchiver,gnome 的file-roller,二选一即可:
sudo pacman -S xarchiver file-roller
自动检测及挂载设备功能:
sudo pacman -S gvfs
缩略图功能:
sudo pacman -S tumbler
程序启动器 rofi#
相比于i3默认的dmenu,更美观的程序启动器,高度自定义
sudo pacman -S rofi
修改i3配置文件,添加快捷键:
bindsym $mod+d exec rofi -show drun
状态栏 polybar#
窗口状态栏,比 i3 内置的功能更强大,自定义化程度超高。
sudo pacman -S polybar
加入 i3 自启动
exec_always --no-startup-id polybar barname
复制示例模板:
sudo cp /etc/polybar/config.ini ~/.config/polybar/config.ini
然后基于模板自定义,具体可以参考官方 wiki 页面。
安装截图工具#
推荐flameshot,操作简单且功能强大。
sudo pacman -S flameshot
配置快捷键:
bindsym $mod+Shift+x exec flameshot gui
默认显示系统托盘图标(与 polybar 无痛衔接)
配置音频#
使用pipewire框架,安装相关包:
sudo pacman -S pipewire pipewire-audio pipewire-pulse pipewire-alsa pipewire-jack
其中蓝牙相关的功能在pipewire-audio中。
会话管理器和 GUI 工具:
sudo pacman -S wireplumer helvum
pulse 音频管理器:
sudo pacman -S pavucontrol
系统主题#
WhiteSur系列主题,包含鼠标/图标/GTK 主题。
可以在 GitHub 下载/freedesktop.org 下载
手动下载并放入对应路径下:
| 主题 | 路径 |
|---|---|
| 鼠标 | ~/.icons |
| GTK | ~/.themes |
| 图标 | ~/.icons |