1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
package managers
import (
"fmt"
"os"
"strings"
"github.com/lxc/distrobuilder/shared"
)
type apk struct {
common
}
func (m *apk) load() error {
m.commands = managerCommands{
clean: "apk",
install: "apk",
refresh: "apk",
remove: "apk",
update: "apk",
}
m.flags = managerFlags{
global: []string{
"--no-cache",
},
install: []string{
"add",
},
remove: []string{
"del", "--rdepends",
},
refresh: []string{
"update",
},
update: []string{
"upgrade",
},
}
return nil
}
func (m *apk) manageRepository(repoAction shared.DefinitionPackagesRepository) error {
err := m.appendRepositoryURL(repoAction)
if err != nil {
return err
}
err = m.writeKeyFile(repoAction)
if err != nil {
return err
}
return nil
}
func (m *apk) appendRepositoryURL(repoAction shared.DefinitionPackagesRepository) error {
if repoAction.URL == "" {
return nil
}
repoFile := "/etc/apk/repositories"
f, err := os.OpenFile(repoFile, os.O_WRONLY|os.O_APPEND, 0o644)
if err != nil {
return fmt.Errorf("Failed to open %q: %w", repoFile, err)
}
defer f.Close()
_, err = f.WriteString(repoAction.URL + "\n")
if err != nil {
return fmt.Errorf("Failed to write string to file: %w", err)
}
return nil
}
func (m *apk) writeKeyFile(repoAction shared.DefinitionPackagesRepository) error {
if repoAction.Key == "" || repoAction.Name == "" {
return nil
}
if strings.Contains(repoAction.Name, "/") {
return fmt.Errorf("Invalid key file name: %q", repoAction.Name)
}
keyFile := "/etc/apk/keys/" + repoAction.Name
f, err := os.OpenFile(keyFile, os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
return fmt.Errorf("Failed to open %q: %w", keyFile, err)
}
defer f.Close()
_, err = f.WriteString(repoAction.Key + "\n")
if err != nil {
return fmt.Errorf("Failed to write %q: %w", keyFile, err)
}
return nil
}
|