Arch Linux 从零开始安装

很久之前的一份记录,本来不打算发的,但最近折腾了一下把服务器上的系统在线替换安装成了 Arch Linux,中间涉及到很多本文的步骤,所以还是稍微整理一下发出来吧。

由于之前做记录只是用于自己备忘,所以全程无图,一些细节部分请对照 官方wiki 查看,注意安装时需要联网。

启动到 live 环境

安装过 Linux 系统的人对这一步自然不会陌生,完全没有安装 Linux 系统经验的人我也不建议你直接上手折腾 Arch Linux。这里我们不再详述,简单概括一下的话就下面几个步骤:刻录 U 盘、从 U 盘启动、选择第一项启动 Arch Linux。

不同于一般的 Linux 发行版提供了图形界面(类图形界面)的安装方式,Arch Linux 的安装全程在命令行下进行,此时我们从 U 盘启动 Arch Linux 后进入的就是这么一个临时的命令行环境。

硬盘分区

输入 fdisk -l 列出自己所有的硬盘,结果中以 romloop 或者 airoot 结束的可以忽略。这里我们将系统装在 /dev/sda 中。

对于一个正常的 Linux 系统,根分区 / 是必须要有的,如果你使用 UEFI 模式,则还会需要一个 EFI 分区。除此之外你还可以分配交换空间(SWAP),将 /boot/home 分区单独挂载等。

我们这里一切从简,只分配一个根分区。我虽然曾经配置过 UEFI 模式,但并没有记录下当时的步骤,所以本文暂不会涉及 UEFI ,以后若我重新折腾了相关的东西可能会补发上来。

在只分配一个根分区的情况下我们需要考虑的事情就少了很多,直接将所有空间分到一个分区内即可。输入 fdisk /dev/sda 进入分区程序,输入 o 新建一个分区表(开始分区),输入 n 新建一个分区,然后一路按回车键 Enter 选择默认的配置即可,在完成后输入 p 可以查看我们的分区情况,输入 w 写入分区信息并退出。

之后输入 lsblk 可以看到 sda 下面分出了一个名为 sda1 的分区。

硬盘格式化

分好区后我们还需要对其格式化,输入 mkfs.ext4 /dev/sda1sda1 分区格式化为 ext4 格式。

挂载分区

再之后就属于正式安装的步骤了,输入 mount /dev/sda1 /mntsda1 分区挂载到我们当前系统的 /mnt 目录下。

选择镜像源

选择一个中国用起来比较快的镜像源能够很大程度上加快我们后面安装时的进度。

输入 cd /etc/pacman.d 进入镜像配置文件目录,输入 cp mirrorlist mirrorlist.bk 备份一下原文件,然后输入以下命令提取出所有的中国镜像写入 mirrorlist 文件:

1
cat mirrorlist.bk | grep China -A 1 | grep -v '-' > mirrorlist

最后使用你喜欢的编辑器(这个 live 系统中内置了 vim 和 nano)手动编辑 mirrorlist 文件,使用 # 注释掉不用的镜像,我这里一般最后留下中科大(ustc)和清华大学(tuna.tsinghua)的镜像源。

安装系统

这里的安装系统本质上其实是在我们挂载 sda1 分区的目录 /mnt 下安装系统所必需的文件和软件包。这里具体要安装哪些软件包是自己可选的,详情可以查看 官方wiki ,我一般在这里只安装一些必需软件包,像文本编辑器之类的东西可以在等下 chroot 进入新系统后使用 pacman 手动安装。

1
pacstrap /mnt base base-devel linux linux-firmware

生成自动挂载配置

使用以下命令生成挂载配置并写入 fstab 文件中 (用 -U 或 -L 选项设置UUID 或卷标):

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

强烈建议在执行完以上命令后检查一下生成的 /mnt/etc/fstab 文件是否正确。

进入新系统

输入 arch-chroot /mnt 临时进入我们的新系统来完成最后的一些配置。

系统配置

