Compare commits
3 Commits
9458636b69
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bb64a4c58b | |||
| 782a29b4fc | |||
| fb3a4af3c9 |
@@ -51,7 +51,9 @@ func (BlockCollector) CollectData(c *Context) (json.RawMessage, error) {
|
|||||||
parts := map[string]any{}
|
parts := map[string]any{}
|
||||||
var ls struct {
|
var ls struct {
|
||||||
Blockdevices []struct {
|
Blockdevices []struct {
|
||||||
Children []struct{ Name string `json:"name"` } `json:"children"`
|
Children []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
} `json:"children"`
|
||||||
} `json:"blockdevices"`
|
} `json:"blockdevices"`
|
||||||
}
|
}
|
||||||
_ = json.Unmarshal(lsb, &ls)
|
_ = json.Unmarshal(lsb, &ls)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PackageManager is an abstraction over distro package tooling.
|
// PackageManager abstracts distro package handling.
|
||||||
type PackageManager interface {
|
type PackageManager interface {
|
||||||
Distro() string
|
Distro() string
|
||||||
InstallPackages(pkgs ...string) error
|
InstallPackages(pkgs ...string) error
|
||||||
@@ -16,9 +16,12 @@ type PackageManager interface {
|
|||||||
/* ------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
type aptManager struct {
|
type aptManager struct {
|
||||||
logf func(string, ...any)
|
logf func(string, ...any) // logger from App
|
||||||
|
updated bool // true after first apt-update
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newPackageManager is called once in app.go; the same instance is
|
||||||
|
// passed to every collector, so apt-update can be executed exactly once.
|
||||||
func newPackageManager(logf func(string, ...any)) PackageManager {
|
func newPackageManager(logf func(string, ...any)) PackageManager {
|
||||||
return &aptManager{logf: logf}
|
return &aptManager{logf: logf}
|
||||||
}
|
}
|
||||||
@@ -31,11 +34,27 @@ func (a *aptManager) ExecExists(bin string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *aptManager) InstallPackages(pkgs ...string) error {
|
func (a *aptManager) InstallPackages(pkgs ...string) error {
|
||||||
args := append([]string{"-y", "install"}, pkgs...)
|
if len(pkgs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// refresh package index only the first time we install anything
|
||||||
|
if !a.updated {
|
||||||
|
a.logf("apt update")
|
||||||
|
if err := exec.Command(
|
||||||
|
"apt-get", "-qq", "-y", "update",
|
||||||
|
).Run(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
a.updated = true
|
||||||
|
}
|
||||||
|
|
||||||
|
args := append(
|
||||||
|
[]string{"-qq", "-y", "--no-install-recommends", "install"},
|
||||||
|
pkgs...,
|
||||||
|
)
|
||||||
cmd := exec.Command("apt-get", args...)
|
cmd := exec.Command("apt-get", args...)
|
||||||
cmd.Env = append(cmd.Env, "DEBIAN_FRONTEND=noninteractive")
|
cmd.Env = append(cmd.Env, "DEBIAN_FRONTEND=noninteractive")
|
||||||
cmd.Stdout = nil
|
|
||||||
cmd.Stderr = nil
|
|
||||||
a.logf("apt install %v", pkgs)
|
a.logf("apt install %v", pkgs)
|
||||||
return cmd.Run()
|
return cmd.Run()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user