Skip to content

MLE-14549 POC for ARM image #350

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ void scapScan() {
pipeline {
agent {
label {
label 'cld-docker'
label 'cld-docker-temp'
}
}
options {
Expand Down Expand Up @@ -441,7 +441,7 @@ pipeline {
parameters {
string(name: 'emailList', defaultValue: emailList, description: 'List of email for build notification', trim: true)
string(name: 'dockerVersion', defaultValue: '2.1.2', description: 'ML Docker version. This version along with ML rpm package version will be the image tag as {ML_Version}_{dockerVersion}', trim: true)
choice(name: 'dockerImageType', choices: 'ubi-rootless\nubi\nubi9-rootless\nubi9', description: 'Platform type for Docker image. Will be made part of the docker image tag')
choice(name: 'dockerImageType', choices: 'ubi-rootless\nubi\nubi9-rootless\nubi9\nubi-arm', description: 'Platform type for Docker image. Will be made part of the docker image tag')
string(name: 'upgradeDockerImage', defaultValue: '', description: 'Docker image for testing upgrades. Defaults to ubi image if left blank.\n Currently upgrading to ubi-rotless is not supported hence the test is skipped when ubi-rootless image is provided.', trim: true)
choice(name: 'marklogicVersion', choices: '11\n12\n10', description: 'MarkLogic Server Branch. used to pick appropriate rpm')
string(name: 'ML_RPM', defaultValue: '', description: 'URL for RPM to be used for Image creation. \n If left blank nightly ML rpm will be used.\n Please provide Jenkins accessible path e.g. /project/engineering or /project/qa', trim: true)
Expand Down
21 changes: 18 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,36 @@
dockerTag?=internal
package?=MarkLogic.rpm
repo_dir=marklogic
docker_build_options=--compress --platform linux/amd64
docker_build_options=--compress
build_branch?=local
docker_image_type?=ubi
upgrade_docker_image_type?=ubi
upgrade_image?=${repo_dir}/marklogic-server-${upgrade_docker_image_type}:${dockerTag}
current_image?=${repo_dir}/marklogic-server-${docker_image_type}:${dockerTag}
open_scap_version?=0.1.74

#***************************************************************************
# set docker platform based on the docker image type
#***************************************************************************
ifeq ($(findstring arm,$(docker_image_type)),arm)
docker_build_options += --platform linux/arm64
export DOCKER_PLATFORM=linux/arm64
else
docker_build_options += --platform linux/amd64
export DOCKER_PLATFORM=linux/amd64
endif

#***************************************************************************
# build docker image
#***************************************************************************
build:
# NOTICE file need to be in the build context to be included in the built image
cp NOTICE.txt src/NOTICE.txt

ifeq ($(findstring arm,$(docker_image_type)),arm)
docker run --privileged --rm tonistiigi/binfmt --install arm64
endif

# rootless images use the same dependencies as ubi image so we copy the file
ifeq ($(docker_image_type),ubi9)
cp dockerFiles/marklogic-server-ubi\:base dockerFiles/marklogic-server-ubi9\:base
Expand All @@ -29,7 +44,7 @@ endif

# retrieve and copy open scap hardening script
ifeq ($(findstring rootless,$(docker_image_type)),rootless)
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lo scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lso scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
#UBI9 needs a different version of the remediation script
ifeq ($(findstring ubi9,$(docker_image_type)),ubi9)
unzip -p scap-security-guide-${open_scap_version}.zip scap-security-guide-${open_scap_version}/bash/rhel9-script-cis.sh > src/rhel-script-cis.sh
Expand Down Expand Up @@ -120,7 +135,7 @@ endif
#***************************************************************************
scap-scan:
mkdir -p scap
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lo scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lso scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
#UBI9 needs a different version of the evaluation profile
ifeq ($(findstring ubi9,$(current_image)),ubi9)
unzip -p scap-security-guide-${open_scap_version}.zip scap-security-guide-${open_scap_version}/ssg-rhel9-ds.xml > scap/ssg-rhel-ds.xml
Expand Down
31 changes: 31 additions & 0 deletions dockerFiles/marklogic-deps-ubi-arm:base
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
###############################################################
#
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

FROM registry.access.redhat.com/ubi8/ubi-minimal:latest
LABEL "com.marklogic.maintainer"="[email protected]"

###############################################################
# install libnsl rpm package
###############################################################

RUN microdnf -y update \
&& curl -Lso libnsl.rpm https://bed-artifactory.bedford.progress.com:443/artifactory/ml-rpm-release-tierpoint/devdependencies/libnsl-2.28-251.el8_10.16.aarch64.rpm \
&& rpm -i libnsl.rpm \
&& rm -f libnsl.rpm

###############################################################
# install networking, base deps and tzdata for timezone
###############################################################
# hadolint ignore=DL3006
RUN echo "NETWORKING=yes" > /etc/sysconfig/network \
&& microdnf -y install --setopt install_weak_deps=0 gdb redhat-lsb-core initscripts tzdata glibc libstdc++ hostname \
&& microdnf clean all


###############################################################
# Enable FIPS Mode
###############################################################
RUN update-crypto-policies --set FIPS
149 changes: 149 additions & 0 deletions dockerFiles/marklogic-server-ubi-arm:base
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
###############################################################
#
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

ARG BASE_IMAGE=marklogic-ubi/marklogic-deps-ubi-arm:11-internal
FROM ${BASE_IMAGE} AS builder

###############################################################
# set build args
###############################################################

ARG ML_RPM=marklogic.rpm
ARG ML_USER="marklogic_user"
ARG ML_VERSION=11-internal
ARG ML_CONVERTERS=marklogic.converters
####################################################
# inject init, start and clustering scripts
###############################################################

COPY scripts/start-marklogic.sh /usr/local/bin/start-marklogic.sh

###############################################################
# install MarkLogic server, sudo, and remove mlcmd packages
###############################################################
COPY ${ML_RPM} /tmp/marklogic-server.rpm
RUN rpm -i --nodeps /tmp/marklogic-server.rpm \
&& rm /tmp/marklogic-server.rpm \
&& microdnf -y install --setopt install_weak_deps=0 sudo \
&& microdnf -y clean all \
&& rm -rf ./opt/MarkLogic/mlcmd/lib/* \
&& rm -rf ./opt/MarkLogic/mlcmd/ext/*

###############################################################
# Add TINI to serve as PID 1 process
###############################################################
ENV TINI_VERSION=v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-arm64 /tini
RUN chmod +x /tini

###############################################################
# Copy converters package
###############################################################
WORKDIR /
COPY ${ML_CONVERTERS} converters.rpm
###############################################################
# create system user
###############################################################

RUN adduser --gid users --uid 1000 ${ML_USER} \
&& echo ${ML_USER}" ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

###############################################################
# second stage for flattening layers
###############################################################
FROM ${BASE_IMAGE}

COPY --from=builder / /

ARG ML_USER="marklogic_user"
ARG ML_VERSION=11-internal
ARG ML_DOCKER_VERSION=local
ARG BUILD_BRANCH=local
ARG ML_DOCKER_TYPE=ubi
###############################################################
# define docker labels
###############################################################

LABEL "com.marklogic.maintainer"="[email protected]"
LABEL "com.marklogic.name"="MarkLogic Server ${ML_VERSION}"
LABEL "com.marklogic.docker-version"="${ML_DOCKER_VERSION}"
LABEL "com.marklogic.release-version"="${ML_VERSION}"
LABEL "com.marklogic.build-branch"="${BUILD_BRANCH}"
LABEL "com.marklogic"="MarkLogic"
LABEL "com.marklogic.release-type"="production"
LABEL "com.marklogic.license"="MarkLogic EULA"
LABEL "com.marklogic.license.description"="By subscribing to this product, you agree to the terms and conditions outlined in MarkLogic's End User License Agreement (EULA) here https://developer.marklogic.com/eula "
LABEL "com.marklogic.license.url"="https://developer.marklogic.com/eula"
LABEL "com.marklogic.description"="MarkLogic is the only Enterprise NoSQL database. It is a new generation database built with a flexible data model to store, manage, and search JSON, XML, RDF, and more - without sacrificing enterprise features such as ACID transactions, certified security, backup, and recovery. With these capabilities, MarkLogic is ideally suited for making heterogeneous data integration simpler and faster, and for delivering dynamic content at massive scale. The current release of the MarkLogic Server Developer Docker image includes all features and is limited to developer use."
LABEL docker.cmd="docker run -it -p 7997-8010:7997-8010 -e MARKLOGIC_INIT=true -e MARKLOGIC_ADMIN_USERNAME=<INSERT USERNAME> -e MARKLOGIC_ADMIN_PASSWORD=<INSERT PASSWORD> --mount src=MarkLogic,dst=/var/opt/MarkLogic progressofficial/marklogic-db:${ML_VERSION}"

###############################################################
# copy notice file
###############################################################
COPY --chown=${ML_USER}:users NOTICE.txt /home/${ML_USER}/NOTICE.txt

###############################################################
# set env vars
###############################################################

ENV MARKLOGIC_INSTALL_DIR=/opt/MarkLogic \
MARKLOGIC_DATA_DIR=/var/opt/MarkLogic \
MARKLOGIC_USER=${ML_USER} \
MARKLOGIC_PID_FILE=/var/run/MarkLogic.pid \
MARKLOGIC_UMASK=022 \
LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH:/opt/MarkLogic/lib \
MARKLOGIC_VERSION="${ML_VERSION}" \
MARKLOGIC_DOCKER_VERSION="${ML_DOCKER_VERSION}" \
MARKLOGIC_IMAGE_TYPE="$ML_DOCKER_TYPE" \
MARKLOGIC_BOOTSTRAP_HOST=bootstrap \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_user \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_password_user \
MARKLOGIC_WALLET_PASSWORD_FILE=mldb_wallet_password \
BUILD_BRANCH=${BUILD_BRANCH} \
MARKLOGIC_JOIN_TLS_ENABLED=false

################################################################
# Set Timezone
################################################################

RUN microdnf -y reinstall tzdata

###############################################################
# Remove optional packages that have known vulnerabilities
###############################################################
RUN for package in vim-minimal cups-client cups-libs tar python3-pip-wheel platform-python python3-libs platform-python-setuptools avahi-libs binutils expat libarchive python3 python3-libs python-unversioned-command; \
do rpm -e --nodeps $package || true; \
done;

###############################################################
# expose MarkLogic server ports
###############################################################

EXPOSE 25 7997-8010

###############################################################
# set system user
###############################################################

USER ${ML_USER}

####################################################
# Set Linux Language Settings
###############################################################

ENV LANG=en_US.UTF-8
ENV LC_ALL=C.UTF-8

###############################################################
# define volume for persistent MarkLogic server data
###############################################################

VOLUME /var/opt/MarkLogic

###############################################################
# set entrypoint
###############################################################
ENTRYPOINT ["/tini", "--", "/usr/local/bin/start-marklogic.sh"]
2 changes: 2 additions & 0 deletions test/keywords.resource
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ Library Collections
Library DateTime

*** Variables ***
${DOCKER_PLATFORM} %{DOCKER_PLATFORM=linux/amd64}
@{DOCKER DEFAULTS} -it -d -p 8000:8000 -p 8001:8001 -p 8002:8002 -p7997:7997 --platform ${DOCKER_PLATFORM}
@{DOCKER DEFAULTS} -it -d -p 8000:8000 -p 8001:8001 -p 8002:8002 -p7997:7997 --platform linux/amd64
${DEFAULT ADMIN USER} test_admin
${DEFAULT ADMIN PASS} test_admin_pass
Expand Down