Skip to content

Commit efa3f22

Browse files
committed
packer: prevent accidental overwrites on boot partition
related to gokrazy/gokrazy#264 Currently, both the gokrazy/firmware and the gokrazy/kernel.rpi repository contain an overlays directory. The desired state is that only gokrazy/kernel.rpi contains an overlays directory, as that is the repository from which the overlays are built (whereas the are only copied into the firmware repository). To prevent confusion between different versions, the packer now returns an error instead of silently overwriting files on the boot partition when there are multiple sources for a file.
1 parent 3919dda commit efa3f22

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.21
55
require (
66
github.com/breml/rootcerts v0.2.10
77
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
8-
github.com/gokrazy/internal v0.0.0-20240607160728-3c7bf66a62e9
8+
github.com/gokrazy/internal v0.0.0-20240623083220-71d9c6c36ba4
99
github.com/gokrazy/updater v0.0.0-20230215172637-813ccc7f21e2
1010
github.com/google/go-cmp v0.5.9
1111
github.com/google/renameio/v2 v2.0.0

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ github.com/breml/rootcerts v0.2.10/go.mod h1:24FDtzYMpqIeYC7QzaE8VPRQaFZU5TIUDly
33
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
44
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 h1:C7t6eeMaEQVy6e8CarIhscYQlNmw5e3G36y7l7Y21Ao=
55
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw=
6-
github.com/gokrazy/internal v0.0.0-20240607160728-3c7bf66a62e9 h1:SLjEgU2ufDL13xVW4+BWTcwhGFTOwf2LXAiJQiolASU=
7-
github.com/gokrazy/internal v0.0.0-20240607160728-3c7bf66a62e9/go.mod h1:t3ZirVhcs9bH+fPAJuGh51rzT7sVCZ9yfXvszf0ZjF0=
6+
github.com/gokrazy/internal v0.0.0-20240623083220-71d9c6c36ba4 h1:kkesqri5ZNKIF/QuFjivbr04R+SRx5JpZ0TaD120K/c=
7+
github.com/gokrazy/internal v0.0.0-20240623083220-71d9c6c36ba4/go.mod h1:t3ZirVhcs9bH+fPAJuGh51rzT7sVCZ9yfXvszf0ZjF0=
88
github.com/gokrazy/updater v0.0.0-20230215172637-813ccc7f21e2 h1:kBY5R1tSf+EYZ+QaSrofLaVJtBqYsVNVBWkdMq3Smcg=
99
github.com/gokrazy/updater v0.0.0-20230215172637-813ccc7f21e2/go.mod h1:PYOvzGOL4nlBmuxu7IyKQTFLaxr61+WPRNRzVtuYOHw=
1010
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=

internal/packer/write.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,18 @@ import (
2727
"github.com/gokrazy/tools/third_party/systemd-250.5-1"
2828
)
2929

30-
func copyFile(fw *fat.Writer, dest string, src fs.File) error {
30+
func copyFile(fw *fat.Writer, dest string, src fs.File, srcName string) error {
3131
st, err := src.Stat()
3232
if err != nil {
3333
return err
3434
}
35+
exists, err := fw.Exists(dest)
36+
if err != nil {
37+
return err
38+
}
39+
if exists {
40+
return fmt.Errorf("copyFile(%s, %s): file already exists", dest, srcName)
41+
}
3542
w, err := fw.File(dest, st.ModTime())
3643
if err != nil {
3744
return err
@@ -181,7 +188,7 @@ func (p *Pack) copyGlobsToBoot(fw *fat.Writer, srcDir string, globs []string) er
181188
if err != nil {
182189
return err
183190
}
184-
if err := copyFile(fw, "/"+relPath, src); err != nil {
191+
if err := copyFile(fw, "/"+relPath, src, m); err != nil {
185192
return err
186193
}
187194
}
@@ -330,15 +337,15 @@ func (p *Pack) writeBoot(f io.Writer, mbrfilename string) error {
330337
if err != nil {
331338
return err
332339
}
333-
if err := copyFile(fw, "/EFI/BOOT/BOOTX64.EFI", srcX86); err != nil {
340+
if err := copyFile(fw, "/EFI/BOOT/BOOTX64.EFI", srcX86, "<embedded>"); err != nil {
334341
return err
335342
}
336343

337344
srcAA86, err := systemd.SystemdBootAA64.Open("systemd-bootaa64.efi")
338345
if err != nil {
339346
return err
340347
}
341-
if err := copyFile(fw, "/EFI/BOOT/BOOTAA64.EFI", srcAA86); err != nil {
348+
if err := copyFile(fw, "/EFI/BOOT/BOOTAA64.EFI", srcAA86, "<embedded>"); err != nil {
342349
return err
343350
}
344351
}

0 commit comments

Comments
 (0)