背景
关于图形界面与命令行界面各有优势,在编译项目的场景下,更倾向于运行命令脚本自动化构建,但是在Windows系统中搭建Shell环境及其复杂,往往功能不全,很容易出现各种小问题。在Windows中也有很多模拟Linux环境的应用,最常见的有Cygwin,MSYS2,WSL等,我使用过其中的几个,使用体验不佳,普遍存在很多问题,而且极易造成系统混乱。那么问题来了,如何优雅的在Windows中使用Linux系统,我觉得最佳方案应该是部署Linux云服务器,这种方法成本比较高;那么另一种方案就是虚拟机了,但是虚拟机性能不高,为此,我选择了可以最小化安装的Arch Linux。
安装
软硬件准备
在虚拟机中新建一个客户机,硬件配置自行选择,网络适配器选择NAT模式,参见虚拟机VMware Workstation Pro v16.0.0使用教程,下载最新的Arch Live ISO,注意一定要选择最新的镜像,老版本镜像可能存在公钥过时问题。
安装步骤
相比于在真实主机中安装Linux系统,在虚拟机中安装要简单很多,不需要考虑网络连接、硬件驱动、兼容性等很多问题。
从镜像中启动系统,对于BIOS固件,Live ISO 使用syslinux作为引导程序;对于UEFI固件,Live ISO 使用GRUB作为引导程序,安装时不必过多在意这些。不同版本的镜像以及固件方式不同,引导界面显示内容不同,通常会有以下几下:
1 | Arch Linux install medium (x86_64, UEFI) |
通常选择第一项即可,第二项提供了一个语音功能的无障碍安装模式,后面是一些进入固件的选项。
会以 root 用户进入 Live 系统:
英语区与中文区通常不需要更改默认键盘布局(US),确认固件类型:
1 | ls /sys/firmware/efi/efivars |
上述命令有输出内容则为UEFI启动,若文件夹不存在则为BIOS启动,虚拟机创建客户机时如果没有更改固件类型默认为BIOS模式。
检查网络连接:
1 | ip link |
因为创建客户机时网络适配器选择的是NAT模式,此处网络连接应该会自动配置完成,即运行 ip link 输出中有IPv4地址,ping 命令测试可以连通。
接下来,对硬盘分区,使用 fdisk 或者 lsblk 列出可用硬盘:
1 | fdisk -l |
在虚拟机中上述命令输出结果通常为 /dev/sda,Live ISO 中提供了fdisk、gdisk、parted等分区工具,使用 fdisk 命令分区:
1 | fdisk /dev/sda |
根据命令提示完成分区操作,推荐分区如下:
BIOS with MBR
挂载点 | 分区 | 分区类型 | 建议大小 |
---|---|---|---|
[SWAP] | /dev/swap_partition | Linux swap | 512MiB |
/mnt | /dev/root_partition | Linux | 磁盘剩余空间 |
UEFI with GPT:
挂载点 | 分区 | 分区类型 | 建议大小 |
---|---|---|---|
/mnt/boot | /dev/efi_system_partition | EFI system partition | 512MiB |
[SWAP] | /dev/swap_partition | Linux swap | 512MiB |
/mnt | /dev/root_partition | Linux x86-64 root (/) | 磁盘剩余空间 |
创建好分区之后,格式化分区:
1 | mkfs.ext4 /dev/root_partition # 根分区文件类型为ext4 |
挂在分区:
1 | mount /dev/root_partition /mnt # 挂载根分区 |
接下来将系统安装到刚刚分区的硬盘中,使用 pacstrap 脚本将 Live ISO 中的文件复制到硬盘中:
1 | pacstrap -K /mnt base linux vim |
虚拟机中只需要最小化安装 base 和 linux 组件,不需要安装 linux-firmware,将 vim 安装进去便于编辑文件。
创建 fstab 文件:
1 | genfstab -U /mnt >> /mnt/etc/fstab |
进入新系统:
1 | arch-chroot /mnt |
设置时区,此处设置为国内时区:
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
语言建议默认选择英文。创建 hostname 与 hosts 文件:
1 | /etc/hostname |
更改镜像,国内使用 Arch 官方镜像速度很慢,改为国内镜像,编辑 /etc/pacman.d/mirrorlist 文件(建议更改系统文件时先备份再更改):
1 | Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch |
设置 root 密码,创建远程登陆用户(ssh禁止使用 root 用户远程登陆):
1 | passwd # 连续输入两次密码 |
编辑 /etc/sudoers 文件,对创建的 test 用户赋予执行 sudo 的权限。
安装相关软件:
1 | pacman -S dhcpcd # DHCP 客户端 |
安装 CPU microcode:
1 | pacman -S amd-ucode # AMD CPU |
安装启动引导程序,启动引导程序有很多,常见的有GRUB(支持 BIOS 与 UEFI)、rEFInd(支持 UEFI),选择 GRUB 作为启动引导程序:
BIOS 启动模式:
1 | pacman -S grub |
UEFI 启动模式:
1 | pacman -S grub efibootmgr # 需要安装 efibootmgr |
完成上述步骤后,重启系统:
1 | exit # 退出 arch-chroot |
关机后需要移除 ISO 镜像才能重新启动,进入系统后执行如下操作:
1 | systemctl enable systemd-networkd systemd-resolved dhcpcd sshd # 设置网络相关软件自启动 |
经过上述操作,虚拟机应该可以正常连接到网络,如果不行,就重启一下虚拟机。然后查看虚拟机 IP 地址,从 Window 中用 ssh 协议登陆到虚拟机,这样在就可以实现复制粘贴功能,推荐一款开源的跨平台终端 Tabby,主机与虚拟机的文件传输,可以使用 Tabby 终端附带的 SFTP 协议或者虚拟机的共享文件夹功能。
在配置完 C 运行环境之后,系统占用仅仅2.3G,相比于其他发行版本,真的精简很多,适合在虚拟机中运行,减少不必要的性能开销。