Dokcer安装及环境配置

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
sudo apt-get install docker-ce docker-ce-cli containerd.io
​
sudo systemctl enable docker
sudo systemctl start docker

Docker环境安装完成,但是仅限rootdocker用户运行,需要USER用户运行docker指令,则需要

sudo groupadd docker
sudo usermod -aG docker $USER

Docker环境配置完成

定制AOSP编译镜像

mkdir DockerImage #新建一个工作目录
touch Dockerfile  #创建Docker镜像描述文件

Docker文件内容

# 编译Android 9 以及Android 9+ 
FROM ubuntu:18.04
​
ARG userid
ARG groupid
ARG username
RUN set -x; \
    buildDeps='openjdk-8-jdk git-core gnupg flex bison build-essential zip curl \
  zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
  libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
  lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \
  libswitch-perl python-pip net-tools  libreadline6-dev gperf libncurses5-dev \
  tofrodos python-markdown libsdl1.2-dev ccache libssl-dev openssh-server \
  gosu git vim bc rsync kmod liballegro4-dev' \
    && apt-get update \
    && apt-get install -y $buildDeps
RUN pip install pycryptodome
RUN groupadd -g $groupid $username \
  && useradd -m -u $userid -g $groupid $username \
  && echo $username >/root/username \
  && mkdir /home/$username/workspace \
  && chown $userid:$groupid /home/$username/workspace \
  && chmod 775 /home/$username/workspace
ENV HOME=/home/$username
ENV USER=$username
​
ENTRYPOINT chroot --userspec=$(cat /root/username):$(cat /root/username) / /bin/bash -i 
USER $username
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
​
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
ENTRYPOINT cd /home/$USER/workspace && bash
# 编译Android 8 以及Android 8-
FROM ubuntu:16.04
​
ARG userid
ARG groupid
ARG username
RUN set -x; \
    buildDeps='openjdk-8-jdk net-tools libx11-dev libreadline6-dev python-crypto \
    libgl1-mesa-dev g++-multilib flex bison gperf build-essential libncurses5-dev \
    tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev libsdl1.2-dev curl \
    libc6-dev-i386 lib32ncurses5-dev lib32z-dev ccache libssl-dev openssh-server \
    gosu git vim zip unzip bc python-pip rsync kmod liballegro4-dev mkisofs' \
    && apt-get update \
    && apt-get install -y $buildDeps
RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /bin/repo && chmod a+x /bin/repo
RUN groupadd -g $groupid $username \
    &&useradd -m -u $userid -g $groupid $username \
    &&echo $username >/root/username \
    &&mkdir -p /home/$username/workspace \
    &&chown $userid:$groupid /home/$username/workspace \
    &&chmod 755 /home/$username/workspace
ENV HOME=/home/$username
ENV USER=$username
​
RUN sed -i "s/TLSv1, TLSv1.1,//g" /etc/java-8-openjdk/security/java.security
​
ENTRYPOINT chroot --userspec=$(cat /root/username):$(cat /root/username) / /bin/bash -i
USER $username
ENV LANG=C.UTF-8
ENV LANGUAGE=C.UTF-8
ENV LC_ALL=C.UTF-8
​
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
ENTRYPOINT cd /home/$USER/workspace && bash
​

Docker镜像生成

#在DockerImage文件夹下运行
docker build --build-arg userid=$(id -u) --build-arg groupid=$(id -g) --build-arg username=$(id -un) --network host -t ubuntu:new .

启动Docker镜像

docker run -it --rm -v [SORCE_DIR]:[WORK_DIR] ubuntu:new /bin/bash
#--net host 可选,编译如果需要联网可以加上,否则没必要
#-it 等同于 -i -t , -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
#--rm 在用户输入exit后,退出docker的同时,删除掉对应的docker容器
#-v [SORCE_DIR]:[WORK_DIR]挂载主机文件夹到docker环境文件夹,$(pwd)能换成固定的目录
# SOURCE_DIR是主机文件夹,WORK_DIR是docker工作目录
#ubuntu:aosp 刚才自定义生成的镜像标签
#/bin/bash 启动后运行bash进入bash环境

至此Docker启动完成,可以进入[WORK_DIR]进行编译工作,结束后exit可返回主机环境

备注

  1. 启动docker的命令很长,可以通过alias配置成一个很短的命令

    vi ~/.bashrc
    #在结尾处添加
    alias abuntu="[docker启动命令]"
    #重新连接ssh后,输入abuntu即可进入编译环境
    ​

  2. 上述命令退出docker环境后,对docker内部环境的修改将不会保留,比如临时apt安装某包

  3. 可以做很多镜像,满足不同源码的编译需求,避免频繁切换openssl,jdk版本等操作



本站由 TrillionByte 使用 Stellar 创建。