前言

简单记录一下安装过程.以下内容大部分取取自于此文章,本文是对ESXI下安装虚拟机基于本人体验而定向修改了下.

以下为UEFI模式启动.取消了安全UFEI引导

更新系统时钟

1
timedatectl set-ntp true    #将系统时间与网络时间进行同步

分区

EFI 分区 512MB

SWAP 分区 4G

根目录 分区 剩余全给 (如果需要给普通用户home的话可以再建)

首先将磁盘转换为 gpt 类型,这里假设比如你想安装的磁盘名称为 sdx。如果你使用 NVME 的固态硬盘,你看到的磁盘名称可能为 nvme0n1。

1
lsblk                       #显示分区情况 找到你想安装的磁盘名称

接下来使用 cfdisk 命令对磁盘分区。进入 cfdisk 后的操作很直观,用键盘的方向键、Tab 键、回车键配合即可操作分配各个分区的大小与格式。一般建议将 EFI 分区设置为磁盘的第一个分区,据说有些主板如果不将 EFI 设置为第一个分区,可能有不兼容的问题。其中 EFI 分区选择EFI System类型,其余两个分区分别选择Linux swap, Linux filesystem类型。

1
2
cfdisk /dev/sdx #来执行分区操作,分配各个分区大小,类型
fdisk -l #分区结束后, 复查磁盘情况

分好后,如图所示

image-20220811191920143

格式化

建立好分区后,需要对分区用合适的文件系统进行格式化。这里用mkfs.ext4命令格式化Linux filesystem类型的分区,用mkfs.vfat命令格式化 EFI 分区。如下命令中的 sdax 中,x 代表分区的序号。格式化命令要与上一步分区中生成的分区名字对应才可以。

磁盘若事先有数据,会提示你: ‘proceed any way?’ 按 y 回车继续即可。

1
2
3
4
mkfs.ext4  /dev/sdax            #格式化根目录分区
mkfs.vfat /dev/sdax #格式化efi分区
mkswap /dev/sdax #格式化swap
swapon /dev/sdax #启用swap

挂载

在挂载时,挂载是有顺序的,先挂载根分区,再挂载 EFI 分区。 这里的 sdax 只是例子,具体根据你自身的实际分区情况来。

1
2
3
mount /dev/sdax  /mnt
mkdir /mnt/efi #创建efi目录
mount /dev/sdax /mnt/efi

添加国内镜像源(可选)

可选,但不推荐.推荐走代理以避免使用国内的镜像等服务.

使用如下命令编辑镜像列表:

1
vim /etc/pacman.d/mirrorlist

其中的首行是将会使用的镜像源。添加中科大或者清华的放在最上面即可。

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

如果其速度不佳,可以手动指定其他镜像源。完整的镜像源列表可参考官方镜像源生成器

镜像源(如 arch linux 清华镜像源)以及第三方源(如 archlinux-cn)可以知道你的 ip 是什么,什么时候更新了系统,什么时候检查了系统,什么时候更新了什么软件,你安装的软件列表是什么。在威权国家的镜像源维护者完全有可能根据威权当局的要求提供这些数据,很多维护者在网络上几乎是实名上网的,他们没有任何抵抗能力,进一步的,威权国家可以根据这些元数据与你产生的其他元数据进行比对,从而对你进行进一步的定位与辨识。简单举一个例子,要求维护者提供或监视安装了 v2ray/qv2ray 等软件包的使用者的 ip,以及安装时间,以及其全部软件列表。

如果你在安装 arch linux 时的网络已经处于代理模式下,可以选择一个与你代理位置较近的,非威权国家的镜像源来使用。如果你在安装 arch linux 时的网络环境没有代理,那么在安装结束后,需要尽快更换一个非威权国家的镜像源来使用。如下列举一些较为优质的国际源。

1
2
3
4
5
Server = https://mirror.archlinux.tw/ArchLinux/$repo/os/$arch   #东亚地区:中华民国
Server = https://mirror.0xem.ma/arch/$repo/os/$arch #北美洲地区:加拿大
Server = https://mirror.aktkn.sg/archlinux/$repo/os/$arch #东南亚地区:新加坡
Server = https://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch #欧洲地区:英国
Server = https://mirrors.cat.net/archlinux/$repo/os/$arch #东亚地区:日本

安装系统

部分是可选的

1
pacstrap /mnt base base-devel linux linux-headers dhcpcd vim open-vm-tools gtkmm3 net-tools asp wget openssh

生成 fstab 文件

fstab 用来定义磁盘分区

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

可选: 复查一下 /mnt/etc/fstab 确保没有错误

1
cat /mnt/etc/fstab

环境切换

把环境切换到新系统的/mnt 下

1
arch-chroot /mnt

时区设置

设置时区,在/etc/localtime 下用/usr 中合适的时区创建符号连接。如下设置上海时区。

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

时间设置

随后进行硬件时间设置,将当前的正确 UTC 时间写入硬件时间。

1
2
timedatectl set-ntp true    #将系统时间与网络时间进行同步,此设置在完成安装后执行
hwclock --systohc --utc # 使用 UTC 时间

语言设置

Locale 决定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准。

