Stéphane Graber ce823c03c1
Don't depend on external distrobuilder branch
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
2018-02-20 02:08:10 -05:00

90 lines
1.5 KiB
Go

package managers
import (
"fmt"
"os"
"path/filepath"
"github.com/lxc/distrobuilder/shared"
)
// NewPacman creates a new Manager instance.
func NewPacman() *Manager {
err := pacmanSetMirrorlist()
if err != nil {
return nil
}
// shared.RunCommand("pacman", "-Syy")
err = pacmanSetupTrustedKeys()
if err != nil {
return nil
}
return &Manager{
command: "pacman",
flags: ManagerFlags{
clean: []string{
"-Sc",
},
global: []string{
"--noconfirm",
},
install: []string{
"-S", "--needed",
},
remove: []string{
"-Rcs",
},
refresh: []string{
"-Syy",
},
update: []string{
"-Su",
},
},
hooks: ManagerHooks{
clean: func() error {
return os.RemoveAll("/var/cache/pacman/pkg")
},
},
}
}
func pacmanSetupTrustedKeys() error {
var err error
_, err = os.Stat("/etc/pacman.d/gnupg")
if err == nil {
return nil
}
err = shared.RunCommand("pacman-key", "--init")
if err != nil {
return fmt.Errorf("Error initializing with pacman-key: %s", err)
}
err = shared.RunCommand("pacman-key", "--populate", "archlinux")
if err != nil {
return fmt.Errorf("Error populating with pacman-key: %s", err)
}
return nil
}
func pacmanSetMirrorlist() error {
f, err := os.Create(filepath.Join("etc", "pacman.d", "mirrorlist"))
if err != nil {
return err
}
defer f.Close()
_, err = f.WriteString("Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch")
if err != nil {
return err
}
return nil
}