aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-06-25 20:44:49 +0900
committerOphestra <cat@gensokyo.uk>2025-06-25 20:50:24 +0900
commitaa454b158f3713b2ee47162837dcea1efdce0ee6 (patch)
tree71c9ebf64bf518311fccef1b9c0fc25d59778c26 /cmd
parent7007bd6a1c022dee1951413b820a54f5b4271bbb (diff)
cmd/planterette: remove hsu special case
Remove special case and invoke hakurei out of process. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/fpkg/proc.go29
-rw-r--r--cmd/hsu/main.go2
-rw-r--r--cmd/hsu/package.nix15
-rw-r--r--cmd/hsu/path.go1
-rw-r--r--cmd/planterette/app.go (renamed from cmd/fpkg/app.go)0
-rw-r--r--cmd/planterette/build.nix (renamed from cmd/fpkg/build.nix)0
-rw-r--r--cmd/planterette/main.go (renamed from cmd/fpkg/main.go)26
-rw-r--r--cmd/planterette/paths.go (renamed from cmd/fpkg/paths.go)0
-rw-r--r--cmd/planterette/proc.go60
-rw-r--r--cmd/planterette/test/configuration.nix (renamed from cmd/fpkg/test/configuration.nix)0
-rw-r--r--cmd/planterette/test/default.nix (renamed from cmd/fpkg/test/default.nix)2
-rw-r--r--cmd/planterette/test/foot.nix (renamed from cmd/fpkg/test/foot.nix)0
-rw-r--r--cmd/planterette/test/test.py (renamed from cmd/fpkg/test/test.py)10
-rw-r--r--cmd/planterette/with.go (renamed from cmd/fpkg/with.go)0
14 files changed, 75 insertions, 70 deletions
diff --git a/cmd/fpkg/proc.go b/cmd/fpkg/proc.go
deleted file mode 100644
index 7862e476..00000000
--- a/cmd/fpkg/proc.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package main
-
-import (
- "context"
- "os"
-
- "git.gensokyo.uk/security/hakurei/hst"
- "git.gensokyo.uk/security/hakurei/internal/app"
- "git.gensokyo.uk/security/hakurei/internal/app/instance"
- "git.gensokyo.uk/security/hakurei/internal/hlog"
-)
-
-func mustRunApp(ctx context.Context, config *hst.Config, beforeFail func()) {
- rs := new(app.RunState)
- a := instance.MustNew(instance.ISetuid, ctx, std)
-
- var code int
- if sa, err := a.Seal(config); err != nil {
- hlog.PrintBaseError(err, "cannot seal app:")
- code = 1
- } else {
- code = instance.PrintRunStateErr(instance.ISetuid, rs, sa.Run(rs))
- }
-
- if code != 0 {
- beforeFail()
- os.Exit(code)
- }
-}
diff --git a/cmd/hsu/main.go b/cmd/hsu/main.go
index cefcad48..28571b9b 100644
--- a/cmd/hsu/main.go
+++ b/cmd/hsu/main.go
@@ -41,7 +41,7 @@ func main() {
log.Fatalf("cannot read parent executable path: %v", err)
} else if strings.HasSuffix(p, " (deleted)") {
log.Fatal("hakurei executable has been deleted")
- } else if p != mustCheckPath(hmain) && p != mustCheckPath(fpkg) {
+ } else if p != mustCheckPath(hmain) {
log.Fatal("this program must be started by hakurei")
} else {
toolPath = p
diff --git a/cmd/hsu/package.nix b/cmd/hsu/package.nix
index 96ec5630..5fce566b 100644
--- a/cmd/hsu/package.nix
+++ b/cmd/hsu/package.nix
@@ -16,15 +16,8 @@ buildGoModule {
go mod init hsu >& /dev/null
'';
- ldflags =
- lib.attrsets.foldlAttrs
- (
- ldflags: name: value:
- ldflags ++ [ "-X main.${name}=${value}" ]
- )
- [ "-s -w" ]
- {
- hmain = "${hakurei}/libexec/hakurei";
- fpkg = "${hakurei}/libexec/fpkg";
- };
+ ldflags = lib.attrsets.foldlAttrs (
+ ldflags: name: value:
+ ldflags ++ [ "-X main.${name}=${value}" ]
+ ) [ "-s -w" ] { hmain = "${hakurei}/libexec/hakurei"; };
}
diff --git a/cmd/hsu/path.go b/cmd/hsu/path.go
index b4a7756a..53aa9d10 100644
--- a/cmd/hsu/path.go
+++ b/cmd/hsu/path.go
@@ -9,7 +9,6 @@ const compPoison = "INVALIDINVALIDINVALIDINVALIDINVALID"
var (
hmain = compPoison
- fpkg = compPoison
)
func mustCheckPath(p string) string {
diff --git a/cmd/fpkg/app.go b/cmd/planterette/app.go
index 257956d9..257956d9 100644
--- a/cmd/fpkg/app.go
+++ b/cmd/planterette/app.go
diff --git a/cmd/fpkg/build.nix b/cmd/planterette/build.nix
index b5c50801..b5c50801 100644
--- a/cmd/fpkg/build.nix
+++ b/cmd/planterette/build.nix
diff --git a/cmd/fpkg/main.go b/cmd/planterette/main.go
index 7d44d419..8988d27a 100644
--- a/cmd/fpkg/main.go
+++ b/cmd/planterette/main.go
@@ -13,36 +13,23 @@ import (
"git.gensokyo.uk/security/hakurei/command"
"git.gensokyo.uk/security/hakurei/hst"
"git.gensokyo.uk/security/hakurei/internal"
- "git.gensokyo.uk/security/hakurei/internal/app/instance"
"git.gensokyo.uk/security/hakurei/internal/hlog"
- "git.gensokyo.uk/security/hakurei/internal/sys"
- "git.gensokyo.uk/security/hakurei/sandbox"
)
const shellPath = "/run/current-system/sw/bin/bash"
var (
errSuccess = errors.New("success")
-
- std sys.State = new(sys.Std)
)
func init() {
- hlog.Prepare("fpkg")
+ hlog.Prepare("planterette")
if err := os.Setenv("SHELL", shellPath); err != nil {
log.Fatalf("cannot set $SHELL: %v", err)
}
}
func main() {
- // early init path, skips root check and duplicate PR_SET_DUMPABLE
- sandbox.TryArgv0(hlog.Output{}, hlog.Prepare, internal.InstallFmsg)
-
- if err := sandbox.SetDumpable(sandbox.SUID_DUMP_DISABLE); err != nil {
- log.Printf("cannot set SUID_DUMP_DISABLE: %s", err)
- // not fatal: this program runs as the privileged user
- }
-
if os.Geteuid() == 0 {
log.Fatal("this program must not run as root")
}
@@ -55,15 +42,10 @@ func main() {
flagVerbose bool
flagDropShell bool
)
- c := command.New(os.Stderr, log.Printf, "fpkg", func([]string) error {
- internal.InstallFmsg(flagVerbose)
- return nil
- }).
+ c := command.New(os.Stderr, log.Printf, "planterette", func([]string) error { internal.InstallFmsg(flagVerbose); return nil }).
Flag(&flagVerbose, "v", command.BoolFlag(false), "Print debug messages to the console").
Flag(&flagDropShell, "s", command.BoolFlag(false), "Drop to a shell in place of next hakurei action")
- c.Command("shim", command.UsageInternal, func([]string) error { instance.ShimMain(); return errSuccess })
-
{
var (
flagDropShellActivate bool
@@ -84,7 +66,7 @@ func main() {
}
/*
- Look up paths to programs started by fpkg.
+ Look up paths to programs started by planterette.
This is done here to ease error handling as cleanup is not yet required.
*/
@@ -100,7 +82,7 @@ func main() {
*/
var workDir string
- if p, err := os.MkdirTemp("", "fpkg.*"); err != nil {
+ if p, err := os.MkdirTemp("", "planterette.*"); err != nil {
log.Printf("cannot create temporary directory: %v", err)
return err
} else {
diff --git a/cmd/fpkg/paths.go b/cmd/planterette/paths.go
index aa581c9e..aa581c9e 100644
--- a/cmd/fpkg/paths.go
+++ b/cmd/planterette/paths.go
diff --git a/cmd/planterette/proc.go b/cmd/planterette/proc.go
new file mode 100644
index 00000000..78677fab
--- /dev/null
+++ b/cmd/planterette/proc.go
@@ -0,0 +1,60 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "io"
+ "log"
+ "os"
+ "os/exec"
+
+ "git.gensokyo.uk/security/hakurei/hst"
+ "git.gensokyo.uk/security/hakurei/internal"
+ "git.gensokyo.uk/security/hakurei/internal/hlog"
+)
+
+var hakureiPath = internal.MustHakureiPath()
+
+func mustRunApp(ctx context.Context, config *hst.Config, beforeFail func()) {
+ var (
+ cmd *exec.Cmd
+ st io.WriteCloser
+ )
+
+ if r, w, err := os.Pipe(); err != nil {
+ beforeFail()
+ log.Fatalf("cannot pipe: %v", err)
+ } else {
+ if hlog.Load() {
+ cmd = exec.CommandContext(ctx, hakureiPath, "-v", "app", "3")
+ } else {
+ cmd = exec.CommandContext(ctx, hakureiPath, "app", "3")
+ }
+ cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
+ cmd.ExtraFiles = []*os.File{r}
+ st = w
+ }
+
+ go func() {
+ if err := json.NewEncoder(st).Encode(config); err != nil {
+ beforeFail()
+ log.Fatalf("cannot send configuration: %v", err)
+ }
+ }()
+
+ if err := cmd.Start(); err != nil {
+ beforeFail()
+ log.Fatalf("cannot start hakurei: %v", err)
+ }
+ if err := cmd.Wait(); err != nil {
+ var exitError *exec.ExitError
+ if errors.As(err, &exitError) {
+ beforeFail()
+ internal.Exit(exitError.ExitCode())
+ } else {
+ beforeFail()
+ log.Fatalf("cannot wait: %v", err)
+ }
+ }
+}
diff --git a/cmd/fpkg/test/configuration.nix b/cmd/planterette/test/configuration.nix
index ce74228a..ce74228a 100644
--- a/cmd/fpkg/test/configuration.nix
+++ b/cmd/planterette/test/configuration.nix
diff --git a/cmd/fpkg/test/default.nix b/cmd/planterette/test/default.nix
index dcd2cc66..3ff76fcf 100644
--- a/cmd/fpkg/test/default.nix
+++ b/cmd/planterette/test/default.nix
@@ -9,7 +9,7 @@ let
buildPackage = self.buildPackage.${system};
in
nixosTest {
- name = "fpkg";
+ name = "planterette";
nodes.machine = {
environment.etc = {
"foot.pkg".source = callPackage ./foot.nix { inherit buildPackage; };
diff --git a/cmd/fpkg/test/foot.nix b/cmd/planterette/test/foot.nix
index 76b677ac..76b677ac 100644
--- a/cmd/fpkg/test/foot.nix
+++ b/cmd/planterette/test/foot.nix
diff --git a/cmd/fpkg/test/test.py b/cmd/planterette/test/test.py
index 9b9dfc16..b551dc7a 100644
--- a/cmd/fpkg/test/test.py
+++ b/cmd/planterette/test/test.py
@@ -79,15 +79,15 @@ print(machine.succeed("sudo -u alice -i hakurei version"))
machine.wait_for_file("/run/user/1000/wayland-1")
machine.wait_for_file("/tmp/sway-ipc.sock")
-# Prepare fpkg directory:
+# Prepare planterette directory:
machine.succeed("install -dm 0700 -o alice -g users /var/lib/hakurei/1000")
-# Install fpkg app:
-swaymsg("exec fpkg -v install /etc/foot.pkg && touch /tmp/fpkg-install-done")
-machine.wait_for_file("/tmp/fpkg-install-done")
+# Install planterette app:
+swaymsg("exec planterette -v install /etc/foot.pkg && touch /tmp/planterette-install-ok")
+machine.wait_for_file("/tmp/planterette-install-ok")
# Start app (foot) with Wayland enablement:
-swaymsg("exec fpkg -v start org.codeberg.dnkl.foot")
+swaymsg("exec planterette -v start org.codeberg.dnkl.foot")
wait_for_window("hakurei@machine-foot")
machine.send_chars("clear; wayland-info && touch /tmp/success-client\n")
machine.wait_for_file("/tmp/hakurei.1000/tmpdir/2/success-client")
diff --git a/cmd/fpkg/with.go b/cmd/planterette/with.go
index ffacec71..ffacec71 100644
--- a/cmd/fpkg/with.go
+++ b/cmd/planterette/with.go