Dockerfile*
build
.*.swp
+docker/Dockerfile*
docker build \
--build-arg UBUNTU_VERSION=${{ matrix.os.version }} \
--build-arg UBUNTU_SHORTNAME=${{ matrix.os.nick }} \
- -t bcc-docker -f Dockerfile.tests .
+ -t bcc-docker -f docker/Dockerfile.tests .
- name: Run bcc build
env: ${{ matrix.env }}
run: |
name: critical-tests-${{ matrix.env['TYPE'] }}-${{ matrix.os.version }}
path: tests/python/critical.log
+ test_bcc_fedora:
+ runs-on: ubuntu-20.04
+ strategy:
+ matrix:
+ env:
+ - TYPE: Debug
+ PYTHON_TEST_LOGFILE: critical.log
+ - TYPE: Release
+ PYTHON_TEST_LOGFILE: critical.log
+ steps:
+ - uses: actions/checkout@v2
+ - name: System info
+ run: |
+ uname -a
+ ip addr
+ - name: Build docker container with all deps
+ run: |
+ docker build \
+ -t bcc-docker -f docker/Dockerfile.fedora .
+ - name: Run bcc build
+ env: ${{ matrix.env }}
+ run: |
+ /bin/bash -c \
+ "docker run --privileged \
+ --pid=host \
+ -v $(pwd):/bcc \
+ -v /sys/kernel/debug:/sys/kernel/debug:rw \
+ -v /lib/modules:/lib/modules:ro \
+ -v /usr/src:/usr/src:ro \
+ -v /usr/include/linux:/usr/include/linux:ro \
+ bcc-docker \
+ /bin/bash -c \
+ 'mkdir -p /bcc/build && cd /bcc/build && \
+ cmake -DCMAKE_BUILD_TYPE=${TYPE} -DENABLE_LLVM_SHARED=ON -DRUN_LUA_TESTS=OFF .. && make -j9'"
+ - name: Run bcc's cc tests
+ env: ${{ matrix.env }}
+ # tests are wrapped with `script` as a hack to get a TTY as github actions doesn't provide this
+ # see https://github.com/actions/runner/issues/241
+ run: |
+ script -e -c /bin/bash -c \
+ "docker run -ti \
+ --privileged \
+ --network=host \
+ --pid=host \
+ -v $(pwd):/bcc \
+ -v /sys/kernel/debug:/sys/kernel/debug:rw \
+ -v /lib/modules:/lib/modules:ro \
+ -v /usr/src:/usr/src:ro \
+ -e CTEST_OUTPUT_ON_FAILURE=1 \
+ bcc-docker \
+ /bin/bash -c \
+ '/bcc/build/tests/wrapper.sh \
+ c_test_all sudo /bcc/build/tests/cc/test_libbcc'"
+
+ - name: Run all tests
+ env: ${{ matrix.env }}
+ run: |
+ script -e -c /bin/bash -c \
+ "docker run -ti \
+ --privileged \
+ --network=host \
+ --pid=host \
+ -v $(pwd):/bcc \
+ -v /sys/kernel/debug:/sys/kernel/debug:rw \
+ -v /lib/modules:/lib/modules:ro \
+ -v /usr/src:/usr/src:ro \
+ -e CTEST_OUTPUT_ON_FAILURE=1 \
+ bcc-docker \
+ /bin/bash -c \
+ 'cd /bcc/build && \
+ make test PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE ARGS=-V'"
+
+ - name: Check critical tests
+ env: ${{ matrix.env }}
+ run: |
+ critical_count=$(grep @mayFail tests/python/critical.log | wc -l)
+ echo "There were $critical_count critical tests skipped with @mayFail:"
+ grep -A2 @mayFail tests/python/critical.log
+
+
# To debug weird issues, you can add this step to be able to SSH to the test environment
# https://github.com/marketplace/actions/debugging-with-tmate
# - name: Setup tmate session
option(ENABLE_EXAMPLES "Build examples" ON)
option(ENABLE_MAN "Build man pages" ON)
option(ENABLE_TESTS "Build tests" ON)
+option(RUN_LUA_TESTS "Run lua tests" ON)
CMAKE_DEPENDENT_OPTION(ENABLE_CPP_API "Enable C++ API" ON "ENABLE_USDT" OFF)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+++ /dev/null
-FROM debian:stretch
-
-MAINTAINER Brenden Blanco <bblanco@gmail.com>
-
-RUN DEBIAN_RELEASE=stretch && \
- # Adding non-free repo for netperf
- echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \
- /etc/apt/sources.list.d/debian-non-free.list && \
- apt-get -qq update && \
- apt-get -y install pbuilder aptitude
-
-COPY ./ /root/bcc
-
-WORKDIR /root/bcc
-
-RUN /usr/lib/pbuilder/pbuilder-satisfydepends && \
- ./scripts/build-deb.sh
+++ /dev/null
-ARG UBUNTU_VERSION="18.04"
-FROM ubuntu:${UBUNTU_VERSION}
-
-ARG LLVM_VERSION="11"
-ENV LLVM_VERSION=$LLVM_VERSION
-
-ARG UBUNTU_SHORTNAME="bionic"
-
-RUN apt-get update && apt-get install -y curl gnupg &&\
- llvmRepository="\n\
-deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
-deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
-deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n\
-deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n" &&\
- echo $llvmRepository >> /etc/apt/sources.list && \
- curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
-
-ARG DEBIAN_FRONTEND="noninteractive"
-ENV TZ="Etc/UTC"
-
-RUN apt-get update && apt-get install -y \
- util-linux \
- bison \
- binutils-dev \
- cmake \
- flex \
- g++ \
- git \
- kmod \
- wget \
- libelf-dev \
- zlib1g-dev \
- libiberty-dev \
- libbfd-dev \
- libedit-dev \
- clang-${LLVM_VERSION} \
- libclang-${LLVM_VERSION}-dev \
- libclang-common-${LLVM_VERSION}-dev \
- libclang1-${LLVM_VERSION} \
- llvm-${LLVM_VERSION} \
- llvm-${LLVM_VERSION}-dev \
- llvm-${LLVM_VERSION}-runtime \
- libllvm${LLVM_VERSION} \
- systemtap-sdt-dev \
- sudo \
- iproute2 \
- python3 \
- python3-pip \
- ethtool \
- arping \
- netperf \
- iperf \
- iputils-ping \
- bridge-utils \
- libtinfo5 \
- libtinfo-dev
-
-RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
-
-# FIXME this is faster than building from source, but it seems there is a bug
-# in probing libruby.so rather than ruby binary
-#RUN apt-get update -qq && \
-# apt-get install -y software-properties-common && \
-# apt-add-repository ppa:brightbox/ruby-ng && \
-# apt-get update -qq && apt-get install -y ruby2.6 ruby2.6-dev
-
-RUN wget -O ruby-install-0.7.0.tar.gz \
- https://github.com/postmodern/ruby-install/archive/v0.7.0.tar.gz && \
- tar -xzvf ruby-install-0.7.0.tar.gz && \
- cd ruby-install-0.7.0/ && \
- make install
-
-RUN ruby-install --system ruby 2.6.0 -- --enable-dtrace
-RUN if [ ! -f "/usr/bin/python" ]; then ln -s /bin/python3 /usr/bin/python; fi
+++ /dev/null
-ARG OS_TAG=18.04
-FROM ubuntu:${OS_TAG} as builder
-
-ARG OS_TAG
-ARG BUILD_TYPE=release
-ARG DEBIAN_FRONTEND=noninteractive
-
-MAINTAINER Brenden Blanco <bblanco@gmail.com>
-
-RUN apt-get -qq update && \
- apt-get -y install pbuilder aptitude
-
-COPY ./ /root/bcc
-
-WORKDIR /root/bcc
-
-RUN /usr/lib/pbuilder/pbuilder-satisfydepends && \
- ./scripts/build-deb.sh ${BUILD_TYPE}
-
-FROM ubuntu:${OS_TAG}
-
-COPY --from=builder /root/bcc/*.deb /root/bcc/
-
-RUN \
- apt-get update -y && \
- DEBIAN_FRONTEND=noninteractive apt-get install -y python python3 python3-pip binutils libelf1 kmod && \
- if [ ${OS_TAG} = "18.04" ];then \
- apt-get -y install python-pip && \
- pip install dnslib cachetools ; \
- fi ; \
- pip3 install dnslib cachetools && \
- dpkg -i /root/bcc/*.deb
--- /dev/null
+FROM debian:stretch
+
+MAINTAINER Brenden Blanco <bblanco@gmail.com>
+
+RUN DEBIAN_RELEASE=stretch && \
+ # Adding non-free repo for netperf
+ echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \
+ /etc/apt/sources.list.d/debian-non-free.list && \
+ apt-get -qq update && \
+ apt-get -y install pbuilder aptitude
+
+COPY ./ /root/bcc
+
+WORKDIR /root/bcc
+
+RUN /usr/lib/pbuilder/pbuilder-satisfydepends && \
+ ./scripts/build-deb.sh
--- /dev/null
+# Copyright (c) PLUMgrid, Inc.
+# Licensed under the Apache License, Version 2.0 (the "License")
+
+FROM fedora:34
+
+MAINTAINER Dave Marchevsky <davemarchevsky@fb.com>
+
+RUN dnf -y install \
+ bison \
+ cmake \
+ flex \
+ gcc \
+ gcc-c++ \
+ git \
+ libxml2-devel \
+ make \
+ rpm-build \
+ wget \
+ zlib-devel \
+ llvm \
+ llvm-devel \
+ clang-devel \
+ elfutils-debuginfod-client-devel \
+# elfutils-libelf-devel-static \
+ elfutils-libelf-devel \
+ luajit \
+ luajit-devel \
+ python3-devel \
+ libstdc++ \
+ libstdc++-devel
+
+RUN dnf -y install \
+ python3 \
+ python3-pip
+
+RUN dnf -y install \
+ procps \
+ iputils \
+ net-tools \
+ hostname \
+ iproute
+
+RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
--- /dev/null
+ARG UBUNTU_VERSION="18.04"
+FROM ubuntu:${UBUNTU_VERSION}
+
+ARG LLVM_VERSION="11"
+ENV LLVM_VERSION=$LLVM_VERSION
+
+ARG UBUNTU_SHORTNAME="bionic"
+
+RUN apt-get update && apt-get install -y curl gnupg &&\
+ llvmRepository="\n\
+deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
+deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME} main\n\
+deb http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n\
+deb-src http://apt.llvm.org/${UBUNTU_SHORTNAME}/ llvm-toolchain-${UBUNTU_SHORTNAME}-${LLVM_VERSION} main\n" &&\
+ echo $llvmRepository >> /etc/apt/sources.list && \
+ curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
+
+ARG DEBIAN_FRONTEND="noninteractive"
+ENV TZ="Etc/UTC"
+
+RUN apt-get update && apt-get install -y \
+ util-linux \
+ bison \
+ binutils-dev \
+ cmake \
+ flex \
+ g++ \
+ git \
+ kmod \
+ wget \
+ libelf-dev \
+ zlib1g-dev \
+ libiberty-dev \
+ libbfd-dev \
+ libedit-dev \
+ clang-${LLVM_VERSION} \
+ libclang-${LLVM_VERSION}-dev \
+ libclang-common-${LLVM_VERSION}-dev \
+ libclang1-${LLVM_VERSION} \
+ llvm-${LLVM_VERSION} \
+ llvm-${LLVM_VERSION}-dev \
+ llvm-${LLVM_VERSION}-runtime \
+ libllvm${LLVM_VERSION} \
+ systemtap-sdt-dev \
+ sudo \
+ iproute2 \
+ python3 \
+ python3-pip \
+ ethtool \
+ arping \
+ netperf \
+ iperf \
+ iputils-ping \
+ bridge-utils \
+ libtinfo5 \
+ libtinfo-dev
+
+RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1
+
+# FIXME this is faster than building from source, but it seems there is a bug
+# in probing libruby.so rather than ruby binary
+#RUN apt-get update -qq && \
+# apt-get install -y software-properties-common && \
+# apt-add-repository ppa:brightbox/ruby-ng && \
+# apt-get update -qq && apt-get install -y ruby2.6 ruby2.6-dev
+
+RUN wget -O ruby-install-0.7.0.tar.gz \
+ https://github.com/postmodern/ruby-install/archive/v0.7.0.tar.gz && \
+ tar -xzvf ruby-install-0.7.0.tar.gz && \
+ cd ruby-install-0.7.0/ && \
+ make install
+
+RUN ruby-install --system ruby 2.6.0 -- --enable-dtrace
+RUN if [ ! -f "/usr/bin/python" ]; then ln -s /bin/python3 /usr/bin/python; fi
--- /dev/null
+ARG OS_TAG=18.04
+FROM ubuntu:${OS_TAG} as builder
+
+ARG OS_TAG
+ARG BUILD_TYPE=release
+ARG DEBIAN_FRONTEND=noninteractive
+
+MAINTAINER Brenden Blanco <bblanco@gmail.com>
+
+RUN apt-get -qq update && \
+ apt-get -y install pbuilder aptitude
+
+COPY ./ /root/bcc
+
+WORKDIR /root/bcc
+
+RUN /usr/lib/pbuilder/pbuilder-satisfydepends && \
+ ./scripts/build-deb.sh ${BUILD_TYPE}
+
+FROM ubuntu:${OS_TAG}
+
+COPY --from=builder /root/bcc/*.deb /root/bcc/
+
+RUN \
+ apt-get update -y && \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y python python3 python3-pip binutils libelf1 kmod && \
+ if [ ${OS_TAG} = "18.04" ];then \
+ apt-get -y install python-pip && \
+ pip install dnslib cachetools ; \
+ fi ; \
+ pip3 install dnslib cachetools && \
+ dpkg -i /root/bcc/*.deb
# The main docker image build,
echo "Building ${distro} ${os_tag} release docker image for ${docker_repo}:${docker_tag}"
-docker build -t ${docker_repo}:${docker_tag} --build-arg OS_TAG=${os_tag} -f Dockerfile.${distro} .
+docker build -t ${docker_repo}:${docker_tag} --build-arg OS_TAG=${os_tag} -f docker/Dockerfile.${distro} .
echo "Copying build artifacts to $(pwd)/output"
mkdir -p output
find_program(LUAJIT luajit)
find_program(BUSTED busted)
-if(LUAJIT)
- add_test(NAME lua_test_clang WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${TEST_WRAPPER} lua_test_clang sudo ${LUAJIT} test_clang.lua)
+if(RUN_LUA_TESTS)
+ if(LUAJIT)
+ add_test(NAME lua_test_clang WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${TEST_WRAPPER} lua_test_clang sudo ${LUAJIT} test_clang.lua)
- add_test(NAME lua_test_uprobes WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${TEST_WRAPPER} lua_test_uprobes sudo ${LUAJIT} test_uprobes.lua)
+ add_test(NAME lua_test_uprobes WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${TEST_WRAPPER} lua_test_uprobes sudo ${LUAJIT} test_uprobes.lua)
- add_test(NAME lua_test_dump WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${TEST_WRAPPER} lua_test_dump sudo ${LUAJIT} test_dump.lua)
+ add_test(NAME lua_test_dump WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${TEST_WRAPPER} lua_test_dump sudo ${LUAJIT} test_dump.lua)
- add_test(NAME lua_test_standalone WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_standalone.sh)
+ add_test(NAME lua_test_standalone WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_standalone.sh)
- if(BUSTED)
- add_test(NAME lua_test_busted WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND busted --lua=${LUAJIT} -m "${CMAKE_CURRENT_SOURCE_DIR}/../../src/lua/?.lua" -m "${CMAKE_CURRENT_SOURCE_DIR}/../../src/lua/?/init.lua;")
+ if(BUSTED)
+ add_test(NAME lua_test_busted WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND busted --lua=${LUAJIT} -m "${CMAKE_CURRENT_SOURCE_DIR}/../../src/lua/?.lua" -m "${CMAKE_CURRENT_SOURCE_DIR}/../../src/lua/?/init.lua;")
+ endif()
endif()
endif()
}]]
local b = BPF:new{text=text}
- b:attach_uprobe{name="/usr/bin/python", sym="main", fn_name="count"}
- b:attach_uprobe{name="/usr/bin/python", sym="main", fn_name="count", retprobe=true}
+ local pythonpath = "/usr/bin/python3"
+ local symname = "_start"
+ b:attach_uprobe{name=pythonpath, sym=symname, fn_name="count"}
+ b:attach_uprobe{name=pythonpath, sym=symname, fn_name="count", retprobe=true}
- os.spawn("/usr/bin/python -V")
+ os.spawn(pythonpath .. " -V")
local stats = b:get_table("stats")
assert_true(tonumber(stats:get(0)) >= 2)
}"""
b = bcc.BPF(text=text)
pythonpath = "/usr/bin/python3"
- b.attach_uprobe(name=pythonpath, sym="main", fn_name="count")
- b.attach_uretprobe(name=pythonpath, sym="main", fn_name="count")
+ symname = "_start"
+ b.attach_uprobe(name=pythonpath, sym=symname, fn_name="count")
+ b.attach_uretprobe(name=pythonpath, sym=symname, fn_name="count")
with os.popen(pythonpath + " -V") as f:
pass
self.assertGreater(b["stats"][ctypes.c_int(0)].value, 0)
- b.detach_uretprobe(name=pythonpath, sym="main")
- b.detach_uprobe(name=pythonpath, sym="main")
+ b.detach_uretprobe(name=pythonpath, sym=symname)
+ b.detach_uprobe(name=pythonpath, sym=symname)
def test_mount_namespace(self):
text = """