Arch安装

关于Arch的安装有很多教程,例如

官方WikiInstallation guide - ArchWiki

中文教程archlinux 基础安装 | archlinux 简明指南

跟着这些教程一步步做就能简单地安装好Arch,但仅仅是依葫芦画瓢地敲一遍指令是不够的,还得理解为什么需要这些指令(chatgpt真是我的好伙伴)

why efi

众多教程的第一步,一般都是修改镜像的引导方式为efi,为什么要这样修改

现代硬件支持:大多数现代计算机(自2010年以来发布的主板)默认支持 UEFI,并逐步淘汰旧的 BIOS 模式。EFI 提供了更多功能,如更快的启动速度和更大的分区支持,因此在新硬件上更为兼容。

分区支持:EFI 引导使用的是 GPT(GUID Partition Table)分区表,相比传统 BIOS 使用的 MBR(Master Boot Record)分区表,GPT 支持更大的硬盘(超过 2TB)和更多的主分区(最多 128 个)。这是大型硬盘和多系统环境下的必备功能。

安全引导(Secure Boot)支持:EFI 支持安全引导(Secure Boot),这是一种安全机制,旨在防止未经授权的操作系统和恶意软件在系统启动时加载。尽管 Arch Linux 默认不启用安全引导,但 UEFI 提供了这种可能性,且对有此需求的用户更加灵活。

系统引导管理更灵活:EFI 的引导管理比传统 BIOS 更灵活。EFI 系统分区(ESP)中可以存放多个系统的启动文件,可以通过 EFI Shell 或主板的启动菜单方便地选择和管理不同系统,便于在多系统环境中使用。

更好的兼容性:绝大多数 Linux 发行版(包括 Arch Linux)都在 UEFI 环境下进行了更广泛的测试和优化。使用 EFI 可以减少兼容性问题,更符合现代系统的设计需求。

对于新手或是想要构建一个长期支持的系统来说,EFI 的方式更符合主流硬件的标准。

禁用reflector服务

reflector服务是Arch用于自动更新pacman包管理器软件源的服务,但对于国内用户,有时候会造成一些麻烦,所以选择关闭

systemctl stop reflector.service

通过systemctl status reflector.service可以查看该服务状态

设置系统时钟

部分程序对于系统时间有要求,如果系统时钟不准确可能会造成某些错误,所以需要与网络时间进行同步

1
2
timedatectl set-ntp true # 将系统时间与网络时间进行同步
timedatectl status # 检查服务状态

默认时区UTC+0,但不影响

更改软件源

这一步配置过ubuntu等环境的应该都不陌生

1
vim /etc/pacman.d/mirrorlist

这里选择将其换为清华源(其实可以多放几个备用)

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

然后更新软件包缓存

1
pacman -Syyu

分区和格式化

分区

这一步开始就是重头戏了

lsblk命令即list block,用于列出所有可用块设备的信息

由于是使用vmware安装的,所以我们在其中找到与我们分配的空间最接近的块设备,这个即是之后我们需要操作的

cfdisk命令用于显示和操作磁盘分区表,可以对任意块设备进行分区操作,通过用户友好的界面提供了基础的分区功能,更高级的操作可以使用fdisk操作

cfdisk /dev/sda

sda即是之前获取的块设备,命令输入之后会让我们选择分区表的种类,这里当然选择gpt(GUID Partition Table)

然后new出三个分区,分别是

  • 交换分区,交换分区的主要作用就是当系统内存不足时,用于存储内存中不常用的数据,从而释放出物理内存,一般大小和内存差不多即可
  • efi引导区,用于存储系统引导加载程序和 EFI 引导文件的分区
  • linux文件系统,用于存储用户数据

分区完成之后,可以通过fdisk -l命令查看分区状态

格式化并创建btrfs子券

mkfs.fat -F32 /dev/sda1

mkfs.fat是一个格式化工具,用于将分区创建为 FAT 文件系统。mkfs 即”make filesystem” 的缩写,而 fat 表示 FAT 类型的文件系统。-F32表示使用 FAT32 文件系统格式。FAT32 是一种广泛兼容的文件系统,UEFI 标准要求 EFI 系统分区(ESP)使用 FAT32 格式,以便所有支持 UEFI 的设备都能识别并使用该分区

