In general, to use these features, a Linux kernel version 4.1 or newer is required. In addition, the kernel should have been compiled with the following flags set:
CONFIG_BPF=y CONFIG_BPF_SYSCALL=y # [optional, for tc filters] CONFIG_NET_CLS_BPF=m # [optional, for tc actions] CONFIG_NET_ACT_BPF=m CONFIG_BPF_JIT=y CONFIG_HAVE_BPF_JIT=y # [optional, for kprobes] CONFIG_BPF_EVENTS=y
There are a few optional kernel flags needed for running bcc networking examples on vanilla kernel:
CONFIG_NET_SCH_SFQ=m CONFIG_NET_ACT_POLICE=m CONFIG_NET_ACT_GACT=m CONFIG_DUMMY=m CONFIG_VXLAN=m
Kernel compile flags can usually be checked by looking at /proc/config.gz
or /boot/config-<kernel-version>
.
The stable and the nightly packages are built for Ubuntu Xenial (16.04) and Ubuntu Artful (17.10). The steps are very straightforward, no need to upgrade the kernel or compile from source!
Stable and Signed Packages
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD echo "deb https://repo.iovisor.org/apt/xenial xenial main" | sudo tee /etc/apt/sources.list.d/iovisor.list sudo apt-get update sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)
(s/xenial/artful as appropriate)
Nightly Packages
echo "deb [trusted=yes] https://repo.iovisor.org/apt/xenial xenial-nightly main" | sudo tee /etc/apt/sources.list.d/iovisor.list sudo apt-get update sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)
(s/xenial/artful as appropriate)
Ensure that you are running a 4.2+ kernel with uname -r
. If not, install a 4.2+ kernel from http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug, for example:
sudo dnf config-manager --add-repo=http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug/fedora-rawhide-kernel-nodebug.repo sudo dnf update # reboot
Nightly Packages
Nightly bcc binary packages for Fedora 25, 26, and 27 are hosted at https://repo.iovisor.org/yum/nightly/f{25,26,27}
.
To install:
echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f27/$basearch\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/iovisor.repo sudo dnf install bcc-tools kernel-devel-$(uname -r) kernel-headers-$(uname -r)
Stable and Signed Packages
Stable bcc binary packages for Fedora 25, 26, and 27 are hosted at https://repo.iovisor.org/yum/main/f{25,26,27}
.
echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/main/f27/$basearch\nenabled=1' | sudo tee /etc/yum.repos.d/iovisor.repo sudo dnf install bcc-tools kernel-devel-$(uname -r) kernel-headers-$(uname -r)
Upgrade the kernel to minimum 4.3.1-1 first; the CONFIG_BPF_SYSCALL=y
configuration was not added until this kernel release.
Install these packages using any AUR helper such as pacaur, yaourt, cower, etc.:
bcc bcc-tools python-bcc python2-bcc
All build and install dependencies are listed in the PKGBUILD and should install automatically.
First of all, upgrade the kernel of your choice to a recent version. For example:
emerge sys-kernel/gentoo-sources
Then, configure the kernel enabling the features you need. Please consider the following as a starting point:
CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_NET_CLS_BPF=m CONFIG_NET_ACT_BPF=m CONFIG_BPF_JIT=y CONFIG_BPF_EVENTS=y
Finally, you can install bcc with:
emerge dev-util/bcc
The appropriate dependencies (e.g., clang
, llvm
with BPF backend) will be pulled automatically.
For openSUSE Leap 42.2 (and later) and Tumbleweed, bcc is already included in the official repo. Just install the packages with zypper.
sudo zypper ref sudo zypper in bcc-tools bcc-examples
The automated tests that run as part of the build process require netperf
. Since netperf's license is not "certified" as an open-source license, it is in Debian's non-free
repository.
/etc/apt/sources.list
should include the non-free
repository and look something like this:
deb http://httpredir.debian.org/debian/ jessie main non-free deb-src http://httpredir.debian.org/debian/ jessie main non-free deb http://security.debian.org/ jessie/updates main non-free deb-src http://security.debian.org/ jessie/updates main non-free # wheezy-updates, previously known as 'volatile' deb http://ftp.us.debian.org/debian/ jessie-updates main non-free deb-src http://ftp.us.debian.org/debian/ jessie-updates main non-free
BCC also requires kernel version 4.1 or above. Those kernels are available in the jessie-backports
repository. To add the jessie-backports
repository to your system create the file /etc/apt/sources.list.d/jessie-backports.list
with the following contents:
deb http://httpredir.debian.org/debian jessie-backports main deb-src http://httpredir.debian.org/debian jessie-backports main
Note, check for the latest linux-image-4.x
version in jessie-backports
before proceeding. Also, have a look at the Build-Depends:
section in debian/control
file.
# Before you begin apt-get update # Update kernel and linux-base package apt-get -t jessie-backports install linux-base linux-image-4.9.0-0.bpo.2-amd64 linux-headers-4.9.0-0.bpo.2-amd64 # BCC build dependencies: apt-get install debhelper cmake libllvm3.8 llvm-3.8-dev libclang-3.8-dev \ libelf-dev bison flex libedit-dev clang-format-3.8 python python-netaddr \ python-pyroute2 luajit libluajit-5.1-dev arping iperf netperf ethtool \ devscripts zlib1g-dev
Adding eBPF probes to the kernel and removing probes from it requires root privileges. For the build to complete successfully, you must build from an account with sudo
access. (You may also build as root, but it is bad style.)
/etc/sudoers
or /etc/sudoers.d/build-user
should contain
build-user ALL = (ALL) NOPASSWD: ALL
or
build-user ALL = (ALL) ALL
If using the latter sudoers configuration, please keep an eye out for sudo's password prompt while the build is running.
cd <preferred development directory> git clone https://github.com/iovisor/bcc.git cd bcc debuild -b -uc -us
cd .. sudo dpkg -i *bcc*.deb
To build the toolchain from source, one needs:
# Trusty and older VER=trusty echo "deb http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main deb-src http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main" | \ sudo tee /etc/apt/sources.list.d/llvm.list wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get update # All versions sudo apt-get -y install bison build-essential cmake3 flex git libedit-dev \ libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev # For Lua support sudo apt-get -y install luajit luajit-5.1-dev
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install
sudo dnf install -y bison cmake ethtool flex git iperf libstdc++-static \ python-netaddr python-pip gcc gcc-c++ make zlib-devel \ elfutils-libelf-devel sudo dnf install -y luajit luajit-devel # for Lua support sudo dnf install -y \ http://repo.iovisor.org/yum/extra/mageia/cauldron/x86_64/netperf-2.7.0-1.mga6.x86_64.rpm sudo pip install pyroute2
# FC22 wget http://llvm.org/releases/3.7.1/clang+llvm-3.7.1-x86_64-fedora22.tar.xz sudo tar xf clang+llvm-3.7.1-x86_64-fedora22.tar.xz -C /usr/local --strip 1 # FC23 wget http://llvm.org/releases/3.9.0/clang+llvm-3.9.0-x86_64-fedora23.tar.xz sudo tar xf clang+llvm-3.9.0-x86_64-fedora23.tar.xz -C /usr/local --strip 1 # FC24 and FC25 sudo dnf install -y clang clang-devel llvm llvm-devel llvm-static ncurses-devel
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install
sudo zypper in bison cmake flex gcc gcc-c++ git libelf-devel libstdc++-devel \ llvm-devel pkg-config python-devel python-setuptools python3-devel \ python3-setuptools sudo zypper in luajit-devel # for lua support in openSUSE Leap 42.2 or later sudo zypper in lua51-luajit-devel # for lua support in openSUSE Tumbleweed
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DLUAJIT_INCLUDE_DIR=`pkg-config --variable=includedir luajit` \ # for lua support .. make sudo make install cmake -DPYTHON_CMD=python3 .. # build python3 binding pushd src/python/ make sudo make install popd
git clone http://llvm.org/git/llvm.git cd llvm/tools; git clone http://llvm.org/git/clang.git cd ..; mkdir -p build/install; cd build cmake -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/install .. make make install export PATH=$PWD/install/bin:$PATH