[lxc-devel] [distrobuilder/master] managers: Add luet pms

geaaru on Github lxc-bot at linuxcontainers.org
Sun Aug 9 08:36:25 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 400 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200809/d247eeba/attachment.bin>
-------------- next part --------------
From 944814569f40e1b43a26e738a58fa54cf2b3cd0d Mon Sep 17 00:00:00 2001
From: Daniele Rondina <geaaru at sabayonlinux.org>
Date: Mon, 23 Dec 2019 17:21:28 +0100
Subject: [PATCH] managers: Add luet pms

Signed-off-by: Daniele Rondina <geaaru at sabayonlinux.org>
---
 managers/luet.go     | 85 ++++++++++++++++++++++++++++++++++++++++++++
 managers/manager.go  |  2 ++
 shared/definition.go |  1 +
 3 files changed, 88 insertions(+)
 create mode 100644 managers/luet.go

diff --git a/managers/luet.go b/managers/luet.go
new file mode 100644
index 0000000..bda6c0f
--- /dev/null
+++ b/managers/luet.go
@@ -0,0 +1,85 @@
+package managers
+
+import (
+	"fmt"
+	"os"
+	"path/filepath"
+	"strings"
+
+	lxd "github.com/lxc/lxd/shared"
+
+	"github.com/lxc/distrobuilder/shared"
+)
+
+func luetRepoCaller(repo shared.DefinitionPackagesRepository) error {
+	var targetFile string
+
+	if repo.Name == "" {
+		return fmt.Errorf("Invalid repository name")
+	}
+
+	if repo.URL == "" {
+		return fmt.Errorf("Invalid repository url")
+	}
+
+	if strings.HasSuffix(repo.Name, ".yml") {
+		targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name)
+	} else {
+		targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name + ".yml")
+	}
+
+	if !lxd.PathExists(filepath.Dir(targetFile)) {
+		err := os.MkdirAll(filepath.Dir(targetFile), 0755)
+		if err != nil {
+			return err
+		}
+	}
+
+	f, err := os.OpenFile(targetFile, os.O_CREATE|os.O_WRONLY, 0644)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+
+	// NOTE: repo.URL is not an URL but the content of the file.
+	_, err = f.WriteString(repo.URL)
+	if err != nil {
+		return err
+	}
+	
+	return nil
+}
+
+// NewLuet create a new Manager instance
+func NewLuet() *Manager {
+	return &Manager{
+		commands: ManagerCommands{
+			clean:   "luet",
+			install: "luet",
+			refresh: "luet",
+			remove:  "luet",
+			update:  "luet",
+		},
+		flags: ManagerFlags{
+			global: []string{},
+			clean: []string{
+				"cleanup",
+			},
+			install: []string{
+				"install",
+			},
+			refresh: []string{
+				"repo", "update",
+			},
+			remove: []string{
+				"uninstall",
+			},
+			update: []string{
+				"upgrade",
+			},
+		},
+		RepoHandler: func(repoAction shared.DefinitionPackagesRepository) error {
+			return luetRepoCaller(repoAction)
+		},
+	}
+}
diff --git a/managers/manager.go b/managers/manager.go
index 274ea72..675d2f3 100644
--- a/managers/manager.go
+++ b/managers/manager.go
@@ -58,6 +58,8 @@ func Get(name string) *Manager {
 		return NewYum()
 	case "equo":
 		return NewEquo()
+	case "luet":
+		return NewLuet()
 	case "zypper":
 		return NewZypper()
 	}
diff --git a/shared/definition.go b/shared/definition.go
index 7fd341c..5512cfe 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -354,6 +354,7 @@ func (d *Definition) Validate() error {
 			"equo",
 			"xbps",
 			"zypper",
+			"luet",
 		}
 		if !shared.StringInSlice(strings.TrimSpace(d.Packages.Manager), validManagers) {
 			return fmt.Errorf("packages.manager must be one of %v", validManagers)


More information about the lxc-devel mailing list