From cbde799457a8470cd64a09d10827577d005ca6f8 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 28 Nov 2022 18:08:02 +0100 Subject: [PATCH] Make symlinks work --- example/example.hcl | 31 +++++++++++++++++++++++++++---- exec2/driver.go | 2 +- executor/executor_linux.go | 3 ++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/example/example.hcl b/example/example.hcl index fbbe4ad..52b02f6 100644 --- a/example/example.hcl +++ b/example/example.hcl @@ -7,13 +7,36 @@ job "example" { driver = "exec2" config { - command = "/nix/store/y41s1vcn0irn9ahn9wh62yx2cygs7qjj-coreutils-8.32/bin/cat" - args = ["/host-etc/nscd.conf"] - bind_read_only = { + command = "/sw/bin/nix" + args = [ + "--extra-experimental-features", "flakes", + "--extra-experimental-features", "nix-command", + "run", + "github:NixOS/nixpkgs#hello" + ] + bind = { "/nix" = "/nix", - "/etc" = "/host-etc", + } + bind_read_only = { + "/etc" = "/etc", + "/home/lx/.nix-profile" = "/sw", } } + user = "lx" + } + + task "test" { + driver = "exec2" + + config { + command = "/nix/store/30j23057fqnnc1p4jqmq73p0gxgn0frq-bash-5.1-p16/bin/sh" + args = ["-c", "/nix/store/y41s1vcn0irn9ahn9wh62yx2cygs7qjj-coreutils-8.32/bin/ls /*; /nix/store/y41s1vcn0irn9ahn9wh62yx2cygs7qjj-coreutils-8.32/bin/id"] + bind_read_only = { + "/etc" = "/etc", + "/nix" = "/nix", + } + } + user = "lx" } } } diff --git a/exec2/driver.go b/exec2/driver.go index 3624c7c..b223faa 100644 --- a/exec2/driver.go +++ b/exec2/driver.go @@ -434,7 +434,7 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive user := cfg.User if user == "" { - user = "nobody" + user = "0" } if cfg.DNS != nil { diff --git a/executor/executor_linux.go b/executor/executor_linux.go index 4ab8367..8665fd0 100644 --- a/executor/executor_linux.go +++ b/executor/executor_linux.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "io" + "io/fs" "os" "os/exec" "path" @@ -913,7 +914,7 @@ func filepathIsRegular(path string) error { if err != nil { return err } - if !f.Mode().Type().IsRegular() { + if !(f.Mode().Type().IsRegular() || f.Mode().Type() & fs.ModeType == fs.ModeSymlink) { return fmt.Errorf("path was not a regular file") } return nil