#!/bin/bash # This file is part of Moonfire NVR, a security camera network video recorder. # Copyright (C) 2021 The Moonfire NVR Authors; see AUTHORS and LICENSE.txt. # SPDX-License-Identifier: GPL-v3.0-or-later WITH GPL-3.0-linking-exception. # Build the "dev" target. See Dockerfile. set -o errexit set -o pipefail set -o xtrace mkdir --mode=1777 /docker-build-debug mkdir /docker-build-debug/dev-common exec > >(tee -i /docker-build-debug/dev-common/output) 2>&1 date uname -a ls -laFR /var/cache/apt > /docker-build-debug/dev-common/var-cache-apt-before export DEBIAN_FRONTEND=noninteractive # This file cleans apt caches after every invocation. Instead, we use a # buildkit cachemount to avoid putting them in the image while still allowing # some reuse. rm /etc/apt/apt.conf.d/docker-clean packages=() # Install all packages necessary for building (and some for testing/debugging). packages+=( build-essential curl pkgconf locales npm sudo sqlite3 tzdata vim-nox ) time apt-get update time apt-get install --assume-yes --no-install-recommends "${packages[@]}" # Create the user. On the dev environment, allow sudo. groupadd \ --gid="${BUILD_GID}" \ moonfire-nvr useradd \ --no-log-init \ --home-dir=/var/lib/moonfire-nvr \ --uid="${BUILD_UID}" \ --gid=moonfire-nvr \ --shell=/bin/bash \ --create-home \ moonfire-nvr echo 'moonfire-nvr ALL=(ALL) NOPASSWD: ALL' >>/etc/sudoers # Install Rust. Note curl was already installed for yarn above. time su moonfire-nvr -lc " curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh -s - -y" # Put configuration for the Rust build into a new ".buildrc" which is used # both (1) interactively from ~/.bashrc when logging into the dev container # and (2) from a build-server RUN command. In particular, the latter can't # use ~/.bashrc because that script immediately exits when run from a # non-interactive shell. echo 'source $HOME/.buildrc' >> /var/lib/moonfire-nvr/.bashrc cat >> /var/lib/moonfire-nvr/.buildrc < /docker-build-debug/dev-common/var-cache-apt-after date