Implement debian package
This commit is contained in:
@ -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
|
||||
}
|
||||
|
@ -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
63
distro/debian/kernel.go
Normal 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
|
||||
}
|
16
distro/debian/kernel_test.go
Normal file
16
distro/debian/kernel_test.go
Normal 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")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user