此时这个新系统还处于啥也没有的状态,我们可以使用 pacman 来安装自己想要的软件(考虑到下载速度,你可能需要对这个新系统中的镜像源配置文件做同样的处理),需要注意的是你此时安装的软件在最终配置好的系统中都会保留下来。

设置文字编码

编辑 /etc/locale.gen 文件,将 zh_CN 开头的行全部取消注释,再找到 en_US.UTF-8 UTF-8 也取消注释。然后输入 locale-gen 生成 locale 。最后再编辑 /etc/locale.conf 设置本地编码配置如下:

1
LANG=en_US.UTF-8

注意: 最好不要在这里设置任何中文 locale,不然可能会导致命令行乱码。

设置时区和时间

运行以下命令将时区设置为 Asia/Shanghai (中国所用的时区)。

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

运行 hwclock 以生成 /etc/adjtime (这个命令假定硬件时间已被设置为 UTC 时间):

1
hwclock --systohc

其他设置

编辑 /etc/hostname 文件设置自己想要的主机名,编辑 /etc/hosts 设置 host 信息。

然后输入 mkinitcpio -P 生成启动镜像。

在那之后输入 passwd 设置一下 root 用户的登录密码。

配置 GRUB 引导

还是在我们临时进入的这个新系统里面,输入 pacman -S grub 安装 grub 引导程序,然后输入以下命令安装 BOIS 引导到 /dev/sda 这块硬盘上。

1
grub-install --target=i386-pc /dev/sda

最后输入 grub-mkconfig -o /boot/grub/grub.cfg 生成 grub 配置文件就可以了。

网络配置

之后我们重启一下机器,如果前面的操作没有问题的话应该是能够正常启动我们新安装好的系统的。

但此时你会发现机器无法联网,因为我们还缺少一个网络管理软件。本着尽量少安装软件的原则,我这里选用的是 systemd-networked,无需单独安装,直接配置好后启动即可。更多设置可以参见 Network configuration

首先输入 ip a 查看自己机器的网卡配置,并记下网卡名,我这里是 ens3

进入 /etc/systemd/network/ 文件夹下,新建一个配置文件 dhcp.network (名字可以任取,后缀为 network 即可),写入如下配置:

1
2
3
4
5
6
7
8
[Match]
Name=ens3

[Network]
DHCP=ipv4

[DHCPv4]
UseHostname=false

这表示在 ens3 这张网卡上启用 DHCP 自动分配 ipv4 地址,不使用 DHCP 分配的主机名。[Match] 部分可以使用通配符,例如写成 Name=en*

配置好后启动 systemd-networkd.service 服务,并设置开机自启。

1
2
systemctl start systemd-networkd.service
systemctl enable systemd-networkd.service

此时你再去测试,会发现仍然无法上网,提示信息翻译过来大意是无法解析到主机,这是因为我们还没有指定一个 DNS 服务器,无法解析域名,所有使用域名的服务都无法使用。

要解决这个问题只需要编辑 /etc/resolv.conf 写入一组 DNS 服务器即可。

1
2
nameserver 8.8.8.8
nameserver 114.114.114.114

要是你不想自己指定 DNS 服务器,也可以使用 DHCP 服务器分配的 DNS(个人比较推荐这样做,速度快一些,能够避免一些奇奇怪怪的问题)。

首先启动并设置 systemd-resolved.service 开机自启。

1
2
systemctl start systemd-resolved.service
systemctl enable systemd-resolved.service

然后将 /etc/resolv.conf 设为 systemd-resolved 服务下 DNS 配置文件的软链接即可。

1
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

其他配置

在前面的操作完成后检查一下系统时间,如果不准确,可以启用 NTP 服务来自动更新系统时间:

1
2
timedatectl status
timedatectl set-ntp true

如果你的机器需要远程连接,那么还应当安装 ssh 工具并设置开机自启:

1
2
3
pacman -S openssh
systemctl start sshd
systemctl enable sshd

需要注意的是 openssh 现在默认禁止 root 用户登录,所以在安装好之后需要新建一个普通用户用于登录或者修改配置文件 /etc/ssh/sshd_config 设置允许 root 用户登录,