Skip to content

Commit 5855a84

Browse files
committed
refactor(bootstrap): always using bootstrap to exec cmdline
1 parent 789f5dd commit 5855a84

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

cmd/bootstrap/bootstrap.go

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"golang.org/x/sync/errgroup"
77
"linuxvm/pkg/filesystem"
88
"linuxvm/pkg/network"
9+
"os"
10+
"os/exec"
911
)
1012

1113
const (
@@ -15,21 +17,41 @@ const (
1517
)
1618

1719
func main() {
18-
g, _ := errgroup.WithContext(context.Background())
20+
g, ctx := errgroup.WithContext(context.Background())
1921
g.Go(func() error {
20-
err := network.DHClient4(eth0, attempts, verbose)
21-
if err != nil {
22-
logrus.Errorf("failed to get dhcp config: %v", err)
23-
return err
24-
}
25-
return nil
22+
return configureNetwork()
2623
})
2724

2825
g.Go(func() error {
2926
return filesystem.MountTmpfs()
3027
})
3128

29+
g.Go(func() error {
30+
return doExecCmdLine(ctx, os.Args[1], os.Args[2:])
31+
})
32+
3233
if err := g.Wait(); err != nil {
3334
logrus.Errorf("failed to run cmd: %v", err)
3435
}
3536
}
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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
7878

7979
cmdline := vmconfig.Cmdline{
8080
Workspace: "/",
81-
TargetBin: command.Args().First(),
82-
TargetBinArgs: command.Args().Tail(),
81+
TargetBin: "/bootstrap-arm64",
82+
TargetBinArgs: append([]string{command.Args().First()}, command.Args().Tail()...),
8383
Env: command.StringSlice("envs"),
8484
}
8585

@@ -90,7 +90,7 @@ func CreateVM(ctx context.Context, command *cli.Command) error {
9090
logrus.Infof("set network backend: %q", vmc.NetworkStackBackend)
9191
logrus.Infof("set envs: %v", cmdline.Env)
9292
logrus.Infof("set data disk: %v", vmc.DataDisk)
93-
logrus.Infof("set cmdline: %v, %v", cmdline.TargetBin, cmdline.TargetBinArgs)
93+
logrus.Infof("set cmdline: %q, %q", cmdline.TargetBin, cmdline.TargetBinArgs)
9494

9595
err = system.CopyBootstrapInToRootFS(vmc.RootFS)
9696
if err != nil {

0 commit comments

Comments
 (0)