1
0

Implement debian package

This commit is contained in:
2023-05-11 19:26:54 +00:00
parent d04a9de932
commit 77be74797b
6 changed files with 97 additions and 15 deletions

View File

@ -2,8 +2,6 @@ package debian
import (
"github.com/rapidloop/skv"
"code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot"
)
type Cache struct {
@ -16,11 +14,11 @@ func NewCache(path string) (c *Cache, err error) {
return
}
func (c Cache) Put(p snapshot.Package) error {
return c.store.Put(p.Version, p)
func (c Cache) Put(p DebianKernel) error {
return c.store.Put(p.Version.Package, p)
}
func (c Cache) Get(version string) (p snapshot.Package, err error) {
func (c Cache) Get(version string) (p DebianKernel, err error) {
err = c.store.Get(version, &p)
return
}

View File

@ -6,8 +6,6 @@ import (
"testing"
"github.com/rapidloop/skv"
"code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot"
)
func TestCache(t *testing.T) {
@ -24,23 +22,24 @@ func TestCache(t *testing.T) {
t.Fatal(err)
}
packages, err := snapshot.Packages("linux", "4.17.14-1", "amd64",
`^linux-(image|headers)-[0-9\.\-]*-(amd64|amd64-unsigned)$`)
version := "4.17.14-1"
dk, err := GetDebianKernel(version)
if err != nil {
t.Fatal(err)
}
err = c.Put(packages[0])
err = c.Put(dk)
if err != nil {
t.Fatal(err)
}
p, err := c.Get(packages[0].Version)
dk2, err := c.Get(version)
if err != nil {
t.Fatal(err)
}
if p.Deb.Hash != packages[0].Deb.Hash {
if dk.Image.Deb.Hash != dk2.Image.Deb.Hash {
t.Fatalf("mismatch")
}
@ -52,16 +51,16 @@ func TestCache(t *testing.T) {
}
defer c.Close()
p, err = c.Get(packages[0].Version)
dk3, err := c.Get(version)
if err != nil {
t.Fatal(err)
}
if p.Deb.Hash != packages[0].Deb.Hash {
if dk.Image.Deb.Hash != dk3.Image.Deb.Hash {
t.Fatalf("mismatch")
}
p, err = c.Get("key not exist")
_, err = c.Get("key not exist")
if err == nil || err != skv.ErrNotFound {
t.Fatal(err)
}

63
distro/debian/kernel.go Normal file
View File

@ -0,0 +1,63 @@
package debian
import (
"errors"
"strings"
"code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot"
)
type DebianKernelVersion struct {
// linux-headers-4.17.0-2-amd64_4.17.14-1_amd64.deb
// Package version, e.g. "4.17.14-1"
// See tags in https://salsa.debian.org/kernel-team/linux
Package string
// ABI version, e.g. "4.17.0-2"
ABI string
}
type DebianKernel struct {
Version DebianKernelVersion
Image snapshot.Package
Headers snapshot.Package
}
func GetDebianKernel(version string) (dk DebianKernel, err error) {
dk.Version.Package = version
regex := `^linux-(image|headers)-[0-9\.\-]*-(amd64|amd64-unsigned)$`
packages, err := snapshot.Packages("linux", version, "amd64", regex)
if len(packages) != 2 {
err = errors.New("len(packages) != 2")
return
}
var imageFound, headersFound bool
for _, p := range packages {
if strings.Contains(p.Name, "image") {
imageFound = true
dk.Image = p
} else if strings.Contains(p.Name, "headers") {
headersFound = true
dk.Headers = p
}
}
if !imageFound {
err = errors.New("image not found")
return
}
if !headersFound {
err = errors.New("headers not found")
return
}
s := strings.Replace(dk.Headers.Name, "linux-headers-", "", -1)
dk.Version.ABI = strings.Replace(s, "-amd64", "", -1)
return
}

View File

@ -0,0 +1,16 @@
package debian
import (
"testing"
)
func TestGetDebianKernel(t *testing.T) {
dk, err := GetDebianKernel("4.17.14-1")
if err != nil {
t.Fatal(err)
}
if dk.Version.ABI != "4.17.0-2" {
t.Fatalf("wrong abi")
}
}