Skip to content

Manila

The manila image is built from ContainerFiles/manila. Security patches are applied by scripts/manila-cve-patching.sh.

This container packages the Manila service for use in the stack. The build installs the required packages, applies security updates and configuration, and prepares the service for integration.

graph LR
    A[Base image] --> B[Install packages]
    B --> C[Apply CVE patches]
    C --> D[Configure Manila]
    D --> E[Container ready]
ContainerFile used for the build
# syntax = docker/dockerfile:1.4.0
# DOCKER
# This Dockerfile uses multi-stage build to customize DEV and PROD images:
# https://docs.docker.com/develop/develop-images/multistage-build/

ARG VENV_TAG=3.13-trixie-latest
ARG GHCR_URL=ghcr.io/rackerlabs
FROM ${GHCR_URL}/openstack-venv:${VENV_TAG} AS dependency_build

ARG CACHEBUST=0
ARG OS_VERSION=master
ARG OS_CONSTRAINTS=master
ARG DEBIAN_FRONTEND=noninteractive

RUN <<EOT bash
set -eux
apt-get update
apt-get upgrade -y
PACKAGES="
  bash
  brotli
  build-essential
  bzip2
  cargo
  curl
  default-mysql-client
  default-mysql-server
  docutils-common
  gettext
  gfortran
  git
  gzip
  libblkid1
  libbz2-1.0
  libbz2-dev
  libc6
  libcap2
  liberasurecode-dev
  libffi-dev
  libgcc-s1
  libjpeg-dev
  libjs-sphinxdoc
  libjs-underscore
  libkrb5-dev
  liblapack-dev
  libldap2-dev
  liblz4-1
  liblzma-dev
  liblzma5
  libmariadb-dev
  libnss3-dev
  libopenblas-dev
  libpcre2-dev
  libpq-dev
  librdkafka-dev
  libsasl2-dev
  libsqlite3-dev
  libssl-dev
  libstdc++6
  libsystemd-dev
  libvirt-dev
  libwrap0
  libxml2
  libxml2-dev
  libxslt1-dev
  libxslt1.1
  libzmq3-dev
  lsb-base
  netbase
  nfs-common
  pkg-config
  postgresql-client
  pypy3
  pypy3-dev
  python3-all
  python3-all-dev
  python3-dev
  python3-venv
  squashfs-tools
  ssl-cert
  ucf
  uuid-dev
  xmlsec1
  xz-utils
  zlib1g
  zlib1g-dev
  zopfli
  zstd
"
apt-get install -y --no-install-recommends $PACKAGES
/usr/local/bin/python -m pip install --upgrade --force-reinstall pip setuptools
EOT

RUN <<-EOT
set -eux
/var/lib/openstack/bin/pip install \
  --constraint https://opendev.org/openstack/requirements/raw/branch/${OS_CONSTRAINTS}/upper-constraints.txt \
  git+https://opendev.org/openstack/manila.git@${OS_VERSION}#egg=manila \
  PyMySQL \
  python-memcached \
  uwsgi
/var/lib/openstack/bin/python -m pip install --upgrade --force-reinstall pip setuptools pyOpenSSL==25.3.0
EOT

COPY scripts/manila-cve-patching.sh /opt/

RUN bash /opt/manila-cve-patching.sh

RUN <<EOT
  set -eux
  find / -name '*.pyc' -delete
  find / -name '*.pyo' -delete
  find / -name '__pycache__' -delete
  find / -name '*.whl' -delete
  rm -f /var/lib/openstack/lib/python*/site-packages/slapdtest/certs/client.key
  rm -f /var/lib/openstack/lib/python*/site-packages/slapdtest/certs/server.key
  sed -i '/^Usage/,/^Documentation\n^-.*$/d' /var/lib/openstack/lib/python*/site-packages/PyJWT-*.dist-info/METADATA
EOT

FROM python:3.12.12-slim-trixie
ARG DEBIAN_FRONTEND=noninteractive

LABEL maintainer="Rackspace"
LABEL vendor="Rackspace OpenStack Team"
LABEL org.opencontainers.image.name="manila"
LABEL org.opencontainers.image.description="OpenStack Service (manila) built for the enterprise."

ARG NOVA_TSS_USER=tss
ARG NOVA_TSS_UID=42434
ARG NOVA_TSS_GID=42434

COPY --from=dependency_build /var/lib/openstack /var/lib/openstack

