这是一份个人指南,因此如果您迷路了并且刚刚从某个地方找到了本指南,我建议您阅读官方wiki
!本指南将重点介绍systemd-boot
、 UEFI
以及如果您想使用LUKS/LVM
加密分区的指南。这个指南的存在是为了让我在重新安装Archlinux
时能够记住很多事情。
安装之前,请确保:
默认控制台键盘映射是 US。可用布局可以列出:
# 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
如果您使用的是笔记本电脑,则可以使用iwd
中的iwctl
命令连接到无线接入点。请注意,它已默认启用。还要确保无线卡未被rfkill
阻止。
扫描网络。
# iwctl station wlan0 scan
通过以下方式获取扫描的网络列表:
# iwctl station wlan0 get-networks
连接到您的网络。
# iwctl -P "PASSPHRASE" station wlan0 connect "NETWORKNAME"
Ping archlinux 网站以确保我们在线:
# ping archlinux.org
如果您收到“未知主机”或“目标主机无法访问”响应,则表示您尚未在线。检查您的网络配置并重做上述步骤。
使用timedatectl
确保系统时钟准确:
# timedatectl set-ntp true
要检查服务状态,请使用timedatectl status
。
当被实时系统识别时,磁盘被分配给块设备,例如/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
分区
EF00
。按回车键。boot
。按回车键。创建root
分区
8300
)。root
。创建root
分区
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
分区
EF00
。按回车键。boot
。按回车键。创建LVM
分区
8e00
。按回车键。lvm
。按回车键。最后,点击分区列表底部的Write
将更改写入磁盘。键入yes
确认写入命令。现在我们已经完成了磁盘分区。点击Quit
退出 cgdisk 。转到下一节。
再次使用lsblk
检查我们创建的分区。我们?我以为我正在为自己做这个指南哈哈
# lsblk
你应该看到这样的东西:
姓名 | 少:最小 | RM | 尺寸 | 反渗透 | 类型 | 挂载点 |
---|---|---|---|---|---|---|
sda | 8:0 | 0 | 477G | 0 | ||
sda1 | 8:1 | 0 | 1 | 0 | 部分 | |
sda2 | 8:2 | 0 | 1 | 0 | 部分 | |
数据传输3 | 8:3 | 0 | 175G | 0 | 部分 |
sda
为主盘sda1
是启动分区sda2
是交换分区sda3
是主分区
姓名 | 少:最小 | RM | 尺寸 | 反渗透 | 类型 | 挂载点 |
---|---|---|---|---|---|---|
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
。这将是我们的root
分区和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
。
创造我们温馨的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/sda1
挂载到/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-generator
文本编辑器,
nano
vim
vi
用于访问手册页和信息页中的文档的包,
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
:将 Android 设备连接到 Linux 盒子的 Udev 规则mtpfs
:支持从任何 MTP 设备读取和写入的 FUSE 文件系统xdg-user-dirs
:管理用户目录,例如~/Desktop
和~/Music
这些工具稍后会有用。所以未来的我,安装这些。
# genfstab -U /mnt >> /mnt/etc/fstab
检查生成的/mnt/etc/fstab
文件,并在出现错误时进行编辑。
现在,将 root 更改为新安装的系统
# 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,因为 mkinitcpio 是在使用 pacstrap 安装内核包时运行的。如果您要设置加密系统,这一点很重要!
```
# mkinitcpio -P
```
DO NOT FORGET TO RUN THIS BEFORE REBOOTING YOUR SYSTEM!
使用编辑器打开/etc/mkinitcpio.conf
:
在本指南中,有两种设置 initramfs 的方法: udev
(默认)和systemd
。如果您计划使用plymouth
(splashcreen),建议使用基于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
不要忘记在重新启动系统之前运行此命令!
# 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
# 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]
Include = /etc/pacman.d/mirrorlist
在/etc/pacman.conf
末尾添加以下行以启用 AUR 存储库:
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
pacman
好东西您可以在 archlinux 的包管理器pacman
中启用“复活节彩蛋”和好东西。
打开/etc/pacman.conf
,然后找到# Misc options
。
要向pacman
添加颜色,请取消注释Color
。然后通过在Color
字符串下添加ILoveCandy
将Pac-Man
添加到pacman
。要启用并行下载,也请取消注释:
Color
ILoveCandy
ParallelDownloads = 3
要检查您是否成功添加存储库并启用复活节彩蛋,请运行:
# pacman -Syu
如果更新返回错误,请再次打开pacman.conf
并检查是否存在人为错误。是的,你搞砸了。
设置root
密码:
# passwd
添加新用户帐户。在本指南中,除了root
帐户之外,我将仅使用MYUSERNAME
作为新用户的用户名。 (我的措辞似乎多余,嗯?)当然,用您自己的用户名更改示例用户名:
# useradd -m -g users -G wheel,storage,power,video,audio,rfkill,input -s /bin/bash MYUSERNAME
这将创建一个新用户及其home
文件夹。
设置用户MYUSERNAME
的密码:
# passwd MYUSERNAME
如果您希望将来通过使用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
```
If your `/` is not in `/dev/sda3`, make sure to change it.
Save and exit.
还记得之前的两种类型的 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
将/DEV/SDA2/UUID/HERE
替换为LVM
分区的 UUID。您可以通过运行blkid /dev/sda2
来检查它。请注意,plymouth 不支持cryptdevice
参数,因此如果您打算使用它,建议使用基于 systemd 的 initramfs。
提示:如果您使用vim
,则可以通过键入:read ! blkid /dev/sda2
然后按 Enter 键。然后使用视觉模式操作输出。
基于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
将/DEV/SDA2/UUID/HERE
替换为LVM
分区的 UUID。您可以通过运行blkid /dev/sda2
来检查它。
提示:如果您使用vim
,则可以通过键入:read ! blkid /dev/sda2
然后按 Enter 键。然后使用视觉模式操作输出。
更新引导加载程序配置
# vim /boot/loader/loader.conf
删除其所有内容,然后将其替换为:
default arch.conf
timeout 0
console-mode max
editor no
处理器制造商发布了处理器微代码的稳定性和安全更新。这些更新提供了对系统稳定性至关重要的错误修复。如果没有它们,您可能会遇到难以追踪的虚假崩溃或意外的系统停止。
如果您没有使用 pacstrap 安装它,请通过以下方式安装微代码:
对于 AMD 处理器:
# pacman -S amd-ucode
对于英特尔处理器:
# 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
通过键入exit
或按Ctrl + d退出 chroot 环境。您还可以在此之后卸载所有已安装的分区。
最后, reboot
。
如果您的安装成功,那么耶!如果没有,你应该开始质疑自己的存在。你的父母为你感到骄傲吗?