Skip to content

Commit 25d920c

Browse files
authored
added mac m1 support for auditbeat system/package (elastic#34433)
* added mac m1 support for auditbeat system/package * updated changelog * updated as per PR suggestions * updated package
1 parent a74e36e commit 25d920c

File tree

5 files changed

+26
-21
lines changed

5 files changed

+26
-21
lines changed

CHANGELOG.next.asciidoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ https://github.com/elastic/beats/compare/v8.2.0\...main[Check the HEAD diff]
5858

5959

6060
*Filebeat*
61-
61+
- [Auditbeat System Package] Added support for Apple Silicon chips. {pull}34433[34433]
6262
- [Azure blob storage] Changed logger field name from `container` to `container_name` so that it does not clash
6363
with the ecs field name `container`. {pull}34403[34403]
6464
- [GCS] Added support for more mime types & introduced offset tracking via cursor state. Also added support for

x-pack/auditbeat/module/system/package/package.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import (
1212
"bytes"
1313
"encoding/binary"
1414
"encoding/gob"
15+
"errors"
1516
"fmt"
1617
"io"
18+
"io/fs"
1719
"os"
1820
"path/filepath"
1921
"strconv"
@@ -49,7 +51,7 @@ const (
4951
var (
5052
rpmPath = "/var/lib/rpm"
5153
dpkgPath = "/var/lib/dpkg"
52-
homebrewCellarPath = "/usr/local/Cellar"
54+
homebrewCellarPath = []string{"/usr/local/Cellar", "/opt/homebrew/Cellar"}
5355
)
5456

5557
type eventAction uint8
@@ -508,24 +510,27 @@ func (ms *MetricSet) getPackages() (packages []*Package, err error) {
508510
return nil, fmt.Errorf("error opening %v: %w", dpkgPath, err)
509511
}
510512

511-
_, err = os.Stat(homebrewCellarPath)
512-
if err == nil {
513+
for _, path := range homebrewCellarPath {
514+
_, err = os.Stat(path)
515+
if err != nil {
516+
if errors.Is(err, fs.ErrNotExist) {
517+
continue
518+
}
519+
return nil, fmt.Errorf("error opening %v: %w", path, err)
520+
}
513521
foundPackageManager = true
514-
515-
homebrewPackages, err := listBrewPackages()
522+
homebrewPackages, err := listBrewPackages(path)
516523
if err != nil {
517524
return nil, fmt.Errorf("error getting Homebrew packages: %w", err)
518525
}
519526
ms.log.Debugf("Homebrew packages: %v", len(homebrewPackages))
520-
521527
packages = append(packages, homebrewPackages...)
522-
} else if err != nil && !os.IsNotExist(err) {
523-
return nil, fmt.Errorf("error opening %v: %w", homebrewCellarPath, err)
528+
break
524529
}
525530

526531
if !foundPackageManager && !ms.suppressNoPackageWarnings {
527532
ms.log.Warnf("No supported package managers found. None of %v, %v, %v exist.",
528-
rpmPath, dpkgPath, homebrewCellarPath)
533+
rpmPath, dpkgPath, strings.Join(homebrewCellarPath, ","))
529534

530535
// Only warn once at the start of Auditbeat.
531536
ms.suppressNoPackageWarnings = true

x-pack/auditbeat/module/system/package/package_homebrew.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type InstallReceipt struct {
2727
Source InstallReceiptSource
2828
}
2929

30-
func listBrewPackages() ([]*Package, error) {
31-
packageDirs, err := ioutil.ReadDir(homebrewCellarPath)
30+
func listBrewPackages(brewCellarPath string) ([]*Package, error) {
31+
packageDirs, err := ioutil.ReadDir(brewCellarPath)
3232
if err != nil {
3333
return nil, err
3434
}
@@ -38,7 +38,7 @@ func listBrewPackages() ([]*Package, error) {
3838
if !packageDir.IsDir() {
3939
continue
4040
}
41-
pkgPath := path.Join(homebrewCellarPath, packageDir.Name())
41+
pkgPath := path.Join(brewCellarPath, packageDir.Name())
4242
versions, err := ioutil.ReadDir(pkgPath)
4343
if err != nil {
4444
return nil, fmt.Errorf("error reading directory: %s: %w", pkgPath, err)
@@ -57,7 +57,7 @@ func listBrewPackages() ([]*Package, error) {
5757

5858
// Read formula
5959
var formulaPath string
60-
installReceiptPath := path.Join(homebrewCellarPath, pkg.Name, pkg.Version, "INSTALL_RECEIPT.json")
60+
installReceiptPath := path.Join(brewCellarPath, pkg.Name, pkg.Version, "INSTALL_RECEIPT.json")
6161
contents, err := ioutil.ReadFile(installReceiptPath)
6262
if err != nil {
6363
pkg.error = fmt.Errorf("error reading %v: %w", installReceiptPath, err)
@@ -73,7 +73,7 @@ func listBrewPackages() ([]*Package, error) {
7373

7474
if formulaPath == "" {
7575
// Fallback to /usr/local/Cellar/{pkg.Name}/{pkg.Version}/.brew/{pkg.Name}.rb
76-
formulaPath = path.Join(homebrewCellarPath, pkg.Name, pkg.Version, ".brew", pkg.Name+".rb")
76+
formulaPath = path.Join(brewCellarPath, pkg.Name, pkg.Version, ".brew", pkg.Name+".rb")
7777
}
7878

7979
file, err := os.Open(formulaPath)

x-pack/auditbeat/module/system/package/package_homebrew_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ func TestHomebrew(t *testing.T) {
2727
defer func() {
2828
homebrewCellarPath = oldPath
2929
}()
30-
homebrewCellarPath = "testdata/homebrew/"
30+
homebrewCellarPath = []string{"testdata/homebrew/"}
3131

3232
// Test just listBrewPackages()
33-
packages, err := listBrewPackages()
33+
packages, err := listBrewPackages("testdata/homebrew/")
3434
assert.NoError(t, err)
3535
if assert.Len(t, packages, 1) {
3636
pkg := packages[0]
@@ -85,10 +85,10 @@ func TestHomebrewNotExist(t *testing.T) {
8585
defer func() {
8686
homebrewCellarPath = oldPath
8787
}()
88-
homebrewCellarPath = "/does/not/exist"
88+
homebrewCellarPath = []string{"/does/not/exist"}
8989

9090
// Test just listBrewPackages()
91-
packages, err := listBrewPackages()
91+
packages, err := listBrewPackages("/does/not/exist")
9292
if assert.Error(t, err) {
9393
assert.True(t, os.IsNotExist(err), "Unexpected error %v", err)
9494
}

x-pack/auditbeat/module/system/package/package_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func TestDpkg(t *testing.T) {
6666
homebrewCellarPath = brewPathOld
6767
}()
6868
rpmPath = "/does/not/exist"
69-
homebrewCellarPath = "/does/not/exist"
69+
homebrewCellarPath = []string{"/does/not/exist"}
7070

7171
var err error
7272
dpkgPath, err = filepath.Abs("testdata/dpkg/")
@@ -125,7 +125,7 @@ func TestDpkgInstalledSize(t *testing.T) {
125125
homebrewCellarPath = brewPathOld
126126
}()
127127
rpmPath = "/does/not/exist"
128-
homebrewCellarPath = "/does/not/exist"
128+
homebrewCellarPath = []string{"/does/not/exist"}
129129

130130
var err error
131131
dpkgPath, err = filepath.Abs("testdata/dpkg-size/")

0 commit comments

Comments
 (0)