RUN <<EOT
set -eux
apt-get update
apt-get upgrade -y
RUNTIME_PACKAGES="
  adduser
  apt
  base-files
  base-passwd
  bash
  bind9-host
  bind9-libs
  bridge-utils
  brotli
  bsdutils
  bzip2
  ca-certificates
  coreutils
  curl
  dash
  debconf
  debianutils
  default-mysql-client
  default-mysql-server
  diffutils
  distro-info-data
  dpkg
  e2fsprogs
  findutils
  gettext
  gpgv
  grep
  gzip
  hostname
  init-system-helpers
  iproute2
  libacl1
  libapparmor1
  libapt-pkg7.0
  libattr1
  libaudit-common
  libaudit1
  libblkid1
  libbz2-1.0
  libc-bin
  libc6
  libcap-ng0
  libcap2
  libcom-err2
  libcrypt1
  libdb5.3
  libdebconfclient0
  libexpat1
  libext2fs2
  libffi-dev
  libffi8
  libgcc-s1
  libgcrypt20
  libgmp10
  libgnutls30
  libgpg-error0
  libgssapi-krb5-2
  libhogweed6
  libicu76
  libidn2-0
  libjson-c5
  libk5crypto3
  libkeyutils1
  libkrb5-3
  libkrb5support0
  libldap2-dev
  liblmdb0
  liblz4-1
  liblzma5
  libmariadb-dev-compat
  libmaxminddb0
  libmount1
  libncurses6
  libncursesw6
  libnettle8
  libnghttp2-14
  libnsl2
  libp11-kit0
  libpam-modules
  libpam-modules-bin
  libpam-runtime
  libpam0g
  libpcre2-8-0
  libproc2-0
  libpsl5
  libpython3-stdlib
  libreadline8
  libsasl2-dev
  libseccomp2
  libselinux1
  libsemanage-common
  libsemanage2
  libsepol2
  libsmartcols1
  libsqlite3-0
  libss2
  libssl-dev
  libssl3
  libssl3t64
  libstdc++6
  libsystemd-dev
  libsystemd0
  libtasn1-6
  libtinfo6
  libtirpc3
  libudev1
  libunistring5
  libuuid1
  libuv1
  libvirt-dev
  libwrap0
  libxml2
  libxml2-dev
  libxslt1.1
  libxxhash0
  libzstd1
  login
  logsave
  lsb-base
  mariadb-client-core
  mariadb-server
  mawk
  media-types
  mount
  ncurses-bin
  netbase
  nfs-common
  openssl
  openvswitch-switch
  passwd
  perl-base
  pkg-config
  postgresql-client
  procps
  python3
  python3-distutils-extra
  python3-minimal
  python3-pip-whl
  python3-setuptools-whl
  python3-venv
  sed
  sensible-utils
  squashfs-tools
  ssl-cert
  sudo-ldap
  sysvinit-utils
  tar
  ucf
  usrmerge
  util-linux
  uuid-dev
  wget
  xmlsec1
  xz-utils
  zlib1g
  zopfli
  zstd
"
apt-get install -y --no-install-recommends $RUNTIME_PACKAGES
/usr/local/bin/python -m pip install --upgrade --force-reinstall pip setuptools pyOpenSSL==25.3.0
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
apt-get clean -y
rm -rf /var/lib/apt/lists/*
find / -name '*.pyc' -delete
find / -name '*.pyo' -delete
find / -name '__pycache__' -delete
groupadd --system --gid 42424 manila
useradd --system --gid 42424 --uid 42424 --shell /sbin/nologin --create-home --home /var/lib/manila manila
mkdir -p /var/lib/manila/tmp
mkdir -p /var/lib/openstack/etc/manila
ln -s /var/lib/openstack/etc/manila /etc/manila
chown manila:manila -h /etc/manila
chown -R manila:manila /var/lib/openstack/etc/manila
chown -R manila:manila /var/lib/manila
groupadd --system --gid $NOVA_TSS_GID $NOVA_TSS_USER
useradd --system --gid $NOVA_TSS_GID --uid $NOVA_TSS_UID --shell /sbin/nologin -c 'Nova tss user' $NOVA_TSS_USER
EOT

# Set the environment variables for the manila venv
ENV PATH="/var/lib/openstack/bin:$PATH"

# Set the working directory
WORKDIR /var/lib/openstack

# Set the user and group to match the original build
USER 42424:42424

# Set the entrypoint to the manila-manage command
ENTRYPOINT ["/var/lib/openstack/bin/manila-manage"]

Build Arguments

Argument Default
VENV_TAG 3.12-latest
CACHEBUST 0
OS_VERSION master
OS_CONSTRAINTS master
Build Command
docker build \
--build-arg VENV_TAG=3.12-latest \
--build-arg CACHEBUST=0 \
--build-arg OS_VERSION=master \
--build-arg OS_CONSTRAINTS=master \
-f ContainerFiles/manila \
-t manila:local \
.

Dependencies

Container Image

The container image is available on Github Container Registry.