# Copyright 2017 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Dockerfile for the COS GPU Installer container.

FROM debian:9
LABEL maintainer="cos-containers@google.com"

# Install minimal tools needed to build kernel modules.
RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends xz-utils python2.7-minimal \
    libc6-dev libpython2.7-stdlib kmod make curl ca-certificates libssl-dev \
    gcc libelf-dev keyutils zlib1g-dev && \
    rm -rf /var/lib/apt/lists/*

# Download & install prebuild COS toolchain package, and prepare the environment for cross-compiling.
RUN cd /usr/bin && ln -s python2.7 python && ln -s python2.7 python2

COPY README.container /README
COPY gpu_installer_url_lib.sh /gpu_installer_url_lib.sh
COPY driver_signature_lib.sh /driver_signature_lib.sh
COPY sign_gpu_driver.sh /sign_gpu_driver.sh
COPY get_metadata_value /get_metadata_value
COPY entrypoint.sh /entrypoint.sh
CMD /entrypoint.sh
