Giter VIP home page Giter VIP logo

digitalocean-debian-to-arch's Introduction

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.

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.

Installation

  1. Create a new Debian 9.x droplet (either 32-bit or 64-bit is fine).

  2. In the droplet, run the following as root:

     # wget https://raw.githubusercontent.com/gh2o/digitalocean-debian-to-arch/debian9/install.sh -O install.sh
     # bash install.sh
    
  3. Follow the instructions when prompted.

  4. Sit back and relax! The system will automatically reboot once complete, and you should have a fully updated Arch Linux system in within minutes.

Advanced Configuration

This script supports several flags, all of which are optional.

  • --archlinux_mirror
    The Arch Linux mirror from which the bootstrap image and packages should be downloaded. Defaults to http://mirrors.kernel.org/archlinux.
  • --extra_packages
    Installs any extra packages to the Arch installation (e.g. base-devel). Packages should be space-separated and quoted (e.g. --extra_packages "git wget").
  • --grub_timeout
    Overrides the default GRUB_TIMEOUT value of 5 seconds.
  • --kernel_package
    The kernel package to install. Defaults to the vanilla linux package. Other options include linux-lts for long term support and linux-hardened for a kernel with patches from linux-hardened.
  • --mkfs_options
    Extra options to pass to mkfs. Useful for settings bytes per inode on ext4, e.g. --mkfs_options="-i 65536".
  • --target_architecture
    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 x86_64 or i686. A 32-bit Debian image may only convert to i686.
  • --target_disklabel
    The type of partition table to use. Defaults to gpt (GUID partition table as used by EFI). The alternative is dos (traditional MBR).
  • --target_filesystem
    The filesystem on which the Arch Linux installation should be installed. Defaults to ext4. The alternative is btrfs.

How it Works

  1. A sparse disk image is created with the same size of the droplet's disk.
  2. 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.
  3. The Arch Linux bootstrap image is downloaded and unpacked onto ArchRoot.
  4. pacman -Syu is called inside the image to pull in all the base packages along with OpenSSH and any other packages put in the --extra_packages option.
  5. The root password and SSH host keys are copied into the image.
  6. A special script called digitalocean-synchronize is 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.
  7. 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.
  8. A minimal root filesystem is generated on RAM so that the disk can be unmounted.
  9. The script calls systemctl switch-root to enter the minimal root filesystem.
  10. The disk is unmounted.
  11. The blockplan is executed.
  12. The bootloader (Grub) is installed.
  13. Reboot!
  14. Done!

digitalocean-debian-to-arch's People

Contributors

alzeih avatar doy avatar fabifont avatar gh2o avatar injust avatar jcaesar avatar kylemanna avatar mgibbs189 avatar txomon avatar xatier avatar z3ntu avatar

Forkers

xbolivarhazboun

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.