build-observer

command module
v0.0.0-...-e26f6fd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 31, 2025 License: Apache-2.0 Imports: 10 Imported by: 0

README

build-observer

build-observer is a Go + eBPF library and command line tool to observe the build process of a project and create a record of all files that are read, written or executed during the build.

This record can then be used to create a Software Bill of Materials (SBOM) for the project. See Observer for tooling and more information.

This repository contains the eBPF program and a small Go user-space program. Dependencies are kept to a minimum to keep the program as auditable as possible.

Check releases for pre-compiled binaries and SBOMs.

How it works

  • The eBPF program is attached to the process and watches for file operations.
  • It records all file open and exec system calls.
  • The eBPF program sends events to the Go wrapper via a perf ring buffer.
  • The Go wrapper then resolves the file paths to absolute paths and writes them to a JSON file.

Requirements

  • Linux kernel 5.8+ (for eBPF support)
  • build-observer needs to run as root to install eBPF program, but will drop privileges to the specified user to run the build command.

Usage

Usage:
build-observer -u <user> -- <command> 

Examples:
sudo build-observer --user cicd -- make 

Flags:
-h, --help            help for build-observer
-o, --output string   Output filename (default "build-observations.out")
-u, --user string     Run command as user
-v, --version         version for build-observer

The resulting file of observations can be used to create a SBOM using Observer:

$ observer fs -m example.cdx.json ./build-observations.out

You can also use Observer standalone to both observe (using this repository as library) and create a SBOM.

$ observer build -b example.cdx.json -u cicd -- make 

See the Observer repository for more information.

You might still want to use the CLI from this repository as the code is much smaller and easier to audit than the Observer repository. As the process needs to run as root to install the eBPF program (before dropping privileges), the ability to easily audit and build your own version is important to us.

Use as a library

See main.go for an example of how to use the library.

The important parts are:

import (
	"github.com/sbom-observer/build-observer/pkg/traceopens"
)

...

	observations, err := traceopens.TraceCommand(cmdAndArgs, dropToUnprivilegedUser)
	if err != nil {
		fmt.Printf("Error tracing command: %s\n", err)
		os.Exit(1)
	}

Output format

The output format is a JSON file that contains a list of all files that are read, written or executed during the build.