这条命令就是在 /dev/sda1 上创建一个新的 FAT32 文件系统,删除分区上已有的所有数据。

mkswap /dev/sda2

mkswapmake swap area用于设置并格式化交换分区

mkfs.btrfs -L arch /dev/sda3

这个和第一个命令一样,但这次是将分区创建为btrfs文件系统,-L arch用于将arch作为该分区的Lable,也可以是其他可见字符

操作btrfs分区

到这一步我们已经成功格式化了之前创建的三个分区,并且对其进行了对应的文件系统格式化

efi引导区和swap交换区已经设置完成,但我们还需要对btrfs分区进行进一步的操作

1
2
3
4
mount -t btrfs -o compress=zstd /dev/sda3 /mnt
#将 /dev/sda3 这个分区以 Btrfs 文件系统挂载到 /mnt 目录,并启用 Zstandard(zstd)压缩选项。以下是详细解释
df -h
#查看挂载情况

分区完成后,我们如何访问这个分区呢,那么还得将其挂在到/mnt节点方便访问

1
2
3
4
5
6
7
8
9
btrfs subvolume create /mnt/@
#创建 / 目录子卷
btrfs subvolume create /mnt/@home
#创建 /home 目录子卷
#通过使用这些子卷,可以实现独立管理系统数据和用户数据。比如,可以为根子卷(@)创建快照以备份系统,但不影响用户数据;也可以单独备份或恢复用户数据。
btrfs subvolume list -p /mnt
#复查子卷情况
umount /mnt
#卸载/mnt以便将子券挂载上去

挂载

1
2
3
4
5
6
7
8
9
10
mount -t btrfs -o subvol=/@,compress=zstd /dev/sda3 /mnt     
#将btrfs文件系统分区sda3的/子卷挂载作为根目录,所以需要将之前的取消挂载
mkdir /mnt/home
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sda3 /mnt/home
#挂载home子卷到/mnt/home
mkdir -p /mnt/boot
mount /dev/sda1 /mnt/boot
#挂载/boot启动引导区
swapon /dev/sda2
#激活/swap交换分区

mount命令在学习linux内核的时候有不少接触,这个命令还是很强大的

swapon命令用于激活linux地交换空间

检查

1
2
3
4
df -h
#查看挂载情况
free -h
#查看swap分区挂载情况

系统安装

挂载完成后,子卷还是空空荡荡的,接下来就是安装系统

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

pacstrap是 Arch Linux 的一个安装工具,用于在已挂载的目标分区中安装基本的软件包

  • base:这个软件包组包含构建 Arch Linux 所需的基本组件,如核心工具、库、shell 等。它是构成 Arch Linux 系统的最小配置,安装后系统可以正常启动并进入命令行。
  • base-devel:包含开发工具包,如 gccmakepkg-config 等,通常用于构建和编译软件包。安装 base-devel 是为了方便系统上进行编译和开发工作,也用于 AUR(Arch User Repository)中软件包的编译安装。
  • linux:这是 Arch Linux 的 Linux 内核包,包含了 Linux 内核和基本的启动配置,是系统的核心组成部分。
  • linux-firmware:包含大量硬件的固件,支持各种硬件设备(如 Wi-Fi、显卡、蓝牙等),确保系统能识别和支持大多数硬件。
  • btrfs-progs:这是 Btrfs 文件系统的工具包,包含管理 Btrfs 文件系统的各种工具(如 mkfs.btrfsbtrfs 命令等)。如果系统根分区或其他分区使用了 Btrfs 文件系统,则需要此包来管理和维护它
1
pacstrap /mnt networkmanager vim sudo zsh zsh-completions

再安装一些功能性软件

生成fstab文件

fstab 用来定义磁盘分区。它是 Linux 系统中重要的文件之一

1
2
3
genfstab -U /mnt > /mnt/etc/fstab
#genfstab 自动根据当前挂载情况生成并写入 fstab 文件:
cat /mnt/etc/fstab

change root

之前的所有操作其实都是在引导程序中完成的

现在真正进入新系统

1
arch-chroot /mnt

此时,原来安装盘下的 /mnt 目录就变成了新系统的 / 目录

