blob: d32467338bd51a584a788dd081e027a1389aa671 [file]
# --------------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to You 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
#
# http://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.
#
# --------------------------------------------------------------------
#
# Apache Cloudberry (incubating) is an effort undergoing incubation at
# the Apache Software Foundation (ASF), sponsored by the Apache
# Incubator PMC.
#
# Incubation is required of all newly accepted projects until a
# further review indicates that the infrastructure, communications,
# and decision making process have stabilized in a manner consistent
# with other successful ASF projects.
#
# While incubation status is not necessarily a reflection of the
# completeness or stability of the code, it does indicate that the
# project has yet to be fully endorsed by the ASF.
#
# --------------------------------------------------------------------
# Dockerfile for Apache Cloudberry Base Environment
# --------------------------------------------------------------------
# This Dockerfile sets up a Ubuntu jammy 22.04 -based container to serve as
# a base environment for evaluating the Apache Cloudberry. It installs
# necessary system utilities, configures the environment for SSH access,
# and sets up a 'gpadmin' user with sudo privileges. The Apache Cloudberry
# DEB can be installed into this container for testing and
# functional verification.
#
# Key Features:
# - Locale setup for en_US.UTF-8
# - SSH daemon setup for remote access
# - Essential system utilities installation
# - Separate user creation and configuration steps
#
# Security Considerations:
# - This Dockerfile prioritizes ease of use for functional testing and
# evaluation. It includes configurations such as passwordless sudo access
# for the 'gpadmin' user and SSH access with password authentication.
# - These configurations are suitable for testing and development but
# should NOT be used in a production environment due to potential security
# risks.
#
# Usage:
# docker build -t cloudberry-db-base-env .
# docker run -h cdw -it cloudberry-db-base-env
# --------------------------------------------------------------------
FROM ubuntu:22.04
# Argument for configuring the timezone
ARG TIMEZONE_VAR="Europe/London"
# Environment variables for locale and user
ENV container=docker
ENV LANG=en_US.UTF-8
ENV USER=gpadmin
ENV TZ=${TIMEZONE_VAR}
ENV DEBIAN_FRONTEND=noninteractive
# --------------------------------------------------------------------
# Install Development Tools and Utilities
# --------------------------------------------------------------------
RUN apt-get update && \
apt-get install -y -qq \
htop \
bat \
silversearcher-ag \
vim \
wget && \
apt-get install -y -qq locales && \
locale-gen "en_US.UTF-8" && \
update-locale LANG="en_US.UTF-8" && \
apt-get install -y -qq \
bison \
build-essential \
cmake \
dpkg-dev \
fakeroot \
flex \
g++-11 \
gcc-11 \
gdb \
git \
iproute2 \
iputils-ping \
libapr1-dev \
libbz2-dev \
libcurl4-gnutls-dev \
libevent-dev \
libipc-run-perl \
libkrb5-dev \
libldap-dev \
liblz4-dev \
libpam0g-dev \
libperl-dev \
libprotobuf-dev \
libreadline-dev \
libssh2-1-dev \
libssl-dev \
liburing-dev \
libuv1-dev \
libxerces-c-dev \
libxml2-dev \
libyaml-dev \
libzstd-dev \
lsof \
make \
openssh-server \
pkg-config \
protobuf-compiler \
python3-distutils \
python3-pip \
python3-setuptools \
python3.10 \
python3.10-dev \
rsync \
sudo \
tzdata \
zlib1g-dev && \
apt-get install -y -qq \
ca-certificates-java \
cgroup-tools \
curl \
debhelper \
libaprutil1-dev \
libcgroup1 \
ninja-build \
quilt \
unzip && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
cd && GO_VERSION="go1.25.10" && \
ARCH=$(uname -m) && \
if [ "${ARCH}" = "aarch64" ]; then \
GO_ARCH="arm64" && \
GO_SHA256="654da1f9b50a5d1c2a85ccf8ed405aa89c06e94d18384628bf186f7712677b08"; \
elif [ "${ARCH}" = "x86_64" ]; then \
GO_ARCH="amd64" && \
GO_SHA256="42d4f7a32316aa66591eca7e89867256057a4264451aca10570a715b3637ba70"; \
else \
echo "Unsupported architecture: ${ARCH}" && exit 1; \
fi && \
GO_URL="https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \
wget -nv "${GO_URL}" && \
echo "${GO_SHA256} ${GO_VERSION}.linux-${GO_ARCH}.tar.gz" | sha256sum -c - && \
tar xf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \
mv go "/usr/local/${GO_VERSION}" && \
ln -s "/usr/local/${GO_VERSION}" /usr/local/go && \
rm -f "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \
echo 'export PATH=$PATH:/usr/local/go/bin' | tee -a /etc/profile.d/go.sh > /dev/null
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100 && \
update-alternatives --install /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/gcc-11 100 && \
update-alternatives --set gcc /usr/bin/gcc-11 && \
update-alternatives --set g++ /usr/bin/g++-11
# --------------------------------------------------------------------
# Copy Configuration Files and Setup the Environment
# --------------------------------------------------------------------
COPY ./configs/* /tmp/
RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone && \
chmod 755 /tmp/init_system.sh && \
/usr/sbin/groupadd gpadmin && \
/usr/sbin/useradd -m -g gpadmin gpadmin -s /bin/bash && \
echo 'gpadmin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/90-gpadmin && \
chmod 0440 /etc/sudoers.d/90-gpadmin && \
ssh-keygen -A && \
mkdir /var/run/sshd && chmod 0755 /var/run/sshd
# Install testinfra via pip
RUN pip3 install pytest-testinfra
# Example: Copying test files into the container
COPY tests /tests
USER gpadmin
WORKDIR /home/gpadmin
CMD ["bash","-c","/tmp/init_system.sh"]