Example output
{
  "start": "2025-03-24T14:08:58.975120568Z",
  "stop": "2025-03-24T14:09:39.121084554Z",
  "workingDirectory": "/usr/local/src/nginx-1.25.3",
  "opened": [
    "/lib/x86_64-linux-gnu/libacl.so.1",
    "/lib/x86_64-linux-gnu/libctf.so.0",
    "/lib/x86_64-linux-gnu/libgmp.so.10",
    "/lib/x86_64-linux-gnu/libisl.so.23",
    "/lib/x86_64-linux-gnu/libjansson.so.4",
    "/lib/x86_64-linux-gnu/libmpc.so.3",
    "/lib/x86_64-linux-gnu/libpcre2-8.so.0",
    "/lib/x86_64-linux-gnu/libselinux.so.1",
    "/lib/x86_64-linux-gnu/libsframe.so.0",
    "/lib/x86_64-linux-gnu/libz.so.1",
    "/lib/x86_64-linux-gnu/libzstd.so.1",
    "/proc/filesystems",
    "/tmp/ccDVPTz5.cdtor.c",
    "/tmp/ccGBfdX1.cdtor.o",
    "/tmp/ccM0IwyF.res",
    "/usr/include/alloca.h",
    "/usr/include/arpa/inet.h",
    "/usr/include/asm-generic/bitsperlong.h",
    "/usr/include/asm-generic/errno-base.h",
    "/usr/include/asm-generic/errno.h",
    "/usr/include/asm-generic/int-ll64.h",
    "/usr/include/asm-generic/ioctl.h",
    "/usr/include/asm-generic/ioctls.h",
    "/usr/include/asm-generic/posix_types.h",
    "/usr/include/asm-generic/socket.h",
    "/usr/include/asm-generic/sockios.h",
    "/usr/include/asm-generic/types.h",
    "/usr/include/crypt.h",
    "/usr/include/ctype.h",
    "/usr/include/dirent.h",
    "/usr/include/dlfcn.h",
    "/usr/include/endian.h",
    "/usr/include/errno.h",
    "/usr/include/fcntl.h",
    "/usr/include/features-time64.h",
    "/usr/include/features.h",
    "/usr/include/glob.h",
    "/usr/include/grp.h",
    "/usr/include/inttypes.h",
    "/usr/include/limits.h",
    "/usr/include/linux/aio_abi.h",
    "/usr/include/linux/bpf.h",
    "/usr/include/linux/bpf_common.h",
    "/usr/include/linux/byteorder/little_endian.h",
    "/usr/include/linux/capability.h",
    "/usr/include/linux/close_range.h",
    "/usr/include/linux/errno.h",
    "/usr/include/linux/falloc.h",
    "/usr/include/linux/fs.h",
    "/usr/include/linux/fscrypt.h",
    "/usr/include/linux/ioctl.h",
    "/usr/include/linux/limits.h",
    "/usr/include/linux/mount.h",
    "/usr/include/linux/posix_types.h",
    "/usr/include/linux/prctl.h",
    "/usr/include/linux/stat.h",
    "/usr/include/linux/stddef.h",
    "/usr/include/linux/swab.h",
    "/usr/include/linux/types.h",
    "/usr/include/malloc.h",
    "/usr/include/netdb.h",
    "/usr/include/netinet/in.h",
    "/usr/include/netinet/tcp.h",
    "/usr/include/netinet/udp.h",
    "/usr/include/openssl/asn1.h",
    "/usr/include/openssl/asn1err.h",
    "/usr/include/openssl/async.h",
    "/usr/include/openssl/asyncerr.h",
    "/usr/include/openssl/bio.h",
    "/usr/include/openssl/bioerr.h",
    "/usr/include/openssl/bn.h",
    "/usr/include/openssl/bnerr.h",
    "/usr/include/openssl/buffer.h",
    "/usr/include/openssl/buffererr.h",
    "/usr/include/openssl/comp.h",
    "/usr/include/openssl/comperr.h",
    "/usr/include/openssl/conf.h",
    "/usr/include/openssl/conferr.h",
    "/usr/include/openssl/conftypes.h",
    "/usr/include/openssl/core.h",
    "/usr/include/openssl/core_dispatch.h",
    "/usr/include/openssl/crypto.h",
    "/usr/include/openssl/cryptoerr.h",
    "/usr/include/openssl/cryptoerr_legacy.h",
    "/usr/include/openssl/ct.h",
    "/usr/include/openssl/cterr.h",
    "/usr/include/openssl/dh.h",
    "/usr/include/openssl/dherr.h",
    "/usr/include/openssl/dsa.h",
    "/usr/include/openssl/dsaerr.h",
    "/usr/include/openssl/dtls1.h",
    "/usr/include/openssl/e_os2.h",
    "/usr/include/openssl/ec.h",
    "/usr/include/openssl/ecerr.h",
    "/usr/include/openssl/engine.h",
    "/usr/include/openssl/engineerr.h",
    "/usr/include/openssl/err.h",
    "/usr/include/openssl/evp.h",
    "/usr/include/openssl/evperr.h",
    "/usr/include/openssl/hmac.h",
    "/usr/include/openssl/http.h",
    "/usr/include/openssl/lhash.h",
    "/usr/include/openssl/macros.h",
    "/usr/include/openssl/obj_mac.h",
    "/usr/include/openssl/objects.h",
    "/usr/include/openssl/objectserr.h",
    "/usr/include/openssl/ocsp.h",
    "/usr/include/openssl/ocsperr.h",
    "/usr/include/openssl/opensslv.h",
    "/usr/include/openssl/params.h",
    "/usr/include/openssl/pem.h",
    "/usr/include/openssl/pemerr.h",
    "/usr/include/openssl/pkcs7.h",
    "/usr/include/openssl/pkcs7err.h",
    "/usr/include/openssl/prov_ssl.h",
    "/usr/include/openssl/rand.h",
    "/usr/include/openssl/randerr.h",
    "/usr/include/openssl/rsa.h",
    "/usr/include/openssl/rsaerr.h",
    "/usr/include/openssl/safestack.h",
    "/usr/include/openssl/sha.h",
    "/usr/include/openssl/srtp.h",
    "/usr/include/openssl/ssl.h",
    "/usr/include/openssl/ssl2.h",
    "/usr/include/openssl/ssl3.h",
    "/usr/include/openssl/sslerr.h",
    "/usr/include/openssl/sslerr_legacy.h",
    "/usr/include/openssl/stack.h",
    "/usr/include/openssl/symhacks.h",
    "/usr/include/openssl/tls1.h",
    "/usr/include/openssl/types.h",
    "/usr/include/openssl/ui.h",
    "/usr/include/openssl/uierr.h",
    "/usr/include/openssl/x509.h",
    "/usr/include/openssl/x509_vfy.h",
    "/usr/include/openssl/x509err.h",
    "/usr/include/openssl/x509v3.h",
    "/usr/include/openssl/x509v3err.h",
    "/usr/include/pcre.h",
    "/usr/include/pthread.h",
    "/usr/include/pwd.h",
    "/usr/include/rpc/netdb.h",
    "/usr/include/sched.h",
    "/usr/include/semaphore.h",
    "/usr/include/signal.h",
    "/usr/include/stdc-predef.h",
    "/usr/include/stdint.h",
    "/usr/include/stdio.h",
    "/usr/include/stdlib.h",
    "/usr/include/string.h",
    "/usr/include/strings.h",
    "/usr/include/time.h",
    "/usr/include/unistd.h",
    "/usr/include/x86_64-linux-gnu/asm/bitsperlong.h",
    "/usr/include/x86_64-linux-gnu/asm/byteorder.h",
    "/usr/include/x86_64-linux-gnu/asm/errno.h",
    "/usr/include/x86_64-linux-gnu/asm/ioctl.h",
    "/usr/include/x86_64-linux-gnu/asm/ioctls.h",
    "/usr/include/x86_64-linux-gnu/asm/posix_types.h",
    "/usr/include/x86_64-linux-gnu/asm/posix_types_64.h",
    "/usr/include/x86_64-linux-gnu/asm/socket.h",
    "/usr/include/x86_64-linux-gnu/asm/sockios.h",
    "/usr/include/x86_64-linux-gnu/asm/swab.h",
    "/usr/include/x86_64-linux-gnu/asm/types.h",
    "/usr/include/x86_64-linux-gnu/asm/unistd.h",
    "/usr/include/x86_64-linux-gnu/asm/unistd_64.h",
    "/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h",
    "/usr/include/x86_64-linux-gnu/bits/byteswap.h",
    "/usr/include/x86_64-linux-gnu/bits/confname.h",
    "/usr/include/x86_64-linux-gnu/bits/cpu-set.h",
    "/usr/include/x86_64-linux-gnu/bits/dirent.h",
    "/usr/include/x86_64-linux-gnu/bits/dirent_ext.h",
    "/usr/include/x86_64-linux-gnu/bits/dl_find_object.h",
    "/usr/include/x86_64-linux-gnu/bits/dlfcn.h",
    "/usr/include/x86_64-linux-gnu/bits/endian.h",
    "/usr/include/x86_64-linux-gnu/bits/endianness.h",
    "/usr/include/x86_64-linux-gnu/bits/environments.h",
    "/usr/include/x86_64-linux-gnu/bits/epoll.h",
    "/usr/include/x86_64-linux-gnu/bits/errno.h",
    "/usr/include/x86_64-linux-gnu/bits/eventfd.h",
    "/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h",
    "/usr/include/x86_64-linux-gnu/bits/fcntl.h",
    "/usr/include/x86_64-linux-gnu/bits/floatn-common.h",
    "/usr/include/x86_64-linux-gnu/bits/floatn.h",
    "/usr/include/x86_64-linux-gnu/bits/getopt_core.h",
    "/usr/include/x86_64-linux-gnu/bits/getopt_posix.h",
    "/usr/include/x86_64-linux-gnu/bits/in.h",
    "/usr/include/x86_64-linux-gnu/bits/ioctl-types.h",
    "/usr/include/x86_64-linux-gnu/bits/ioctls.h",
    "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h",
    "/usr/include/x86_64-linux-gnu/bits/local_lim.h",
    "/usr/include/x86_64-linux-gnu/bits/long-double.h",
    "/usr/include/x86_64-linux-gnu/bits/mman-linux.h",
    "/usr/include/x86_64-linux-gnu/bits/mman-map-flags-generic.h",
    "/usr/include/x86_64-linux-gnu/bits/mman-shared.h",
    "/usr/include/x86_64-linux-gnu/bits/mman.h",
    "/usr/include/x86_64-linux-gnu/bits/mman_ext.h",
    "/usr/include/x86_64-linux-gnu/bits/netdb.h",
    "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h",
    "/usr/include/x86_64-linux-gnu/bits/posix2_lim.h",
    "/usr/include/x86_64-linux-gnu/bits/posix_opt.h",
    "/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h",
    "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h",
    "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h",
    "/usr/include/x86_64-linux-gnu/bits/resource.h",
    "/usr/include/x86_64-linux-gnu/bits/sched.h",
    "/usr/include/x86_64-linux-gnu/bits/select.h",
    "/usr/include/x86_64-linux-gnu/bits/semaphore.h",
    "/usr/include/x86_64-linux-gnu/bits/setjmp.h",
    "/usr/include/x86_64-linux-gnu/bits/sigaction.h",
    "/usr/include/x86_64-linux-gnu/bits/sigcontext.h",
    "/usr/include/x86_64-linux-gnu/bits/sigevent-consts.h",
    "/usr/include/x86_64-linux-gnu/bits/siginfo-arch.h",
    "/usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h",
    "/usr/include/x86_64-linux-gnu/bits/siginfo-consts.h",
    "/usr/include/x86_64-linux-gnu/bits/signal_ext.h",
    "/usr/include/x86_64-linux-gnu/bits/signum-arch.h",
    "/usr/include/x86_64-linux-gnu/bits/signum-generic.h",
    "/usr/include/x86_64-linux-gnu/bits/sigstack.h",
    "/usr/include/x86_64-linux-gnu/bits/sigstksz.h",
    "/usr/include/x86_64-linux-gnu/bits/sigthread.h",
    "/usr/include/x86_64-linux-gnu/bits/sockaddr.h",
    "/usr/include/x86_64-linux-gnu/bits/socket.h",
    "/usr/include/x86_64-linux-gnu/bits/socket_type.h",
    "/usr/include/x86_64-linux-gnu/bits/ss_flags.h",
    "/usr/include/x86_64-linux-gnu/bits/stat.h",
    "/usr/include/x86_64-linux-gnu/bits/statfs.h",
    "/usr/include/x86_64-linux-gnu/bits/statx-generic.h",
    "/usr/include/x86_64-linux-gnu/bits/statx.h",
    "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h",
    "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h",
    "/usr/include/x86_64-linux-gnu/bits/stdio.h",
    "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h",
    "/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h",
    "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h",
    "/usr/include/x86_64-linux-gnu/bits/struct_mutex.h",
    "/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h",
    "/usr/include/x86_64-linux-gnu/bits/struct_stat.h",
    "/usr/include/x86_64-linux-gnu/bits/syscall.h",
    "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h",
    "/usr/include/x86_64-linux-gnu/bits/time.h",
    "/usr/include/x86_64-linux-gnu/bits/time64.h",
    "/usr/include/x86_64-linux-gnu/bits/timesize.h",
    "/usr/include/x86_64-linux-gnu/bits/timex.h",
    "/usr/include/x86_64-linux-gnu/bits/types.h",
    "/usr/include/x86_64-linux-gnu/bits/types/FILE.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__FILE.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/clock_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/error_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/idtype_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/sigval_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/stack_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_osockaddr.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_rusage.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_statx.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h",
    "/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h",
    "/usr/include/x86_64-linux-gnu/bits/types/time_t.h",
    "/usr/include/x86_64-linux-gnu/bits/types/timer_t.h",
    "/usr/include/x86_64-linux-gnu/bits/typesizes.h",
    "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h",
    "/usr/include/x86_64-linux-gnu/bits/uio-ext.h",
    "/usr/include/x86_64-linux-gnu/bits/uio_lim.h",
    "/usr/include/x86_64-linux-gnu/bits/unistd_ext.h",
    "/usr/include/x86_64-linux-gnu/bits/utsname.h",
    "/usr/include/x86_64-linux-gnu/bits/waitflags.h",
    "/usr/include/x86_64-linux-gnu/bits/waitstatus.h",
    "/usr/include/x86_64-linux-gnu/bits/wchar.h",
    "/usr/include/x86_64-linux-gnu/bits/wordsize.h",
    "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h",
    "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h",
    "/usr/include/x86_64-linux-gnu/gnu/stubs.h",
    "/usr/include/x86_64-linux-gnu/openssl/configuration.h",
    "/usr/include/x86_64-linux-gnu/openssl/opensslconf.h",
    "/usr/include/x86_64-linux-gnu/sys/cdefs.h",
    "/usr/include/x86_64-linux-gnu/sys/epoll.h",
    "/usr/include/x86_64-linux-gnu/sys/eventfd.h",
    "/usr/include/x86_64-linux-gnu/sys/ioctl.h",
    "/usr/include/x86_64-linux-gnu/sys/mman.h",
    "/usr/include/x86_64-linux-gnu/sys/prctl.h",
    "/usr/include/x86_64-linux-gnu/sys/resource.h",
    "/usr/include/x86_64-linux-gnu/sys/select.h",
    "/usr/include/x86_64-linux-gnu/sys/sendfile.h",
    "/usr/include/x86_64-linux-gnu/sys/socket.h",
    "/usr/include/x86_64-linux-gnu/sys/stat.h",
    "/usr/include/x86_64-linux-gnu/sys/statfs.h",
    "/usr/include/x86_64-linux-gnu/sys/syscall.h",
    "/usr/include/x86_64-linux-gnu/sys/time.h",
    "/usr/include/x86_64-linux-gnu/sys/ttydefaults.h",
    "/usr/include/x86_64-linux-gnu/sys/types.h",
    "/usr/include/x86_64-linux-gnu/sys/ucontext.h",
    "/usr/include/x86_64-linux-gnu/sys/uio.h",
    "/usr/include/x86_64-linux-gnu/sys/un.h",
    "/usr/include/x86_64-linux-gnu/sys/utsname.h",
    "/usr/include/x86_64-linux-gnu/sys/vfs.h",
    "/usr/include/x86_64-linux-gnu/sys/wait.h",
    "/usr/include/zconf.h",
    "/usr/include/zlib.h",
    "/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o",
    "/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o",
    "/usr/lib/gcc/x86_64-linux-gnu/12/include/limits.h",
    "/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h",
    "/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h",
    "/usr/lib/gcc/x86_64-linux-gnu/12/include/stdint.h",
    "/usr/lib/gcc/x86_64-linux-gnu/12/include/syslimits.h",
    "/usr/lib/x86_64-linux-gnu/Scrt1.o",
    "/usr/lib/x86_64-linux-gnu/crti.o",
    "/usr/lib/x86_64-linux-gnu/crtn.o",
    "/usr/lib/x86_64-linux-gnu/libgcc_s.so.1",
    "/usr/local/src/nginx-1.25.3",
    "/usr/local/src/nginx-1.25.3/Makefile",
    "/usr/local/src/nginx-1.25.3/man",
    "/usr/local/src/nginx-1.25.3/man/nginx.8",
    "/usr/local/src/nginx-1.25.3/objs",
    "/usr/local/src/nginx-1.25.3/objs/Makefile",
    "/usr/local/src/nginx-1.25.3/objs/nginx",
    "/usr/local/src/nginx-1.25.3/objs/nginx.8",
    "/usr/local/src/nginx-1.25.3/objs/ngx_auto_config.h",
    "/usr/local/src/nginx-1.25.3/objs/ngx_auto_headers.h",
    "/usr/local/src/nginx-1.25.3/objs/ngx_modules.c",
    "/usr/local/src/nginx-1.25.3/objs/ngx_modules.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/nginx.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_array.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_bpf.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_buf.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_conf_file.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_connection.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_cpuinfo.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_crc32.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_crypt.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_cycle.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_file.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_hash.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_inet.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_list.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_log.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_md5.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_murmurhash.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_open_file_cache.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_output_chain.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_palloc.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_parse.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_parse_time.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_proxy_protocol.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_queue.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_radix_tree.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_rbtree.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_regex.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_resolver.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_rwlock.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_sha1.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_shmtx.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_slab.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_spinlock.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_string.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_syslog.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_thread_pool.o",
    "/usr/local/src/nginx-1.25.3/objs/src/core/ngx_times.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/modules/ngx_epoll_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_accept.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_connect.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_openssl.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_openssl_stapling.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_pipe.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_posted.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_timer.o",
    "/usr/local/src/nginx-1.25.3/objs/src/event/ngx_event_udp.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_access_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_auth_basic_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_autoindex_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_browser_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_charset_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_chunked_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_empty_gif_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_fastcgi_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_geo_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_grpc_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_gzip_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_gzip_static_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_headers_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_index_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_limit_conn_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_limit_req_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_log_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_map_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_memcached_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_mirror_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_not_modified_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_proxy_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_range_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_referer_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_rewrite_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_scgi_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_split_clients_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_ssi_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_ssl_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_static_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_try_files_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_hash_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_ip_hash_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_keepalive_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_least_conn_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_random_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_upstream_zone_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_userid_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/modules/ngx_http_uwsgi_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_copy_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_core_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_file_cache.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_header_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_huff_decode.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_huff_encode.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_parse.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_postpone_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_request.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_request_body.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_script.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_special_response.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_upstream.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_upstream_round_robin.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_variables.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/ngx_http_write_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/v2/ngx_http_v2.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/v2/ngx_http_v2_encode.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/v2/ngx_http_v2_filter_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/v2/ngx_http_v2_module.o",
    "/usr/local/src/nginx-1.25.3/objs/src/http/v2/ngx_http_v2_table.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_alloc.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_channel.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_daemon.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_dlopen.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_errno.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_files.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_linux_aio_read.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_linux_init.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_linux_sendfile_chain.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_posix_init.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_process.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_process_cycle.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_readv_chain.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_recv.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_send.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_setaffinity.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_setproctitle.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_shmem.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_socket.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_thread_cond.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_thread_id.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_thread_mutex.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_time.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_udp_recv.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_udp_send.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_udp_sendmsg_chain.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_user.o",
    "/usr/local/src/nginx-1.25.3/objs/src/os/unix/ngx_writev_chain.o",
    "/usr/local/src/nginx-1.25.3/src/core",
    "/usr/local/src/nginx-1.25.3/src/core/nginx.c",
    "/usr/local/src/nginx-1.25.3/src/core/nginx.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_array.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_array.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_bpf.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_bpf.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_buf.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_buf.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_conf_file.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_conf_file.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_config.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_connection.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_connection.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_core.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_cpuinfo.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_crc.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_crc32.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_crc32.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_crypt.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_crypt.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_cycle.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_cycle.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_file.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_file.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_hash.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_hash.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_inet.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_inet.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_list.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_list.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_log.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_log.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_md5.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_md5.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_module.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_module.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_murmurhash.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_murmurhash.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_open_file_cache.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_open_file_cache.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_output_chain.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_palloc.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_palloc.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_parse.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_parse.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_parse_time.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_parse_time.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_proxy_protocol.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_proxy_protocol.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_queue.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_queue.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_radix_tree.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_radix_tree.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_rbtree.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_rbtree.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_regex.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_regex.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_resolver.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_resolver.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_rwlock.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_rwlock.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_sha1.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_sha1.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_shmtx.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_shmtx.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_slab.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_slab.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_spinlock.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_string.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_string.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_syslog.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_syslog.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_thread_pool.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_thread_pool.h",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_times.c",
    "/usr/local/src/nginx-1.25.3/src/core/ngx_times.h",
    "/usr/local/src/nginx-1.25.3/src/event",
    "/usr/local/src/nginx-1.25.3/src/event/modules",
    "/usr/local/src/nginx-1.25.3/src/event/modules/ngx_epoll_module.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_accept.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_connect.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_connect.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_openssl.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_openssl.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_openssl_stapling.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_pipe.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_pipe.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_posted.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_posted.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_timer.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_timer.h",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_udp.c",
    "/usr/local/src/nginx-1.25.3/src/event/ngx_event_udp.h",
    "/usr/local/src/nginx-1.25.3/src/http",
    "/usr/local/src/nginx-1.25.3/src/http/modules",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_access_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_auth_basic_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_autoindex_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_browser_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_charset_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_chunked_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_empty_gif_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_fastcgi_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_geo_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_grpc_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_gzip_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_gzip_static_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_headers_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_index_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_limit_conn_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_limit_req_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_log_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_map_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_memcached_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_mirror_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_not_modified_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_proxy_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_range_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_referer_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_rewrite_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_scgi_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_split_clients_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_ssi_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_ssi_filter_module.h",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_ssl_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_ssl_module.h",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_static_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_try_files_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_hash_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_ip_hash_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_keepalive_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_least_conn_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_random_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_upstream_zone_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_userid_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/modules/ngx_http_uwsgi_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_cache.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_config.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_copy_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_core_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_core_module.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_file_cache.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_header_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_huff_decode.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_huff_encode.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_parse.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_postpone_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_request.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_request.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_request_body.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_script.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_script.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_special_response.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_upstream.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_upstream.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_upstream_round_robin.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_upstream_round_robin.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_variables.c",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_variables.h",
    "/usr/local/src/nginx-1.25.3/src/http/ngx_http_write_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/v2",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2.c",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2.h",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2_encode.c",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2_filter_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2_module.c",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2_module.h",
    "/usr/local/src/nginx-1.25.3/src/http/v2/ngx_http_v2_table.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_alloc.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_alloc.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_atomic.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_channel.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_channel.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_daemon.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_dlopen.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_dlopen.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_errno.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_errno.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_files.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_files.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_linux.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_linux_aio_read.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_linux_config.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_linux_init.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_linux_sendfile_chain.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_os.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_posix_init.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_process.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_process.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_process_cycle.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_process_cycle.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_readv_chain.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_recv.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_send.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_setaffinity.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_setaffinity.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_setproctitle.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_setproctitle.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_shmem.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_shmem.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_socket.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_socket.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_thread.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_thread_cond.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_thread_id.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_thread_mutex.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_time.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_time.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_udp_recv.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_udp_send.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_udp_sendmsg_chain.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_user.c",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_user.h",
    "/usr/local/src/nginx-1.25.3/src/os/unix/ngx_writev_chain.c"
  ],
  "executed": [
    "/bin/sh",
    "/usr/bin/as",
    "/usr/bin/cc",
    "/usr/bin/ld",
    "/usr/bin/make",
    "/usr/bin/sed",
    "/usr/lib/gcc/x86_64-linux-gnu/12/cc1",
    "/usr/lib/gcc/x86_64-linux-gnu/12/collect2"
  ]
}

See /examples for more examples, including the resulting SBOM.

Compatibility

While the eBPF program should work on most modern 5.8+ kernels, there are some limitations to compatibility for eBPF programs. If you encounter any issues, please open an issue so we can track this.

Building a version for your kernel should be straightforward, but you need the kernel headers installed. Then you can build the eBPF program and wrapper with:

$ go generate ./...
$ go build -o build-observer .

Performance

The performance impact of the eBPF program is minimal. We have tested it on a large codebase with thousands of files and it only added a few percent to the build time.

Future work

This version should be production ready, and we welcome feedback and contributions.

Roadmap includes support for FreeBSD and Windows, probably using dtrace/ETW.

Acknowledgements

This project is funded by the National Coordination Centre for Research and Innovation in Cybersecurity (NCC-SE) and The Swedish Civil Contingencies Agency (MSB) with co-financing from the European Union.

License

This project is licensed under the Apache 2.0 license.

Documentation

Overview

Copyright 2024 Bitfront AB - All rights reserved Author: Andreas Bielk

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL