diff --git a/modules.json b/modules.json index d21cf94..2a27d51 100644 --- a/modules.json +++ b/modules.json @@ -11,6 +11,7 @@ "https://raw.githubusercontent.com/blue-build/modules/main/modules/justfiles/module.yml", "https://raw.githubusercontent.com/blue-build/modules/main/modules/rpm-ostree/module.yml", "https://raw.githubusercontent.com/blue-build/modules/main/modules/dnf/module.yml", + "https://raw.githubusercontent.com/blue-build/modules/main/modules/os-release/module.yml", "https://raw.githubusercontent.com/blue-build/modules/main/modules/kargs/module.yml", "https://raw.githubusercontent.com/blue-build/modules/main/modules/initramfs/module.yml", "https://raw.githubusercontent.com/blue-build/modules/main/modules/script/module.yml", diff --git a/modules/os-release/README.md b/modules/os-release/README.md new file mode 100644 index 0000000..cd77c24 --- /dev/null +++ b/modules/os-release/README.md @@ -0,0 +1,13 @@ +# **`os-release` Module** + +The `os-release` module offers a way to modify and set values in the [`/etc/os-release`](https://www.freedesktop.org/software/systemd/man/latest/os-release.html) file in your image. This file contains metadata about the running Linux operating system and is read by various programs. + +## Example + +```yaml +type: os-release +properties: + ID: blue_build + NAME: BlueBuild + PRETTY_NAME: BlueBuild Image +``` diff --git a/modules/os-release/module.yml b/modules/os-release/module.yml new file mode 100644 index 0000000..6648e0e --- /dev/null +++ b/modules/os-release/module.yml @@ -0,0 +1,8 @@ +name: os-release +shortdesc: The `os-release` module offers a way to modify and set values in the /etc/os-release file in your image. +example: | + type: os-release + properties: + ID: blue_build + NAME: BlueBuild + PRETTY_NAME: BlueBuild Image diff --git a/modules/os-release/os-release.nu b/modules/os-release/os-release.nu new file mode 100644 index 0000000..4cd0ce9 --- /dev/null +++ b/modules/os-release/os-release.nu @@ -0,0 +1,34 @@ +#!/usr/bin/env nu + +def main [config: string]: nothing -> nothing { + let config = $config + | from json + | default {} properties + mut os_release = open --raw /etc/os-release + | lines + | parse '{key}={value}' + | transpose --ignore-titles -dr + | str trim -c '"' + | str trim -c "'" + print $'(ansi green)Original release:(ansi reset)' + print $os_release + + for $item in ($config.properties | transpose key value) { + if $item.key in $os_release { + print $'(ansi green)Updating (ansi cyan)($item.key)(ansi green) with value (ansi yellow)($item.value)(ansi reset)' + $os_release = $os_release | update $item.key $item.value + } else { + print $'(ansi green)Adding (ansi cyan)($item.key)(ansi green) with value (ansi yellow)($item.value)(ansi reset)' + $os_release = $os_release | insert $item.key $item.value + } + } + + print $'(ansi green)New release:(ansi reset)' + print $os_release + + $os_release + | transpose key value + | each { $'($in.key)="($in.value)"' } + | str join "\n" + | save --force /etc/os-release +} diff --git a/modules/os-release/os-release.tsp b/modules/os-release/os-release.tsp new file mode 100644 index 0000000..4cb3d0f --- /dev/null +++ b/modules/os-release/os-release.tsp @@ -0,0 +1,13 @@ +import "@typespec/json-schema"; +using TypeSpec.JsonSchema; + +@jsonSchema("/modules/os-release-latest.json") +model OsReleaseLatest { + ...OsReleaseV1; +} + +@jsonSchema("/modules/os-release-v1.json") +model OsReleaseV1 { + /** The properties of the `/etc/os-release` file to set. */ + properties: Record; +}