XYenon's Blog
VirtualBox 6 安装 ArchLinux 踩坑记录

我翻开 WiKi 一查,这 WiKi 没有年代。歪歪斜斜的每页上都写着「安装教程」几个字,
我横竖睡不着,仔细看了半夜,才从字缝里看出来,满篇上都写着两个字「劝退」!

勿谓言之不预也

本文安装过程基于本文撰写时,ArchWiKi 上的 Installation guide
由于 ArchLinux 更新速度较快,本文只能作为参考,在安装时请以 ArchWiKi 为准

本文是:

  • 我在 VirtualBox 上安装 ArchLinux 时的记录
  • 安装 ArchLinux 时的参考

本文不是

  • ArchLinux 安装教程
  • 金科律玉的教科书,颐使气指的教师爷

基本过程

  1. 创建虚拟机:新建虚拟机,调整设置
  2. 安装前的准备:启动系统镜像,联网,调整时间,硬盘分区及格式化
  3. 安装系统:挂载分区,选择镜像源,开始安装
  4. 重启前的配置:生成 fstab 配置,时区配置,本地化配置,网络配置,设置 root 密码,安装、配置引导程序
  5. 重启后的配置:新建用户,安装桌面环境等

创建虚拟机

新建虚拟机

按正常步骤新建虚拟机,选择「Arch Linux (64-bit)」,内存、硬盘等按需配置

调整设置

「系统」选项卡中勾选「启用 EFI(只针对某些操作系统)」

如果要安装桌面环境,虚拟机设置中「显卡控制器」建议选择「VBoxVGA」,3D 加速和 2D 加速都不要开,无视下面的「发现无效设置」即可
如果选择默认的「VMSVGA」 需要额外手动安装驱动,并且自动分辨率不能正常工作,截至本文撰写时没有找到合适的解决方法

其他设置项按需设置即可,设置完毕后启动虚拟机

安装前的准备

加载 ArchLinux ISO 后会自动启动到安装环境

联网

在默认的「网络地址转换(NAT)」网卡下应该会自动联网,如果没有联网请查阅 ArchWiKi 手动联网
由于要下载必要的软件包,必须正常联网才能继续安装

调整时间

在正常联网的情况下,使用 timedatectl set-ntp true 即可自动校准时间
由于下载时可能需要验证 https 证书,必须正确校准时间才能继续安装

硬盘分区及格式化

使用 fdisk -l 可以查看磁盘信息
VirtualBox 中一般使用 /dev/sda 磁盘

本文使用最简单的分区配置,即:

  • 512 MB ESP(EFI 引导分区),fat32
  • 剩下的全部 /(根目录),ext4;

没有 swap 分区是因为我喜欢用 systemd-swap 动态管理 swap

硬盘分区

使用 fdisk /dev/sda 进入 fdisk 来编辑 /dev/sda 的分区信息

输入 m 可以查看 fdisk 的帮助
输入 w 写入更改前所有修改均不会保存

  1. 输入 g 新建一个 GPT 分区表
  2. 输入 n 建立第一个分区,Partition number 和 First sector 不用填写(使用默认值),Last sector 输入 +512M,依据分区大小自动计算终止扇区
  3. 重复第 2 步,但不填写 Last sector,将所有的剩余空间分给第二个分区
  4. 输入 t 修改分区类型,Partition number 输入 1 选择第一个分区,Partition type 输入 1 将类型修改为 EFI System
  5. 输入 p 检查分区结果
  6. 确认正确后输入 w 写入更改

硬盘格式化

使用 mkfs.fat -F32 /dev/sda1 将 /dev/sda 磁盘的第一个分区格式化为 FAT32 格式
使用 mkfs.ext4 /dev/sda2 将 /dev/sda 磁盘的第二个分区格式化为 ext4 格式

安装系统

挂载分区

我们将新系统的 / 挂载到 /mnt 来进行相关操作:

  1. 使用 mount /dev/sda2 /mnt 将 /dev/sda2 分区挂载到 /mnt
  2. 使用 mkdir /mnt/boot 在 /dev/sda2 分区新建 boot 目录
  3. 使用 mount /dev/sda1 /mnt/boot 将 /dev/sda1 分区挂载到 /mnt/boot

选择镜像源

为了提高软件包的下载速度,选择国内的镜像源来下载

编辑 /etc/pacman.d/mirrorlist,在其前两行加入

Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

来使用清华大学和中国科技大学提供的镜像源

开始安装

ArchLinux 本质上是由一个个的软件包组成的,系统的所有组成部分包括内核都是软件包
所以 ArchLinux 的安装本质上就是将系统必须的软件包安装到新系统的根
而 ArchLinux 的软件包本质就是带有安装脚本的压缩包,软件安装的过程简单来说就是按照安装脚本将文件解压到对应的目录

使用 pacstrap 工具即可完成这些操作

pacstrap /mnt base base-devel linux linux-firmware dhcpcd vim

