教程[8] 在 OracleCloud 上安装 Arch Linux ARM

里面的命令 大部分直接复制就可以,要自己填的基本有注释

开篇废话

Oracle(甲骨文)这几天宣布 旗下 arm 服务器开放并且是永久免费的,甚至一个账号可以创建四台机器(带慈善家),于是我开了几台并且把系统安装成了 ArchLinux

(甲骨文简直是个人博客主/开发者的救星 我的几个 Telegram bot 还有很多网站都在 Oracle)

正题

创建机器

chroot 必须在同架构 cpu 才能弄(为什么呢 还要解释?),所以请确认您的两台机是同一个 cpu 架构的
创建两台机器,这里 chroot 环境我选择了 ubuntu

create_vm-1

依赖

apt install libarchive-tools wget -y

挂载系统盘到另外一台机器

我们首先创建两台同架构 cpu 的机器,创建完成后我们分离掉其中的一个机器的引导卷。
boot-volume-1
分离后,把这个卷挂载到另外一台机器
boot-volume-2

boot-volume-3
选择 半虚拟化
fdisk -l 查看到 /dev/sdb 就说明操作成功了,可以进行下一步操作了

抹盘 && 挂载

这里不抹 /boot/EFI

sudo -s
mkfs.ext4 /dev/sdb1
# e2label /dev/sdb1 'cloudimg-rootfs'
mount /dev/sdb1 /mnt
mkdir /mnt/boot
mount /dev/sdb15 /mnt/boot
rm -fr /mnt/boot/*

这里注意 甲骨文默认 /boot/EFI 只有 100M linux 丢进去后已经所剩不多了,如果还要搞事情的话请把挂载点设置成 /boot/EFI 或者自己分区(这里我采用了原厂分区 没有再分区过)

写系统镜像进去

wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt

chroot

这里我们进行一些操作 先挂载一些分区(参考vps2arch)

mount -t proc proc -o nosuid,noexec,nodev "/mnt/proc"
mount -t sysfs sys -o nosuid,noexec,nodev,ro "/mnt/sys"
mount -t devtmpfs -o mode=0755,nosuid udev "/mnt/dev"
mkdir -p "/mnt/dev/pts" "/mnt/dev/shm"
mount -t devpts -o mode=0620,gid=5,nosuid,noexec devpts "/mnt/dev/pts"
mount -t tmpfs -o mode=1777,nosuid,nodev shm "/mnt/dev/shm"
mount -t tmpfs -o nosuid,nodev,mode=0755 run "/mnt/run"
mount -t tmpfs -o mode=1777,strictatime,nodev,nosuid tmp "/mnt/tmp"
chroot /mnt

# 删除 alarm 用户 
userdel alarm
rm -fr /etc/resolv.conf
echo "nameserver 1.1.1.1" > /etc/resolv.conf
pacman-key --init
pacman-key --populate archlinuxarm
rm -fr /boot/*.img /boot/Image* /boot/dtbs
pacman -Syy
rm -fr /boot/dtbs
pacman -S grub efibootmgr linux linux-headers --noconfirm

# 这几步是之前 grub 读取不到 `Image` 开头的东西弄的,现在应该已经不需要了
cp /etc/grub.d/10_linux /etc/grub.d/10_linux.old
sed -i 's/vmlinux-\*/Image/g' /etc/grub.d/10_linux
sed -i 's/initramfs-\${version}/initramfs-linux/g' /etc/grub.d/10_linux
# 没有 dtb (device tree)
rm -fr /boot/dtbs
grub-install --target arm64-efi --bootloader-id GRUB --efi-directory /boot --removable
# 如果EFI分区为 /boot/EFI 那么路径为 /boot/EFI/grub/grub.cfg
grub-mkconfig > /boot/grub/grub.cfg
# fstab
# 自己分区的话自己手动改一下咯
echo '/dev/sda1 / ext4 noatime,errors=remount-ro 0 0' >> /etc/fstab
echo '/dev/sda15 /boot vfat defaults 0 0' >> /etc/fstab

# 最后设置下密码
passwd
# 密钥登录 谢谢 不要用密码登录。
sed -i 's|[#]*PermitRootLogin prohibit-password|PermitRootLogin yes|g' /etc/ssh/sshd_config

后面退出 chroot 环境 并重启机器(mount无法正常解除挂载 直接重启最方便)

exit
reboot

然后到分离arch的存储卷 挂载回去原来的机器上,启动等待奇迹发生。

如果出现 arch 的机器 无法挂载引导卷情况(附加块存储卷后等了很久又自动分离了),请重新创建机器(不删除引导卷),然后创建的时候勾选之前的引导卷即可。

neofetch

系统就装好了!

在确认可以开机后,我们在 存储里面创建个备份,然后再用备份新建个卷,这样就可以不用再操作一次了~

archlinuxcn 源

echo '[archlinuxcn]' >> /etc/pacman.conf
echo 'Server = https://repo.archlinuxcn.org/$arch' >> /etc/pacman.conf
pacman -Sy
pacman -S archlinux-keyring --noconfirm
pacman -S archlinuxcn-keyring --noconfirm

  1. grub 需要改两处脚本,因为 Arch Linux ARM 的 vmlinuxz 叫做 Image initramfs 也匹配不到。(现在已经可以不修改匹配了)
  2. oracle 面板好难用

总结

学习了扭曲组合如何正确配置引导(之前玩 arm 都是用 uboot 引导的 没有用过 EFI 引导)

另外本文章对于 x86 平台也是一样的,只是 grub 部分变动一下

grub-install --target x86_64-efi --efi-directory /boot --bootloader-id GRUB
grub-mkconfig > /boot/grub/grub.cfg

即可

本质这个教程是 vps2arch 低配版