详解archlinux安装

发布时间 2023-12-21 02:32:41作者: dchg

本文在 virtualbox 中安装了一个多版本 linux 内核的 archlinux 系统。
笔者使用 KDE 在此系统上使用 bochs 进行自制 64 位操作系统的开发。
参考连接:
笔者参考的安装流程
archlinux中文wiki
archlinux中文社区官网 如果安装遇到报错,官网公告通常会有最近问题的解答。
还有清华、中国科学技术大学的镜像站。下载 archlinux 最新 ISO 系统镜像、查询软件包使用信息。

首先准备好 virtualbox 虚拟机

在镜像网站下载 archlinux 的最新镜像
内存 4G
启动顺序只选择硬盘
两核 cpu
启用 efi
不启用 secure boot
显存拉满
网络选择桥接网卡
usb 3.0

补充

开始安装

参考链接
首先,如何立马关机:

shutdown -h now
reboot # 立马重启
clear # 清屏 或者 ctrl+L

现在我们只能对着黑框框一个字母一个字母敲,不能 ctrlcv 很痛苦。
你还得自己学会 vim,起码知道按 i 进入编辑模式,esc 回到一般模式,一般模式下 x 删除光标当前字母,:wq 保存退出等等。遇到问题搜索去吧你。

用 systemctl 禁用 reflector

它会自动更新 pacman 的 mirrorlist(软件源)。在中国,适得其反。
这是安装镜像中预置的软件,安装完的系统后如果不装不会有。

systemctl stop reflector.service
systemctl status reflector.service
q 退出

确认 UEFI 安装模式

ls /sys/firmware/efi/efivars

在这个目录下有一堆 efi 变量,如果你写过或者熟悉一个支持 uefi 的 bootloader,那么你一定知道这个文件夹。
之后可以尝试 bois 安装? #todo

连接网络

虚拟机已经连好了,确认下 virtualbox 的状态栏就好。

ping www.cnblogs.com

安装过程需要全程联网。

更新系统时钟

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

更换 pacman 国内软件仓库镜像源

vim /etc/pacman.d/mirrorlist

# 放在第一行
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 中国科学技术大学开源镜像站

建立分区

这里只针对虚拟机,sata 协议的硬盘,实机看链接去 bro。

使用 cfdisk 分区。
使用 btrfs 文件系统,之后可以尝试 ext4 文件系统。 #todo

使用 lsblk、fdisk 查看分区情况

fdisk -l # 复查磁盘情况
lsblk # 复查磁盘情况

首先通过以下命令将磁盘转换为 gpt 类型

parted /dev/sdx # 执行 parted,进行磁盘类型变更
(parted) mktable # 输入 mktable
New disk label type? gpt # 输入 gpt,将磁盘类型转换为 GPT 类型。如磁盘有数据会警告,输入 Yes 即可
(parted) quit # 退出 parted 命令行交互

接下来使用 cfdisk,会进入 cfdisk 的界面。

cfdisk /dev/sdx # 对安装 archlinux 的磁盘分区,虚拟机一般是sda,以lsblk为准

注意分区大小,输入 512 MB 是按照硬盘厂商的那种 1000 进制的标准换算的,所以之后 lsblk 会显示小于 512 MB。512 M 才表示 1024 进制的 512 MB,这个cfdisk 界面下方也有提示,请注意仔细阅读提示。

建立 EFI 分区

  1. 选中 Free space > 再选中操作 [New] > 然后按下回车 Enter 以新建 EFI 分区
  2. 输入 分区大小(建议 >= 256MB、<= 1024MB;推荐 512MB)> 然后按下回车 Enter
  3. 选中操作 [Type] > 然后按下回车 Enter > 通过方向键 选中 EFI System > 最后按下回车 Enter

创建 Swap 分区

Swap 分区建议为电脑内存大小的 60%,或者和内存大小相等。将类型更改为 Linux swap

创建主分区

(因为使用 Btrfs 文件系统,所以根目录和用户主目录在一个分区上)
剩下的所有空间,类型默认。

完成写入

【write】写入,退出 cfdisk。

格式化分区

格式化 EFI 分区

mkfs.vfat /dev/sdxn
# 或者
mkfs.fat -F32 /dev/sdxn
# 都是使用 mkfs 创建 FAT32 规范的文件系统,一个是显示指定,一个是方便的命令。
# 一般是sda1,这之后我们就用virtualbox情况下的具体值了。

格式化 Swap 分区

mkswap /dev/sda2

格式化 Btrfs 分区

mkfs.btrfs -L virtualarchlinux /dev/sda3