这条命令将会把 base 元包、base-devel 包组、linux、linux-firmware、dhcpcd、vim 安装到 /mnt
其中 base 元包是系统的必要组成部分(注意:原 base 包组已经被 base 元包替代,其中将不再包含 linux 内核,故需手动安装
base-devel 包组包含一些重要的工具,比如 sudo 等
dhcpcd 用来以 DHCP 方式获取 IP 等信息进行联网
vim 是我常用的文本编辑器

当然,除 base、linux、linux-firmware 外,其他软件也可以等 chroot 到新系统后再安装

安装需要进行一段时间,请坐和放宽

重启前的配置

目前,ArchLinux 的安装已经结束了,但是这仍然是一个无法启动的系统,还需要进一步的配置

生成 fstab 配置

fstab 文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统

自动生成 fstab 配置文件

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

生成成功后检查 /mnt/etc/fstab 文件是否正确

切换根目录

因为要对新系统进行配置,我们需要先将环境切换到新系统
在 Linux 系统中,可以使用 chroot 将一个目录指定为根目录,但是为了正常使用 chroot 后的系统,往往还需要手动挂载 /dev/run 等目录
为了快速的完成这些工作,ArchLinux 提供了 arch-chroot 工具

arch-chroot /mnt

切换成功后命令提示符会发生明显的变化

时区配置

将时区配置为中国标准时区

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

设置硬件时钟

hwclock --systohc

本地化配置

/etc/locale.gen 中取消 en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8 的注释
之后运行 locale-gen

由于还没有安装中文字体,为了避免出现豆腐块,先设置语言为英文
新建 /etc/locale.conf 文件,写入 LANG=en_US.UTF-8

网络配置

新建 /etc/hostname 文件,写入主机名

假设主机名为 myhostname
编辑 /etc/hosts 文件,写入

127.0.0.1 localhost
::1       localhost
127.0.1.1 myhostname.localdomain myhostname

设置 root 密码

使用 passwd 命令设置 root 用户密码

安装、配置引导程序

使用 GRUB 作为引导程序

安装引导程序

因为使用 EFI 模式启动,除了 GRUB 本体之外还要安装 efibootmgr

pacman -Syu grub efibootmgr

将 GRUB 安装到引导分区

grub-install --efi-directory=/boot

配置引导程序

GRUB 可以自动生成配置文件

grub-mkconfig -o /boot/grub/grub.cfg

重启

至此,ArchLinux 安装已经完全结束,重启后即可使用

首先,使用 exit 退出 chroot 环境
使用 umount -R /mnt 卸载挂载的分区

由于安装镜像还挂载在光驱上,为了避免重启后进入安装环境,可以先关机 poweroff 将镜像卸载

重启后的配置

以下配置按照个人喜好酌情配置即可

联网

联网并设置开机自动联网

systemctl enable --now dhcpcd

使用 vim 代替 vi

将 vi 软链接到 vim

ln -s /usr/bin/vim /usr/bin/vi

新建用户

新建一个用户

useradd -m -G wheel 用户名

给新用户设置密码

passwd 用户名

赋予新用户新用户 sudo 权限

使用 visudo 来编辑 sudo 的配置,避免因为配置问题导致 sudo 彻底不可用

找到 root ALL=(ALL) ALL,在其下一行加入 用户名 ALL=(ALL) ALL 并保存

之后可以 exit 后使用新用户登录

桌面环境

安装 KDE Plasma 作为桌面环境

sudo pacman -Syu plasma kde-applications

KDE Plasma 默认使用 Network Manager 作为网络管理器
启动 Network Manager 并设置开机自动启动 Network Manager

sudo systemctl enable --now NetworkManager

KDE Plasma 默认使用 SDDM 作为显示管理器
启动 SDDM 并设置开机自动启动 SDDM

sudo systemctl enable --now sddm

VirtualBox 虚拟机增强功能

要使用共享剪贴板,文件拖放等功能,需要安装增强功能

sudo pacman -Syu virtualbox-guest-utils virtualbox-guest-modules-arch

安装后重启

添加 ArchlinuxCN 软件源

参考 tuna 的 ArchlinuxCN 镜像使用帮助

安装 yay

yay 包管理器可以方便的安装 AUR 里的软件

sudo pacman -Syu yay

切换 AUR 镜像来加快下载速度

yay --aururl "https://aur.tuna.tsinghua.edu.cn" --save

下拉式终端

yay -Syu yakuake

配置 swap

yay -Syu systemd-swap

编辑 /etc/systemd/swap.conf,找到 swapfc_enabled 修改为 swapfc_enabled=1

sudo systemctl enable --now systemd-swap

本地化

安装中文字体

常用的中文字体有:

  • noto-fonts-cjk
  • wqy-bitmapfont
  • wqy-microhei
  • wqy-zenhei

我全都要

yay -Syu noto-fonts-cjk wqy-bitmapfont wqy-microhei wqy-zenhei

设置系统语言

编辑 /etc/locale.conf,改为 LANG=zh_CN.UTF-8 并重启

打开「系统设置」中的「区域设置」,在「语言」选项卡中添加语言并应用
在「格式」选项卡中「区域」修改为「中国-简体中文(zh_CN)」并应用

输入法

安装 fcitx 输入法

yay -Syu fcitx-im fcitx-libpinyin fcitx-cloudpinyin kcm-fcitx

设置环境变量,指定各类程序的输入法为 fcitx
新建 ~/.pam_environment 文件,写入

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
[email protected]=fcitx

重启即可

设置代理

由于伟大的虚拟砖混结构建筑物的存在等众所周知的原因,常常需要通过代理服务器来科学的上网

一般宿主机上都有运行代理软件,所以可以直接通过内网使用宿主机的代理软件

首先关机,设置虚拟机,在「网络」选项卡中添加一个「仅主机(Host-Only)网络」
之后开机,使用 ip addr 查看 IP 地址,找到仅主机网络的 IP 地址
如 IP 地址为 192.168.56.111,则宿主机的 IP 地址为 192.168.56.1

~/.bashrc 文件中加入

export http_proxy="http://192.168.56.1:7890"
export https_proxy="http://192.168.56.1:7890"
export all_proxy="http://192.168.56.1:7890"
export HTTP_PROXY="http://192.168.56.1:7890"
export HTTPS_PROXY="http://192.168.56.1:7890"
export ALL_PROXY="http://192.168.56.1:7890"

重启当前终端或运行 source ~/.bashrc 即可生效