From 36313c7a553acc9d20d2063983f12347010acfba Mon Sep 17 00:00:00 2001 From: Mike Landau Date: Wed, 18 Oct 2023 11:21:12 -0700 Subject: [PATCH 1/3] [wrappers] Never wrap bash or sed --- internal/wrapnix/wrapper.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/wrapnix/wrapper.go b/internal/wrapnix/wrapper.go index 1dec1b85860..43cb9c6d95c 100644 --- a/internal/wrapnix/wrapper.go +++ b/internal/wrapnix/wrapper.go @@ -21,6 +21,11 @@ import ( "go.jetpack.io/devbox/internal/xdg" ) +var dontWrap = map[string]bool{ + "bash": true, + "sed": true, +} + type CreateWrappersArgs struct { NixBins []string ShellEnvHash string @@ -48,13 +53,17 @@ func CreateWrappers(ctx context.Context, args CreateWrappersArgs) error { _ = os.MkdirAll(destPath, 0o755) bashPath := cmdutil.GetPathOrDefault("bash", "/bin/bash") - sedPath := cmdutil.GetPathOrDefault("sed", "sed") + sedPath := cmdutil.GetPathOrDefault("sed", "/usr/bin/sed") if err := CreateDevboxSymlinkIfPossible(); err != nil { return err } for _, bin := range args.NixBins { + if dontWrap[filepath.Base(bin)] { + continue + } + if err := createWrapper(&createWrapperArgs{ WrapperBinPath: destPath, CreateWrappersArgs: args, From 07a6341faf93bfed6a87c80f9e8e339655e9e837 Mon Sep 17 00:00:00 2001 From: Mike Landau Date: Wed, 18 Oct 2023 13:06:31 -0700 Subject: [PATCH 2/3] Requested changes --- internal/boxcli/root.go | 11 +++++++++++ internal/wrapnix/wrapper.go | 13 ++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/internal/boxcli/root.go b/internal/boxcli/root.go index e83f805acfb..71025863643 100644 --- a/internal/boxcli/root.go +++ b/internal/boxcli/root.go @@ -17,6 +17,7 @@ import ( "go.jetpack.io/devbox/internal/boxcli/featureflag" "go.jetpack.io/devbox/internal/boxcli/midcobra" "go.jetpack.io/devbox/internal/cloud/openssh/sshshim" + "go.jetpack.io/devbox/internal/cmdutil" "go.jetpack.io/devbox/internal/debug" "go.jetpack.io/devbox/internal/telemetry" "go.jetpack.io/devbox/internal/vercheck" @@ -113,6 +114,7 @@ func Execute(ctx context.Context, args []string) int { func Main() { timer := debug.Timer(strings.Join(os.Args, " ")) + setSystemBinaryPaths() ctx := context.Background() if strings.HasSuffix(os.Args[0], "ssh") || strings.HasSuffix(os.Args[0], "scp") { @@ -146,3 +148,12 @@ func listAllCommands(cmd *cobra.Command, indent string) { listAllCommands(childCmd, indent+"\t") } } + +func setSystemBinaryPaths() { + if os.Getenv("DEVBOX_SYSTEM_BASH") == "" { + os.Setenv("DEVBOX_SYSTEM_BASH", cmdutil.GetPathOrDefault("bash", "/bin/bash")) + } + if os.Getenv("DEVBOX_SYSTEM_SED") == "" { + os.Setenv("DEVBOX_SYSTEM_SED", cmdutil.GetPathOrDefault("sed", "/usr/bin/sed")) + } +} diff --git a/internal/wrapnix/wrapper.go b/internal/wrapnix/wrapper.go index 43cb9c6d95c..b02e06cb008 100644 --- a/internal/wrapnix/wrapper.go +++ b/internal/wrapnix/wrapper.go @@ -21,11 +21,6 @@ import ( "go.jetpack.io/devbox/internal/xdg" ) -var dontWrap = map[string]bool{ - "bash": true, - "sed": true, -} - type CreateWrappersArgs struct { NixBins []string ShellEnvHash string @@ -52,18 +47,14 @@ func CreateWrappers(ctx context.Context, args CreateWrappersArgs) error { destPath := filepath.Join(wrapperBinPath(args.ProjectDir)) _ = os.MkdirAll(destPath, 0o755) - bashPath := cmdutil.GetPathOrDefault("bash", "/bin/bash") - sedPath := cmdutil.GetPathOrDefault("sed", "/usr/bin/sed") + bashPath := cmdutil.GetPathOrDefault(os.Getenv("DEVBOX_SYSTEM_BASH"), "/bin/bash") + sedPath := cmdutil.GetPathOrDefault(os.Getenv("DEVBOX_SYSTEM_SED"), "/usr/bin/sed") if err := CreateDevboxSymlinkIfPossible(); err != nil { return err } for _, bin := range args.NixBins { - if dontWrap[filepath.Base(bin)] { - continue - } - if err := createWrapper(&createWrapperArgs{ WrapperBinPath: destPath, CreateWrappersArgs: args, From 181daebb10ce59366aa9fe876bc43e8a25b8be54 Mon Sep 17 00:00:00 2001 From: Mike Landau Date: Wed, 18 Oct 2023 13:19:41 -0700 Subject: [PATCH 3/3] Don't create bin wrappers --- internal/wrapnix/wrapper.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/wrapnix/wrapper.go b/internal/wrapnix/wrapper.go index b02e06cb008..29c57d032a9 100644 --- a/internal/wrapnix/wrapper.go +++ b/internal/wrapnix/wrapper.go @@ -21,6 +21,15 @@ import ( "go.jetpack.io/devbox/internal/xdg" ) +// Avoid wrapping bash and sed to prevent accidentally creating a recursive loop +// We use DEVBOX_SYSTEM_BASH and DEVBOX_SYSTEM_SED so normally we won't use +// user versions, but we want to be extra careful. +// This also has minor performance benefits. +var dontWrap = map[string]bool{ + "bash": true, + "sed": true, +} + type CreateWrappersArgs struct { NixBins []string ShellEnvHash string @@ -55,6 +64,9 @@ func CreateWrappers(ctx context.Context, args CreateWrappersArgs) error { } for _, bin := range args.NixBins { + if dontWrap[filepath.Base(bin)] { + continue + } if err := createWrapper(&createWrapperArgs{ WrapperBinPath: destPath, CreateWrappersArgs: args,