hostname与时区

hostname

1
2
vim /etc/hostname
#改成自己喜欢的内容

hosts

1
vim /etc/hosts
1
2
3
4
127.0.0.1   localhost
::1 localhost
127.0.1.1 hostname.localdomain hostname
#hostname用之前自己设置的取代.区分大小写

时区

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

设置硬件时间

1
hwclock --systohc

设置locale

1
2
3
4
vim /etc/locale.gen
#去除en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8的注释
locale-gen
echo 'LANG=en_US.UTF-8' \> /etc/locale.conf

设置root

1
passwd root

安装微码

1
2
pacman -S intel-ucode # Intel
pacman -S amd-ucode # AMD

根据芯片自行选择

安装引导程序

1
pacman -S grub efibootmgr os-prober
  • grub —— 启动引导器,用于加载和管理系统启动的完整程序,是linux最常见的引导器
  • efibootmgr —— efibootmgrgrub 脚本用来将启动项写入 NVRAM
  • os-prober —— 为了能够引导 win10,需要安装 os-prober 以检测到它,虚拟机内其实没啥必要

安装 GRUB 到 EFI 分区

1
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
  • --efi-directory=/boot —— 将 grubx64.efi 安装到之前的指定位置(EFI 分区)
  • --bootloader-id=ARCH —— 取名为 ARCH

进行一些修改

1
vim /etc/default/grub
  • 去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
  • loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错
  • 加入 nowatchdog 参数,这可以显著提高开关机速度

最后生成配置文件

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

结束安装

1
2
3
4
5
6
exit 
# 退回安装环境
umount -R /mnt
# 卸载新分区
reboot
# 重启,虚拟机直接重启即可

重启后关闭iso镜像的的连接

开启NetworkManager服务并设置其为开机自启

1
systemctl enable --now NetworkManager

常用设置

设置非root用户

以root用户身份运行所有命令是很危险的

新增一个用户

1
useradd -m -G wheel -s /bin/zsh ixout
  • -m 创建用户的同时创建用户家目录
  • -G选项后指定附加组
    • wheel —— wheel 附加组可 sudo 进行提权
  • -s 选项后指定 shell 程序

设置密码

1
passwd ixout

允许sudo

1
EDITOR=vim visudo

取消#%wheel ALL=(ALL:ALL) ALL的注释

  • %wheel —— 用户名或用户组,此处则代表是 wheel 组,% 是用户组的前缀
  • ALL= —— 主机名,此处则代表在所有主机上都生效(如果把同样的 sudoers 文件下发到了多个主机上)
  • (ALL:ALL) —— (任意用户:任意用户组),此处则代表可以成为任意目标用户/用户组
  • 最后的 ALL —— 代表可以执行任意命令

几个更详细的例子:

  1. mailadmin 组里的用户可以作为 root 用户,在 snowrain 这两台主机执行一些邮件服务器控制命令(命令之间用 , 分隔):
1
%mailadmin  snow,rain=(root)  /usr/sbin/postfix, /usr/sbin/postsuper, /usr/bin/doveadm
  1. 用户 whoami 可以在所有主机上以 root 用户不输入密码执行 rndc reload 这条命令(正常来说 sudo 都是要求输入调用方的密码的):
1
whoami  ALL=(root)  NOPASSWD: /usr/sbin/rndc reload
  1. 当在 users 组里的用户以 sudo passwd 或者 sudo passwd root 方式运行命令的时候,可以直接把 root 用户的密> 码 改掉,这真是太危险了!必须要把这两条命令禁止掉,但我们又希望用户可以通过 sudo passwd 修改其它用户的密码。那么我们可以在命令前面加上 ! 来表示不可执行的命令:
1
%users  ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
  1. 总结一下,语法如下:
1
用户名/%用户组名 主机名=(目标用户名) 命令1, 命令2, !命令3

开启32支持

1
vim /etc/pacman.conf

去掉 [multilib] 一节中两行的注释,来开启 32 位库支持

设置中文社区仓库

1
vim /etc/pacman.conf

最底下增加两行

1
2
[archlinuxcn]
Server = https://mirrors.cloud.tencent.com/archlinuxcn/$arch # 清华大学开源软件镜像站

