mirror of
https://github.com/roddhjav/apparmor.d.git
synced 2024-11-14 23:43:56 +01:00
refractor(build): move os logic to its own module.
This commit is contained in:
parent
662dd1c6dc
commit
e1d1d0be3d
@ -15,7 +15,7 @@ import (
|
|||||||
"github.com/roddhjav/apparmor.d/pkg/aa"
|
"github.com/roddhjav/apparmor.d/pkg/aa"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/integration"
|
"github.com/roddhjav/apparmor.d/pkg/integration"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/logging"
|
"github.com/roddhjav/apparmor.d/pkg/logging"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/prebuild"
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
)
|
)
|
||||||
|
|
||||||
const usage = `aa-test [-h] [--bootstrap | --run | --list]
|
const usage = `aa-test [-h] [--bootstrap | --run | --list]
|
||||||
@ -123,7 +123,7 @@ func testDeps(dryRun bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deps := tSuite.GetDependencies()
|
deps := tSuite.GetDependencies()
|
||||||
switch prebuild.Distribution {
|
switch oss.Distribution {
|
||||||
case "arch":
|
case "arch":
|
||||||
arg := []string{"pacman", "-Sy", "--noconfirm"}
|
arg := []string{"pacman", "-Sy", "--noconfirm"}
|
||||||
arg = append(arg, deps...)
|
arg = append(arg, deps...)
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/roddhjav/apparmor.d/pkg/logging"
|
"github.com/roddhjav/apparmor.d/pkg/logging"
|
||||||
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/prebuild"
|
"github.com/roddhjav/apparmor.d/pkg/prebuild"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func aaPrebuild() error {
|
func aaPrebuild() error {
|
||||||
logging.Step("Building apparmor.d profiles for %s.", prebuild.Distribution)
|
logging.Step("Building apparmor.d profiles for %s.", oss.Distribution)
|
||||||
|
|
||||||
if full {
|
if full {
|
||||||
prebuild.Prepares = append(prebuild.Prepares, prebuild.SetFullSystemPolicy)
|
prebuild.Prepares = append(prebuild.Prepares, prebuild.SetFullSystemPolicy)
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/prebuild"
|
"github.com/roddhjav/apparmor.d/pkg/prebuild"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -71,7 +72,7 @@ func Test_AAPrebuild(t *testing.T) {
|
|||||||
chdirGitRoot()
|
chdirGitRoot()
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
prebuild.Distribution = tt.dist
|
oss.Distribution = tt.dist
|
||||||
if tt.full {
|
if tt.full {
|
||||||
prebuild.Prepares = append(prebuild.Prepares, prebuild.SetFullSystemPolicy)
|
prebuild.Prepares = append(prebuild.Prepares, prebuild.SetFullSystemPolicy)
|
||||||
}
|
}
|
||||||
|
90
pkg/os/os.go
Normal file
90
pkg/os/os.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
// apparmor.d - Full set of apparmor profiles
|
||||||
|
// Copyright (C) 2023-2024 Alexandre Pujol <alexandre@pujol.io>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/arduino/go-paths-helper"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Distribution = getDistribution()
|
||||||
|
Release = getOSRelease()
|
||||||
|
Family = getFamily()
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
osReleaseFile = "/etc/os-release"
|
||||||
|
supportedDists = map[string][]string{
|
||||||
|
"arch": {},
|
||||||
|
"debian": {},
|
||||||
|
"ubuntu": {},
|
||||||
|
"opensuse": {"suse", "opensuse-tumbleweed"},
|
||||||
|
"whonix": {},
|
||||||
|
}
|
||||||
|
famillyDists = map[string][]string{
|
||||||
|
"apt": {"debian", "ubuntu", "whonix"},
|
||||||
|
"pacman": {"arch"},
|
||||||
|
"zypper": {"opensuse"},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func getOSRelease() map[string]string {
|
||||||
|
var lines []string
|
||||||
|
var err error
|
||||||
|
for _, name := range []string{osReleaseFile, "/usr/lib/os-release"} {
|
||||||
|
path := paths.New(name)
|
||||||
|
if path.Exist() {
|
||||||
|
lines, err = path.ReadFileAsLines()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os := map[string]string{}
|
||||||
|
for _, line := range lines {
|
||||||
|
item := strings.Split(line, "=")
|
||||||
|
if len(item) == 2 {
|
||||||
|
os[item[0]] = strings.Trim(item[1], "\"")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return os
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDistribution() string {
|
||||||
|
dist, present := os.LookupEnv("DISTRIBUTION")
|
||||||
|
if present {
|
||||||
|
return dist
|
||||||
|
}
|
||||||
|
|
||||||
|
id := Release["ID"]
|
||||||
|
if id == "ubuntu" {
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
id_like := Release["ID_LIKE"]
|
||||||
|
for main, based := range supportedDists {
|
||||||
|
if main == id || main == id_like {
|
||||||
|
return main
|
||||||
|
} else if slices.Contains(based, id) {
|
||||||
|
return main
|
||||||
|
} else if slices.Contains(based, id_like) {
|
||||||
|
return main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFamily() string {
|
||||||
|
for familly, dist := range famillyDists {
|
||||||
|
if slices.Contains(dist, Distribution) {
|
||||||
|
return familly
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
// Copyright (C) 2023-2024 Alexandre Pujol <alexandre@pujol.io>
|
// Copyright (C) 2023-2024 Alexandre Pujol <alexandre@pujol.io>
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
package prebuild
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -79,7 +79,7 @@ ANSI_COLOR="0;38;2;60;110;180"
|
|||||||
LOGO=fedora-logo-icon`
|
LOGO=fedora-logo-icon`
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewOSRelease(t *testing.T) {
|
func Test_getOSRelease(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
osRelease string
|
osRelease string
|
||||||
@ -128,14 +128,14 @@ func TestNewOSRelease(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if got := NewOSRelease(); !reflect.DeepEqual(got, tt.want) {
|
if got := getOSRelease(); !reflect.DeepEqual(got, tt.want) {
|
||||||
t.Errorf("NewOSRelease() = %v, want %v", got, tt.want)
|
t.Errorf("getOSRelease() = %v, want %v", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_getSupportedDistribution(t *testing.T) {
|
func Test_getDistribution(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
osRelease string
|
osRelease string
|
||||||
@ -161,11 +161,11 @@ func Test_getSupportedDistribution(t *testing.T) {
|
|||||||
osRelease: OpenSUSETumbleweed,
|
osRelease: OpenSUSETumbleweed,
|
||||||
want: "opensuse",
|
want: "opensuse",
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// name: "Fedora",
|
name: "Fedora",
|
||||||
// osRelease: Fedora,
|
osRelease: Fedora,
|
||||||
// want: "fedora",
|
want: "fedora",
|
||||||
// },
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
osReleaseFile = "/tmp/os-release"
|
osReleaseFile = "/tmp/os-release"
|
||||||
@ -175,9 +175,48 @@ func Test_getSupportedDistribution(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
got := getSupportedDistribution()
|
Release = getOSRelease()
|
||||||
|
got := getDistribution()
|
||||||
if got != tt.want {
|
if got != tt.want {
|
||||||
t.Errorf("getSupportedDistribution() = %v, want %v", got, tt.want)
|
t.Errorf("getDistribution() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_getFamily(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
dist string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Archlinux",
|
||||||
|
dist: "arch",
|
||||||
|
want: "pacman",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ubuntu",
|
||||||
|
dist: "ubuntu",
|
||||||
|
want: "apt",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Debian",
|
||||||
|
dist: "debian",
|
||||||
|
want: "apt",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "OpenSUSE Tumbleweed",
|
||||||
|
dist: "opensuse",
|
||||||
|
want: "zypper",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
Distribution = tt.dist
|
||||||
|
if got := getFamily(); got != tt.want {
|
||||||
|
t.Errorf("getFamily() = %v, want %v", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
@ -11,11 +11,11 @@ import (
|
|||||||
|
|
||||||
"github.com/arduino/go-paths-helper"
|
"github.com/arduino/go-paths-helper"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/logging"
|
"github.com/roddhjav/apparmor.d/pkg/logging"
|
||||||
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
overwrite bool = false
|
overwrite bool = false
|
||||||
Distribution string
|
|
||||||
DistDir *paths.Path
|
DistDir *paths.Path
|
||||||
Root *paths.Path
|
Root *paths.Path
|
||||||
RootApparmord *paths.Path
|
RootApparmord *paths.Path
|
||||||
@ -27,10 +27,8 @@ func init() {
|
|||||||
Root = paths.New(".build")
|
Root = paths.New(".build")
|
||||||
FlagDir = DistDir.Join("flags")
|
FlagDir = DistDir.Join("flags")
|
||||||
RootApparmord = Root.Join("apparmor.d")
|
RootApparmord = Root.Join("apparmor.d")
|
||||||
Distribution = getSupportedDistribution()
|
if oss.Distribution == "ubuntu" {
|
||||||
if Distribution == "ubuntu" {
|
if oss.Release["VERSION_CODENAME"] == "noble" {
|
||||||
os := NewOSRelease()
|
|
||||||
if os["VERSION_CODENAME"] == "noble" {
|
|
||||||
Builds = append(Builds, BuildABI3)
|
Builds = append(Builds, BuildABI3)
|
||||||
overwrite = true
|
overwrite = true
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
)
|
)
|
||||||
|
|
||||||
func chdirGitRoot() {
|
func chdirGitRoot() {
|
||||||
@ -74,7 +76,7 @@ func Test_PreBuild(t *testing.T) {
|
|||||||
chdirGitRoot()
|
chdirGitRoot()
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
Distribution = tt.dist
|
oss.Distribution = tt.dist
|
||||||
if tt.full {
|
if tt.full {
|
||||||
Prepares = append(Prepares, SetFullSystemPolicy)
|
Prepares = append(Prepares, SetFullSystemPolicy)
|
||||||
Builds = append(Builds, BuildFullSystemPolicy)
|
Builds = append(Builds, BuildFullSystemPolicy)
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
"github.com/arduino/go-paths-helper"
|
"github.com/arduino/go-paths-helper"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/logging"
|
"github.com/roddhjav/apparmor.d/pkg/logging"
|
||||||
|
oss "github.com/roddhjav/apparmor.d/pkg/os"
|
||||||
"github.com/roddhjav/apparmor.d/pkg/util"
|
"github.com/roddhjav/apparmor.d/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ func Synchronise() ([]string, error) {
|
|||||||
// Ignore profiles and files as defined in dists/ignore/
|
// Ignore profiles and files as defined in dists/ignore/
|
||||||
func Ignore() ([]string, error) {
|
func Ignore() ([]string, error) {
|
||||||
res := []string{}
|
res := []string{}
|
||||||
for _, name := range []string{"main.ignore", Distribution + ".ignore"} {
|
for _, name := range []string{"main.ignore", oss.Distribution + ".ignore"} {
|
||||||
path := DistDir.Join("ignore", name)
|
path := DistDir.Join("ignore", name)
|
||||||
if !path.Exist() {
|
if !path.Exist() {
|
||||||
continue
|
continue
|
||||||
@ -130,7 +131,7 @@ func Merge() ([]string, error) {
|
|||||||
// Set the distribution specificities
|
// Set the distribution specificities
|
||||||
func Configure() ([]string, error) {
|
func Configure() ([]string, error) {
|
||||||
res := []string{}
|
res := []string{}
|
||||||
switch Distribution {
|
switch oss.Distribution {
|
||||||
case "arch", "opensuse":
|
case "arch", "opensuse":
|
||||||
|
|
||||||
case "ubuntu":
|
case "ubuntu":
|
||||||
@ -152,7 +153,7 @@ func Configure() ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return []string{}, fmt.Errorf("%s is not a supported distribution", Distribution)
|
return []string{}, fmt.Errorf("%s is not a supported distribution", oss.Distribution)
|
||||||
|
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil
|
||||||
@ -161,7 +162,7 @@ func Configure() ([]string, error) {
|
|||||||
// Set flags on some profiles according to manifest defined in `dists/flags/`
|
// Set flags on some profiles according to manifest defined in `dists/flags/`
|
||||||
func SetFlags() ([]string, error) {
|
func SetFlags() ([]string, error) {
|
||||||
res := []string{}
|
res := []string{}
|
||||||
for _, name := range []string{"main.flags", Distribution + ".flags"} {
|
for _, name := range []string{"main.flags", oss.Distribution + ".flags"} {
|
||||||
path := FlagDir.Join(name)
|
path := FlagDir.Join(name)
|
||||||
if !path.Exist() {
|
if !path.Exist() {
|
||||||
continue
|
continue
|
||||||
|
@ -5,71 +5,11 @@
|
|||||||
package prebuild
|
package prebuild
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/arduino/go-paths-helper"
|
"github.com/arduino/go-paths-helper"
|
||||||
"golang.org/x/exp/slices"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
osReleaseFile = "/etc/os-release"
|
|
||||||
supportedDists = map[string][]string{
|
|
||||||
"arch": {},
|
|
||||||
"debian": {},
|
|
||||||
"ubuntu": {},
|
|
||||||
"opensuse": {"suse", "opensuse-tumbleweed"},
|
|
||||||
"whonix": {},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewOSRelease() map[string]string {
|
|
||||||
var lines []string
|
|
||||||
var err error
|
|
||||||
for _, name := range []string{osReleaseFile, "/usr/lib/os-release"} {
|
|
||||||
path := paths.New(name)
|
|
||||||
if path.Exist() {
|
|
||||||
lines, err = path.ReadFileAsLines()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
os := map[string]string{}
|
|
||||||
for _, line := range lines {
|
|
||||||
item := strings.Split(line, "=")
|
|
||||||
if len(item) == 2 {
|
|
||||||
os[item[0]] = strings.Trim(item[1], "\"")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return os
|
|
||||||
}
|
|
||||||
|
|
||||||
func getSupportedDistribution() string {
|
|
||||||
dist, present := os.LookupEnv("DISTRIBUTION")
|
|
||||||
if present {
|
|
||||||
return dist
|
|
||||||
}
|
|
||||||
|
|
||||||
os := NewOSRelease()
|
|
||||||
id := os["ID"]
|
|
||||||
if id == "ubuntu" {
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
id_like := os["ID_LIKE"]
|
|
||||||
for main, based := range supportedDists {
|
|
||||||
if main == id || main == id_like {
|
|
||||||
return main
|
|
||||||
} else if slices.Contains(based, id) {
|
|
||||||
return main
|
|
||||||
} else if slices.Contains(based, id_like) {
|
|
||||||
return main
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
|
|
||||||
func copyTo(src *paths.Path, dst *paths.Path) error {
|
func copyTo(src *paths.Path, dst *paths.Path) error {
|
||||||
files, err := src.ReadDirRecursiveFiltered(nil, paths.FilterOutDirectories(), paths.FilterOutNames("README.md"))
|
files, err := src.ReadDirRecursiveFiltered(nil, paths.FilterOutDirectories(), paths.FilterOutNames("README.md"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user