[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 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