首先使用 vim 编辑 /etc/locale.gen,去掉 en_US.UTF-8 所在行以及 zh_CN.UTF-8 所在行的注释符号(#)。这里需要使用 vim 的寻找以及编辑功能,如果你忘记了,请翻到上一节复习 vim 的操作。

1
vim /etc/locale.gen		# 反注释 en_US.UTF-8 和 zh_CN.UTF-8

然后使用如下命令生成 locale。

1
locale-gen

最后向 /etc/locale.conf 导入内容

1
echo 'LANG=en_US.UTF-8'  > /etc/locale.conf	# 设置默认 locale

网络设置

1
systemctl enable dhcpcd.service # 设置为自动启动

设置主机名

首先在/etc/hostname设置主机名

1
vim /etc/hostname

加入你想为主机取的主机名,这里比如叫 myarch。

接下来在/etc/hosts设置与其匹配的条目。

1
vim /etc/hosts

加入如下内容

1
2
3
127.0.0.1   localhost
::1 localhost
127.0.1.1 myarch

某些情况下如不设置主机名,在 KDE 下可能会存在网络情况变更时无法启动 GUI 应用的问题,在终端中出现形如No protocol specified qt.qpa.xcb: could not connect to display的错误,这种情况较为少见[3][4][5]

为 root 用户设置密码

1
passwd root

安装微码

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

安装引导程序

1
2
pacman -S grub efibootmgr   #grub是启动引导器,efibootmgr被 grub 脚本用来将启动项写入 NVRAM。
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB

接下来编辑/etc/default/grub 文件,去掉GRUB_CMDLINE_LINUX_DEFAULT一行中最后的 log level 参数
同时在同一行加入 nowatchdog 参数,这可以显著提高开关机速度.

1
vim /etc/default/grub

image-20220819184545246

另外,GRUB_TIMEOUT=5意思是开机引导时间为5秒,这里建议改为1秒(看个人喜好).

最后生成 GRUB 所需的配置文件

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

完成安装

1
2
3
exit                # 退回安装环境#
umount -R /mnt # 卸载新分区
reboot # 重启

相关配置

Open-VM-Tools

可选,非必要: 先尴尬地查看下系统状态

1
systemctl status

然后启动Open-VM-Tools相关服务并设置为开机启动

1
2
systemctl enable --now vmtoolsd.service
systemctl enable --now vmware-vmblock-fuse.service

可选,非必要: 然后看看都在运行没.

1
2
systemctl status vmtoolsd.service
systemctl status vmware-vmblock-fuse.service

image-20220821180303275

启动后,我们可以看到,支持ESXI的关机操作了~

Vim /etc/default/grub

image-20220819152549788

官方 VMware Tools(强烈不推荐,建议忽略)

1
2
3
4
pacman -R open-vm-tools 
git clone https://github.com/rasa/vmware-tools-patches.git
cd vmware-tools-patches
./patched-open-vm-tools.sh

系统升级

1
pacman -Syu

其他

删除软件包

删除单个软件包,保留其全部已经安装的依赖关系

1
pacman -R package_name

删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:

1
pacman -Rs package_name

警告: 删除类似 gnome 这样的软件包组时,将会忽略组中软件包的安装原因,因为实际操作上执行的是逐一删除软件组的每一个软件,依赖软件包的安装原因不会被忽略。

上面这条命令在移除包含其他所需包的组时有时候会拒绝运行。这种情况下可以尝试

1
pacman -Rsu package_name

要删除软件包和所有依赖这个软件包的程序:

警告: 此操作是递归的,请小心检查,可能会一次删除大量的软件包。

1
pacman -Rsc package_name

要删除一个被其他软件包依赖的软件包,但是不删除依赖这个软件包的其他软件包:

警告: 此操作有破坏系统的能力,应该尽量避免使用。详情请看 避免某些 Pacman 命令

1
pacman -Rdd package_name

pacman 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可以避免备份这些文件:

1
pacman -Rn package_name

注意: pacman 不会删除软件自己创建的文件(例如主目录中的“点文件”不会被删除。)

清理软件包缓存

pacman 将下载的软件包保存在 /var/cache/pacman/pkg/ 并且不会自动移除旧的和未安装版本的软件包。这样做有一些好处:

  1. 这样允许降级)软件包而不需要通过其他方式提取旧版本,例如 Arch Linux Archive).
  2. 被卸载的软件包可以轻易地直接从缓存文件夹重新安装,不需要重新从软件仓库下载。

然而,需要定期手动清理缓存来避免该文件夹无限制增大。

pacman-contrib 提供的 paccache(8) 脚本默认会删除所有缓存的版本和已卸载的软件包,除了最近的3个会被保留:

1
paccache -r	# 需安装 pacman-contrib ,安装命令: pacman -S pacman-contrib

可以启用paccache.timer来每周删除不使用的包

1
systemctl enable --now paccache.timer

要删除目前没有安装的所有缓存的包,和没有被使用的同步数据库,执行:

1
pacman -Sc

删除缓存中的全部文件,使用两次-c开关。这是最为激进的方式,将会清空缓存文件夹:

1
pacman -Scc

更多信息请查看wiki)