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

## はじめに

インメモリデータベースのRedisに触れる機会がありました。

RHEL9.1でしたので、dnfでパッケージのインストールは可能でしたが、バージョンが6.2.7と古かったので、ソースからインストールしました。

ソースからのインストール方法についてのドキュメント。

https://redis.io/docs/install/install-redis/install-redis-from-source/

## インストール先の環境・インストールするRedisのバージョン

* OSはRHEL 9.1
* インストールするRedisは、インストール時点の最新安定版
    * 今回は7.2.4

## インストール

### Redisのインストールに必要なパッケージをインストールする

もしmakeとgccがインストールされていない場合は、先にインストールしてください。

    $ sudo dnf install make gcc

### Redisのソースをダウンロードする

#### 最新の安定版をダウンロードする

```
$ wget https://download.redis.io/redis-stable.tar.gz
--2024-03-15 19:50:19--  https://download.redis.io/redis-stable.tar.gz
download.redis.io (download.redis.io) をDNSに問いあわせています... 45.60.125.1
download.redis.io (download.redis.io)|45.60.125.1|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3479614 (3.3M) [application/octet-stream]
`redis-stable.tar.gz.1' に保存中

redis-stable.tar.gz.1                                100%[===================================================================================================================>]   3.32M  10.0MB/s 時間 0.3s

2024-03-15 19:50:20 (10.0 MB/s) - `redis-stable.tar.gz.1' へ保存完了 [3479614/3479614]
```

### ダウンロードしたソースを展開する

```
$ tar xzvf redis-stable.tar.gz
redis-stable/
redis-stable/src/
redis-stable/src/geohash.h

（中略）

redis-stable/.codespell/wordlist.txt
redis-stable/.codespell/requirements.txt
redis-stable/sentinel.conf
redis-stable/runtest-moduleapi
```

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

    $ cd redis-stable

### redis-stableでダウンロードした場合のバージョン確認

ソースのバージョンを確認したい場合は、以下を参照すると確認できます。

* 展開したディレクトリの直下にある`00-RELEASENOTES`
    * リリースされたバージョンの情報がバージョンの降順で記載されている
* srcディレクトリのversion.hファイル

### makeの実行

```
$ make
cd src && make all
make[1]: ディレクトリ '/home/---/redis-stable/src' に入ります
    CC Makefile.dep

（中略）

    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

make[1]: ディレクトリ '/home/---/redis-stable/src' から出ます
```

### インストールの実行

```
$ sudo make install
[sudo] --- のパスワード:
cd src && make install
make[1]: ディレクトリ '/home/---/redis-stable/src' に入ります
    CC Makefile.dep

Hint: It's a good idea to run 'make test' ;)

    INSTALL redis-server
    INSTALL redis-benchmark
    INSTALL redis-cli
make[1]: ディレクトリ '/home/---/redis-stable/src' から出ます
```

### インストールされたコマンド

/usr/local/binに"redis"で始まる以下のコマンドがあればOKです。

```
$ find /usr/local/bin/ -name "redis*"
/usr/local/bin/redis-server
/usr/local/bin/redis-benchmark
/usr/local/bin/redis-cli
/usr/local/bin/redis-check-rdb
/usr/local/bin/redis-check-aof
/usr/local/bin/redis-sentinel
```

## 動作確認

redis-serverを起動してみます。以下のような表示がされれば成功です。

```
$ redis-server
32927:C 15 Mar 2024 20:35:10.622 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
32927:C 15 Mar 2024 20:35:10.623 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
32927:C 15 Mar 2024 20:35:10.623 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=32927, just started
32927:C 15 Mar 2024 20:35:10.623 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
32927:M 15 Mar 2024 20:35:10.623 * Increased maximum number of open files to 10032 (it was originally set to 1024).
32927:M 15 Mar 2024 20:35:10.623 * monotonic clock: POSIX clock_gettime
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 7.2.4 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 32927
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           https://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

32927:M 15 Mar 2024 20:35:10.625 * Server initialized
32927:M 15 Mar 2024 20:35:10.625 * Ready to accept connections tcp
```

停止するには`Ctrl + c`を押下します。

```
^C32927:signal-handler (1710502517) Received SIGINT scheduling shutdown...
32927:M 15 Mar 2024 20:35:17.471 * User requested shutdown...
32927:M 15 Mar 2024 20:35:17.472 * Saving the final RDB snapshot before exiting.
32927:M 15 Mar 2024 20:35:17.486 * DB saved on disk
32927:M 15 Mar 2024 20:35:17.486 # Redis is now ready to exit, bye bye...
```

## まとめ

ソースからのインストールということで、面倒なことになるのではと思いましたが、gccとmakeがあれば簡単にインストールできました。