退出并刷新

安装桌面环境

以往使用ubuntu都是用的gnome,这次尝试一下kde

kdeK Desktop Environment是一个国际化的自由软件项目,提供桌面环境、应用程序和平台,其下有一个著名的桌面就是plasma也就是我们要安装的

安装以下包

1
2
pacman -S plasma-meta konsole dolphin 
# plasma-meta 元软件包、konsole 终端模拟器和 dolphin 文件管理器

会有一些包选择,这个默认回车就行了

安装完毕后执行

1
2
3
4
systemctl enable sddm
#开启sddm服务开机自启动
systemctl start sddm
#直接启动显示管理器

之后输入密码进入桌面

基础功能包

安装一些基础功能包

1
2
3
4
5
6
7
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf# 声音固件
sudo pacman -S ntfs-3g # 使系统可以识别 NTFS 格式的硬盘
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei # 安装几个开源中文字体。一般装上文泉驿就能解决大多 wine 应用中文方块的问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra # 安装谷歌开源字体及表情
sudo pacman -S ark # 压缩软件。在 dolphin 中可用右键解压压缩包
sudo pacman -S gwenview # 图片查看器
sudo pacman -S packagekit-qt6 packagekit appstream-qt appstream # 确保 Discover(软件中心)可用,需重启

archlinuxcn资源

1
2
sudo pacman -S archlinuxcn-keyring # cn 源中的签名(archlinuxcn-keyring 在 archlinuxcn)
sudo pacman -S yay # yay 命令可以让用户安装 AUR 中的软件(yay 在 archlinuxcn)

vmtools

vmware下安装操作系统怎么能少的了vmtools

由于官方的vmtools更新维护不足,我们使用open-vm-tools替代

1
2
3
4
5
6
7
sudo pacman -S xf86-video-vmware xf86-input-vmware
sudo pacman -S gtkmm gtk2
sudo pacman -S gtkmm3
#这几个都是相关的依赖不能缺少
sudo pacman -S open-vm-tools
sudo systemctl enable --now vmtoolsd.service
sudo systemctl enable --now vmware-vmblock-fuse.service

这样搞完以后基本上就完成了,为什么说基本上

因为此时如果你使用的是Wayland窗口系统,那么会发现主机向虚拟机复制没问题,但无法从虚拟机往主机复制

倒腾了许久,最后还是在wiki上翻到VMware/安装 Arch Linux 为虚拟机 - Arch Linux 中文维基

发现切换到x11就能够解决,应该是wayland和vmtools的适配不是很好

另外这么一切换发现整个图形界面的流畅度明显提高,之前总是感觉有一丝的延迟,用着怪难受的

还有就是鼠标完全被限制在虚拟机内部不能自由移出,这个也在切换x11后解决,用起来舒服多了,不用总是按ctrl+alt

中文输入法

1
2
sudo pacman -S fcitx5-im # 输入法基础包组
sudo pacman -S fcitx5-chinese-addons # 官方中文输入引擎

之后修改vim ~/.config/environment.d/im.conf

1
2
3
4
5
6
# fix fcitx problem
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

由于fcitx5自带词库稍有些简陋所以可以额外安装一些备用

1
sudo pacman -S fcitx5-rime

zsh

1
2
sudo pacman -S zsh zsh-autosuggestions zsh-syntax-highlighting zsh-completions
sudo pacman -S autojump

修改用户默认shell

1
2
chsh -s /usr/bin/zsh
sudo chsh -s /usr/bin/zsh root#修改root

之后重启系统

打开终端会有一个zsh初始化设置

按下 0 将创建一个只包含注释的 ~/.zshrc 文件,在下次启动时不会再次弹出设置选项

为了使插件生效,需要设置~/.zshrc

基础使用

pacman

Arch使用pacman作为包管理器

安装

pacman -S pkg1 pkg2 ...

在安装之前会先与软件库进行同步。

卸载

pacman -R 软件包名

卸载一个包并删除所有依赖

pacman -Rs 软件包名

删除一个包,以及其不被其他包所需要的依赖项

升级

pacman -Syu

  • S 代表同步
  • y 代表更新本地存储库
  • u 代表系统更新