统一化的eBPF学习环境搭建,附代码

admin 2024年12月8日22:48:47评论5 views字数 3945阅读13分9秒阅读模式
都要2025了,eBPF开发与测试环境也有了更优雅的部署方式,WSL内核越来越完善,orbstack的内核也加入了eBPF开发相关的内核配置。可以直接使用vscode+devcontainer做开发与测试了。支持开发语法高亮、智能提示、代码编译与测试。
做好的环境在eBPF系列课程第六季福利课里面有详细讲解,现在把环境代码放出来给公众号的朋友们使用。环境支持docker与真机一键部署。
统一化的eBPF学习环境搭建,附代码
可以直接使用我编译好的(fsx199/ebpf-course-env)。也可以下载代码自己编译。
核心代码如下:
# Installrequired packagesapt-get update &&    apt-get install -y --no-install-recommends         libzstd-dev libcurl4-openssl-dev libedit-dev cmake vim         lsb-release software-properties-common tree sed wget apt-file         gnupg unzip ninja-build git python3-dev python3-pip         libdwarf-dev libelf-dev libsqlite3-dev libunwind-dev         curl xz-utils build-essential file flex bison meson         gh tzdata plantuml qemu-user ca-certificates         gperf pkg-config python-is-python3 reprepro sudo adb socat         help2man autoconf gawk libtool-bin libncurses-dev texinfo unifdef p7zip-full &&    apt-file update &&    apt-get install -y --no-install-recommends         lib32stdc++-9-dev libc6-dev libc6-dev-i386 gcc-multilib g++-multilib ||true# Set timezoneln -snf /usr/share/zoneinfo/$TZ/etc/localtime && echo $TZ>/etc/timezone# ConfigurePython pippip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple &&     python3 -m pip install -U pip &&     pip install -U lief ninja meson typing-extensions colorama prompt-toolkit pygments graphlib# Install Node.jscurl -fsSL https://deb.nodesource.com/setup_20.x | bash - &&     apt-get install -y nodejs &&     npm config set strict-ssl false &&     npm config set registry https://registry.npm.taobao.org# Install Goexport GO_VERSION=1.23.2export GOROOT=/usr/local/goexport GOPATH=/goexport PATH="$GOROOT/bin:$GOPATH/bin:$PATH"export GO111MODULE=onexport GOPROXY=https://goproxy.cn,directARCH="$(uname -m)" &&     case $ARCH in         "x86_64") ARCH=amd64 ;;         "aarch64") ARCH=arm64 ;;         "armv6" | "armv7l") ARCH=armv6l ;;         "armv8") ARCH=arm64 ;;         "i686") ARCH=386 ;;         "*386*") ARCH=386 ;;         *) echo "Unsupported architecture"; exit 1 ;;     esac &&     PACKAGE_NAME="go${GO_VERSION}.linux-$ARCH.tar.gz" &&     TEMP_DIRECTORY=$(mktemp -d) &&     echo "Downloading $PACKAGE_NAME ..." &&     wget -q https://mirrors.aliyun.com/golang/$PACKAGE_NAME -O "$TEMP_DIRECTORY/go.tar.gz" &&     echo "Extracting File..." &&     mkdir -p "$GOROOT" &&     tar -C "$GOROOT" --strip-components=1 -xzf "$TEMP_DIRECTORY/go.tar.gz" &&     rm -rf "$TEMP_DIRECTORY" &&     mkdir -p "${GOPATH}/"{src,pkg,bin}go version# Install additional required packagesapt-get update -y && apt-get install -y --no-install-recommends     apt-utils python3-full python3-pip acl sysbench jq net-tools     wget curl git tree pkg-config vim clang llvm libbfd-dev libcap-dev     dialog file libelf-dev gpg flex bison libssl-dev zip     unzip build-essential bc libstdc++6 libpulse0 libglu1-mesa     zlib1g-dev libelf-dev libfl-dev python3-setuptools     liblzma-dev libdebuginfod-dev arping netperf iperf systemtap-sdt-dev     binutils-dev libcereal-dev llvm-dev libclang-dev libpcap-dev     libgtest-dev libgmock-dev pahole lld libelf1 rsync kmod cpio xz-utils     git-lfs s-tui stress htop locales lcov libncurses6 libncurses-dev devscripts# Clone and build eBPF toolsmkdir -p eBPFpushd eBPFgit_clone_or_pull() {    local repo_url=$1    local dir_name=$2    if [ ! -d "$dir_name" ]; then        git clone --progress --recursive "$repo_url" "$dir_name"    else        git -C "$dir_name" pull    fi}git_clone_or_pull https://github.com/iovisor/bcc.git bccgit_clone_or_pull https://github.com/bpftrace/bpftrace.git bpftracegit_clone_or_pull https://github.com/libbpf/libbpf.git libbpfgit_clone_or_pull https://github.com/libbpf/libbpf-bootstrap.git libbpf-bootstrapgit_clone_or_pull https://github.com/libbpf/bpftool.git bpftool# Static link binariesEXTRA_CFLAGS=--staticpushd libbpf/srcmake -j$(nproc)sudo make installpopdpushd libbpf-bootstrap/examples/cmake -j$(nproc)popdpushd bpftool/srcmake -j$(nproc)sudo make installpopdmkdir -p bcc/buildpushd bcc/buildLLVM_ROOT=/usr/lib/llvm-14 cmake ..make -j$(nproc)sudo make installcmake -DPYTHON_CMD=python3 ..pushd src/python/make -j$(nproc)sudo make installpopdpopdpushd bcc/libbpf-tools/make -j$(nproc) BPFCFLAGS="-g -O2 -Wall -I/usr/include/$(uname -m)-linux-gnu"sudo make installpopdmkdir -p bpftrace/buildpushd bpftrace/buildLLVM_ROOT=/usr/lib/llvm-14 cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..make -j$(nproc)sudo make installpopdpopd
代码下载地址:
https://github.com/feicong/ebpf-course/tree/main/.devcontainer
注意看build.sh,虽然跑在容器中,也支持在ubuntu22.04上一键运行部署。

原文始发于微信公众号(软件安全与逆向分析):统一化的eBPF学习环境搭建,附代码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月8日22:48:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   统一化的eBPF学习环境搭建,附代码https://cn-sec.com/archives/3482765.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息