Falcoをソースからビルドする
Falcoを自分で構築する方法に関するガイドへようこそ! あなたはとても勇敢です! あなたはすでに これらすべてを行うことで、あなたがコントリビュートしてくれる可能性が高いです! コントリビュートガイドをお読みください。
CentOS / RHEL
CentOS 7は、リリースアーティファクトのコンパイルに使用するリファレンスビルド環境です。
依存関係
CentOS 8 / RHEL 8
CentOS 7 / RHEL 7
yum install gcc gcc-c++ git make autoconf automake pkg-config patch
yum install libcurl-devel zlib-devel libyaml-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のビルド
詳細は ここです。
カーネルモジュールドライバーのビルド
ビルドディレクトリで:
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
DEB/RPMパッケージのビルド
ビルドディレクトリで:
Debian / Ubuntu
依存関係
Falcoのビルド
詳細は ここです。
カーネルモジュールドライバーのビルド
ドライバーをビルドするには、カーネルヘッダーが必要です。
ビルドディレクトリで:
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
Arch Linux
依存関係
Falcoのビルド
詳細は ここです。
カーネルモジュールドライバーのビルド
ビルドディレクトリで:
eBFPドライバーのビルド
カーネルモジュールドライバーを使用しない場合は、代わりに次のようにeBPFドライバーをビルドできます。
ビルドディレクトリで:
依存関係
デフォルトでは、Falcoビルドはランタイム依存関係のほとんどを動的にバンドルします。
これを確認すると、デフォルトでオプションUSE_BUNDLED_DEPS
がOFF
になっています。つまり、該当するかどうかにかかわらず、Falcoビルドは、マシンに既に存在するライブラリに対してリンクしようとします。
そのようなオプションをON
に変更すると、Falcoビルドはすべての依存関係を静的にバンドルします。
完全を期すために、これはFalcoの依存関係の完全なリストです:
- b64
- cares
- curl
- civetweb
- grpc
- jq
- libyaml
- lpeg
- luajit
- lyaml
- njson
- openssl
- protobuf
- tbb
- yamlcpp
- zlib
- libscap
- libsinsp
Falcoのビルド
Falcoをビルドするには、2つの方法がサポートされています
ホストで直接ビルド
Falcoをビルドするには、build
ディレクトリを作成する必要があります。
Falcoの作業コピー自体にbuild
ディレクトリを置くのが一般的ですが、ファイルシステムのどこにあってもかまいません。
Falcoをコンパイルする3つの主要なステップがあります。
- ビルドディレクトリを作成して入力します
- ビルドディレクトリのcmakeを使用して、Falcoのビルドファイルを作成します。ソースディレクトリが現在のディレクトリの親であるため、
..
が使用されました。代わりに、Falcoソースコードの絶対パスを使用することもできます - makeを使用してビルドする
すべてビルド
特定のターゲットのみをビルドすることもできます:
Falcoだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
Falcoエンジンのみをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
libscapだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
libsinspだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
probe / kernel ドライバーだけをビルド
ビルドフォルダーとcmakeセットアップを実行してから、:
結果をビルド
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を生成する
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.33.1-dirty
明示的に指定しない場合、ビルドシステムはgit履歴からFALCO_VERSION
値を計算します。
現在のgitリビジョンにgitタグがある場合、Falcoバージョンはそれと同じになります(先頭の「v」文字なし)。それ以外の場合、Falcoのバージョンは 0.<commit hash>[.dirty]
の形式になります。
Enable BPF support
-DBUILD_BPF=True
これを有効にすると、次の後に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のビルドディレクトリを使用したい場合は、次のコマンドを実行します。
ビルドされたパッケージのバージョンとして使用するために、FALCO_VERSION
環境変数を明示的に提供することも可能です。
それ以外の場合、DockerイメージはデフォルトのFALCO_VERSION
を使用します。
最新のfalco-probeカーネルモジュールをロードする
Falcoのバイナリバージョンがインストールされている場合、古いFalcoカーネルモジュールがすでにロードされている可能性があります。最新バージョンを使用していることを確認するには、既存のFalcoカーネルモジュールをアンロードし、ローカルでビルドされたバージョンをロードする必要があります。
次の方法で既存のカーネルモジュールをアンロードします:
ローカルでビルドされたバージョンをロードするには、build
ディレクトリにいると仮定して、以下を使用します:
ローカルでビルドされたバージョンをロードするには、build
ディレクトリにいると仮定して、以下を使用します:
falcoを実行
Falcoがビルドされてカーネルモジュールが読み込まれると、build
ディレクトリにいると想定して、次のようにfalcoを実行できます:
デフォルトでは、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を組み込んだディレクトリに変更します。
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
のビルドディレクトリを使用したい場合は、次のコマンドを実行します:
$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.