Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Documentation for sample UKI Generation #86

Merged
merged 1 commit into from
Jul 31, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions docs/generate_sample_uki.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
### How to Generate a UKI Image for HTTPBoot with Gardenlinux

#### Step 1: Prerequisites
- Ensure you have the `ukify` tool installed on your system. This tool is essential for creating the UKI image.
- You will need administrative or root privileges to execute most of the commands described.

#### Step 2: Download and Prepare Gardenlinux Release
1. Download the appropriate Gardenlinux release for your architecture. For example, a metal-based system with an AMD64 architecture, use the following command:
```bash
wget https://github.com/gardenlinux/gardenlinux/releases/download/1443.10/metal-gardener_prod_pxe-amd64-1443.10-8d098305.tar.xz
```
2. Extract the downloaded `.tar.xz` file:
```bash
tar -xvf metal-gardener_prod_pxe-amd64-1443.10-8d098305.tar.xz
```
3. Further extract the nested `*.pxe.tar.gz` which contains the kernel and initial RAM disk:
```bash
tar -xzf <nested_tar_name>.pxe.tar.gz
```
You should see files like `vmlinuz`, `initrd`, and `root.squashfs`.

#### Step 3: Obtain the Bootloader Stub
Download the EFI stub required for the UKI creation:
```bash
tbd
```

#### Step 4: Create the UKI Image
Construct the UKI image using the `ukify` command. Ensure to replace placeholders with actual paths and URLs:
```bash
ukify build --stub "/path/to/stub" --linux "/path/to/vmlinuz" --initrd "/path/to/initrd" --cmdline "@cmdline" --output "/path/to/output/test.uki"

# Create file with the name cmdline, with following content
# Use this as the sample command line, replace URLs and paths as necessary
initrd=/path/to/initrd gl.ovl=/:tmpfs gl.live=1 ip=dhcp console=ttyS0,115200 console=tty0 earlyprintk=ttyS0,115200 consoleblank=0 ignition.firstboot=1 ignition.config.url=IGNITION_URL ignition.platform.id=metal gl.url=SQUASHFS_URL
```

#### Step 5: Deploy the Image to a Server
Copy the created `test.uki` to an Nginx server configured to serve the files:
```bash
cp /path/to/output/test.uki /path/to/nginx/server/httpboot/test-uki.efi
# Also, ensure the squashfs file is accessible via HTTP
cp /path/to/root.squashfs /path/to/nginx/server/httpboot/squashfs
```
Ensure EFI files are served by NGINX with the correct content-type.
```bash
application/efi efi;
```

#### Step 6: Configure HTTPBoot
Create a YAML configuration for the HTTPBoot client. Replace placeholders as required:
```yaml
apiVersion: boot.ironcore.dev/v1alpha1
kind: HTTPBootConfig
metadata:
name: httpbootconfig-sample
namespace: boot-operator-system
spec:
ignitionSecretRef:
name: ignition-http-sample
namespace: boot-operator-system
systemUUID: "generate-this-uuid"
systemIPs:
- "1.1.1.1"
- "ip/mac-address-of-interfaces"
ukiURL: "http://[your-server-ip-or-domain]/httpboot/test-uki.efi"
```

Apply this configuration to your cluster and ensure the metal machine is set to boot via HTTPBoot.