feat: use semver wrapper to match debian release
This commit is contained in:
parent
b09b51840c
commit
2452b090b0
@ -4,7 +4,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@ -69,78 +68,38 @@ func releaseFromString(s string) (r Release) {
|
|||||||
return
|
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
|
// linux-image-4.17.0-2-amd64 -> 4.17
|
||||||
re := regexp.MustCompile(`([0-9]*\.[0-9]*)`)
|
re := regexp.MustCompile(`([0-9]*\.[0-9]*)`)
|
||||||
|
sver := re.FindString(deb)
|
||||||
s := re.FindString(deb)
|
if sver == "" {
|
||||||
if s == "" {
|
|
||||||
err = errors.New("empty result")
|
err = errors.New("empty result")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
version := kver(sver)
|
||||||
|
|
||||||
split := strings.Split(s, ".")
|
if version.LessThan(kver("3.0-rc0")) {
|
||||||
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 {
|
|
||||||
err = errors.New("not supported")
|
err = errors.New("not supported")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch major {
|
if version.LessThan(kver("3.8-rc0")) {
|
||||||
case 3:
|
// Wheezy 3.2
|
||||||
//if minor < 16 {
|
|
||||||
// >=3.8 breaks initramfs-tools << 0.110~
|
// >=3.8 breaks initramfs-tools << 0.110~
|
||||||
// Wheezy initramfs-tools version is 0.109.1
|
// Wheezy initramfs-tools version is 0.109.1
|
||||||
if minor < 8 {
|
r = Wheezy
|
||||||
r = Wheezy
|
} else if version.LessThan(kver("4.9-rc0")) {
|
||||||
} else {
|
// Jessie 3.16
|
||||||
r = Jessie
|
r = Jessie
|
||||||
}
|
} else if version.LessThan(kver("4.19-rc0")) {
|
||||||
case 4:
|
// Stretch 4.9
|
||||||
if minor < 9 {
|
r = Stretch
|
||||||
r = Jessie
|
} else if version.LessThan(kver("5.10-rc0")) {
|
||||||
} else if minor < 19 {
|
// Buster 4.19
|
||||||
r = Stretch
|
r = Buster
|
||||||
} else {
|
} else {
|
||||||
r = Buster
|
// Bullseye 5.10
|
||||||
}
|
r = Bullseye
|
||||||
case 5:
|
|
||||||
if minor < 10 {
|
|
||||||
r = Buster
|
|
||||||
} else {
|
|
||||||
r = Bullseye
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
r = Bullseye // latest release
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -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) {
|
func TestKernelRelease(t *testing.T) {
|
||||||
type testcase struct {
|
type testcase struct {
|
||||||
Deb string
|
Deb string
|
||||||
|
Loading…
Reference in New Issue
Block a user