Skip to content

Commit d2d13a3

Browse files
authored
Merge pull request #1 from ihexon/main
merge ihexon/main branch
2 parents 89e32fd + 5855a84 commit d2d13a3

File tree

13 files changed

+381
-272
lines changed

13 files changed

+381
-272
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
permissions:
2+
contents: write
3+
14
name: build.yml
25
on:
36
push:

cmd/bootstrap/bootstrap.go

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"github.com/sirupsen/logrus"
66
"golang.org/x/sync/errgroup"
7+
"linuxvm/pkg/filesystem"
78
"linuxvm/pkg/network"
89
"os"
910
"os/exec"
@@ -18,33 +19,39 @@ const (
1819
func main() {
1920
g, ctx := errgroup.WithContext(context.Background())
2021
g.Go(func() error {
21-
err := network.DHClient4(eth0, attempts, verbose)
22-
if err != nil {
23-
logrus.Errorf("failed to get dhcp config: %v", err)
24-
return err
25-
}
26-
return nil
22+
return configureNetwork()
2723
})
2824

29-
//g.Go(func() error {
30-
// cmd := exec.CommandContext(ctx, os.Args[1], os.Args[2:]...)
31-
// cmd.Stdout = os.Stdout
32-
// cmd.Stderr = os.Stderr
33-
// cmd.Stdin = os.Stdin
34-
// logrus.Infof("%q", cmd.Args)
35-
// return cmd.Run()
36-
//})
37-
3825
g.Go(func() error {
39-
cmd := exec.CommandContext(ctx, "/bin/mount", "-o", "bind", "/dev/shm", "/tmp")
40-
cmd.Stdout = os.Stdout
41-
cmd.Stderr = os.Stderr
42-
cmd.Stdin = os.Stdin
43-
logrus.Infof("%q", cmd.Args)
44-
return cmd.Run()
26+
return filesystem.MountTmpfs()
27+
})
28+
29+
g.Go(func() error {
30+
return doExecCmdLine(ctx, os.Args[1], os.Args[2:])
4531
})
4632

4733
if err := g.Wait(); err != nil {
4834
logrus.Errorf("failed to run cmd: %v", err)
4935
}
5036
}
37+
38+
func doExecCmdLine(ctx context.Context, targetBin string, targetBinArgs []string) error {
39+
cmd := exec.CommandContext(ctx, targetBin, targetBinArgs...)
40+
cmd.Stdout = os.Stdout
41+
cmd.Stderr = os.Stderr
42+
cmd.Stdin = os.Stdin
43+
logrus.Infof("cmdline: %q", cmd.Args)
44+
if err := cmd.Run(); err != nil {
45+
logrus.Errorf("failed to run cmd: %v", err)
46+
return err
47+
}
48+
return nil
49+
}
50+
51+
func configureNetwork() error {
52+
if err := network.DHClient4(eth0, attempts, verbose); err != nil {
53+
logrus.Errorf("failed to get dhcp config: %v", err)
54+
return err
55+
}
56+
return nil
57+
}

cmd/main.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func main() {
4141
Name: "envs",
4242
Usage: "set envs for cmdline, e.g. --envs=FOO=bar --envs=BAZ=qux",
4343
},
44-
&cli.StringFlag{
44+
&cli.StringSliceFlag{
4545
Name: "data-disk",
4646
Usage: "set data disk path, the disk will be map into /dev/vdX",
4747
},
@@ -61,11 +61,11 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
6161
return err
6262
}
6363

64-
vmc := &vmconfig.VMConfig{
64+
vmc := vmconfig.VMConfig{
6565
MemoryInMB: command.Int32("memory"),
6666
Cpus: command.Int8("cpus"),
6767
RootFS: command.String("rootfs"),
68-
DataDisk: command.String("data-disk"),
68+
DataDisk: command.StringSlice("data-disk"),
6969
}
7070

7171
tmpdir, err := os.MkdirTemp("", "gvproxy")
@@ -76,9 +76,10 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
7676
vmc.GVproxyEndpoint = fmt.Sprintf("unix://%s/gvproxy-control.sock", tmpdir)
7777
vmc.NetworkStackBackend = fmt.Sprintf("unixgram://%s/vfkit-network-backend.sock", tmpdir)
7878

79-
cmdline := &vmconfig.Cmdline{
80-
TargetBin: command.Args().First(),
81-
TargetBinArgs: command.Args().Tail(),
79+
cmdline := vmconfig.Cmdline{
80+
Workspace: "/",
81+
TargetBin: "/bootstrap-arm64",
82+
TargetBinArgs: append([]string{command.Args().First()}, command.Args().Tail()...),
8283
Env: command.StringSlice("envs"),
8384
}
8485

@@ -88,7 +89,8 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
8889
logrus.Infof("set gvproxy control: %q", vmc.GVproxyEndpoint)
8990
logrus.Infof("set network backend: %q", vmc.NetworkStackBackend)
9091
logrus.Infof("set envs: %v", cmdline.Env)
91-
logrus.Infof("run cmdline: %v, %v", cmdline.TargetBin, cmdline.TargetBinArgs)
92+
logrus.Infof("set data disk: %v", vmc.DataDisk)
93+
logrus.Infof("set cmdline: %q, %q", cmdline.TargetBin, cmdline.TargetBinArgs)
9294

9395
err = system.CopyBootstrapInToRootFS(vmc.RootFS)
9496
if err != nil {
@@ -102,7 +104,7 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
102104
})
103105

104106
g.Go(func() error {
105-
return libkrun.CreateVM(ctx, vmc, cmdline, libkrun.INFO)
107+
return libkrun.StartVM(ctx, vmc, cmdline)
106108
})
107109

108110
return g.Wait()

go.mod

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ module linuxvm
33
go 1.24
44

55
require (
6-
github.com/diskfs/go-diskfs v1.6.1-0.20250518130040-b3152784dab9
76
github.com/google/uuid v1.6.0
7+
github.com/moby/sys/mount v0.3.5-0.20240721113140-2c9636d9130c
8+
github.com/moby/sys/mountinfo v0.7.2
89
github.com/pkg/errors v0.9.1
910
github.com/sirupsen/logrus v1.9.4-0.20241118143825-d1e633264448
1011
github.com/urfave/cli/v3 v3.3.3-0.20250428204840-66d871f8b5bf
@@ -13,15 +14,10 @@ require (
1314
)
1415

1516
require (
16-
github.com/djherbis/times v1.6.0 // indirect
17-
github.com/elliotwutingfeng/asciiset v0.0.0-20240214025120-24af97c84155 // indirect
1817
github.com/google/go-cmp v0.7.0 // indirect
1918
github.com/josharian/native v1.1.0 // indirect
2019
github.com/jsimonetti/rtnetlink v1.3.5 // indirect
21-
github.com/klauspost/compress v1.18.0 // indirect
2220
github.com/mdlayher/netlink v1.7.2 // indirect
23-
github.com/pkg/xattr v0.4.10 // indirect
24-
github.com/ulikunitz/xz v0.5.12 // indirect
2521
gvisor.dev/gvisor v0.0.0-20240916094835-a174eb65023f // indirect
2622
)
2723

0 commit comments

Comments
 (0)