aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-02-25 16:28:57 +0900
committerOphestra <cat@gensokyo.uk>2026-02-25 16:31:52 +0900
commit37d368a7f9ebdf7aaee60ed7e8be5656e7ccf8ba (patch)
tree01f476e31877c0c87c5c524ec63b1b97ed98e5d4
parent2aeac7f582f1f03f9cca5251ec4bc275437ae64c (diff)
internal/rosa: initramfs artifact
This constructs a single-program initramfs and populates /dev/null so the runtime does not throw if the kernel fails to set up console. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/all.go24
-rw-r--r--internal/rosa/images.go16
2 files changed, 33 insertions, 7 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index 6ffbad40..0c80c706 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -10,7 +10,17 @@ import (
type PArtifact int
const (
- ACL PArtifact = iota
+ // ImageInitramfs is the Rosa OS initramfs archive.
+ ImageInitramfs PArtifact = iota
+
+ // Kernel is the generic Rosa OS Linux kernel.
+ Kernel
+ // KernelHeaders is an installation of kernel headers for [Kernel].
+ KernelHeaders
+ // KernelSource is a writable kernel source tree installed to [AbsUsrSrc].
+ KernelSource
+
+ ACL
ArgpStandalone
Attr
Autoconf
@@ -42,9 +52,6 @@ const (
Hakurei
HakureiDist
IniConfig
- Kernel
- KernelHeaders
- KernelSource
Kmod
LibXau
Libcap
@@ -148,6 +155,12 @@ func (t Toolchain) Load(p PArtifact) pkg.Artifact {
// ResolveName returns a [PArtifact] by name.
func ResolveName(name string) (p PArtifact, ok bool) {
p, ok = map[string]PArtifact{
+ "initramfs-image": ImageInitramfs,
+
+ "kernel": Kernel,
+ "kernel-headers": KernelHeaders,
+ "kernel-source": KernelSource,
+
"acl": ACL,
"argp-standalone": ArgpStandalone,
"attr": Attr,
@@ -180,9 +193,6 @@ func ResolveName(name string) (p PArtifact, ok bool) {
"hakurei": Hakurei,
"hakurei-dist": HakureiDist,
"iniconfig": IniConfig,
- "kernel": Kernel,
- "kernel-headers": KernelHeaders,
- "kernel-source": KernelSource,
"kmod": Kmod,
"libXau": LibXau,
"libcap": Libcap,
diff --git a/internal/rosa/images.go b/internal/rosa/images.go
new file mode 100644
index 00000000..40398df2
--- /dev/null
+++ b/internal/rosa/images.go
@@ -0,0 +1,16 @@
+package rosa
+
+import "hakurei.app/internal/pkg"
+
+func (t Toolchain) newImageInitramfs() pkg.Artifact {
+ return t.New("initramfs", TNoToolchain, []pkg.Artifact{
+ t.Load(Zstd),
+ t.Load(Hakurei),
+ }, nil, nil, `
+cd "$(mktemp -d)"
+cp /system/libexec/hakurei/earlyinit init
+((find . | cpio -R 0:0 -o) && (cd / && echo dev/null | cpio -R 0:0 -o)) | \
+ zstd -19 > /work/initramfs.zst
+`)
+}
+func init() { artifactsF[ImageInitramfs] = Toolchain.newImageInitramfs }