Fluent Bitをソースからインストールする（RHEL 9）

## はじめに

以前、Fluent Bitを検証したことがありました。
ドキュメントの読解と共に、動作検証も行いました。

動作検証を行うため、Fluent Bitをインストールする必要があり、パッケージからのインストールの他に、ソースからのインストールが行えることも書かれていました。

パッケージからのインストールですと、古いバージョンであることが多いので、ソースからインストールしてみることにしました。

ただ、公式のドキュメントには、インストールに必要な情報が欠けており、インストールに手間取る結果となりました。そこで、ソースからのインストールを行うのに必要な手順を残しておくことにしました。

## 環境

* OSはRHEL9.1
* Fluent Bitは2.2.2
    * 本記事を書いた時点の最新版

## 公式ドキュメントについて

公式ドキュメントで、ソースからインストールする方法が述べられています。

https://docs.fluentbit.io/manual/installation/sources

このドキュメントを元に作業を進めていき、ドキュメントに載っていないことを本記事で解説します。

## ドキュメントに書かれていないこと

ドキュメントには、以下が必要と書かれていました。
https://docs.fluentbit.io/manual/installation/sources/build-and-install#requirements

* CMake >= 3.12
* Flex
* Bison >= 3
* YAML headers
* OpenSSL headers

CMakeとFlex、BisonはAppStreamにあるので、問題ありません。dnf listであっさりと確認できました。

OpenSSL headersは、openssl-develのパッケージだということがわかりました。これもAppStreamにありましたから、問題ありませんでした。

ただ、YAML headersがすんなりとはわかりませんでした。わかる人にはこれだけでもわかる、ということでしょうか。調査の結果、YAML headersが意味するものは、以下の通りでした。

* YAML headersは、libyaml-develパッケージのこと
* リポジトリはCodeReady Linux Buildeである

また、gcc-c++も必要でした。
これはドキュメントのRequirementsに書かれていません。ビルドエラーとなったところでわかったことです。

これらを踏まえて、作業を行います。

## ビルド前の準備

### CodeReady Linux Builderのリポジトリを有効にする

サブスクリプションマネージャーを使い、CodeReady Linux Buiderのリポジトリを有効にします。

```
$ sudo subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms
リポジトリー 'codeready-builder-for-rhel-9-x86_64-rpms' は、このシステムに対して有効になりました。
```

### パッケージを最新の状態にする

念のため、パッケージを最新の状態にしておきます。

```
$ sudo dnf update
サブスクリプション管理リポジトリーを更新しています。
Red Hat CodeReady Linux Builder for RHEL 9 x86_64 (RPMs)                                4.3 MB/s | 4.3 MB     00:01
依存関係が解決しました。
行うべきことはありません。
完了しました!
```

# 必要なパッケージをまとめてインストールする

ビルドに必要なパッケージをまとめてインストールします。

```
$ sudo dnf install -y cmake flex bison libyaml-devel openssl-devel gcc-c++
サブスクリプション管理リポジトリーを更新しています。

（中略）

インストール済み:
  bison-3.7.4-5.el9.x86_64                cmake-3.20.2-7.el9.x86_64                cmake-data-3.20.2-7.el9.noarch
  cmake-filesystem-3.20.2-7.el9.x86_64    cmake-rpm-macros-3.20.2-7.el9.noarch     flex-2.6.4-9.el9.x86_64
  gcc-c++-11.3.1-2.1.el9.x86_64           libstdc++-devel-11.3.1-2.1.el9.x86_64    libyaml-devel-0.2.5-7.el9.x86_64
  m4-1.4.19-1.el9.x86_64                  openssl-devel-1:3.0.1-47.el9_1.x86_64

完了しました!
```

## ビルド

### ソースのダウンロード

GitHubからソースをダウンロードします。

公式ではリリースバージョンのタグを調べ、「https://github.com/fluent/fluent-bit/archive/refs/tags/v<release version>.tar.gz」か「https://github.com/fluent/fluent-bit/archive/refs/tags/v<release version>.zip」に当てはめるようにとありますが、 https://github.com/fluent/fluent-bit/releases を見て、そこからダウンロードしたほうが良さそうです。

https://docs.fluentbit.io/manual/installation/sources/download-source-code#stable

今回は2.2.2をダウンロードしました。

```
$ wget https://github.com/fluent/fluent-bit/archive/refs/tags/v2.2.2.zip
```

### ソースコードを展開する

```
$ unzip v2.2.2.zip
```

`fluent-bit-2.2.2`ディレクトリが作成されています。

### 展開したディレクトリのbuildディレクトリに移動する

```
$ cd fluent-bit-2.2.2/build
```

### buildディレクトリでCMakeを実行する

```
$ cmake ../
-- The C compiler identification is GNU 11.3.1
-- Detecting C compiler ABI info

（中略）

-- Configuring done
-- Generating done
-- Build files have been written to: /home/---/fluent-bit-2.2.2/build
```

### makeを実行する

```
$ make
[  0%] Creating directories for 'backtrace'
[  0%] No download step for 'backtrace'

（中略）

[100%] Linking C executable ../../bin/out_lib
[100%] Built target out_lib
```

### make installを実行する

`/usr/local`への書き込みが発生するため、root権限が必要です。

root権限が必要になるだろうということは、ドキュメントで述べられています。

> it's likely you may need root privileges so you can try to prefixing the command with sudo.

```
$ sudo make install
[  1%] Built target backtrace
Consolidate compiler generated dependencies of target c-ares

（中略）

-- Installing: /usr/local/etc/fluent-bit/parsers.conf
-- Installing: /usr/local/etc/fluent-bit/plugins.conf
```

## インストール後の確認

whichコマンドで`fluent-bit`コマンドの場所を確認して、`/usr/local/bin`に置かれていれば、インストールは成功です。

```
$ which fluent-bit
/usr/local/bin/fluent-bit
```

`fluent-bit`コマンドでバージョンの確認を行い、バージョン表示がされればコマンドは正しく動いています。

```
$ fluent-bit --version
Fluent Bit v2.2.2
Git commit:
```