Skip to content

Commit 237ee25

Browse files
committed
Add: Prepare for kernels
1 parent d01d712 commit 237ee25

7 files changed

Lines changed: 142 additions & 42 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package airootfs
2+
3+
import (
4+
"log/slog"
5+
"os"
6+
"os/exec"
7+
"path"
8+
"strings"
9+
10+
"github.com/FascodeNet/alterlinux/alteriso5/utils"
11+
)
12+
13+
type Env struct {
14+
Arch string
15+
Dir string
16+
initilized bool
17+
}
18+
19+
func New(dir, arch string) (*Env, error) {
20+
env := Env{
21+
Arch: arch,
22+
Dir: dir,
23+
}
24+
25+
entry, err := os.ReadDir(dir)
26+
if err != nil {
27+
return nil, err
28+
29+
}
30+
31+
if len(entry) > 0 {
32+
env.initilized = true
33+
}
34+
35+
return &env, nil
36+
}
37+
38+
func (e *Env) Init() error {
39+
if err := os.MkdirAll(e.Dir, 0755); err != nil {
40+
return err
41+
}
42+
if e.initilized {
43+
return nil
44+
}
45+
46+
pacstrap := exec.Command("pacstrap", "-c", e.Dir, "base", "base-devel", "linux", "linux-firmware", "syslinux")
47+
pacstrap.Env = append(os.Environ(), "LANG=C")
48+
pacstrap.Stdout = os.Stdout
49+
pacstrap.Stderr = os.Stderr
50+
if err := pacstrap.Run(); err != nil {
51+
return err
52+
}
53+
54+
e.initilized = true
55+
56+
return nil
57+
}
58+
59+
func (e *Env) FindKernels() ([]string, error) {
60+
kernels := []string{}
61+
62+
//bootDir := path.Join(e.Dir, "boot")
63+
64+
presetsDir := path.Join(e.Dir, "etc", "mkinitcpio.d")
65+
entry, err := os.ReadDir(presetsDir)
66+
if err != nil {
67+
return nil, err
68+
}
69+
70+
for _, e := range entry {
71+
if e.IsDir() || !strings.HasSuffix(e.Name(), ".preset") {
72+
continue
73+
}
74+
75+
fp := path.Join(presetsDir, e.Name())
76+
env, err := utils.LoadEnvFile(fp)
77+
if err != nil {
78+
continue
79+
}
80+
81+
kernel := env["ALL_kver"]
82+
83+
if kernel != "" {
84+
kernels = append(kernels, kernel)
85+
}
86+
87+
}
88+
89+
slog.Debug("FindKernels:", "kernels", kernels)
90+
return kernels, nil
91+
}

alteriso5/cmd/build/work/chroot/chroot.go

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package mkinitcpio

alteriso5/cmd/build/work/tasks.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66

77
"github.com/FascodeNet/alterlinux/alteriso5/cmd/build/work/airootfs"
88
"github.com/FascodeNet/alterlinux/alteriso5/cmd/build/work/boot"
9-
"github.com/FascodeNet/alterlinux/alteriso5/cmd/build/work/chroot"
109
"github.com/FascodeNet/alterlinux/alteriso5/utils"
1110
)
1211

@@ -26,8 +25,10 @@ var makeBaseDirs *BuildTask = NewBuildTask("makeBaseDirs",
2625

2726
var makeChroot *BuildTask = NewBuildTask("makeChroot", func(work *Work) error {
2827

29-
dir := path.Join(work.Base, work.target.Arch, "airootfs")
30-
env := chroot.New(dir, work.target.Arch)
28+
env, err := airootfs.New(work.GetDirs().Pacstrap, work.target.Arch)
29+
if err != nil {
30+
return err
31+
}
3132
if err := env.Init(); err != nil {
3233
return err
3334

@@ -73,21 +74,22 @@ var makeBootModes *BuildTask = NewBuildTask("makeBootModes", func(w *Work) error
7374
return err
7475
}
7576

77+
78+
7679
return nil
7780
})
7881

79-
return makeSysLinux.Run(w)
82+
return w.RunOnce(makeSysLinux)
8083
})
8184

8285
var makeAirootfs *BuildTask = NewBuildTask("makeAirootfs", func(w *Work) error {
8386

8487
slog.Debug("Copying profile to airootfs...")
8588
airootfsDir := path.Join(w.Base, w.target.Arch, "airootfs")
86-
isoDir := path.Join(w.Base, "iso")
8789

8890
sqfs := airootfs.SquashFS{
8991
Base: airootfsDir,
90-
Out: path.Join(isoDir, w.profile.InstallDir, w.target.Arch, "airootfs.sfs"),
92+
Out: path.Join(w.GetDirs().Iso, w.profile.InstallDir, w.target.Arch, "airootfs.sfs"),
9193
}
9294

9395
return sqfs.Build()

alteriso5/cmd/build/work/work.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ import (
44
"path"
55

66
"github.com/FascodeNet/alterlinux/alteriso5/cmd/build/config"
7-
"github.com/FascodeNet/alterlinux/alteriso5/cmd/build/work/chroot"
87
"github.com/spf13/cobra"
98
)
109

1110
type Work struct {
1211
Base string
13-
Chroots []*chroot.Env
1412
profile *config.Profile
1513
target *config.Target
1614
Cmd *cobra.Command

alteriso5/utils/env.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package utils
2+
3+
import "strings"
4+
5+
func LoadEnvFile(path string) (map[string]string, error) {
6+
lines, err := ReadFileLine(path)
7+
if err != nil {
8+
return nil, err
9+
}
10+
11+
env := make(map[string]string)
12+
13+
for _, line := range lines {
14+
if strings.HasPrefix(line, "#") || !strings.Contains(line, "=") {
15+
continue
16+
}
17+
18+
parts := strings.SplitN(line, "=", 2)
19+
value := strings.TrimPrefix(parts[1], "\"")
20+
value = strings.TrimSuffix(value, "\"")
21+
env[parts[0]] = value
22+
}
23+
24+
return env, nil
25+
26+
}

alteriso5/utils/os.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
"strings"
6+
)
7+
8+
func ReadFileLine(path string) ([]string, error) {
9+
bytes, err := os.ReadFile(path)
10+
if err != nil {
11+
return nil, err
12+
}
13+
14+
lines := strings.Split(string(bytes), "\n")
15+
return lines, nil
16+
}

0 commit comments

Comments
 (0)