DigitalOcean Debian to Arch
DigitalOcean deprecated Arch Linux a while back because it was relatively difficult to support due to the rolling updates. I wrote this script to bring it back! This script downloads a bootstrap Arch Linux image, updates it to the latest version, then overwrites the host operating system with it. Unlike Debian 7.x, Debian 8.x on DigitalOcean boots traditionally (through the MBR and Grub), so no dirty kexec magic is needed.
Warning / Disclaimer
ALL DATA ON THE DROPLET WILL BE UNCONDITIONALLY DESTROYED.This script may cause your VPS to become unbootable. I only recommend running this script on newly created droplets with no important data.
Create a new Debian 8.x droplet (either 32-bit or 64-bit is fine).
Run the script in the droplet as root:
2.1. The safe way:
wget https://raw.githubusercontent.com/lesderid/digitalocean-debian-to-arch/debian8/install.sh less install.sh # Inspect the file to see if it downloaded correctly and doesn't contain malicious code bash install.sh
2.2. The unsafe, but faster way:
curl -s https://raw.githubusercontent.com/lesderid/digitalocean-debian-to-arch/debian8/install.sh | bash -
Follow the instructions when prompted.
Sit back and relax! The system will automatically reboot once complete, and you should have a fully updated Arch Linux system in within minutes.
This script supports several flags, all of which are optional.
The Arch Linux mirror from which the bootstrap image and packages should be downloaded. Defaults to http://mirrors.kernel.org/archlinux
The kernel package to install. Defaults to the vanilla
linuxpackage. Other options include
linux-ltsfor long term support and
linux-grsecfor a kernel with grsecurity/PaX patches.
The architecture of the new Arch Linux installation. Defaults to the architecture of the original Debian image as provided by
uname -m. A 64-bit Debian image may convert to either
i686. A 32-bit Debian image may only convert to
The type of partition table to use. Defaults to
gpt(GUID partition table as used by EFI). The alternative is
The filesystem on which the Arch Linux installation should be installed. Defaults to
btrfs. The alternative is
Disables the parts of the script specific to DigitalOcean.
How it Works
- A sparse disk image is created with the same size of the droplet's disk.
- Three partitions are made and formatted.
- DORoot: A "dummy" partition to keep DigitalOcean happy. When snapshots are restored, new passwords are written here.
- BIOSBoot: The virtual machine BIOS cannot boot from GPT partitions directly, so a small partition is placed here for bootloader code.
- ArchRoot: The main root filesystem for Arch Linux.
- The Arch Linux bootstrap image is downloaded and unpacked onto ArchRoot.
pacman -Syuis called inside the image to pull in all the base packages along with OpenSSH.
- The root password and SSH host keys are copied into the image.
- A special script called
digitalocean-synchronizeis installed into the image. This script is run at every startup to autodetect the network settings from the metadata service. It also detects if the droplet was just restored, and if so, it resets the root password and regenerates the host SSH keys.
- The image is now ready. The script then generates a "blockplan". It is essentially a list of instructions to image the virtual disk with the sparse disk image without requiring any extra space.
- A minimal root filesystem is generated on RAM so that the disk can be unmounted.
- The script calls
systemctl switch-rootto enter the minimal root filesystem.
- The disk is unmounted.
- The blockplan is executed.
- The bootloader (Grub) is installed.