Falcoをソースからビルドする
Falcoを自分で構築する方法に関するガイドへようこそ! あなたはとても勇敢です! あなたはすでに これらすべてを行うことで、あなたがコントリビュートしてくれる可能性が高いです! コントリビュートガイドをお読みください。
CentOS / RHEL
CentOS 7は、リリースアーティファクトのコンパイルに使用するリファレンスビルド環境です。
依存関係
CentOS 8 / RHEL 8
dnf install 'dnf-command(config-manager)'
dnf config-manager --set-enabled PowerTools # needed for libyaml-devel
dnf install gcc gcc-c++ git make cmake autoconf automake pkg-config patch
dnf install libcurl-devel zlib-devel libyaml-devel ncurses-devel libtool glibc-static libstdc++-static elfutils-libelf-devel -y
CentOS 7 / RHEL 7
yum install gcc gcc-c++ git make autoconf automake pkg-config patch
yum install libcurl-devel zlib-devel libyaml-devel ncurses-devel libtool glibc-static libstdc++-static elfutils-libelf-devel -y
You will also need cmake
version 3.5.1
or higher which is not included in CentOS 7. You can follow the official guide or look at how that is done
in the Falco builder Dockerfile.
また、CentOS 7には含まれていないcmake
バージョン 3.5.1
以降が必要です。公式ガイド に従うか、
Falco builder Dockerfile内でそれがどのように行われるかを確認できます。
Falcoのビルド
git clone https://github.com/falcosecurity/falco.git
cd falco
mkdir -p build
cd build
cmake -DUSE_BUNDLED_DEPS=ON ..
make falco
詳細は ここです。
カーネルモジュールドライバーのビルド
ビルドディレクトリで:
yum -y install kernel-devel-$(uname -r)
make driver
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
dnf install clang llvm
cmake -DBUILD_BPF=ON ..
make bpf
DEB/RPMパッケージのビルド
ビルドディレクトリで:
yum install rpm-build createrepo
make package
Debian / Ubuntu
依存関係
apt install git cmake build-essential
Falcoのビルド
apt install libssl-dev libyaml-dev libncurses-dev libc-ares-dev libprotobuf-dev protobuf-compiler libjq-dev libyaml-cpp-dev libgrpc++-dev protobuf-compiler-grpc libcurl4-openssl-dev libelf-dev
git clone https://github.com/falcosecurity/falco.git
cd falco
mkdir -p build
cd build
cmake ..
make falco
詳細は ここです。
カーネルモジュールドライバーのビルド
ドライバーをビルドするには、カーネルヘッダーが必要です。
apt install linux-headers-$(uname -r)
ビルドディレクトリで:
make driver
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
apt install llvm clang
cmake -DBUILD_BPF=ON ..
make bpf
Arch Linux
依存関係
pacman -S git cmake make gcc wget
pacman -S zlib jq ncurses yaml-cpp openssl curl c-ares protobuf grpc libyaml
Falcoのビルド
git clone https://github.com/falcosecurity/falco.git
cd falco
mkdir -p build
cd build
cmake ..
make falco
詳細は ここです。
カーネルモジュールドライバーのビルド
ビルドディレクトリで:
make driver
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
pacman -S llvm clang
cmake -DBUILD_BPF=ON ..
make bpf
依存関係
デフォルトでは、Falcoビルドはランタイム依存関係のほとんどを動的にバンドルします。
これを確認すると、デフォルトでオプションUSE_BUNDLED_DEPS
がOFF
になっています。つまり、該当するかどうかにかかわらず、Falcoビルドは、マシンに既に存在するライブラリに対してリンクしようとします。
そのようなオプションをON
に変更すると、Falcoビルドはすべての依存関係を静的にバンドルします。
完全を期すために、これはFalcoの依存関係の完全なリストです:
- b64
- cares
- curl
- civetweb
- grpc
- jq
- libyaml
- lpeg
- luajit
- lyaml
- ncurses
- njson
- openssl
- protobuf
- tbb
- yamlcpp
- zlib
- libscap
- libsinsp
Falcoのビルド
Falcoをビルドするには、2つの方法がサポートされています
ホストで直接ビルド
Falcoをビルドするには、build
ディレクトリを作成する必要があります。
Falcoの作業コピー自体にbuild
ディレクトリを置くのが一般的ですが、ファイルシステムのどこにあってもかまいません。
Falcoをコンパイルする3つの主要なステップがあります。
- ビルドディレクトリを作成して入力します
- ビルドディレクトリのcmakeを使用して、Falcoのビルドファイルを作成します。ソースディレクトリが現在のディレクトリの親であるため、
..
が使用されました。代わりに、Falcoソースコードの絶対パスを使用することもできます - makeを使用してビルドする
すべてビルド
mkdir build
cd build
cmake ..
make
特定のターゲットのみをビルドすることもできます:
Falcoだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
make falco
Falcoエンジンのみをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
make falco_engine
libscapだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
make scap
libsinspだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
make sinsp
probe / kernel ドライバーだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
make driver
結果をビルド
Falcoがビルドされると、build
フォルダーにある3つの興味深いものは次のとおりです:
userspace/falco/falco
: 実際のFalcoバイナリdriver/src/falco-probe.ko
: Falcoカーネルドライバーdriver/bpf/probe.o
: BPF support でFalcoをビルドした場合
デバッグバージョンをビルドする場合は、代わりにcmakeをcmake -DCMAKE_BUILD_TYPE=Debug ..
として実行します。詳細なカスタマイズについては、[CMake オプション](#CMake オプション) セクションを参照してください。
CMake オプション
cmake
コマンドを実行するとき、ビルドファイルの動作を変更するために追加のパラメーターを渡すことができます。
以下にいくつかの例を示します。常に、build
フォルダーがFalco作業コピー内にあると想定しています。
verbose makefilesを生成する
-DCMAKE_VERBOSE_MAKEFILE=On
CおよびCXXコンパイラを指定する
-DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++)
バンドルされた依存関係を適用する
-DUSE_BUNDLED_DEPS=True
Falcoの依存関係の詳細については、こちらをご覧ください。
警告をエラーとして扱う
-DBUILD_WARNINGS_AS_ERRORS=True
ビルドタイプを指定する
デバッグビルドタイプ
-DCMAKE_BUILD_TYPE=Debug
リリースビルドタイプ
-DCMAKE_BUILD_TYPE=Release
この変数は大文字と小文字を区別せず、デフォルトでリリースされることに注意してください。
Falcoのバージョンを指定する
オプションで、ユーザーはFalcoのバージョンを指定できます。 例えば、
-DFALCO_VERSION=0.29.0-dirty
明示的に指定しない場合、ビルドシステムはgit履歴からFALCO_VERSION
値を計算します。
現在のgitリビジョンにgitタグがある場合、Falcoバージョンはそれと同じになります(先頭の「v」文字なし)。それ以外の場合、Falcoのバージョンは 0.<commit hash>[.dirty]
の形式になります。
Enable BPF support
-DBUILD_BPF=True
これを有効にすると、次の後にbpf
ターゲットを作成できます:
make bpf
falco-builderコンテナを使用してビルド
Falcoをビルドする別の方法は、falco-builderコンテナを実行することです。 パッケージのビルドに使用できるリファレンスツールチェーンが含まれており、すべての依存関係はすでに満たされています。
イメージは次のパラメーターに依存します:
BUILD_TYPE
:デバッグまたはリリース(大文字と小文字を区別せず、デフォルトはリリース)BUILD_DRIVER
:ビルド時にカーネルモジュールをビルドするかどうか。カーネルモジュールはホストではなく、centosイメージ内のファイル用に構築されるため、これは通常オフにする必要があります。BUILD_BPF
:BUILD_DRIVER
に似ていますが、ebpfプログラム用です。BUILD_WARNINGS_AS_ERRORS
:すべてのビルド警告を致命的と見なしますMAKE_JOBS
:makeの-j引数に渡されます
このビルダーを実行する一般的な方法は次のとおりです。FalcoとSysdigを/home/user/srcの下のディレクトリにチェックアウトしていて、/home/user/build/ falcoのビルドディレクトリを使用したい場合は、次のコマンドを実行します。
docker run --user $(id -u):$(id -g) -v /etc/passwd:/etc/passwd:ro -it -v /home/user/src:/source -v /home/user/build/falco:/build falcosecurity/falco-builder cmake
docker run --user $(id -u):$(id -g) -v /etc/passwd:/etc/passwd:ro -it -v /home/user/src:/source -v /home/user/build/falco:/build falcosecurity/falco-builder package
ビルドされたパッケージのバージョンとして使用するために、FALCO_VERSION
環境変数を明示的に提供することも可能です。
それ以外の場合、DockerイメージはデフォルトのFALCO_VERSION
を使用します。
最新のfalco-probeカーネルモジュールをロードする
Falcoのバイナリバージョンがインストールされている場合、古いFalcoカーネルモジュールがすでにロードされている可能性があります。最新バージョンを使用していることを確認するには、既存のFalcoカーネルモジュールをアンロードし、ローカルでビルドされたバージョンをロードする必要があります。
次の方法で既存のカーネルモジュールをアンロードします:
rmmod falco_probe
ローカルでビルドされたバージョンをロードするには、build
ディレクトリにいると仮定して、以下を使用します:
insmod driver/falco-probe.ko
rmmod falco_probe
ローカルでビルドされたバージョンをロードするには、build
ディレクトリにいると仮定して、以下を使用します:
insmod driver/falco-probe.ko
falcoを実行
Falcoがビルドされてカーネルモジュールが読み込まれると、build
ディレクトリにいると想定して、次のようにfalcoを実行できます:
sudo ./userspace/falco/falco -c ../falco.yaml -r ../rules/falco_rules.yaml
デフォルトでは、falcoはイベントを標準エラーに記録します。
回帰テストを実行する
ホストで直接テスト
回帰テストを実行するには、Falcoをビルドした後、Falcoルートディレクトリでtest/run_regression_tests.sh
スクリプトを実行する必要があります。
依存関係
回帰テストフレームワークが機能するには、次の依存関係が必要です。
- Python 3
- Avocado Framework, version 69
- Avocado Yaml to Mux plugin
- JQ
- The
unzip
andxargs
commands - Docker CE
Avocadoとそのプラグインをインストールするには、pipを使用できます:
pip install avocado-framework==69.0 avocado-framework-plugin-varianter-yaml-to-mux==69.0
テストを実行する
$PWD/build
が異なる場合はFalcoを組み込んだディレクトリに変更します。
./test/run_regression_tests.sh -d $PWD/build
falco-testerコンテナを使用してテストする
ビルドに対して回帰テストスイートを実行する場合は、falco-testerコンテナを使用できます。ビルダーイメージのように、回帰テストを実行するために必要な環境が含まれていますが、イメージにマウントされているソースディレクトリとビルドディレクトリに依存しています。コンパイラーを必要とせず、テストランナーフレームワークavocadoを含めるには別のベースイメージが必要なため、これはfalco-builder
とは異なるイメージです。
新しいコンテナイメージfalcosecurity/falco:test
(ソースはFalco GitHubリポジトリのdocker/local
ディレクトリにあります)をビルドして、ビルドステップ中にビルドされたFalcoパッケージでコンテナーをビルドして実行するプロセスをテストします。
イメージは次のパラメーターに依存します:
FALCO_VERSION
:テストコンテナイメージに含めるFalcoパッケージのバージョン。ビルドされたパッケージのバージョンと一致する必要があります。
このビルダーを実行する一般的な方法は次のとおりです。FalcoとSysdigを/home/user/src
の下のディレクトリにチェックアウトしていて、/home/user/build/falco
のビルドディレクトリを使用したい場合は、次のコマンドを実行します:
docker run --user $(id -u):$(id -g) -v $HOME:$HOME:ro -v /boot:/boot:ro -v /var/run/docker.sock:/var/run/docker.sock -v /etc/passwd:/etc/passwd:ro -e FALCO_VERSION=${FALCO_VERSION} -v /home/user/src:/source -v /home/user/build/falco:/build falcosecurity/falco-tester
$HOME
をマウントすると、テスト実行フレームワークを実行できます。$(id -g)
を、Dockerソケットへのアクセスを許可されているグループ(多くの場合 docker
グループ)の正しいgidに置き換える必要がある場合があります。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.