Arch Linux 从零开始安装
很久之前的一份记录,本来不打算发的,但最近折腾了一下把服务器上的系统在线替换安装成了 Arch Linux,中间涉及到很多本文的步骤,所以还是稍微整理一下发出来吧。
由于之前做记录只是用于自己备忘,所以全程无图,一些细节部分请对照 官方wiki 查看,注意安装时需要联网。
启动到 live 环境
安装过 Linux 系统的人对这一步自然不会陌生,完全没有安装 Linux 系统经验的人我也不建议你直接上手折腾 Arch Linux。这里我们不再详述,简单概括一下的话就下面几个步骤:刻录 U 盘、从 U 盘启动、选择第一项启动 Arch Linux。
不同于一般的 Linux 发行版提供了图形界面(类图形界面)的安装方式,Arch Linux 的安装全程在命令行下进行,此时我们从 U 盘启动 Arch Linux 后进入的就是这么一个临时的命令行环境。
硬盘分区
输入 fdisk -l
列出自己所有的硬盘,结果中以 rom
,loop
或者 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/sda1
将 sda1
分区格式化为 ext4
格式。
挂载分区
再之后就属于正式安装的步骤了,输入 mount /dev/sda1 /mnt
将 sda1
分区挂载到我们当前系统的 /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 | [Match] |
这表示在 ens3
这张网卡上启用 DHCP 自动分配 ipv4 地址,不使用 DHCP 分配的主机名。[Match]
部分可以使用通配符,例如写成 Name=en*
。
配置好后启动 systemd-networkd.service
服务,并设置开机自启。
1 | systemctl start systemd-networkd.service |
此时你再去测试,会发现仍然无法上网,提示信息翻译过来大意是无法解析到主机,这是因为我们还没有指定一个 DNS 服务器,无法解析域名,所有使用域名的服务都无法使用。
要解决这个问题只需要编辑 /etc/resolv.conf
写入一组 DNS 服务器即可。
1 | nameserver 8.8.8.8 |
要是你不想自己指定 DNS 服务器,也可以使用 DHCP 服务器分配的 DNS(个人比较推荐这样做,速度快一些,能够避免一些奇奇怪怪的问题)。
首先启动并设置 systemd-resolved.service
开机自启。
1 | systemctl start systemd-resolved.service |
然后将 /etc/resolv.conf
设为 systemd-resolved
服务下 DNS 配置文件的软链接即可。
1 | ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf |
其他配置
在前面的操作完成后检查一下系统时间,如果不准确,可以启用 NTP 服务来自动更新系统时间:
1 | timedatectl status |
如果你的机器需要远程连接,那么还应当安装 ssh
工具并设置开机自启:
1 | pacman -S openssh |
需要注意的是 openssh 现在默认禁止 root 用户登录,所以在安装好之后需要新建一个普通用户用于登录或者修改配置文件 /etc/ssh/sshd_config
设置允许 root 用户登录,