1 部署容器
1.1 手动部署
1.1.1 配置docker# 安装之前必须修改docker路径,防止docker空间增长暴满。sudo ln -s /opt/docker /var/lib/docker# 安装docker.iosudo apt-get install docker.io# 设置docker命令免rootsudo usermod -aG docker ${whoami}sudo shutdown -r now
1.1.2 启动容器# 启动容器ubuntu18.04。android编译环境不宜超过ubuntu18版本,否则问题多多。# -v 映射容器内地址/opt/aosp/到主机/opt/aosp# -p 映射容器内ssh端口22到主机2202端口# -u $(id -u ${USER}):$(id -g ${USER})映射主机用户ID到容器中, 默认为root。# -d 后台启动容器docker run -td --name aosp -v /opt/aosp:/opt/aosp -p 2200:22 ubuntu:18.04# 查看容器docker ps -a# 进入容器docker exec -it aosp /bin/bash
1.1.3 配置环境进入容器之后,我们就可以安装AOSP的编译环境。不同的AOSP版本安装库可能会有差异,具体可以参考AOSP官网。这里以Android7.1为例。 可以直接将这个脚本放在宿主机的/opt/aosp中,在容器内直接执行: #!/bin/bash# 切换容器内apt源mv /etc/apt/sources.list /etc/apt/sources.list.rawecho -e "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.listapt-get update# 安装编译库。需要根据不同的linux系统版本和android版本来配置。详情参看官网。apt-get install -y -qq --no-install-recommends sudoers vim ssh telnet git repo openjdk-8-jdkapt-get install -y -qq --no-install-recommends zip unzip flex bc bison rsync gperf gnupg m4 ccache curl genisoimage xsltproc tofrodosapt-get install -y -qq --no-install-recommends build-essential gcc-multilib g++-multilibapt-get install -y -qq --no-install-recommends libc6-dev-i386 lib32z-dev lib32ncurses5-devapt-get install -y -qq --no-install-recommends dpkg-dev x11proto-core-dev zlib1g-devapt-get install -y -qq --no-install-recommends libsdl1.2-dev libx11-dev libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev# 清除安装缓存,减少容器大小。apt-get cleanrm -rf /var/lib/apt/lists/*# 配置环境路径echo -e "# ++++++++++# export USER=rootexport REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo# JAVA PATHexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export JRE_HOME=/${JAVA_HOME}/jreexport CLASSPATH=/${JAVA_HOME}/lib:/${JRE_HOME}/libexport PATH=/${PATH}:/${JAVA_HOME}/bin" >> /root/.bashrcsource .bashrc## 配置ssh服务。可以管理员自己来手动操作配置。# 最好把ssh服务配置为开机启动,这样每次容器启动就可以直接使用ssh服务。## ssh禁止root登陆# sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config# sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config# root password is MUST, 这里设置一个默认密码# echo 'root:1234' | chpasswd# 启动ssh服务# service ssh restart 折叠
1.2 Dockerfile这里有一个参考脚本,根据android官网提供的脚本修改。 FROM ubuntu:18.04# 根据官网提供的需要安装的编译库RUN apt-get update / && apt-get install -y -qq --no-install-recommends zip unzip flex bc rsync bison gperf gnupg m4 ccache curl genisoimage xsltproc tofrodos / build-essential gcc-multilib g++-multilib libc6-dev-i386 lib32z-dev lib32ncurses5-dev kmod dpkg-dev x11proto-core-dev zlib1g-dev / libsdl1.2-dev libx11-dev libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev# 设置几个环境变量# 一定要设置USER这个变量,不然AOSP的soong编译报错RUN apt-get install -y -qq --no-install-recommends vim git repo openjdk-8-jdk / && echo "# ++++++++++++++++++++++++++++++++++++++++" >> /etc/profile / && echo "export USER=root" >> /etc/profile / && echo "export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo" >> /etc/profile / && echo "export HEXAGON_ROOT=/opt/sdkits/qcom/hexagon" >> /etc/profile / && echo "# JAVA PATH" >> /etc/profile / && echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile / && echo "export JRE_HOME=/${JAVA_HOME}/jre" >> /etc/profile / && echo "export CLASSPATH=/${JAVA_HOME}/lib:/${JRE_HOME}/lib" >> /etc/profile / && echo "export PATH=/${PATH}:/${JAVA_HOME}/bin" >> /etc/profile# 设置root默认密码,配置ssh-serverRUN apt-get install openssh-server / && echo 'root:root1234' | chpasswd / && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config / && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_configEXPOSE 22VOLUME ["/opt/externs", "/opt/sdkits"]# 入口函数。用户自定。ENTRYPOINT ["starts.sh"] Dockerfile编译运行的时间太长了,我一般不用这个操作。
2 镜像管理我们需要将这个镜像提交成标准镜像,作为基础环境公用。 |