// apparmor.d - Full set of apparmor profiles // Copyright (C) 2023 Alexandre Pujol // SPDX-License-Identifier: GPL-2.0-only package prebuild import ( "os" "strings" "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"}, "whonix": {}, } ) func getSupportedDistribution() string { dist, present := os.LookupEnv("DISTRIBUTION") if present { return dist } lines, err := paths.New(osReleaseFile).ReadFileAsLines() if err != nil { panic(err) } id := "" id_like := "" for _, line := range lines { item := strings.Split(line, "=") if item[0] == "ID" { id = strings.Split(strings.Trim(item[1], "\""), " ")[0] } else if item[0] == "ID_LIKE" { id_like = strings.Split(strings.Trim(item[1], "\""), " ")[0] } } if id == "ubuntu" { return id } 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 { files, err := src.ReadDirRecursiveFiltered(nil, paths.FilterOutDirectories()) if err != nil { return err } for _, file := range files { destination, err := file.RelFrom(src) if err != nil { return err } destination = dst.JoinPath(destination) if err := file.CopyTo(destination); err != nil { return err } } return nil }