aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2024-12-27 18:06:26 +0900
committerOphestra <cat@gensokyo.uk>2024-12-27 18:06:26 +0900
commit2fdbd6a4dd39355e94fdecd7756d4dbf9763b3f0 (patch)
tree03e8b83fc3ce8fdef8bdd036c3e5bc17806d7ecb
parentaef847b5ae055d5f89e00c19bc341b7464164139 (diff)
fst/config: alternative /etc directory
This is useful for static /etc directories provided by self-contained application packages, or in cases where autoetc is useful for paths other than /etc. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--fst/config.go14
-rw-r--r--print.go11
2 files changed, 22 insertions, 3 deletions
diff --git a/fst/config.go b/fst/config.go
index d7d31451..73809a86 100644
--- a/fst/config.go
+++ b/fst/config.go
@@ -70,6 +70,8 @@ type SandboxConfig struct {
Filesystem []*FilesystemConfig `json:"filesystem"`
// symlinks created inside the sandbox
Link [][2]string `json:"symlink"`
+ // read-only /etc directory
+ Etc string `json:"etc,omitempty"`
// automatically set up /etc symlinks
AutoEtc bool `json:"auto_etc"`
// paths to override by mounting tmpfs over them
@@ -127,7 +129,11 @@ func (s *SandboxConfig) Bwrap(os linux.System) (*bwrap.Config, error) {
}
if !s.AutoEtc {
- conf.Dir("/etc")
+ if s.Etc == "" {
+ conf.Dir("/etc")
+ } else {
+ conf.Bind(s.Etc, "/etc")
+ }
}
for _, c := range s.Filesystem {
@@ -147,7 +153,11 @@ func (s *SandboxConfig) Bwrap(os linux.System) (*bwrap.Config, error) {
}
if s.AutoEtc {
- conf.Bind("/etc", Tmp+"/etc")
+ if s.Etc == "" {
+ conf.Bind("/etc", Tmp+"/etc")
+ } else {
+ conf.Bind(s.Etc, Tmp+"/etc")
+ }
// link host /etc contents to prevent passwd/group from being overwritten
if d, err := os.ReadDir("/etc"); err != nil {
diff --git a/print.go b/print.go
index 25d66755..fb5eb361 100644
--- a/print.go
+++ b/print.go
@@ -70,7 +70,16 @@ func printShow(instance *state.State, config *fst.Config, short bool) {
flags = append(flags, "none")
}
fmt.Fprintf(w, " Flags:\t%s\n", strings.Join(flags, " "))
- fmt.Fprintf(w, " Overrides:\t%s\n", strings.Join(sandbox.Override, " "))
+
+ etc := sandbox.Etc
+ if etc == "" {
+ etc = "/etc"
+ }
+ fmt.Fprintf(w, " Etc:\t%s\n", etc)
+
+ if len(sandbox.Override) > 0 {
+ fmt.Fprintf(w, " Overrides:\t%s\n", strings.Join(sandbox.Override, " "))
+ }
// Env map[string]string `json:"env"`
// Link [][2]string `json:"symlink"`