🚚

momoで使われているlibwebrtcのソースコードを見る

2022/05/10に公開

momoはwebrtcのライブラリlibwebrtcを使用しています。そのlibwebrtcは以下のgithubリポジトリでビルドされたものです。
https://github.com/shiguredo-webrtc-build/webrtc-build

このリポジトリにはwebrtcのソースコードは含まれていません。ビルドの過程でダウンロードされます。

libwebrtcをビルドしてみる

libwebrtcをビルドの手順は難しくないのですが、大量のストレージと太いネットワーク帯域を必要とします。
自宅のMacのVirtualBoxの仮想マシンでも試したのですが、ダウンロード速度が全く上がらずに半日かけてエラー終了してしまいました。
Orecle CloudのAMD64のインスタンスではすんなりとうまくいきました。(2CPU4スレッド メモリ32GB)クラウドのインスタンスだとダウンロードの速度が桁違いに速いです。

リポジトリをクローン。

$ git clone https://github.com/shiguredo-webrtc-build/webrtc-build.git
$ cd webrtc-build/

momoで使っているものとバージョンを合わせる。

$ cat ../momo/VERSION |grep WEBRTC
WEBRTC_BUILD_VERSION=102.5005.1.0
$ git tag |grep 102.5005.1
m102.5005.1.0
$ git checkout -b work m102.5005.1.0

バックグラウンドでビルド。

$ nohup ./build.raspberry-pi-os_armv7.sh &

これでビルド中にログアウトしても大丈夫です。

途中の様子を見る。

$ tail -f nohup.out

htopコマンドで負荷状態を見るのもよいでしょう。

無事にビルドが完了すると _package/raspberry-pi-os_armv7/webrtc.tar.gz ができます。
このアーカイブの中にlibwebrtc.aとインクルードファイルが入っています。

ソースコードを見る

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

コンテナは何も無い。

dockerのイメージを確認。

$ docker images
REPOSITORY                            TAG             IMAGE ID       CREATED        SIZE
webrtc/raspberry-pi-os_armv7          m102.505.1      22a4be061fb0   10 minutes ago   126.8MB
momo/raspberry-pi-os_armv7            m102.5005.1.0   bfd18ff15aff   13 hours ago   3.57GB

webrtcのイメージにbashを動かしてみる。

$ docker run -it 22a4be061fb0 /bin/bash

あれれ? webrtc.tar.gz があるだけで、webrtcのソースコードが影も形もない??

ソースコードを残すように修正して再ビルド

実はDockerfileの中でビルドの最後に生成物以外を消し去ってしまっています。
正確にはdockerイメージの状態をビルド開始時に戻して、生成物だけをコピーしています。

それをしないようにDockerfileを修正します。

diff --git a/raspberry-pi-os_armv7/Dockerfile b/raspberry-pi-os_armv7/Dockerfile
index f9ec365..7fdfceb 100644
--- a/raspberry-pi-os_armv7/Dockerfile
+++ b/raspberry-pi-os_armv7/Dockerfile
@@ -16,6 +16,6 @@ RUN cd /root && python3 run.py build $PACKAGE_NAME
 RUN cd /root && python3 run.py package $PACKAGE_NAME
 RUN mv $PACKAGE_DIR/webrtc.tar.gz /
 
-FROM ubuntu:20.04
+#FROM ubuntu:20.04
 
-COPY --from=builder /webrtc.tar.gz /
\ No newline at end of file
+#COPY --from=builder /webrtc.tar.gz /

前回のビルドのときに大量のディスクを使っているので、それを消します。(これをしなかったので、disk fullになってしまいました。)

$ docker system prune

再びビルド。

$ nohup ./build.raspberry-pi-os_armv7.sh &

ビルド完了後に docker run すると今度は/root/_source/raspberry-pi-os_armv7/webrtc/src/ があります。

ソースコードをdockerイメージから取り出すには以下のようにすればできますが、30GBくらい空きがないとdisk fullになってしまいます。

$ mkdir m102.5005.1.0
$ cd m102.5005.1.0/
$ docker run -it --rm -v $PWD:/mnt 53df61775e88 rsync -av /root/_source/raspberry-pi-os_armv7/webrtc/ /mnt/

Discussion