arch日记
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 | timedatectl set-ntp true # 将系统时间与网络时间进行同步 |
默认时区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
mkswap即make swap area
用于设置并格式化交换分区
mkfs.btrfs -L arch /dev/sda3
这个和第一个命令一样,但这次是将分区创建为btrfs
文件系统,-L arch
用于将arch作为该分区的Lable,也可以是其他可见字符
操作btrfs分区
到这一步我们已经成功格式化了之前创建的三个分区,并且对其进行了对应的文件系统格式化
efi引导区和swap交换区已经设置完成,但我们还需要对btrfs分区进行进一步的操作
1 | mount -t btrfs -o compress=zstd /dev/sda3 /mnt |
分区完成后,我们如何访问这个分区呢,那么还得将其挂在到/mnt节点方便访问
1 | btrfs subvolume create /mnt/@ |
挂载
1 | mount -t btrfs -o subvol=/@,compress=zstd /dev/sda3 /mnt |
mount命令在学习linux内核的时候有不少接触,这个命令还是很强大的
swapon命令用于激活linux地交换空间
检查
1 | df -h |
系统安装
挂载完成后,子卷还是空空荡荡的,接下来就是安装系统
1 | pacstrap /mnt base base-devel linux linux-firmware btrfs-progs |
pacstrap是 Arch Linux 的一个安装工具,用于在已挂载的目标分区中安装基本的软件包
base
:这个软件包组包含构建 Arch Linux 所需的基本组件,如核心工具、库、shell 等。它是构成 Arch Linux 系统的最小配置,安装后系统可以正常启动并进入命令行。base-devel
:包含开发工具包,如gcc
、make
、pkg-config
等,通常用于构建和编译软件包。安装base-devel
是为了方便系统上进行编译和开发工作,也用于 AUR(Arch User Repository)中软件包的编译安装。linux
:这是 Arch Linux 的 Linux 内核包,包含了 Linux 内核和基本的启动配置,是系统的核心组成部分。linux-firmware
:包含大量硬件的固件,支持各种硬件设备(如 Wi-Fi、显卡、蓝牙等),确保系统能识别和支持大多数硬件。btrfs-progs
:这是 Btrfs 文件系统的工具包,包含管理 Btrfs 文件系统的各种工具(如mkfs.btrfs
、btrfs
命令等)。如果系统根分区或其他分区使用了 Btrfs 文件系统,则需要此包来管理和维护它
1 | pacstrap /mnt networkmanager vim sudo zsh zsh-completions |
再安装一些功能性软件
生成fstab文件
fstab
用来定义磁盘分区。它是 Linux 系统中重要的文件之一
1 | genfstab -U /mnt > /mnt/etc/fstab |
change root
之前的所有操作其实都是在引导程序中完成的
现在真正进入新系统
1 | arch-chroot /mnt |
此时,原来安装盘下的 /mnt
目录就变成了新系统的 /
目录
hostname与时区
hostname
1 | vim /etc/hostname |
hosts
1 | vim /etc/hosts |
1 | 127.0.0.1 localhost |
时区
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
设置硬件时间
1 | hwclock --systohc |
设置locale
1 | vim /etc/locale.gen |
设置root
1 | passwd root |
安装微码
1 | pacman -S intel-ucode # Intel |
根据芯片自行选择
安装引导程序
1 | pacman -S grub efibootmgr os-prober |
grub
—— 启动引导器,用于加载和管理系统启动的完整程序,是linux最常见的引导器efibootmgr
——efibootmgr
被grub
脚本用来将启动项写入 NVRAMos-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 | exit |
重启后关闭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
—— 代表可以执行任意命令
几个更详细的例子:
- 在
mailadmin
组里的用户可以作为root
用户,在snow
和rain
这两台主机执行一些邮件服务器控制命令(命令之间用,
分隔):
1 %mailadmin snow,rain=(root) /usr/sbin/postfix, /usr/sbin/postsuper, /usr/bin/doveadm
- 用户
whoami
可以在所有主机上以root
用户不输入密码执行rndc reload
这条命令(正常来说sudo
都是要求输入调用方的密码的):
1 whoami ALL=(root) NOPASSWD: /usr/sbin/rndc reload
- 当在
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, 命令2, !命令3
开启32支持
1 | vim /etc/pacman.conf |
去掉 [multilib]
一节中两行的注释,来开启 32 位库支持
设置中文社区仓库
1 | vim /etc/pacman.conf |
最底下增加两行
1 | [archlinuxcn] |
退出并刷新
安装桌面环境
以往使用ubuntu都是用的gnome,这次尝试一下kde
kde即K Desktop Environment
是一个国际化的自由软件项目,提供桌面环境、应用程序和平台,其下有一个著名的桌面就是plasma也就是我们要安装的
安装以下包
1 | pacman -S plasma-meta konsole dolphin |
会有一些包选择,这个默认回车就行了
安装完毕后执行
1 | systemctl enable sddm |
之后输入密码进入桌面
基础功能包
安装一些基础功能包
1 | sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf# 声音固件 |
archlinuxcn资源
1 | sudo pacman -S archlinuxcn-keyring # cn 源中的签名(archlinuxcn-keyring 在 archlinuxcn) |
vmtools
vmware下安装操作系统怎么能少的了vmtools
由于官方的vmtools更新维护不足,我们使用open-vm-tools替代
1 | sudo pacman -S xf86-video-vmware xf86-input-vmware |
这样搞完以后基本上就完成了,为什么说基本上
因为此时如果你使用的是Wayland窗口系统,那么会发现主机向虚拟机复制没问题,但无法从虚拟机往主机复制
倒腾了许久,最后还是在wiki上翻到VMware/安装 Arch Linux 为虚拟机 - Arch Linux 中文维基
发现切换到x11就能够解决,应该是wayland和vmtools的适配不是很好
另外这么一切换发现整个图形界面的流畅度明显提高,之前总是感觉有一丝的延迟,用着怪难受的
还有就是鼠标完全被限制在虚拟机内部不能自由移出,这个也在切换x11后解决,用起来舒服多了,不用总是按ctrl+alt
中文输入法
1 | sudo pacman -S fcitx5-im # 输入法基础包组 |
之后修改vim ~/.config/environment.d/im.conf
1 | # fix fcitx problem |
由于fcitx5自带词库稍有些简陋所以可以额外安装一些备用
1 | sudo pacman -S fcitx5-rime |
zsh
1 | sudo pacman -S zsh zsh-autosuggestions zsh-syntax-highlighting zsh-completions |
修改用户默认shell
1 | chsh -s /usr/bin/zsh |
之后重启系统
打开终端会有一个zsh初始化设置
按下 0
将创建一个只包含注释的 ~/.zshrc
文件,在下次启动时不会再次弹出设置选项
为了使插件生效,需要设置~/.zshrc
基础使用
pacman
Arch使用pacman作为包管理器
安装
pacman -S pkg1 pkg2 ...
在安装之前会先与软件库进行同步。
卸载
pacman -R 软件包名
卸载一个包并删除所有依赖
pacman -Rs 软件包名
删除一个包,以及其不被其他包所需要的依赖项
升级
pacman -Syu
S
代表同步y
代表更新本地存储库u
代表系统更新