Skip to content

Instantly share code, notes, and snippets.

@zengxinhui
Last active March 1, 2025 19:48
Show Gist options
  • Save zengxinhui/01afb43b8d663a4232a42ee9858be45e to your computer and use it in GitHub Desktop.
Save zengxinhui/01afb43b8d663a4232a42ee9858be45e to your computer and use it in GitHub Desktop.
Replace Oracle Cloud Linux with Arch Linux ARM remotely
[02/25/2025]
Refs:
1. http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
2. https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/aarch64/alpine-virt-3.21.3-aarch64.iso
3. https://wiki.alpinelinux.org/wiki/Replacing_non-Alpine_Linux_with_Alpine_remotely
4. https://wiki.archlinux.org/index.php/installation_guide#Configure_the_system
5. https://archlinuxarm.org/platforms/armv8/generic
See also:
1. Convert to Debian https://gist.github.com/zengxinhui/ee0ad6b7c7f99e2ead6cd0d2bd6641fd
2. Convert to arch x64 https://gist.github.com/zengxinhui/f328fdce54f5039689ee3aa4e91fc805
3. Convert to arch arm https://gist.github.com/zengxinhui/01afb43b8d663a4232a42ee9858be45e
Requirement:
Console access.
# Prepare alpine linux, which can be configured to run from ram only.
# Alpine is leveraged to do the conversion.
# In any linux(ubuntu/debian/arch tested) become root first:
sudo su -
cd /tmp && wget https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/aarch64/alpine-virt-3.21.3-aarch64.iso
dd if=alpine-virt-3.21.3-aarch64.iso of=/dev/sda && sync && reboot
# In Alpine with console:
# [Bring up networking]
ip li set eth0 up
udhcpc eth0
# [Setup SSH, answer RET, yes, RET]
setup-sshd
# [set temp password]
passwd
# [At this point it's easier to use SSH to copy & paste]
# [Per Ref #3]
mkdir /media/setup
cp -a /media/sda/* /media/setup
mkdir /lib/setup
cp -a /.modloop/* /lib/setup
/etc/init.d/modloop stop
umount /dev/sda
mv /media/setup/* /media/sda/
mv /lib/setup/* /.modloop/
# [Setup apk and bring in pacman]
setup-apkrepos
# [enable community]
vi /etc/apk/repositories
apk update
apk add e2fsprogs arch-install-scripts
# [Disk partitioning & mounting]
# (use gpt table, set esp partition 15 size 256M), set root partition 1 size remaining)
# g, n, 15, RET, +512m, t, 1, n, RET, RET, RET, p, w
fdisk /dev/sda
ls /dev/sda*
# if sda1 or sda15 is missing, do "/etc/init.d/devfs restart"
mkfs.vfat /dev/sda15
mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
mkdir /mnt/boot
mount /dev/sda15 /mnt/boot
cd /mnt && wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
tar xf /mnt/ArchLinuxARM-aarch64-latest.tar.gz -C /mnt
genfstab -U /mnt >> /mnt/etc/fstab
cd /; arch-chroot /mnt/
# This is your arch root password. Choose carefully and remember it
# do the same for user `alarm` if you prefer to use that account and lots of `sudo`
passwd
userdel -r alarm
cat > ~/.ssh/authorized_keys << EOF
<your key here>
EOF
cat > /etc/resolv.conf << EOF
nameserver 1.1.1.1
nameserver 4.2.2.2
nameserver 8.8.8.8
EOF
pacman-key --init
pacman-key --populate archlinuxarm
pacman --noconfirm -Syu grub efibootmgr
# [EFI boot]
grub-install --efi-directory=/boot --bootloader-id=GRUB
vi /etc/default/grub
# Better console. Comparison below:
# GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
# GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 console=ttyS0,115200"
# Or use perl/sed to replace
# perl -pi.bak -e "s/quiet/console=ttyS0,115200/" /etc/default/grub
# sed -i.bak -e "s/quiet/console=ttyS0,115200/" /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
exit
reboot
@0x09AF
Copy link

0x09AF commented Feb 22, 2025

Try the last 10 lines or so to reinstall grub.
Thanks will do

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment