2018-02-02 17:36:48 +01:00
package managers
import (
"fmt"
"os"
"path/filepath"
2018-02-20 02:07:54 -05:00
"github.com/lxc/distrobuilder/shared"
2018-02-02 17:36:48 +01:00
)
// NewPacman creates a new Manager instance.
func NewPacman ( ) * Manager {
2018-02-12 16:06:18 +01:00
err := pacmanSetMirrorlist ( )
2018-02-02 17:36:48 +01:00
if err != nil {
return nil
}
// shared.RunCommand("pacman", "-Syy")
2018-02-12 16:06:18 +01:00
err = pacmanSetupTrustedKeys ( )
2018-02-02 17:36:48 +01:00
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" )
} ,
} ,
}
}
2018-02-12 16:06:18 +01:00
func pacmanSetupTrustedKeys ( ) error {
2018-02-02 17:36:48 +01:00
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
}
2018-02-12 16:06:18 +01:00
func pacmanSetMirrorlist ( ) error {
2018-02-02 17:36:48 +01:00
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
}