orpheus/Readme.md
2025-06-23 19:15:34 +03:00

3.9 KiB

Orpheus

Orpheus is a backend for a pixiecore API mode. It provides boot configurations per host with specified MAC-address.

Enpoint Description

Orpheus usppose to respond on:

GET <server_url>/v1/boot/{mac_address}

with a JSON:

{
  "kernel": "https://files.local/kernel",
  "initrd": ["https://files.local/initrd"],
  "cmdline": "selinux=1 coreos.autologin",
  "message": "Booting host"
}

according pixiecore API specification:

kernel (string): the URL of the kernel to boot.
initrd (list of strings): URLs of initrds to load. The kernel will flatten all the initrds into a single filesystem.
cmdline (string): commandline parameters for the kernel. The commandline is processed by Go's text/template library. Within the template, a URL function is available that takes a URL and rewrites it such that Pixiecore proxies the request.
message (string): A message to display before booting the provided configuration. Note that displaying this message is on a best-effort basis only, as particular implementations of the boot process may not support displaying text.

Server Configuration

Orpheus using yaml file for a inventory description:

webserver: "http://my.webserver.net"
hosts:
  "aa:bb:cc:dd:ee:ff": &test
    name: my_pxe_booted_host
    version: version_of_kernel
    type: type_of_kernel
    cmdline:
      - simple_string
      - apkovl: path_to_apkovl_on_webserver.tar.gz
      - modloop
      - ds: path_to_data_source_on_webserver

  "aa:bb:cc:dd:ee:00":
    <<: *test
    name: test2

To boot alpine linux in diskless mode is required three files:

  • kernel
  • initrd
  • modloop

All three lies in one directory on the server, to boot succesfully you have to boot kernel with the same version of initrd and modloop. So it is convinient to setup just version and type of the desired kernel.

webserver - is http webserver in local network which serves file to a booting host. hosts - is a map which contains mac addresses of the booting machines as a keys and booting parameters as value. version in the host patameter directs to the kernel-version directory, type - describes wich type of the file to request, usually it is lts, or virt.

Webserver suppose to have following directory structure: In the root there is 3 types of directories - kernel directory, directory with name apkovl and tiny-cloud. kernel directory can have any name (suppose to have name related to kernel version) and contain kernel, initrd and modloop files. apkovl directory contain aplovl files. tini-cloud directory contains subdirectories with files related to tiniy-cloud config files.

Here is an example

/
├── alpine-3.21         # kernel directory for alpine linux kernel `version` 3.21
│   ├── initramfs-lts   # initrd with `lts` type
│   ├── initramfs-virt  # initrd with `virt` is type
│   ├── modloop-lts
│   ├── modloop-virt
│   ├── vmlinuz-lts     # kernel
│   └── vmlinuz-virt
├── alpine-3.19         # kernel directory for alpine linux version 3.19
│   ├── initramfs-lts
│   ├── initramfs-virt
│   ├── modloop-lts
│   ├── modloop-virt
│   ├── vmlinuz-lts
│   └── vmlinuz-virt
├── apkovl
│   ├── my_apkovl.tar.gz
│   └── backup.apkovl.tar.gz
└── tiny-cloud
    ├── server          # contains tiny-cloud config files for a server node
    │   ├── meta-data
    │   ├── network-config
    │   ├── user-data
    │   └── vendor-data
    └── agent           # contains tiny-cloud config files for agent node
        ├── meta-data
        ├── network-config
        ├── user-data
        └── vendor-data

Usage

Run:

orpheus -i inventory.yaml server