1
0
Fork 0

feat: use semver wrapper to match debian release

timestamps
dump_stack() 2023-05-14 17:14:05 +00:00
parent b09b51840c
commit 2452b090b0
Signed by: dump_stack
GPG Key ID: BE44DA8C062D87DC
2 changed files with 20 additions and 86 deletions

View File

@ -4,7 +4,6 @@ import (
"errors"
"fmt"
"regexp"
"strconv"
"strings"
"github.com/rs/zerolog/log"
@ -69,78 +68,38 @@ func releaseFromString(s string) (r Release) {
return
}
func parseKernelMajorMinor(deb string) (major, minor int, err error) {
func kernelRelease(deb string) (r Release, err error) {
// linux-image-4.17.0-2-amd64 -> 4.17
re := regexp.MustCompile(`([0-9]*\.[0-9]*)`)
s := re.FindString(deb)
if s == "" {
sver := re.FindString(deb)
if sver == "" {
err = errors.New("empty result")
return
}
version := kver(sver)
split := strings.Split(s, ".")
if len(split) != 2 {
err = errors.New("unexpected input")
return
}
major, err = strconv.Atoi(split[0])
if err != nil {
return
}
minor, err = strconv.Atoi(split[1])
if err != nil {
return
}
return
}
func kernelRelease(deb string) (r Release, err error) {
major, minor, err := parseKernelMajorMinor(deb)
if err != nil {
return
}
// Wheezy 3.2
// Jessie 3.16
// Stretch 4.9
// Buster 4.19
// Bullseye 5.10
if major < 3 {
if version.LessThan(kver("3.0-rc0")) {
err = errors.New("not supported")
return
}
switch major {
case 3:
//if minor < 16 {
if version.LessThan(kver("3.8-rc0")) {
// Wheezy 3.2
// >=3.8 breaks initramfs-tools << 0.110~
// Wheezy initramfs-tools version is 0.109.1
if minor < 8 {
r = Wheezy
} else {
r = Jessie
}
case 4:
if minor < 9 {
r = Jessie
} else if minor < 19 {
r = Stretch
} else {
r = Buster
}
case 5:
if minor < 10 {
r = Buster
} else {
r = Bullseye
}
default:
r = Bullseye // latest release
r = Wheezy
} else if version.LessThan(kver("4.9-rc0")) {
// Jessie 3.16
r = Jessie
} else if version.LessThan(kver("4.19-rc0")) {
// Stretch 4.9
r = Stretch
} else if version.LessThan(kver("5.10-rc0")) {
// Buster 4.19
r = Buster
} else {
// Bullseye 5.10
r = Bullseye
}
return

View File

@ -34,31 +34,6 @@ func TestMatchImagePkg(t *testing.T) {
}
}
func TestParseKernelMajorMinor(t *testing.T) {
type testcase struct {
Deb string
Major, Minor int
}
for _, tc := range []testcase{
testcase{"linux-image-4.17.0-2-amd64", 4, 17},
testcase{"linux-image-6.1.0-8-amd64-unsigned", 6, 1},
testcase{"linux-image-6.1.0-0.deb11.7-amd64-unsigned", 6, 1},
testcase{"linux-image-3.2.0-0.bpo.4-amd64_3.2.41-2+deb7u2~bpo60+1_amd64", 3, 2},
testcase{"linux-image-5.16.0-rc5-amd64-unsigned_5.16~rc5-1~exp1_amd64", 5, 16},
testcase{"linux-image-3.6-trunk-amd64_3.8.4-1~experimental.1_amd64", 3, 6},
} {
major, minor, err := parseKernelMajorMinor(tc.Deb)
if err != nil {
t.Fatal(err)
}
if major != tc.Major || minor != tc.Minor {
t.Fatalf("%v -> %v.%v != %v.%v", tc.Deb, major, minor,
tc.Major, tc.Minor)
}
}
}
func TestKernelRelease(t *testing.T) {
type testcase struct {
Deb string