Skip to content

Migrating from Curtin to Eikon

DRP writes an OS image to a machine's disk with one of two deploy engines — Curtin (the original image-deploy content pack) and Eikon (the newer eikon plugin). Migrating is deliberately small: switch one "application" profile and redeploy. Your existing images, parameters, profiles, and pipeline carry over — Eikon reads the same image-deploy/* parameters Curtin already uses.

This page is the shared, OS-agnostic guide; OS-specific notes are on the per-OS pages linked at the end.

Overview

  • Curtin — the original image-deploy content pack.
  • Eikon — a self-contained Go imaging engine. It writes the image and injects first-boot config by mounting the image offline, and additionally supports whole-disk (dd-*) and rootfs (tar-*) images, LVM/SW-RAID, and curtin-style storage plans.

They are mutually exclusive engines for a given deploy, but they plug into the same universal deploy pipeline — which is why the switch is just one profile.

How the selection works

Both engines run under the same workflow (universal-image-deploy) in the universal pipeline. Which engine runs is chosen by one parameter, universal/application, set by an "application" profile:

Engine Application profile Sets universal/application
Curtin (current) universal-application-image-deploy image-deploy
Eikon (target) universal-application-eikon-image-deploy eikon-image-deploy

You keep your usual pipeline entry (e.g. universal-discover) and its discovery/inventory tasks — migrating only swaps the application profile.

Prerequisites

  1. Current content packsuniversal and drp-community-content at recent versions (Eikon's floor is >= 4.15.7). Update them if you haven't lately.
  2. The Eikon plugin installed and Available. Install it from the RackN catalog (UI: Plugins → Catalog → eikon, or via drpcli), then confirm:
    Text Only
    drpcli plugins list | jq -r '.[] | select(.Name=="eikon") | {Name, Available}'
    

Migrate

1. Switch the application profile

On the machine (or the profile/cluster you deploy through):

Text Only
drpcli machines removeprofile <machine-uuid> universal-application-image-deploy
drpcli machines addprofile    <machine-uuid> universal-application-eikon-image-deploy

That's the whole change. Reuse your existing base image as-is — your image parameters carry over because Eikon's eikon/image-url, eikon/image-type, and eikon/install-dev default from your existing image-deploy/image-url, image-deploy/image-type, and image-deploy/install-disk. No new image, format, or storage config is needed to migrate.

2. Deploy

Run the deploy the same way you do today:

Text Only
drpcli machines workflow <machine-uuid> universal-image-deploy
drpcli machines update   <machine-uuid> '{"Runnable":true}'

Eikon erases the disk, writes the image, mounts it offline to inject the DRP agent and first-boot config, then reboots into the deployed OS, which reconnects to DRP. The machine's running agent performs the reboots itself — no manual intervention.

Rollback

Reverting is the same switch in reverse — no image rebuild:

Text Only
drpcli machines removeprofile <machine-uuid> universal-application-eikon-image-deploy
drpcli machines addprofile    <machine-uuid> universal-application-image-deploy

Your image-deploy/* parameters were never removed, so Curtin picks up exactly where it left off. Re-deploy with the same universal-image-deploy workflow.

Beyond migration (optional)

Once migrated, Eikon offers capabilities Curtin doesn't. These are not part of the switch — adopt them later; see the Eikon docs:

  • Eikon-native image formatsdd-zst (recommended; smaller transfer, faster write), qcow, tar-zst. Set these via eikon/image-type (the image-deploy/image-type enum doesn't include them).
  • Custom storage — explicit partitioning, LVM, SW-RAID, or multi-image layouts via the eikon/plan parameter.

Troubleshooting

OS-specific symptoms are on the per-OS pages; these apply to any OS:

  • Deploy fails writing the image / out of space — the target disk must be at least the raw (uncompressed) image size (zstd -l image.raw.zst shows it).
  • Wrong target disk — Eikon installs to /dev/sda unless image-deploy/install-disk is set to a full device path (e.g. /dev/vda, /dev/nvme0n1).
  • Eikon not running — confirm the plugin is Available (re-check after any DRP service restart).

Per-OS guides

  • Windows — Server 2019 / 2022 / 2025 notes.
  • Linux(planned)
  • macOS / Darwin(planned)