Dec 14, 2023

在aliyun VPS上装archlinux

朋友7ji说他在aliyun VPS上刷了archlinux,我一整个大受震撼。

看了7Ji’s Blog之后,我的脑海里就是这张图:

磁盘hotfix(瞎说的)

这篇博客基本上是照着7ji那篇写的,主要目的是记录一下指令方便以后速查。他那边详细讲解的部分我这就没多写,推荐先去看他那篇博客

下载工具系统

wget https://mirrors.aliyun.com/archlinux/iso/latest/archlinux-x86_64.iso
blkid archlinux-x86_64.iso
# 输出类似于:archlinux-x86_64.iso: BLOCK_SIZE="2048" UUID="2023-12-01-15-40-55-00" LABEL="ARCH_202312" TYPE="iso9660" PTUUID="99a0587f" PTTYPE="dos"
# 记录一下其中的LABEL
sudo mv archlinux-x86_64.iso /archiso
# isoinfo -d -i /archiso

修改Bootloader,下次引导拉起工具系统

借这次机会好好看了下grub Manual,还是比较受用的。

grub的配置文件包括/etc/default/grub(保存控制变量)和/etc/grub.d/下的所有文件(保存启动项)。使用grub-mkconfig读取这两处的配置信息写入/boot/grub/grub.cfg。当然也不是说不能直接改grub.cfg,毕竟人家官方教程有写:

those who feel that it would be easier to write grub.cfg directly are encouraged to do so

虽然我一般不敢直接改/boot/grub/grub.cfg,但7ji写好了配置我就直接抄了:

menuentry "ArchISO (x86_64)" {
    insmod iso9660
    set isofile=/archiso
    loopback lo0 $isofile
    linux (lo0)/arch/boot/x86_64/vmlinuz-linux archisolabel=ARCH_202312 img_dev=/dev/vda3 img_loop=$isofile copytoram=y
    initrd (lo0)/arch/boot/x86_64/initramfs-linux.img
}
# 记得改archisolabel为上文查看iso文件得到的LABEL

注意到传递给内核参数有一个copytoram=y,就是说内核复制到ram中使用,因此之后可以擦除整个硬盘而不担心内核运行出问题。

这里menuentry放的位置也有讲究,grub默认会将光标悬停在第一个选项,超时后自动选择第一项。所以如果把这段配置放在第一个menuentry,下次启动不需要在grub页面选择,自动就会进入该项。(如此操作坏处是,一旦配置有问题,得能进grub拉起旧系统,不然只能重装)

重启,启动后擦除硬盘,重新分区

sudo reboot
# 启动后进入工具系统

工具系统启动后,已经可以开始随意擦写硬盘了,先从分区表开始。

parted /dev/sdX print查看了一下原本的分区是GPT分区。但7ji的说法是因为之后分区文件系统用btrfs,只需要一个分区,所以为了最大化空间利用,所以装了Single-partition MSDOS table。

行吧,虽然也没差多少空间,但他确实没说错。

echo -e 'label: dos\nstart=2048' | sfdisk /dev/vda

一个分区,也不用再分区了,直接格式化

mkfs.btrfs /dev/vda1

然后照抄7ji的subvolume划分

mount /dev/vda1 /mnt
cd /mnt
for subvol in root home var swap; do
    btrfs subvolume create @${subvol}
done
chattr +C @{var,swap}
cd @swap
btrfs filesystem mkswapfile -s 4G swapfile
cd /
umount /mnt

全部挂载

mount /dev/vda1 /mnt -o subvol=@root
for subvol in home var swap; do
    mount /dev/vda1 /mnt/${subvol} -o subvol=@${subvol} --mkdir
done
swapon /mnt/swap/swapfile

安装新系统

剩下的就没啥说的了,码一下我用的代码。

vim /etc/pacman.d/mirrorlist
# aliyun VPS就用aliyun镜像
# Server = http://mirrors.cloud.aliyuncs.com/archlinux/$repo/os/$arch

pacstrap /mnt base linux-hardened grub btrfs-progs vim sudo openssh nftables
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

vim /etc/locale.gen
# 取消en_US.UTF-8 UTF-8行前注释符
locale-gen

vim /etc/locale.conf
# 写入LANG=en_US.UTF-8

vim /etc/hostname
# 写入随便什么hostname

useradd -ms /bin/bash -G wheel lapherder
passwd lapherder

visudo
# 取消%wheel ALL=(ALL:ALL) ALL行前注释符

vim /etc/ssh/sshd_config
#配置sshd 

grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg

vim /etc/systemd/network/20-vpc.network
#写入:
#[Match]
#  Name=ens*
#
#  [Network]
#  DHCP=ipv4

ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl enable sshd systemd-{network,resolve}d nftables

# 取下挂载
reboot