概述
接上一篇,本文主要详细介绍在 docker container 中,自动化构建常用软件 FFmpeg,ImageMagick,libav,openssl,php,qemu 和 wireshark 的编译环境。
FFmpeg
FFmpeg 是一个可以运行音频和视讯多种格式的录影、转换、流功能的开源软件,其中包含了大量音频和视频处理的库函数。
编写自动化 shell 脚本,实现 FFmpeg 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器,注意不同软件要求参数不同)1。
#!/bin/sh
set -e
docker run -itd --name ffmpeg ubuntu:latest /bin/bash
docker exec -it ffmpeg bash -c "apt-get update -qq && apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev clang"
docker exec -it ffmpeg bash -c "git clone https://github.com/FFmpeg/FFmpeg.git"
docker exec -it ffmpeg bash -c "cd FFmpeg; ./configure [cc=clang] "
docker exec -it ffmpeg bash -c "cd FFmpeg; make [cc=clang] "
docker commit ffmpeg myffmpeg:Gcc[Clang]Build
docker stop ffmpeg
docker rm ffmpeg
使用新构造的编译环境的命令如下:
docker run -it --name ffmpeg myffmpeg:Gcc[Clang]Build /bin/bash
ImageMagick
ImageMagick 是一个用于查看,编辑位图文件以及进行图像格式转换的开源软件。
编写自动化 shell 脚本,实现 ImageMagick 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 CC=clang 修改默认编译器)2。
#!/bin/sh
set -e
docker run -itd --name ImageMagick ubuntu:latest /bin/bash
docker exec -it ImageMagick bash -c "apt-get update && apt-get -y install gcc vim clang make git"
docker exec -it ImageMagick bash -c "git clone https://github.com/ImageMagick/ImageMagick.git"
docker exec -it ImageMagick bash -c "cd /ImageMagick; ./configure [CC=clang]"
docker exec -it ImageMagick---ImageMagick bash -c "cd /ImageMagick; make [CC=clang] -j30 V=1"
docker commit ImageMagick myimagemagick:Gcc[Clang]Build
docker stop ImageMagick---ImageMagick
docker rm ImageMagick---ImageMagick
使用新构造的编译环境的命令如下:
docker run -it --name ImageMagick myimagemagick:Gcc[Clang]Build /bin/bash
libav
libav 是一个提供多媒体输出处理库与功能的开源软件,是 FFmpeg 项目的一个分支。
编写自动化 shell 脚本,实现 libav 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器)3。
#!/bin/sh
set -e
docker run -itd --name libav ubuntu:latest /bin/bash
docker exec -it libav bash -c "apt-get update && apt-get -y install yasm gcc vim clang make git"
docker exec -it libav bash -c "git clone https://github.com/libav/libav.git"
docker exec -it libav bash -c "cd /libav; ./configure [cc=clang]"
docker exec -it libav---libav bash -c "cd /libav; make [cc=clang] -j30"
docker commit libav mylibav:Gcc[Clang]Build
docker stop libav
docker rm libav
使用新构造的编译环境的命令如下:
docker run -it --name libav mylibav:Gcc[Clang]Build /bin/bash
php-src
php-src 是一个由 C 语言编写的 php 脚本解释器。
编写自动化 shell 脚本,实现 php-src 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器)4。
#!/bin/sh
set -e
docker run -it --name php ubuntu:latest /bin/bash
docker exec -it php bash -c "apt-get update && apt-get -y install pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev gcc vim clang make git"
docker exec -it php bash -c "git clone https://github.com/php/php-src.git"
docker exec -it php bash -c "cd php-src; ./buildconf "
docker exec -it php bash -c "cd php-src; ./configure --enable-debug [cc=clang]"
docker exec -it php bash -c "cd php-src; make [cc=clang] -j30"
docker commit php myphp:Gcc[Clang]Build
docker stop php
docker rm php
使用新构造的编译环境的命令如下:
docker run -it --name php myphp:Gcc[Clang]Build /bin/bash
qemu
qemu 是一款开源的硬件虚拟化软件,具有高速和跨平台的特性。
编写自动化 shell 脚本,实现 qemu 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(注:需要再 configure 阶段指定 --cc=clang,并在 make 阶段指定 cc=clang,以修改默认编译器)5。
#!/bin/sh
set -e
docker run -itd --name qemu ubuntu:latest /bin/bash
docker exec -it qemu bash -c "apt-get update && apt-get -y install libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build gcc vim clang make git"
docker exec -it qemu bash -c "git clone https://github.com/qemu/qemu.git"
docker exec -it qemu bash -c "cd /qemu; mkdir build;"
docker exec -it qemu bash -c "cd /qemu/build; ../configure --disable-werror [--cc=clang]"
docker exec -it qemu bash -c "cd /qemu/build; make [cc=clang] -j30"
docker commit qemu myqemu:Gcc[Clang]Build
docker stop qemu
docker rm qemu
使用新构造的编译环境的命令如下:
docker run -it --name qemu myqemu:Build /bin/bash
wireshark
wireshark 是一款开源的网络数据包分析软件,可实现数据包截取以及统计分析的功能。
编写自动化 shell 脚本,实现 wireshark 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(注:需要在 cmake 阶段 指定不同编译器)6。
#!/bin/sh
set -e
docker run -itd --name wireshark ubuntu:latest /bin/bash
docker exec -it wireshark bash -c "apt-get update && apt-get -y install build-essential libglib2.0-0 libglib2.0-dev libgcrypt20-dev libc-ares-dev bison flex gettext libssh-dev libpcap-dev systemd libsystemd-dev qtbase5-dev qttools5-dev qtmultimedia5-dev gcc vim clang make git cmake"
docker exec -it wireshark bash -c "git clone https://github.com/wireshark/wireshark.git"
docker exec -it wireshark bash -c "cd /wireshark; cmake -DCMAKE_C_COMPILER=gcc[clang] -DCMAKE_CXX_COMPILER=g++[clang++] ."
docker exec -it wireshark bash -c "cd /wireshark; make -j30"
docker commit wireshark mywireshark:Gcc[Clang]Build
docker stop wireshark
docker rm wireshark
使用新构造的编译环境的命令如下:
docker run -it --name wireshark mywireshark:Gcc[Clang]Build /bin/bash
https://trac.ffmpeg.org/wiki/CompilationGuide ↩︎
https://imagemagick.org/script/install-source.php ↩︎
https://libav.org/documentation/platform.html ↩︎
https://github.com/php/php-src ↩︎
https://wiki.qemu.org/Hosts/Linux ↩︎
https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallUnixBuild.html ↩︎