kolla/docker/mariadb/mariadb-server/Dockerfile.j2
Michal Arbet 11f65c6c1d Add mechanism for patching files in containers
This patch adds a way to patch files in a Docker
image built by Kolla. This is very useful for several
reasons, specifically:

- Custom modifications
- The stable branch of some library has a fix but no pip
  package has been released
- Eliminates the need to package your own pip packages
- Eliminates the need to invent your own versioning to prevent
  upstream versioning
- Eliminates the need to manage a pip server
- In other words, it eliminates the need to get a wheel into
  the image and install it manually using any method not
  previously mentioned

It is also highly desirable because, although Kolla can replace
the source for a service with a custom URL for a tarball or its
own Git repo, it cannot do this for dependencies pulled from pip.

I would also like to point out that this is a feature with its own
code path and works only if the user "inserts" a patch into the folder
patches/docker-image/something.patch and creates an analogous series
file for patch source code.

Simply said, this code will never interfere with the upstream build process
since this feature is not intended for use in upstream.
It is rather meant for downstream users who know what they are doing.
Now they just have an option to patch their images.

Everything works on all layers of the Docker image and stores a report
of applied patches which can then be seen in /etc.

This mechanism is similar as debian patch quilt.

Change-Id: I61d0790c5d4d070b7ea9e8c99c0a76ff5d22bf9d
2024-11-15 08:04:30 +00:00

84 lines
2.5 KiB
Django/Jinja

FROM {{ namespace }}/{{ image_prefix }}mariadb-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
{% endblock %}
{% block mariadb_header %}{% endblock %}
{% import "macros.j2" as macros with context %}
{{ macros.configure_user(name='mysql') }}
{# NOTE(mgoddard): EPEL required for pv package #}
{{ macros.enable_extra_repos(['epel', 'mariadb']) }}
{% if base_package_type == 'rpm' %}
{% set mariadb_packages = [
'expect',
'mariadb-backup',
'mariadb-server',
'pv',
'rsync',
'tar'
] %}
{# NOTE(yoctozepto): this is to ensure Kolla Ansible can configure MariaDB to find it #}
RUN ln -s /usr/lib64/galera-4 /usr/lib64/galera
{% elif base_package_type == 'deb' %}
{% set mariadb_packages = [
'expect',
'mariadb-backup',
'mariadb-server'
] %}
{% endif %}
{{ macros.install_packages(mariadb_packages | customizable("packages")) }}
COPY mariadb_sudoers /etc/sudoers.d/kolla_mariadb_sudoers
COPY extend_start.sh /usr/local/bin/kolla_extend_start
COPY security_reset.expect /usr/local/bin/kolla_security_reset
COPY backup.sh /usr/local/bin/kolla_mariadb_backup.sh
COPY backup_replica.sh /usr/local/bin/kolla_mariadb_backup_replica.sh
RUN chmod 644 /usr/local/bin/kolla_extend_start \
&& chmod 755 /usr/local/bin/kolla_security_reset \
/usr/local/bin/kolla_mariadb_backup.sh \
/usr/local/bin/kolla_mariadb_backup_replica.sh \
&& chmod 750 /etc/sudoers.d \
&& chmod 440 /etc/sudoers.d/kolla_mariadb_sudoers \
&& rm -rf /var/lib/mysql/*
{% if base_package_type == 'deb' %}
RUN mkdir -p /var/run/mysqld && chown mysql /var/run/mysqld && chmod 755 /var/run/mysqld
{% endif %}
{% if docker_healthchecks %}
{% block healthcheck_installation %}
COPY healthcheck_mariadb /usr/local/bin/healthcheck_mariadb
RUN chmod 755 /usr/local/bin/healthcheck_mariadb
{% endblock %}
{% endif %}
{% if use_dumb_init %}
{% block mariadb_entrypoint %}
# NOTE(mgoddard): Override the dumb-init arguments to avoid passing
# --single-child. This does not play well with mysqld_safe, which ignores
# SIGTERM, meaning Docker needs to forcibly kill the container to stop it.
# Without --single-child, the TERM signal is sent to all subprocesses,
# including mysqld.
ENTRYPOINT ["dumb-init", "--"]
CMD ["kolla_start"]
{% endblock %}
{% endif %}
{{ macros.kolla_patch_sources() }}
{% block mariadb_footer %}{% endblock %}
{% block footer %}{% endblock %}
USER mysql