xref: /aosp_15_r20/external/crosvm/tools/impl/dev_container/Dockerfile (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2021 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Worker# Development container for crosvm.
6*bb4ee6a4SAndroid Build Coastguard Worker#
7*bb4ee6a4SAndroid Build Coastguard Worker# Provides all dependencies specified in install-deps with some additonal
8*bb4ee6a4SAndroid Build Coastguard Worker# logic to cache cargo data in CI runs.
9*bb4ee6a4SAndroid Build Coastguard Worker
10*bb4ee6a4SAndroid Build Coastguard Worker# Build catapult dashboard upload tool in a builder container
11*bb4ee6a4SAndroid Build Coastguard WorkerFROM docker.io/golang:bullseye AS gobuilder
12*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /root/
13*bb4ee6a4SAndroid Build Coastguard WorkerRUN git clone https://fuchsia.googlesource.com/infra/infra
14*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /root/infra/cmd/catapult
15*bb4ee6a4SAndroid Build Coastguard WorkerRUN go build
16*bb4ee6a4SAndroid Build Coastguard Worker
17*bb4ee6a4SAndroid Build Coastguard WorkerFROM docker.io/debian:testing-slim
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard WorkerENV RUSTUP_HOME=/usr/local/rustup \
20*bb4ee6a4SAndroid Build Coastguard Worker    CARGO_HOME=/usr/local/cargo \
21*bb4ee6a4SAndroid Build Coastguard Worker    PATH=/workspace/tools:/usr/local/cargo/bin:$PATH
22*bb4ee6a4SAndroid Build Coastguard Worker
23*bb4ee6a4SAndroid Build Coastguard Worker# Install pipx applications globally in /usr/local/bin
24*bb4ee6a4SAndroid Build Coastguard WorkerENV PIPX_HOME=/usr/local/pipx \
25*bb4ee6a4SAndroid Build Coastguard Worker    PIPX_BIN_DIR=/usr/local/bin
26*bb4ee6a4SAndroid Build Coastguard Worker
27*bb4ee6a4SAndroid Build Coastguard Worker# Use a dedicated target directory so we do not write into the source directory.
28*bb4ee6a4SAndroid Build Coastguard WorkerRUN mkdir -p /scratch/cargo_target \
29*bb4ee6a4SAndroid Build Coastguard Worker    && mkdir /cache
30*bb4ee6a4SAndroid Build Coastguard Worker
31*bb4ee6a4SAndroid Build Coastguard Worker# Prevent the container from writing __pycache__ files into the src.
32*bb4ee6a4SAndroid Build Coastguard WorkerENV PYTHONDONTWRITEBYTECODE=1
33*bb4ee6a4SAndroid Build Coastguard WorkerENV CARGO_TARGET_DIR=/scratch/cargo_target
34*bb4ee6a4SAndroid Build Coastguard Worker
35*bb4ee6a4SAndroid Build Coastguard Worker# Allow APT to cache packages between docker image builds
36*bb4ee6a4SAndroid Build Coastguard WorkerRUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
37*bb4ee6a4SAndroid Build Coastguard Worker
38*bb4ee6a4SAndroid Build Coastguard Worker# Add foreign architectures for cross-compilation.
39*bb4ee6a4SAndroid Build Coastguard WorkerRUN dpkg --add-architecture arm64 \
40*bb4ee6a4SAndroid Build Coastguard Worker    && dpkg --add-architecture armhf
41*bb4ee6a4SAndroid Build Coastguard Worker
42*bb4ee6a4SAndroid Build Coastguard Worker# Install dependencies (APT and cargo packages are cached between image builds for faster iterative builds).
43*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --chmod=555 tools/install-deps tools/install-aarch64-deps tools/install-armhf-deps tools/install-mingw64-deps tools/setup-wine64 rust-toolchain /tools/
44*bb4ee6a4SAndroid Build Coastguard WorkerRUN cd /tools \
45*bb4ee6a4SAndroid Build Coastguard Worker    && apt-get update \
46*bb4ee6a4SAndroid Build Coastguard Worker    && apt-get install --yes sudo curl \
47*bb4ee6a4SAndroid Build Coastguard Worker    && ./install-deps \
48*bb4ee6a4SAndroid Build Coastguard Worker    # We only use the nightly toolchain for rustfmt, remove other parts to save space.
49*bb4ee6a4SAndroid Build Coastguard Worker    && rustup component remove --toolchain nightly rust-std \
50*bb4ee6a4SAndroid Build Coastguard Worker    && rustup component remove --toolchain nightly cargo
51*bb4ee6a4SAndroid Build Coastguard Worker
52*bb4ee6a4SAndroid Build Coastguard Worker# HACK ALERT!
53*bb4ee6a4SAndroid Build Coastguard Worker# libc6:arm64 postinstall will attempt to call telinit to restart services. This will block
54*bb4ee6a4SAndroid Build Coastguard Worker# indefinitely in the container with no init running. Replace telinit with true to make it
55*bb4ee6a4SAndroid Build Coastguard Worker# a no-op. See b/322015733
56*bb4ee6a4SAndroid Build Coastguard WorkerRUN rm /usr/sbin/telinit && cp /bin/true /usr/sbin/telinit
57*bb4ee6a4SAndroid Build Coastguard Worker
58*bb4ee6a4SAndroid Build Coastguard WorkerRUN cd /tools \
59*bb4ee6a4SAndroid Build Coastguard Worker    && ./install-aarch64-deps \
60*bb4ee6a4SAndroid Build Coastguard Worker    && ./install-armhf-deps \
61*bb4ee6a4SAndroid Build Coastguard Worker    && ./install-mingw64-deps
62*bb4ee6a4SAndroid Build Coastguard Worker
63*bb4ee6a4SAndroid Build Coastguard Worker# Add wine64 to PATH, as debian removed alternative entry to wine64
64*bb4ee6a4SAndroid Build Coastguard WorkerENV PATH=/usr/lib/wine:$PATH
65*bb4ee6a4SAndroid Build Coastguard Worker
66*bb4ee6a4SAndroid Build Coastguard Worker# Setup wine for root user
67*bb4ee6a4SAndroid Build Coastguard WorkerRUN /tools/setup-wine64
68*bb4ee6a4SAndroid Build Coastguard Worker
69*bb4ee6a4SAndroid Build Coastguard Worker# Install global config.toml for cross-compilation
70*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --chmod=555 .cargo/config.debian.toml /.cargo/config.toml
71*bb4ee6a4SAndroid Build Coastguard Worker
72*bb4ee6a4SAndroid Build Coastguard Worker# Install catapult dashboard upload tool
73*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --from=gobuilder /root/infra/cmd/catapult/catapult /tools/
74*bb4ee6a4SAndroid Build Coastguard Worker
75*bb4ee6a4SAndroid Build Coastguard Worker# Cache CARGO_HOME between container runs in CI.
76*bb4ee6a4SAndroid Build Coastguard WorkerVOLUME /cache
77*bb4ee6a4SAndroid Build Coastguard WorkerENV CROSVM_CACHE_DIR=/cache
78*bb4ee6a4SAndroid Build Coastguard WorkerENV CARGO_HOME=/cache/cargo_home
79*bb4ee6a4SAndroid Build Coastguard Worker
80*bb4ee6a4SAndroid Build Coastguard WorkerVOLUME /workspace
81*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /workspace
82