fix: use exec.LookPath instead of 'command -v' for binary detection

'command' is a shell builtin, not a real binary, so exec.Command
always failed with exit 127. Replaced with os/exec.LookPath which
correctly resolves binaries in PATH.

Also adds capabilities_test.go to verify Probe() matches
exec.LookPath results.

Version: 0.7.2
This commit is contained in:
2026-07-07 00:06:06 -04:00
parent d3d59b4e45
commit e5b9b233b8
3 changed files with 57 additions and 7 deletions
+7 -6
View File
@@ -2,6 +2,7 @@ package storage
import (
"context"
"os/exec"
"github.com/darroyo/nasctl/internal/db"
"github.com/darroyo/nasctl/internal/system"
@@ -15,17 +16,17 @@ type Capabilities struct {
}
func Probe(ctx context.Context) (Capabilities, error) {
rsyncOut, _, _ := system.Run(ctx, "command", "-v", "rsync")
snapraidOut, _, _ := system.Run(ctx, "command", "-v", "snapraid")
mergerfsOut, _, _ := system.Run(ctx, "command", "-v", "mergerfs")
_, rsyncErr := exec.LookPath("rsync")
_, snapraidErr := exec.LookPath("snapraid")
_, mergerfsErr := exec.LookPath("mergerfs")
_, _, mergerfsMountedErr := system.Run(ctx, "grep", "-q", "fuse.mergerfs", "/proc/mounts")
return Capabilities{
Rsync: len(rsyncOut) > 0,
MergerfsBin: len(mergerfsOut) > 0,
Rsync: rsyncErr == nil,
MergerfsBin: mergerfsErr == nil,
MergerfsMounted: mergerfsMountedErr == nil,
SnapraidBin: len(snapraidOut) > 0,
SnapraidBin: snapraidErr == nil,
}, nil
}