e5b9b233b8
'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
36 lines
868 B
Go
36 lines
868 B
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
"os/exec"
|
|
|
|
"github.com/darroyo/nasctl/internal/db"
|
|
"github.com/darroyo/nasctl/internal/system"
|
|
)
|
|
|
|
type Capabilities struct {
|
|
Rsync bool `json:"rsync"`
|
|
MergerfsBin bool `json:"mergerfs"`
|
|
MergerfsMounted bool `json:"mergerfs_mounted"`
|
|
SnapraidBin bool `json:"snapraid"`
|
|
}
|
|
|
|
func Probe(ctx context.Context) (Capabilities, error) {
|
|
_, 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: rsyncErr == nil,
|
|
MergerfsBin: mergerfsErr == nil,
|
|
MergerfsMounted: mergerfsMountedErr == nil,
|
|
SnapraidBin: snapraidErr == nil,
|
|
}, nil
|
|
}
|
|
|
|
func ValidatePaths(cfg db.StorageConfig) error {
|
|
return nil
|
|
}
|