2018-02-02 17:36:48 +01:00
package managers
import (
"fmt"
"os"
"path/filepath"
2019-02-13 14:29:09 +01:00
"runtime"
lxd "github.com/lxc/lxd/shared"
2018-02-02 17:36:48 +01:00
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 )
}
2019-02-13 14:29:09 +01:00
var keyring string
if lxd . StringInSlice ( runtime . GOARCH , [ ] string { "arm" , "arm64" } ) {
keyring = "archlinuxarm"
} else {
keyring = "archlinux"
}
err = shared . RunCommand ( "pacman-key" , "--populate" , keyring )
2018-02-02 17:36:48 +01:00
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 ( )
2019-02-13 14:29:09 +01:00
var mirror string
if lxd . StringInSlice ( runtime . GOARCH , [ ] string { "arm" , "arm64" } ) {
mirror = "Server = http://mirror.archlinuxarm.org/$arch/$repo"
} else {
mirror = "Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch"
}
_ , err = f . WriteString ( mirror )
2018-02-02 17:36:48 +01:00
if err != nil {
return err
}
return nil
}