Compare commits
	
		
			2 Commits
		
	
	
		
			9458636b69
			...
			782a29b4fc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 782a29b4fc | |||
| fb3a4af3c9 | 
| @ -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() | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user