internal/rosa/package: migrate system image
All checks were successful
Test / Create distribution (push) Successful in 1m4s
Test / Sandbox (push) Successful in 2m52s
Test / ShareFS (push) Successful in 3m43s
Test / Hakurei (push) Successful in 3m56s
Test / Sandbox (race detector) (push) Successful in 5m30s
Test / Hakurei (race detector) (push) Successful in 6m30s
Test / Flake checks (push) Successful in 1m22s

The overlay argument also enables migration of stage0.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-23 17:44:38 +09:00
parent ac5488eef6
commit 3f33b62dfd
3 changed files with 46 additions and 36 deletions

View File

@@ -1,29 +0,0 @@
package rosa
import (
"hakurei.app/fhs"
"hakurei.app/internal/pkg"
)
func init() {
meta := Metadata{
Name: "system-image",
Description: "Rosa OS system image",
Version: Unversioned,
}
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
return &meta, t.New("system.img", TNoToolchain, t.Append(nil,
H("squashfs-tools"),
), nil, nil, `
mksquashfs /mnt/system /work/system.img
`, pkg.Path(fhs.AbsRoot.Append("mnt"), false, t.Append(nil,
_musl,
_mksh,
_toybox,
H("kmod"),
H("kernel"),
H("firmware"),
)...))
})
}

View File

@@ -19,3 +19,27 @@ package initramfs-image {
gen_init_cpio,
];
}
package system-image {
description = "Rosa OS system image";
version = unversioned;
exclude = true;
source = earlyinit;
extra = [
musl,
mksh,
toybox,
kmod,
kernel,
firmware,
];
overlay = "/mnt";
exec = generic {
build = "mksquashfs /mnt/system /work/system.img";
};
inputs = [ squashfs-tools ];
}

View File

@@ -932,6 +932,7 @@ func (ctx *evalContext) pf(
output pkg.Artifact
sourceA any
helper Helper
overlay string
inputs, runtimes, extra azalea.Array
)
@@ -960,6 +961,7 @@ func (ctx *evalContext) pf(
k("inputs"): &inputs,
k("runtime"): &runtimes,
k("extra"): &extra,
k("overlay"): &overlay,
}); err != nil {
return
}
@@ -991,13 +993,26 @@ func (ctx *evalContext) pf(
})
}
for _, h := range extraH {
_, a := ctx.t.MustLoad(h)
attr.Paths = append(attr.Paths, pkg.Path(
AbsUsrSrc.Append("extra", h.String()),
attr.Writable,
a,
))
if overlay == "" {
for _, h := range extraH {
_, a := ctx.t.MustLoad(h)
attr.Paths = append(attr.Paths, pkg.Path(
AbsUsrSrc.Append("extra", h.String()),
attr.Writable,
a,
))
}
} else {
var o pkg.ExecPath
if o.P, err = check.NewAbs(overlay); err != nil {
o.P = AbsUsrSrc.Append("extra", overlay)
}
o.A = make([]pkg.Artifact, len(extraH))
for i, h := range extraH {
_, a := ctx.t.MustLoad(h)
o.A[i] = a
}
attr.Paths = append(attr.Paths, o)
}
for _, pair := range files {