點燈坊

失くすものさえない今が強くなるチャンスよ

編譯 Nginx-rtmp-module

Sam Xiao's Avatar 2020-06-13

若要使用 Nginx 的 nginx-rtmp-module,需要自行下載 source code 並重新編譯 Nginx,本文記錄其編譯過程。

Version

Ubuntu 20.04
Nginx 1.18.0
Nginx-rtmp-module 1.2.1

Nginx-rtmp-module

$ sudo -i
$ cd /usr/local
$ wget https://github.com/arut/nginx-rtmp-module/archive/v1.2.1.tar.gz
$ tar -xvzf ./v1.2.1.tar.gz
$ cd ./nginx-1.18.0
$ apt update
$ apt -y install openssl libssl-dev 
$ ./configure --add-module=../nginx-rtmp-module-1.2.1 --prefix=/usr/local/nginx

第 2 行

$ cd /usr/local

Working directory 在 /usr/local,其中 Nginx 的 source code 已經下載至 /usr/local/nginx-1.18.0,且 nginx-rtmp-module 的 souce code 也將下載在此目錄下。

第 3 行

$ wget https://github.com/arut/nginx-rtmp-module/archive/v1.2.1.tar.gz

下載 nginx-rtmp-module 的 source code。

第 4 行

$ tar -xvzf ./v1.2.1.tar.gz

使用 tar 解壓縮為 nginx-rtmp-module-1.2.1 目錄。

第 5 行

$ cd ./nginx-1.18.0

進入 nginx-1.18.0 目錄,此為 Nginx source code 所在,即將開始編譯 Nginx。

第 6 行

$ apt update
$ apt -y install openssl libssl-dev 

nginx-rtmp-module 編譯過程需要 openssl。

第 8 行

$ ./configure --add-module=../nginx-rtmp-module-1.2.1 --prefix=/usr/local/nginx

使用 configure 產生 makefile。

  • --add-module:設定 nginx-rtmp-module 的 source code 目錄供 Nginx 編譯使用
  • --prefix:設定 Nginx 編譯之後將安裝的目錄
$ cd objs
$ vim Makefile

configure 所產生的 makefile 會導致編譯失敗,需要做些修改,進入 objs 目錄修改 Makefile

CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -Wno-implicit-fallthrough

MakefileCFLAGS 最後加上 -Wno-implicit-fallthrough

make000

因爲 nginx-rtmp-module 的 source code 在 switch 使用了 fall through 寫法導致無法編譯,須在 CFLAGS 加上 -Wno-implicit-fallthrough 避免 gcc 編譯錯誤。

$ cd ..
$ make && make install

回到 Nginx 目錄下編譯 Nginx。

Conclusion

  • fall through 可能跟 gcc 的版本與預設編譯參數有關,若以 Ubuntu 20.04 的環境而言,編譯 nginx-rtmp-module 需手動修改 makefile 才能編譯成功

Reference

Roman Arutyunyan, Nginx-rtmp-module