FROM ubuntu:latest ARG DEBIAN_FRONTEND=noninteractive ENV TZ=America/New_York # light deps (should be quick to download/install) RUN apt-get update && apt-get install -y \ ca-certificates \ curl \ gnupg \ liblttng-ust-dev \ libpcap0.8-dev \ locales \ ninja-build \ software-properties-common \ sqlite3 \ tzdata # clang RUN apt-get update && apt-get install -y \ clang-13 \ clang-format-13 \ clangd-13 \ clang-15 \ clang-format-15 \ clangd-15 # g++ RUN apt-get update && apt-get install -y \ g++-11 \ g++-12 # python RUN apt-get update && apt-get install -y \ python3-pip \ python3-venv \ && python3 -m pip install --upgrade pip # dotnet RUN apt-get update && apt-get install -y \ dotnet7 # ssh RUN apt-get update && apt-get install -y \ libssh2-1-dev \ openssh-server # cmake RUN \ curl -fsSL https://apt.kitware.com/keys/kitware-archive-latest.asc 2> /dev/null \ | gpg --dearmor - \ | tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null \ && echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" \ | tee /etc/apt/sources.list.d/kitware.list > /dev/null \ && apt-get update \ && rm /usr/share/keyrings/kitware-archive-keyring.gpg \ && apt-get install -y kitware-archive-keyring \ && echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs)-rc main" \ | tee -a /etc/apt/sources.list.d/kitware.list >/dev/null \ && apt-get install -y cmake # node ARG node_major=18 RUN mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_major.x nodistro main" \ | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update \ && apt-get install -y nodejs # ccache is done here so that ccache sees clang++ installed, not clang-10 RUN apt-get update && apt-get install -y \ ccache # emumba (light deps) RUN apt-get update && apt-get install -y \ build-essential \ doxygen \ python3-sphinx \ graphviz \ libgtest-dev \ libssl-dev \ rapidjson-dev \ zlib1g-dev \ pkg-config # emumba (boost) RUN apt-get update && apt-get install -y \ libboost-filesystem-dev \ libboost-program-options-dev \ libboost-test-dev \ libboost-date-time-dev # dev utils RUN apt-get update && apt-get install -y \ fish \ git-all \ sudo \ vim \ wget # set up default executables (update-alternatives) RUN \ update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-13 100; \ update-alternatives --install /usr/bin/clang clang /usr/bin/clang-13 100; \ update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-13 100; \ update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-13 100; \ update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100; \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 # Add compiler symlinks for ccache RUN \ ln -s /usr/bin/ccache /usr/local/bin/clang; \ ln -s /usr/bin/ccache /usr/local/bin/clang++; \ ln -s /usr/bin/ccache /usr/local/bin/clang-13; \ ln -s /usr/bin/ccache /usr/local/bin/clang++-13; \ ln -s /usr/bin/ccache /usr/local/bin/clang-15; \ ln -s /usr/bin/ccache /usr/local/bin/clang++-15; \ ln -s /usr/bin/ccache /usr/local/bin/gcc; \ ln -s /usr/bin/ccache /usr/local/bin/g++; \ ln -s /usr/bin/ccache /usr/local/bin/gcc-11; \ ln -s /usr/bin/ccache /usr/local/bin/g++-11; \ ln -s /usr/bin/ccache /usr/local/bin/gcc-12; \ ln -s /usr/bin/ccache /usr/local/bin/g++-12 RUN locale-gen en_US.UTF-8 ARG docker_user="bts" ARG docker_uid="1000" ARG docker_pass="bts" RUN \ groupadd -g "$docker_uid" "$docker_user" \ && useradd \ -m \ -u "$docker_uid" \ -g "$docker_uid" \ -G sudo \ --password "$(openssl passwd -1 "$docker_pass")" \ "$docker_user"