-L 选项后指定该分区的 LABLE,这里以 myArch 为例,也可以自定义,但不能使用特殊字符以及空格,且最好有意义。

创建子卷

  • 为了创建子卷,我们需要先将 Btrfs 分区挂载到 /mnt 下:
mount -t btrfs -o compress=zstd /dev/sdxn /mnt

命令参数说明:
-t 选项后指定挂载分区文件系统类型
-o 选项后添加挂载参数: compress=zstd —— 开启透明压缩

  • 查看挂载情况
df -h 
  • 创建 Btrfs 子卷
  1. 通过以下命令创建两个 Btrfs 子卷,之后将分别挂载到 / 根目录和 /home 用户主目录:
btrfs subvolume create /mnt/@ # 创建 / 目录子卷
btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
  1. 通过以下命令复查子卷情况:
btrfs subvolume list -p /mnt
  • 子卷创建好后,将 /mnt 卸载掉,以挂载子卷:
umount /mnt

挂载分区

在挂载情况中多多使用 df 确认挂载情况,不对可以及时 umount

df -h 

(df 的显示结果会比参考链接多一个 efivarfs 被挂载到 sys/firmware/efi/efivars)

挂载是有顺序的,需要从根目录开始挂载。使用如下命令挂载子卷:

mount -t btrfs -o subvol=/@,compress=zstd /dev/sda3 /mnt # 挂载 / 目录 主分区
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sda3 /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot 目录
mount /dev/sda1 /mnt/boot # 挂载 /boot 目录 efi分区
swapon /dev/sda2 # 挂载交换分区

df -h
free -h #查看swap分区

pacstrap 安装系统

包括内核和其他必要软件。
内核有四个版本
linux、linux-zen、linux-lts、linux-hardened。
这里我们先装个 linux-lts。

pacstrap /mnt base base-devel linux-lts linux-firmware linux-lts-headers btrfs-progs
pacstrap /mnt networkmanager vim sudo bash bash-completion

fstab 定义分区文件

  1. fstab 用来定义磁盘分区。它是 Linux 系统中重要的文件之一。使用 genfstab 自动根据当前挂载情况生成并写入 fstab 文件:
genfstab -U /mnt > /mnt/etc/fstab
  1. 复查一下 /mnt/etc/fstab 确保没有错误:
cat /mnt/etc/fstab

chroot to your archlinux

使用以下命令把系统环境从 iso 内置的系统切换到我们正在安装的新系统下:

arch-chroot /mnt

设置主机名

/etc/hostname 设置主机名:

vim /etc/hostname

我就叫 varchlinux,或者 va,或者dchgva,或者myarch,whatever。主机名不要包含特殊字符以及空格。

写 hosts 文件

/etc/hosts 设置与主机名匹配的条目:

vim /etc/hosts

加入:

127.0.0.1   localhost
::1         localhost
127.0.1.1   varchlinux.localdomain varchlinux

设置时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#你可以看看 /usr/share/zoneinfo/ 里还有哪些时区文件

ln 命令通常用来创建软链接或者硬链接。
可以看到这里建立了一个软连接,可以ls -l查看 /etc/localtime 的文件属性。

将系统时间同步到硬件时间

hwclock --systohc

设置 Locale 文件

Locale 决定了软件使用的语言、书写习惯和字符集。

  • vim 编辑 /etc/locale.gen,去掉 en_US.UTF-8 UTF-8 以及 zh_CN.UTF-8 UTF-8 行前的#
  • 然后使用如下命令生成 locale
locale-gen
  • 然后向 /etc/locale.conf 输入:
echo 'LANG=en_US.UTF-8'  > /etc/locale.conf

设置密码

passwd root

安装 cpu 微码

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

安装引导程序

  • 下载引导程序。
pacman -S grub efibootmgr

-Si 可以搜索安装包信息,-Qi 可以查询已安装包信息。
grub 是我们的引导程序。
efibootmgr 用来被 grub 调用,来写入 NVRAM,grub 设置 uefi 启动得靠它。
(与参考链接不同,我们虚拟机,不装双系统,不需要 os-prober)
你也可以尝试使用 rEFind 引导,但是我觉得丑。

  • 安装 GRUB 到 EFI 分区:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH

命令参数说明:
--efi-directory=/bootgrubx64.efi 安装到之前的指定位置(EFI 分区)
--bootloader-id=ARCH 取名为 ARCH

  • 编辑 /etc/default/grub。
