momoで使われているlibwebrtcのソースコードを見る
momoはwebrtcのライブラリlibwebrtcを使用しています。そのlibwebrtcは以下のgithubリポジトリでビルドされたものです。
このリポジトリには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