This repository contains a script to build multiple containers images using either Podman or Docker. The script allows you to build different images like omnia_core, omnia_auth, and ubuntu_ldms.
Before executing the script, ensure that you have the following installed:
The script supports Podman or Docker.
- Podman: You can install Podman by following the official installation guide.
- Docker: You can install Docker using the following commands
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version
docker buildx create --name mybuilder --driver docker-container --use
docker buildx inspect --bootstrap
docker buildx ls- Bash: The script is a Bash script, so it requires Bash to run. It should work on most Unix-based systems like Linux and macOS.
The build_images.sh script builds the following containers:
- omnia_core: image for core Omnia container -
core. - omnia_auth: image for auth Omnia container -
auth. - ubuntu_ldms: image for LDMS (OVIS) monitoring container -
ubuntu-ldms. - kafkapump: Kafka data pump for iDRAC telemetry -
kafkapump. - victoriapump: VictoriaMetrics data pump for iDRAC telemetry -
victoriapump. - telemetry_receiver: Complete telemetry collection service -
telemetry-receiver.
# Build OIM containers (core + auth) - default behavior
./build_images.sh
# ⚠️ Warning will be shown about using default branch: staging
# Build OIM with specific Omnia branch
./build_images.sh oim omnia_branch=v2.0.0.0-rc3
# Build ALL containers (everything)
./build_images.sh all omnia_branch=v2.0.0.0-rc3
# Build OIM with Docker and specific tag
./build_images.sh oim build_tool=docker image_tag=1.0 omnia_branch=staging
# Build specific containers (core + auth)
./build_images.sh core,auth image_tag=1.0 omnia_branch=v2.0.0.0-rc3
# Build only core with specific branch
./build_images.sh core omnia_branch=v2.0.0.0-rc3 core_tag=2.0
# Build all telemetry containers
./build_images.sh telemetry
# Build specific telemetry container
./build_images.sh kafkapump image_tag=1.0Container Options: oim, all, core, auth, ubuntu-ldms, telemetry, kafkapump, victoriapump, telemetry-receiver
Common Parameters (valid for all containers):
build_tool=<podman|docker>- Build tool to use (default:podman)build_action=<load|push>- Action after build (default:load- loads images locally for use)image_tag=<tag>- Set same tag for all containers (default:latest)
Note: By default, build_action=load loads all built images into your local container engine (Podman or Docker) making them immediately available for use. This is the recommended action for users.
Omnia Container-Specific Parameters:
omnia_branch=<branch>- Omnia branch/tag to use for core container (default:staging, valid with:core,oim,all)⚠️ Warning: If not specified when building core, a warning will be shown with the default branch name
core_tag=<tag>- Individual tag for omnia_core (valid with:core,oim,all)auth_tag=<tag>- Individual tag for omnia_auth (valid with:auth,oim,all)ubuntu_ldms_tag=<tag>- Individual tag for ubuntu-ldms (valid with:ubuntu-ldms,all)
iDRAC Telemetry Container-Specific Parameters:
kafkapump_tag=<tag>- Individual tag for kafkapump (valid with:kafkapump,telemetry,all)victoriapump_tag=<tag>- Individual tag for victoriapump (valid with:victoriapump,telemetry,all)telemetry_receiver_tag=<tag>- Individual tag for telemetry-receiver (valid with:telemetry-receiver,telemetry,all)
Note: Telemetry containers are built from iDRAC-Telemetry-Reference-Tools at commit e86fecb. To change the version, modify IDRAC_TELEMETRY_COMMIT in build_images.sh.
Special Options:
oim- Builds: core and auth containers (required for Omnia deployment) - This is the defaultall- Builds: all available containers (core, auth, ubuntu-ldms, kafkapump, victoriapump, telemetry-receiver)telemetry- Builds: kafkapump, victoriapump, and telemetry-receiver containers
Parameter Validation: The script validates parameters in two stages with context-specific error messages:
-
Invalid parameter names - Shows only valid parameters for the specific container(s) being built
# Example: Building core with invalid parameter ./build_images.sh core sas=1 # Error: Invalid parameter(s): sas # Valid parameters for 'core': build_tool image_tag core_tag omnia_branch
-
Wrong container-specific parameters - Validates tag parameters match the container type
# Example: Using auth_tag when building only core ./build_images.sh core auth_tag=1.0 # Error: Parameter 'auth_tag' is not valid for container 'core' # Valid parameters for 'core': build_tool image_tag core_tag omnia_branch
-
Default branch warning - When building core without specifying
omnia_branch./build_images.sh core # ⚠️ Warning: omnia_branch not specified, using default branch: staging
Build core and auth containers required for Omnia deployment. This is the default and most common option.
# Build OIM containers with defaults (podman, latest tags, staging branch) - no parameters needed
./build_images.sh
# ⚠️ Warning: omnia_branch not specified, using default branch: staging
# OR explicitly specify 'oim'
./build_images.sh oim
# ⚠️ Warning: omnia_branch not specified, using default branch: staging
# Build OIM with explicit branch (no warning)
./build_images.sh oim omnia_branch=stagingThese commands build core and auth containers with default settings (podman, latest tags, staging branch).
# Build OIM containers with Docker
./build_images.sh oim build_tool=docker# Build OIM with specific Omnia branch (default tool: podman) - no warning
./build_images.sh oim omnia_branch=v2.0.0.0-rc3
# Build OIM with specific branch and Docker - no warning
./build_images.sh oim omnia_branch=v2.0.0.0-rc3 build_tool=docker
# Build OIM with explicit staging branch (same as default but no warning)
./build_images.sh oim omnia_branch=stagingNote: Explicitly specifying omnia_branch=staging suppresses the warning even though staging is the default.
# Build OIM with same tag "1.0"
./build_images.sh oim image_tag=1.0
# Build OIM with tag "1.0" using Docker
./build_images.sh oim image_tag=1.0 build_tool=docker
# Build OIM with tag "2.0" and specific branch
./build_images.sh oim omnia_branch=v2.0.0.0-rc3 image_tag=2.0# Build OIM (core and auth) with different tags
./build_images.sh oim core_tag=1.0 auth_tag=1.1
# Build OIM with individual tags using Docker
./build_images.sh oim build_tool=docker core_tag=1.0 auth_tag=1.1Build all available containers including Omnia containers and telemetry components.
# Build all containers with defaults
./build_images.sh all
# Build all with specific branch
./build_images.sh all omnia_branch=v2.0.0.0-rc3
# Build all with unified tag
./build_images.sh all image_tag=1.0
# Build all with Docker
./build_images.sh all build_tool=docker image_tag=1.0
# Build all with individual tags
./build_images.sh all core_tag=1.0 auth_tag=1.1 ubuntu_ldms_tag=1.2Build individual containers or specific combinations.
# Build only core (will show warning about default branch)
./build_images.sh core
# Build only core with specific branch
./build_images.sh core omnia_branch=v2.0.0.0-rc3
# Build only core with specific tag and branch
./build_images.sh core core_tag=1.0 omnia_branch=staging
# Build only core with Docker
./build_images.sh core build_tool=docker core_tag=1.0
# Build only auth (omnia_branch not valid here)
./build_images.sh auth
# Build only auth with specific tag
./build_images.sh auth auth_tag=1.0
# Build only ubuntu-ldms (omnia_branch not valid here)
./build_images.sh ubuntu-ldms
# Build only ubuntu-ldms with specific tag
./build_images.sh ubuntu-ldms ubuntu_ldms_tag=1.0Note: omnia_branch is only valid when building containers that include core (i.e., core, oim, all, or any combination including core).
# Build core and auth only (will show warning about default branch)
./build_images.sh core,auth
# Build core and auth with specific branch
./build_images.sh core,auth omnia_branch=v2.0.0.0-rc3
# Build core and auth with same tag
./build_images.sh core,auth image_tag=1.0
# Build core and auth with different tags and branch (only core_tag, auth_tag, omnia_branch are valid)
./build_images.sh core,auth core_tag=1.0 auth_tag=1.1 omnia_branch=staging
# Build core and auth with Docker
./build_images.sh core,auth build_tool=docker core_tag=1.0 auth_tag=1.0
# Build auth and ubuntu-ldms (only auth_tag and ubuntu_ldms_tag are valid)
./build_images.sh auth,ubuntu-ldms auth_tag=1.0 ubuntu_ldms_tag=1.0
# Build core, auth, and ubuntu-ldms (all three tag parameters are valid)
./build_images.sh core,auth,ubuntu-ldms image_tag=1.0Note: When building multiple containers, only the tag parameters for those specific containers are valid. For example, using ubuntu_ldms_tag when building core,auth will result in an error.
By default, the script uses build_action=load which builds and loads images into your local container engine.
# These commands automatically load images locally
./build_images.sh oim omnia_branch=v2.0.0.0-rc3
./build_images.sh core,auth image_tag=1.0
./build_images.sh allAfter building, images are immediately available:
# For Podman (default)
podman images | grep omnia
# Output shows: omnia_core:latest, omnia_auth:latest, etc.
# For Docker
docker images | grep omnia
# Output shows: omnia_core:latest, omnia_auth:latest, etc.While load is the default, you can explicitly specify it:
# Explicitly use load action (same as default)
./build_images.sh oim build_action=load image_tag=1.0
# Load with Docker instead of Podman
./build_images.sh oim build_tool=docker build_action=load image_tag=1.0The build script now supports building containers for iDRAC Telemetry Reference Tools components. The script automatically clones the iDRAC-Telemetry-Reference-Tools repository at commit e86fecb and uses its Dockerfiles to build the images.
Data pump that publishes iDRAC telemetry data to Apache Kafka topics.
Data pump that publishes iDRAC telemetry data to VictoriaMetrics.
Complete telemetry collection service that includes:
idrac-telemetry-receiver- Main telemetry receiverdbdiscauth- Database discovery and authenticationconfigui- Configuration UIredfishread- Redfish API reader
# Build all three telemetry containers with default settings
./build_images.sh telemetry
# Build all with specific tag
./build_images.sh telemetry image_tag=v1.0# Build only KafkaPump
./build_images.sh kafkapump
# Build only VictoriaPump with specific tag
./build_images.sh victoriapump victoriapump_tag=v1.0
# Build only Telemetry Receiver
./build_images.sh telemetry-receiver telemetry_receiver_tag=latest# Build all telemetry containers with different tags
./build_images.sh telemetry \
kafkapump_tag=kafka-v1.0 \
victoriapump_tag=victoria-v1.0 \
telemetry_receiver_tag=receiver-v1.0
# Build multiple with specific tags
./build_images.sh kafkapump,victoriapump image_tag=1.0Dockerfiles are sourced from the iDRAC-Telemetry-Reference-Tools repository:
- KafkaPump: Uses
docker-compose-files/DockerfilewithCMD=kafkapump - VictoriaPump: Uses
docker-compose-files/DockerfilewithCMD=victoriapump - Telemetry Receiver: Uses
docker-compose-files/Dockerfile.telemetry_receiver
- Clones iDRAC-Telemetry-Reference-Tools repository at commit
e86fecb(if not already cloned) - Uses Dockerfiles from the cloned repository
- Builds static binaries from source code
- Creates minimal scratch-based images
Note: To use a different commit/branch/tag, modify the IDRAC_TELEMETRY_COMMIT variable in build_images.sh.
The build_rpm.sh script is designed to create LDMS producer RPM packages. It accepts three optional parameters: LDMS_TAGGED_VERSION, SLURM_REPO_URL and SLURM_REPO_NAME.
./build_rpm.sh -v [LDMS_TAGGED_VERSION]-u [SLURM_REPO_URL] -n [SLURM_REPO_NAME]-
To build the RPM package without any optional parameters:
./build_rpm.sh
-
To build the RPM package with both SLURM repository URL and name:
./build_rpm.sh -v 4.5.1 -u https://example.com/slurm-repo -n x86_64_slurm_custom
Note: If the SLURM_REPO_URL is provided, the script will use it to fetch the necessary dependencies. If SLURM_REPO_NAME is provided, it will be used to name the RPM package accordingly.
For this project, uv is used for container Python package management. To update Python packages and the uv.lock file the following can be done:
- 1. Install uv:
pip install uv. - 2. Update pyproject.toml: Navigate to the container folder and update the pyproject.toml. The pyproject.toml file should be updated before running
uv lockto reflect any changes in dependencies. - 3. Update the lock file: From the same directory run
uv lock.