vim /etc/default/grub
  • GRUB_DEFAULT=saved 默认使用保存的内核
  • 可以适当改大 timeout
  • 去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
  • loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错
  • 加入 nowatchdog 参数,这可以显著提高开关机速度
  • GRUB_SAVEDEFAULT=true 保存最后一个使用的内核条目
  • GRUB_DISABLE_SUBMENU=y 禁用 GRUB 子菜单,让你的 grub 首页显得更丰富
    如此设置为安装多内核做准备。

安装更多内核

sudo pacman -S linux linux-headers linux-zen linux-zen-headers linux-hardened linux-hardened-headers

zen 版本性能好,lts 版本稳定,hardened 版本更安全,arch 原版更纯。
查看当前内核版本:

uname -r

更新 grub 引导配置。

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

安装完成

exit # 退回安装环境(iso的临时系统)
umount -R /mnt # 卸载新分区
reboot # 重启

此时你会看到一个 grub 页面,选一个你喜欢的内核吧。

登录到 root。

systemctl enable --now NetworkManager # 设置开机自启并立即启动 NetworkManager 服务
ping www.bilibili.com # 测试网络连接

neofetch 时间

pacman -S neofetch
neofetch

快照

使用 virtualbox 的快照功能,创建一个快照,尝试复制快照、恢复快照系统,确认快照可用。
在使用不稳定系统(你不熟悉的、随时可能滚挂的 archlinux)下进行开发,随时保证快照可用是必要的。
在有快照的情况下,你可以开心的 rm -rf /* 了。

安装桌面

参考链接

pacman -Syu # 升级系统中全部包,谨慎使用,可能滚挂。

设置 root 的默认编辑器。

vim ~/.bash_profile

加入:

export EDITOR='vim'

准备非 root 用户

useradd -m -G wheel -s /bin/bash myusername
  • -m 创建用户的同时创建用户家目录
  • -G 选项后指定附加组
    • wheel 附加组可 sudo 进行提权
  • -s 选项后指定 shell 程序
  • myusername 用户名(请自定义,但不要包含空格和特殊字符)
passwd myusername 

配置用户权限

通过 visudo 命令编辑 sudoers 文件:

EDITOR=vim visudo # 这里需要显式的指定编辑器,因为上面的环境变量还未生效
# 当然你可以 source 一下 bash 配置文件,然后 visudo

找到如下这样的一行,去掉注释符号 #

#%wheel ALL=(ALL:ALL) ALL

关于 /etc/sudoers.d 的自由配置和详细解释,请自行搜索。 #todo

开启 32 位支持库(软件源)并设置 Arch Linux 中文社区软件源仓库(archlinuxcn)

编辑 /etc/pacman.conf 文件:

vim /etc/pacman.conf

去掉 [multilib] 一节中两行的注释,来开启 32 位库支持。
在文档结尾处加入 [archlinuxcn] 源。

[multilib]
Include = /etc/pacman.d/mirrorlist

[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch # 清华大学开源软件镜像站 推荐
Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch # 哈尔滨工业大学开源镜像站
Server = https://repo.huaweicloud.com/archlinuxcn/$arch # 华为开源镜像站

更新本地 pacman 软件数据库

pacman -Syu 
pacman -Syyu # 更新数据库并更新所有软件,慎用。

安装 KDE Plasma 桌面环境

新手推荐安装 KDE Plasma 桌面环境,此外有 GNOME、 Xfce 等桌面环境和一众窗口管理器可供选择。本教程仅列出 KDE 安装使用教程。

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

kde 默认安装 xorg,之后我们可以试用下 wayland,请查询参考链接。 #todo
wayland 和 xorg 可以在 sddm 进行选择,也就是说可以共存。

配置并启动 greeter sddm

开启 sddm.service 守护进程(开机启动):

systemctl enable sddm
systemctl start sddm  # sddm,启动!或者 reboot

安装虚拟机适配软件

ping www.bilibili.com # 测试网络连通性
sudo pacman -S virtualbox-guest-utils # 安装 VirtualBox 客体机插件
sudo systemctl enable vboxservice.service # 启动 vboxservice 服务

打开 virtualbox 菜单栏的设备 > 共享粘贴板、拖放,双向。
此时就可以快乐地使用 kconsole 终端模拟器进行顺畅地 ctrlcv 了,可喜可贺。
安装了适配软件后,home+c 一下就能实现自动调整桌面显示尺寸(KDE)。但是 ctrl+alt+Fn 切换到终端(有些笔记本带复合键地还得加 Fn)无法实现自动调整显示大小,也得按 home 键退出鼠标捕获。

安装一些桌面基础功能包

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 firefox chromium # 安装常用的火狐、chromium 浏览器
sudo pacman -S ark # 压缩软件。在 dolphin 中可用右键解压压缩包
sudo pacman -S packagekit-qt5 packagekit appstream-qt appstream # 确保 Discover(软件中心)可用,需重启
sudo pacman -S gwenview # 图片查看器
sudo pacman -S steam # 游戏商店。看完显卡驱动章节再使用 

安装 archlinuxcn 源还需认证:

先验证 archlinuxcn(软件包维护者) 的 gpg 密钥,然后安装 yay。

sudo pacman -S archlinuxcn-keyring # cn 源中的签名(archlinuxcn-keyring 在 archlinuxcn)
sudo pacman -S yay # yay 命令可以让用户安装 AUR 中的软件(yay 在 archlinuxcn)
  • 最近(2023.12.20),安装 archlinuxcn-keyring 时报错,安装密钥失败。
error: archlinuxcn-keyring: Signature from "Jiachen YANG (Arch Linux Packager Signing Key) " is marginal trust
sudo pacman-key --lsign-key "farseerfc@archlinux.org"
  • 之后继续安装 archlinuxcn-keyring :
sudo pacman -S archlinuxcn-keyring

究其原因是 archlinuxcn 的 gpg keyring 没有跟上 archlinux 官方的 gpg keyring 变动(删除了一个 master key),导致 gpg 推算 archlinuxcn 的 key 缺乏信任,从而不能自动信任上述包的签名。所以只要手动信任那个 “过时” 的 master key 就能继续安装 archlinuxcn-keyring 了。
(在密钥环这件事上 archlinuxcn 之前也有没跟上的情况,csdn 一堆解决上次问题的博客。)

配置非 root 账户的默认编辑器(没什么必要)

vim ~/.bashrc
# 添加 export EDITOR='vim'

设置系统为中文

打开 System Settings > Language and Regional Settings > 在 Language 中点击 Add languages... > 选择中文加入 ADD,再拖拽到第一位 > 点击 Apply

安装输入法

如有需要可以参阅 Fcitx5 官方文档。这里也可以尽情自定义

sudo pacman -S fcitx5-im # 输入法基础包组
sudo pacman -S fcitx5-chinese-addons # 官方中文输入引擎
sudo pacman -S fcitx5-anthy # 日文输入引擎
sudo pacman -S fcitx5-pinyin-moegirl # 萌娘百科词库。二刺猿必备(archlinuxcn)
sudo pacman -S fcitx5-material-color # 输入法主题

设置环境变量(X11):

sudo vim /etc/environment

加入:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

打开 系统设置 > 区域设置 > 输入法
点击提示信息中的 运行 Fcitx
按照你的习惯配置输入法相关选项。比如 shift 切换中英文。

如果你需要文件系统快照、显卡驱动、网络代理,可以查询参考链接。 #todo

日常使用

这里主要是自己的个人习惯。

以空会话启动

默认情况下,KDE 桌面环境中关机之后再开机会恢复先前保存的对话(如浏览器没有关掉,那么开机之后浏览器还在)。
如果你不喜欢这样,请按照以下步骤设置:

  1. 打开 系统设置 > 点击侧栏 开机与关机 > 桌面会话
  2. 登入时 的选项改为 以空会话启动

ll 命令

在 .bashrc 加入

alias ll='ls -alh --color=auto'

好用的软件

安装 kate 文本编辑器,filelight 磁盘占用查看,unarchiver 可以用来接下 win 平台下的压缩包。

sudo pacman -S kate filelight unarchiver

避免锁屏

可以在右下角菜单栏找到电源选项,勾选不要锁屏。

美化桌面

桌面可以自由放置小工具,更换壁纸,更换 sddm 样式。(默认的 sddm 太丑了)

更多问题

可以参考参考链接的进阶话题。
btrfs 的特性、软件降级,进一步美化,文件系统备份,真机安装,适配 windows 软件,使用别的引导启动/安装,linux 开发环境的使用与维护等等,学无止境。

碎碎念

安装大体过程

安装一个操作系统肯定要经历:
连接网络、更新系统时钟、分区并格式化、挂载、安装系统、配置系统(时区、语言、用户)。
大部分 archlinux 提供的可配置项其他常见系统会自动完成。
除此之外还有更多自由,或是麻烦:
引导安装/启动方式,文件系统选择,分区文件生成,chroot,自定义软件源,自定义桌面。

安装竞速

todo

参观一下别人的视频过程,精简下自己的框架。

最后安装 bochs,开启我们的自制 OS 之路。

sudo -i
pacman -S bochs #当然最好按书编译安装
exit
cd
mkdir -p code/chapter3
cd code/chapter3/
bximage
...