Arch Linux 个人安装指南
这是一份个人指南,所以如果你迷失了并且只是从某处找到了这份指南,我建议你阅读官方的wiki! 本指南将专注于systemd-boot
,UEFI
以及如果你想用LUKS/LVM
加密你的分区的指南。这份指南的存在是为了在重新安装Archlinux
时让我记住一堆事情。
安装前准备
在安装前,请确保:
设置键盘布局
默认的控制台映射是美式键盘。可用的布局可以通过以下命令列出:
# ls /usr/share/kbd/keymaps/**/*.map.gz
要修改布局,将相应的文件名附加到 loadkeys,省略路径和文件扩展名。例如,要设置美式键盘布局:
# loadkeys us
验证启动模式
如果在 UEFI 主板上启用 UEFI 模式,Archiso 将通过 systemd-boot 相应地启动 Arch Linux。要验证这一点,请列出 efivars 目录:
# ls /sys/firmware/efi/efivars
如果该命令显示目录且无错误,则系统是以 UEFI 模式启动的。如果该目录不存在,系统可能以 BIOS (或 CSM) 模式启动。
连接互联网
我们需要确保连接到互联网才能安装 Arch Linux 的base
和linux
包。让我们来看一下我们的接口名称。
# ip link
你应该会看到如下内容:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff permaddr 00:00:00:00:00:00
enp0s0
是有线接口wlan0
是无线接口
有线连接
如果你使用有线连接,可以通过 systemctl start dhcpcd@<interface>
启用你的有线接口。
# systemctl start dhcpcd@enp0s0
无线连接
如果你使用笔记本电脑,可以使用 iwctl
命令从 iwd
连接到无线接入点。注意,这已经默认启用了。还要确保无线网卡没有被 rfkill
禁用。
扫描网络。
# iwctl station wlan0 scan
获取扫描到的网络列表:
# iwctl station wlan0 get-networks
连接到你的网络。
# iwctl -P "PASSPHRASE" station wlan0 connect "NETWORKNAME"
Ping archlinux 网站以确保我们联网:
# ping archlinux.org
如果你收到 Unknown host 或 Destination host unreachable 响应,则说明你尚未联网。检查你的网络配置并重新执行上述步骤。
更新系统时钟
使用 timedatectl
确保系统时钟准
# timedatectl set-ntp true
要检查服务状态,使用 timedatectl status
。
分区磁盘
在 live 系统识别后,磁盘会被分配到块设备,如 /dev/sda
,/dev/nvme0n1
或 /dev/mmcblk0
。要识别这些设备,可以使用 lsblk 或 fdisk。最常见的主驱动器是 sda。
# lsblk
结果中以 rom
、loop
或 airoot
结尾的可以忽略。
在本指南中,我将创建两种不同的方式来分区驱动器。一种是普通安装,另一种是使用加密(LUKS/LVM)设置。我们先从未加密的开始:
未加密的文件系统
-
让我们清理我们的主驱动器,为我们的安装创建新的分区。是的,在本指南中,我们将使用
/dev/sda
作为我们的磁盘。# gdisk /dev/sda
-
按x进入专家模式。然后按z来清空我们的驱动器。当被问及是否擦除 GPT 和清除 MBR 时,按y。请注意,这将会清空你的整个驱动器,所以你的数据将会消失——执行此操作后将被分解为原子。这无法撤销。
-
打开
cgdisk
开始分区我们的文件系统# cgdisk /dev/sda
-
当警告 GPT 损坏时,按Return。
现在我们应该看到我们的主驱动器显示分区号、分区大小、分区类型和分区名称。如果你看到分区列表,先删除所有这些。
-
创建
boot
分区- 从下方选项中点击 New。
- 按 enter 选择第一个扇区的默认选项。
- 现在分区大小——Arch wiki 建议为 boot + 大小分配 200-300 MB。让我们分配 1GiB 以防我们需要在机器上添加更多操作系统。我会分配 1024MiB。按 enter。
- 将 GUID 设置为
EF00
。按 enter。 - 将名称设置为
boot
。按 enter。 - 现在你应该在分区列表中看到一个类型为 EFI System 并名称为 boot 的新分区。你还会注意到在创建的分区上方有 1007KB。这是 MBR。不要担心它,留在那里。
-
创建
root
分区- 再次点击 New。
- 按 enter 选择第一个扇区的默认选项。
- 再次按 enter 输入你的根分区大小。
- 也按 enter 选择默认的 GUID (
8300
)。 - 然后将分区名称设置为
root
。
-
创建
home
分区- 再次点击 New。
- 按 enter 选择第一个扇区的默认选项。
- 再次按 enter 使用剩余的磁盘空间。
- 也按 enter 选择默认的 GUID。
- 然后将分区名称设置为
home
。
-
最后,点击分区列表底部的
Write
来写入更改到磁盘。输入yes
确认写入命令。现在我们完成了磁盘分区。点击Quit
退出 cgdisk。进入下一节.
使用 LUKS/LVM
的加密文件系统
-
让我们清理我们的主驱动器,为我们的安装创建新的分区。是的,在本指南中,我们将使用
/dev/sda
作为我们的磁盘。# gdisk /dev/sda
-
按x进入专家模式。然后按z来清空我们的驱动器。当被问及是否擦除 GPT 和清除 MBR 时,按y。请注意,这将会清空你的整个驱动器,所以你的数据将会消失——执行此操作后将被分解为原子。这无法撤销。
-
运行
cgdisk /dev/sda
创建我们的分区# cgdisk /dev/sda
-
当警告 GPT 损坏时,只需按Return。
现在我们应该看到我们的主驱动器显示分区号、分区大小、分区类型和分区名称。如果你看到分区列表,先删除所有这些。
-
创建
boot
分区- 从下方选项中点击 New。
- 按 enter 选择第一个扇区的默认选项。
- 现在分区大小——Arch wiki 建议为 boot + 大小分配 200-300 MB。让我们分配 1GiB 以防我们需要在机器上添加更多操作系统。我会分配 1024MiB。按 enter。
- 将 GUID 设置为
EF00
。按 enter。 - 将名称设置为
boot
。按 enter。 - 现在你应该在分区列表中看到一个类型为 EFI System 并名称为 boot 的新分区。
-
创建
LVM
分区- 再次点击 New。
- 按 enter 选择第一个扇区的默认选项。
- 再次按 enter 使用剩余的磁盘空间。
- 将 GUID 设置为
8e00
。按 enter。 - 将名称设置为
lvm
。按 enter。
-
最后,点击分区列表底部的
Write
来写入更改到磁盘。输入yes
确认写入命令。现在我们完成了磁盘分区。点击Quit
退出 cgdisk。进入下一节。
验证分区
再次使用 lsblk
检查我们创建的分区。“我们?”我以为我是在为自己写这份指南 lol
# lsblk
你应该看到类似这样的东西:
未加密的文件系统
名称 | MAJ:MIN | RM | 大小 | RO | 类型 | 挂载点 |
---|---|---|---|---|---|---|
sda | 8:0 | 0 | 477G | 0 | ||
sda1 | 8:1 | 0 | 1 | 0 | 分区 | |
sda2 | 8:2 | 0 | 1 | 0 | 分区 | |
sda3 | 8:3 | 0 | 175G | 0 | 分区 |
sda
是主磁盘
sda1
是启动分区
sda2
是交换分区
sda3
是 home 分区
加密文件系统
名称 | MAJ:MIN | RM | 大小 | RO | 类型 | 挂载点 |
---|---|---|---|---|---|---|
sda | 8:0 | 0 | 477G | 0 | 磁盘 | |
sda1 | 8:1 | 0 | 1 | 0 | 分区 | |
sda2 | 8:2 | 0 | 1 | 0 | 分区 | |
sda 是主硬盘 | ||||||
sda1 是启动分区 | ||||||
sda2 是LVM分区 |
惊喜!惊喜! 我们不会加密 /boot
分区。
格式化分区
未加密的文件系统
-
将
/dev/sda1
分区格式化为FAT32
。这将是我们的/boot
分区。# mkfs.fat -F32 /dev/sda1
-
将
/dev/sda3
和/dev/sda4
分区格式化为EXT4
。这将是我们的根
和home
分区。# mkfs.ext4 /dev/sda3 # mkfs.ext4 /dev/sda4
加密的文件系统
-
将
/dev/sda1
分区格式化为FAT32
。这将是我们的/boot
分区。# mkfs.fat -F32 /dev/sda1
-
创建 LUKS 加密容器。
# cryptsetup luksFormat /dev/sda2
-
输入您的密码两次。不要忘记这个密码!
-
打开创建的容器,并命名为您想要的名称。在本指南中,我将其命名为
cryptlvm
。# cryptsetup open --type luks /dev/sda2 cryptlvm
-
输入并确认您的密码。
-
解密后的容器现在可以在
/dev/mapper/cryptlvm
中找到。 -
在打开的 LUKS 容器上创建一个物理卷:
# pvcreate /dev/mapper/cryptlvm
-
创建卷组并命名为
volume
(或随您喜欢),将前面创建的物理卷添加到其中:在本指南中,我将卷组名称命名为
volume
。# vgcreate volume /dev/mapper/cryptlvm
-
在卷组上创建您需要的所有逻辑卷。我们将创建
root
和home
逻辑卷。 请注意,volume
是我们刚刚创建的卷名称。-
创建我们的
root
。在本指南中,我将使用 100GB。# lvcreate -L 100G volume -n root
这将创建
/dev/mapper/volume-root
。 -
创建我们的 "sweet"
home
。我将剩余空间全部分配给它。# lvcreate -l 100%FREE volume -n home
这将创建
/dev/mapper/volume-home
。 -
-
在 LVM 卷下格式化逻辑分区。
-
格式化我们的
root
和home
分区。# mkfs.ext4 /dev/mapper/volume-root # mkfs.ext4 /dev/mapper/volume-home
-
挂载文件系统
未加密的分区
-
挂载
/dev/sda
分区到/mnt
。这是我们的/
:# mount /dev/sda3 /mnt
-
创建一个
/boot
挂载点:# mkdir /mnt/boot
-
挂载
/dev/sda
到/mnt/boot
分区。这将是我们的/boot
:# mount /dev/sda1 /mnt/boot
-
创建一个
/home
挂载点:# mkdir /mnt/home
-
挂载
/dev/sda4
到/mnt/home
分区。这将是我们的/home
:# mount /dev/sda1 /mnt/home
加密的分区
-
挂载
/dev/mapper/volume-root
分区到/mnt
。这是我们的/
:# mount /dev/mapper/volume-root /mnt
-
创建一个
/boot
挂载点:# mkdir /mnt/boot
-
挂载
/dev/sda1
到/mnt/boot
分区。这将是我们的/boot
:# mount /dev/sda1 /mnt/boot
-
创建一个
/home
挂载点:# mkdir /mnt/home
-
挂载
/dev/mapper/volume-home
到/mnt/home
分区。这将是我们的/home
:# mount /dev/mapper/volume-home /mnt/home
我们不需要挂载
swap
,因为它已经启用了。
安装
现在让我们继续安装 base
、linux
、linux-firmware
和 base-devel
包到我们的系统中。
# pacstrap /mnt base base-devel linux linux-zen linux-firmware
我将安装 linux-zen
,因为它有必要的模块用于游戏。
base
包不包括所有的实时安装工具,因此可能需要安装其他包以获得一个功能齐全的基础系统。特别是,考虑安装:
-
网络所需的软件,
dhcpcd
: RFC2131 兼容的 DHCP 客户端守护程序iwd
: 网络无线守护程序inetutils
: 一组常见的网络程序iputils
: 包括ping
在内的网络监控工具
-
访问
RAID
或LVM
分区的实用程序,lvm2
: 逻辑卷管理器 2 实用工具(如果您正在设置带有 LUKS/LVM 的加密文件系统,请包括在 pacstrap 中)
-
Zram
zram-generator
-
文本编辑器,
nano
vim
vi
-
用于访问
man
和info
页面文档的包,man-db
man-pages
-
微码
intel-ucode
/amd-ucode
-
工具:
git
: 快速分布式版本控制系统tmux
: 终端多路复用器less
: 用于查看文本文件的终端程序usbutils
: USB 设备工具bash-completion
: 为 bash shell 提供的可编程补全
-
管理系统上将要使用的文件系统的用户空间实用工具,
ntfs-3g
: NTFS 文件系统驱动程序和实用工具unrar
: RAR 解压程序unzip
: 用于提取和查看.zip
压缩文件p7zip
: 高压缩比的命令行文件归档程序unarchiver
:unar
和lsar
: 用于解压缩归档文件的 Objective-C 工具gvfs-mtp
:GIO
的虚拟文件系统实现(MTP
后端;Android,媒体播放器)libmtp
: 媒体传输协议的库实现android-udev
: Udev 规则,用于将 Android 设备连接到您的 Linux 机箱mtpfs
: 支持从任何 MTP 设备读取和写入的 FUSE 文件系统xdg-user-dirs
: 管理用户目录,如~/Desktop
和~/Music
这些工具将来会派上用场。所以未来的我,安装这些。
生成 fstab
# genfstab -U /mnt >> /mnt/etc/fstab
检查生成的 /mnt/etc/fstab
文件,并在有错误时进行编辑。
Chroot
现在,切换根目录到新安装的系统中
# arch-chroot /mnt /bin/bash
时区
在 /usr/share/zoneinfo/
下可以找到时区的选择。由于我在菲律宾,我将使用 /usr/share/zoneinfo/Asia/Manila
。选择适合您国家的时区:
# ln -sf /usr/share/zoneinfo/Asia/Manila /etc/localtime
运行 hwclock
生成 /etc/adjtime
:
# hwclock --systohc
此命令假定硬件时钟设置为 UTC。
本地化
locale
定义系统使用的语言,以及其他区域考虑,如货币单位、数字和字符集。可能的值列在 /etc/locale.gen
中。取消注释 en_US.UTF-8
以及其他所需的本地化。
取消注释 /etc/locale.gen
中的 en_US.UTF-8 UTF-8
和其他所需的区域设置,保存,然后生成它们:
# locale-gen
创建 locale.conf
文件,并相应地设置 LANG 变量:
# locale > /etc/locale.conf
如果您之前设置了键盘布局,请在 vconsole.conf
中使更改永久生效:
# echo "KEYMAP=us" > /etc/vconsole.conf
不使用 us
布局?替换它,愚蠢的家伙。
网络配置
创建主机名文件。在本指南中,我将主机名命名为 MYHOSTNAME
。主机名是主机的名称。在非洲每隔 60 秒钟,一分钟就过去了。
# echo "MYHOSTNAME" > /etc/hostname
打开 /etc/hosts
以添加与 hosts
匹配的条目:
127.0.0.1 localhost
::1 localhost
127.0.1.1 MYHOSTNAME.localdomain MYHOSTNAME
如果系统有一个永久的IP地址,应该使用它而不是 127.0.1.1
。
Initramfs
通常不需要创建新的 initramfs,因为在安装内核包时,mkinitcpio 已经运行。这非常重要,如果您在设置带有加密的系统!
未加密的文件系统
```
# mkinitcpio -P
```
在重新启动系统之前,请勿忘记运行此命令!
带有 LVM/LUKS 的加密文件系统
-
使用编辑器打开
/etc/mkinitcpio.conf
: -
在本指南中,有两种方式来设置 initramfs,
udev
(默认)和systemd
。如果您计划使用plymouth
(启动画面),建议使用基于systemd
的 initramfs。-
基于 udev 的 initramfs(默认)。
找到
HOOKS
数组,然后将其更改为如下:HOOKS=(base udev autodetect keyboard modconf block encrypt lvm2 filesystems fsck)
-
基于 systemd 的 initramfs。
找到
HOOKS
数组,然后将其更改为如下:HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck)
-
重新生成 initramfs 镜像:
# mkinitcpio -P
在重新启动系统之前,请勿忘记运行此命令!
-
创建交换文件和 ZSwap
现在开始创建交换文件!我将创建两个千兆字节的交换文件。
# dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
设置正确的权限
# chmod 0600 /swapfile
在创建正确大小的文件后,将其格式化为交换分区:
# mkswap -U clear /swapfile
激活交换文件
# swapon /swapfile
最后,编辑 fstab 配置以在 /etc/fstab
中添加交换文件的条目:
/swapfile none swap defaults,pri=10 0 0
安装 zram-generator:
# pacman -S zram-generator
让我们在 /etc/systemd/zram-generator.conf
中创建一个配置文件! 我更喜欢将一半的总 RAM 用作 zswap 大小。我的笔记本电脑有 4 个核心,所以我将其分配给四个 zram 设备。因此,我会使用这个配置:
[zram0]
zram-size = ram/8
compression-algorithm = zstd
swap-priority = 100
[zram1]
zram-size = ram/8
compression-algorithm = zstd
swap-priority = 100
[zram2]
zram-size = ram/8
compression-algorithm = zstd
swap-priority = 100
[zram3]
zram-size = ram/8
compression-algorithm = zstd
swap-priority = 100
无需启用/启动任何东西,它会自动初始化 zram 设备! 只需重启并运行 swapon -s
检查你的交换分区。
添加库 - multilib
和 AUR
在 /etc/pacman.conf
中启用 multilib 和 AUR 库。用你喜欢的编辑器打开它:
添加 multilib 库
取消注释 multilib
(从行首删除 #)。它应该看起来像这样:
[multilib]
Include = /etc/pacman.d/mirrorlist
添加 AUR 库
在 /etc/pacman.conf
的末尾添加以下行以启用 AUR 库:
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
pacman
好东西
你可以在 Arch Linux 的包管理器 pacman
中启用“复活节彩蛋”和好东西。
打开 /etc/pacman.conf
,然后找到 # Misc options
。
要为 pacman
添加颜色,取消注释 Color
。然后通过在 Color
字符串下添加 ILoveCandy
来向 pacman
添加 Pac-Man
。要启用并行下载,也取消注释它:
Color
ILoveCandy
ParallelDownloads = 3
更新库和包
要检查你是否成功添加库并启用复活节彩蛋,运行:
# pacman -Syu
如果更新返回错误,请再次打开 pacman.conf
并检查是否有人为错误。是的,你搞砸大了。
root 密码
设置 root
密码:
# passwd
添加用户账户
添加一个新的用户账户。在本指南中,除了 root
账户外,我将使用 MYUSERNAME
作为新用户的用户名。(我的措辞似乎很冗余,是吧?) 当然,用你自己的用户名替换示例用户名:
# useradd -m -g users -G wheel,storage,power,video,audio,rfkill,input -s /bin/bash MYUSERNAME
这将创建一个新用户及其 home
文件夹。
设置用户 MYUSERNAME
的密码:
# passwd MYUSERNAME
将新用户添加到 sudoers:
如果你希望在将来使用 sudo
命令获得 root 权限,你应该自己授予一个:
# EDITOR=vim visudo
取消注释该行 (删除 #):
# %wheel ALL=(ALL) ALL
安装引导加载程序
是的,这是我们安装引导加载程序的地方。我们将使用 systemd-boot
,因此不需要 grub2
。
-
安装引导加载程序:
我们将在
/boot
挂载点 (/dev/sda1
分区) 中安装它。# bootctl --path=/boot install
-
创建一个引导条目
/boot/loader/entries/arch.conf
,然后添加以下行:
未加密的文件系统
```
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/sda3 rw
```
如果你的 `/` 不在 `/dev/sda3`,请确保更改它。
保存并退出。
加密的文件系统
还记得之前的两种 initramfs 吗? 每种类型都需要特定的内核参数。因此,这里也有两种条目。请记住,volume
是卷组名称,/dev/mapper/volume-root
是到 /
的路径。
-
基于 udev 的 initramfs
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=/DEV/SDA2/UUID/HERE:volume root=/dev/mapper/volume-root rw
用你的
LVM
分区的 UUID 替换/DEV/SDA2/UUID/HERE
。你可以通过运行blkid /dev/sda2
来检查它。请注意,cryptdevice
参数不被 plymouth 支持,因此如果你打算使用它,建议使用基于 systemd 的 initramfs。提示: 如果你使用
vim
,可以通过输入:read ! blkid /dev/sda2
然后按回车来更容易地写入 UUID。然后使用可视模式操作输出。 -
基于 systemd 的 initramfs
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options rd.luks.name=/DEV/SDA2/UUID/HERE=volume root=/dev/mapper/volume-root rw
用你的
LVM
分区的 UUID 替换/DEV/SDA2/UUID/HERE
。你可以通过运行blkid /dev/sda2
来检查它。提示: 如果你使用
vim
,可以通过输入:read ! blkid /dev/sda2
然后按回车来更容易地写入 UUID。然后使用可视模式操作输出。
更新引导加载程序配置
更新引导加载程序配置
# vim /boot/loader/loader.conf
删除其所有内容,然后替换为:
default arch.conf
timeout 0
console-mode max
editor no
微代码
处理器制造商发布处理器微代码的稳定性和安全更新。这些更新提供可以对你的系统稳定性至关重要的错误修复。没有它们,你可能会遇到伪发性的崩溃或意外的系统中断,这可能很难排查。
如果你没有使用 pacstrap 安装它,请安装微代码:
对于 AMD 处理器:
# pacman -S amd-ucode
对于 Intel 处理器:
# pacman -S intel-ucode
如果你的 Arch 安装在需要具有两种处理器制造商的微代码的可移动驱动器上,请安装这两个包。
加载微代码。对于 systemd-boot
,使用 initrd
选项加载微代码,在 初始 ramdisk 之前,如下所示:
# sudoedit /boot/loader/entries/entry.conf
title Arch Linux
linux /vmlinuz-linux
initrd /CPU_MANUFACTURER-ucode.img
initrd /initramfs-linux.img
...
根据你的处理器将 CPU_MANUFACTURER
替换为 amd
或 intel
。
为下次启动启用互联网连接
要在下次重启时启用网络守护进程,你需要启用 dhcpcd.service
对于有线连接和 iwd.service
对于无线连接。
# systemctl enable dhcpcd iwd
退出 chroot 并重启:
通过输入 exit
或按 Ctrl + d 退出 chroot 环境。你也可以在此之后卸载所有挂载的分区。
最后,reboot
。
最后
如果你的安装成功,那么 yay!!! 如果没有,你应该开始质疑自己的存在。你的父母为你感到骄傲吗?