在ProxmoxVE(PVE)7.0中安装ArchLinux
前言
之前在实体机上装过一次Arch,现在尝试在Proxmox VE(后文用 PVE
指代)虚拟环境中跟Arch Wiki的教程装一次ArchLinux。
使用环境:
Linux pve 5.11.22-7-pve #1 SMP PVE 5.11.22-12 x86_64 GNU/Linux
archlinux-2022.03.01-x86_64.iso
准备工作
下载ArchLinux安装环境镜像
Visit the Download page
进入Arch官网的下载页面 https://archlinux.org/download/
选择 BitTorrent Download (recommended)
中的 Magnet link(磁力链)
,使用你喜欢的BT下载工具下载
你当然可以使用迅雷,但是迅雷“只下载不上传”的吸血行为不符合BT的共享精神,还是推荐使用Transmission, qBittorrent一类的正统BT下载工具,这些下载工具会运用他人的上传带宽加速你的下载,同时也会运用你的上传带宽加速他人的下载,从而也帮助他人获得更快的下载速度
下载好镜像后,需要把下载好的这个iso文件放到PVE的镜像目录,镜像目录位于 {储存路径}/template/iso
中,如果你使用的PVE默认的LVM储存(路径是 /var/lib/vz/
),对应的路径应该就是 /var/lib/vz/template/iso
;如果你使用其他磁盘,比如我使用的磁盘名叫 ds-nfs-default
那么在PVE中的对应路径就是 /mnt/pve/ds-nfs-default
,安装镜像就应该放到 /mnt/pve/ds-nfs-default/template/iso
中。
放好安装镜像后,应该就能在PVE网页控制台看到对应镜像了。
如果没有显示你放入的镜像,检查前面步骤。
配置虚拟机环境
所有配置与配置普通虚拟机无差,要注意的是如果选用的是UEFI模式启动,则需要先禁用掉Secure Boot
禁用方法待补充
安装过程
启动安装介质
启动虚拟机,选择默认启动项启动即可进入arch安装介质
连接网络
如果使用的是linux-bridge网络桥接至一个拥有DHCP服务的以太网时,安装环境会自动尝试使用DHCP获取IP,无需额外配置。如果需要手动配置IP,可以参照 Network configuration#Static IP address 的教程来配置。
可以使用ping来测试一下是否能够正常联网。
如果网络配置成功了,推荐通过ssh来远程配置后面的操作,方便复制粘贴。
使用ssh连接来配置(可选,建议)
使用ip addr
来查看当前使用的IP
使用systemctl status sshd
来查看是否正在运行sshd服务,如果显示类似图中所示则代表已经运行
使用passwd
命令来修改当前安装环境的root密码,以方便ssh连接。
重新设置mirrorlist(可选,建议)
使用reflector来获取速度最快的6个镜像,并将地址保存至/etc/pacman.d/mirrorlist
reflector -c China -a 6 --sort rate --save /etc/pacman.d/mirrorlist
reflector -c China -a 6 --sort rate --save /mnt/etc/pacman.d/mirrorlist
打开自动同步时间
timedatectl set-ntp true
如果要检测是否生效,输入 timedatectl status
,显示正确时间则为配置成功
文件系统
磁盘分区
当磁盘被系统识别时会被加载为形如 /dev/sda
,/dev/nvme0n1
或 /dev/mmcblk0
一样的块设备.。使用 lsblk
或者 fdisk
去辨认这些设备。
fdisk -l
以 rom
, loop
or airoot
结尾的设备可以忽略掉。
选择的磁盘需要下列分区:
- 一个根目录分区
/
- UEFI启动模式下的启动分区,格式为[EFI system partition](https://wiki.archlinux.org/title/EFI_system_partition
如果你想要创建任何堆叠块设备如LVM, system encryption 或 RAID,现在就做。(本次安装过程不采用)
这里我按照ArchWiki推荐的分区表设置:
UEFI with GPT
挂载点 | 分区 | 分区类型 | 建议大小 |
---|---|---|---|
/mnt/boot |
/dev/efi_system_partition |
EFI system partition | 至少300 MiB |
[SWAP] |
/dev/swap_partition |
Linux swap | 超过512MiB |
/mnt/dev/root_partition |
Linux x86-64 root (/) |
Linux x86-64 root (/) | 设备剩余全部 |
按 g
并回车将磁盘分区表设置为GPT格式。
按 n
并回车新增一个分区,分区号默认回车,起始扇区默认回车,结束位置输入 +300M
并回车表示分区大小为300M。
重复 n
操作,分别创建好大小为300M,1G,剩余全部的三个分区
按 t
并回车更改分区类型,输入分区编号1并回车,输入分区类型1并回车(1代表EFI system partition)
重复 t
操作将2,3号分区分别改为类型19与类型23(19代表SWAP,23代表Linux x86-64 root)
最后按w
并回车保存分区表。
磁盘格式化
分别键入以下三行命令将刚刚创建好的分区格式化,如果你的设备不是sda
,改为你自己的设备名
mkfs.fat -F 32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3
挂载文件系统
将刚才分好区格式化好的磁盘挂载至/mnt
mount /dev/sda3 /mnt
mkdir -p /mnt/boot #创建/mnt/boot目录供挂载
mount /dev/sda1 /mnt/boot
挂载swap分区
swapon /dev/sda2
安装系统
安装软件包
使用pacstrap(8) 脚本来安装基础软件包,Linux内核以及固件:
(nano是一个文本编辑器,后面会用到,当然如果你喜欢你也可以换成vi/vim)
pacstrap /mnt base linux linux-firmware nano
注意,这一步是联网操作,如果身处天朝要么扶墙要么参照前文 [重新设置mirrorlist(可选,建议)
生成fstab文件
genfstab -U /mnt >> /mnt/etc/fstab
检查一下刚刚生成的fstab文件
cat /mnt/etc/fstab
如果有类似下图的输出则代表生成成功
更换当前的根目录到安装到硬盘上的系统
之前的操作root根目录都是基于iso安装环境的临时root目录,要想在安装在硬盘上的系统操作,就应该通过arch-chroot
命令把当前的root目录更换到硬盘上系统的root目录/mnt
arch-chroot /mnt
如果没有错误,应该会像图中一样发现命令行前缀的变化
修改时区与本地化设置
将时区设置为亚洲/上海
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步硬件时钟
hwclock --systohc
编辑/etc/locale.gen
文件来配置本地化设置
nano /etc/locale.gen
使用ctrl+w来搜索,分别找到#en_US
,zh_CN
带有UTF-8
的两行,去掉前面的#
号,最后ctrl+o并回车保存文件,ctrl+x并回车退出nano。
编辑完成后输入
locale-gen
生成配置。
创建并修改/etc/locale.conf
文件
touch /etc/locale.conf
nano /etc/locale.conf
填入LANG=en_US.UTF-8
并保存。
网络主机名配置
echo "archlinux" >> /etc/hostname
起一个你喜欢的名字替换掉双引号中的内容,这个名字会作为主机名被其他网络设备发现,这里我起的名就是archlinux,记得别用中文
设置root密码
这一步的重要性不必多说
passwd
输入要设置的新密码完回车再重复一次,密码输入界面不会显示你当前输入了多少字符,无论怎么按都是空的。
引导程序
这里我使用GRUB进行UEFI引导
pacman -S dosfstools grub efibootmgr # 安装引导程序
grub-install --target=x86_64-efi --efi-directory=/boot --recheck # 将grub安装至EFI分区
grub-mkconfig -o /boot/grub/grub.cfg # 生成grub配置
安装新系统必要的包
安装完后重启的新系统中还没有诸如dhcp之类的必要包,这里安装一下
pacman -S networkmanager network-manager-applet dhcpcd dialog os-prober mtools ntfs-3g base-devel linux-headers reflector git
之后安装完重启至新安装的系统后还要启动dhcpcd服务,之后再说
保存并重启
到这里硬盘上的新系统就已经安装并配置完成了,先退出chroot环境,卸载掉挂载的硬盘后重启
exit # 返回至arch-chroot之前的环境
umount /mnt/boot
umount /mnt
reboot # 重启
安装后配置
启动必要服务
开启dhcpcd
正常启动后,使用之前配置的root账户密码登录。这个时候使用ip addr
命令会发现并没有获取到IP地址,因为之前安装的dhcpcd服务还没有启用,这里启用一下
systemctl start dhcpcd # 启动dhcpcd
systemctl enable dhcpcd # 使dhcpcd自启
开启sshd
如果想用ssh远程控制也一样,需要启用sshd服务
systemctl start sshd
systemctl enable sshd
注意,还需要去修改sshd的配置文件才能允许root登录/使用密码登录
nano /etc/ssh/sshd_config
将其中PermitRootLogin
前面#号去掉并且将值设置为yes
将其中PasswordAuthentication
前面#号去掉并且将值设置为yes
ctrl+o保存,ctrl+x退出
重启sshd服务
systemctl restart sshd
这时应该就可以通过密码来进行ssh连接了
8 comments
码住
照你的方法安装完以后虚拟机里移除光盘直接无法启动不知道啥情况。
请问secure boot 如何禁用
选用UEFI启动模式的情况下,在PVE控制台启动开机后按F2即可进入UEFI BIOS,将Device Manager -> Secure Boot Configuration -> Current Secure Boot State设置为Disabled
教程很详细,其中有一个问题困扰了我好久,最后查了别的资料解决了问题。教程中“grub-install --target=x86_64-efi --efi-directory=/boot --recheck # 将grub安装至EFI分区”我使用这个命令安装引导一直无法顺利进入系统,查了资料,改为“grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB”顺利进入系统,我的机型是n5105,pve7.2-7,如果有类似问题的可以试试。
nano /etc/ssh/ssh_config
PermitRootLogin应该是写入sshd_config
感谢如此详尽清晰的教程,有一点小问题,dhcpcd在前面安装的时候没有装,装的是NetworkManager, 因此change root后应该使用systemctl start NetworkManger.service吧(ฅ´ω`ฅ)
正好今天在另一台机器上装arch,重新看了一遍这篇文章,发现确实有这个问题。在liveCD安装过程中并没有问题,但是少了一个dhcpcd包,体现在安装完重启后缺少dhcpcd,已经在liveCD chroot环境中安装部分补上dhcpcd了。十分感谢提醒