Create Local Repositories¶
The local_repo.yml playbook, invoked from inside the omnia_core container,
downloads all software packages to the Pulp container and facilitates
air-gapped installation (without access to a public network) on the cluster
nodes. The Pulp container, set up on an NFS share, acts as a centralized
storage unit and hosts all software packages and images required and supported
by Omnia. These packages or images are then accessed by the cluster nodes from
that NFS share.
Overview¶
Once the Pulp container is ready, you provide inputs in the following files:
/opt/omnia/input/project_default/software_config.json/opt/omnia/input/project_default/local_repo_config.yml
Based on these inputs, the required packages or images are accessed from the container and downloaded to the cluster nodes (without Internet access).
With repo_config set to always in software_config.json, all images and
artifacts will be downloaded to the Pulp container present on the NFS share,
and the OIM serves as the default Pulp registry.
Prerequisites¶
- The Prepare OIM procedure is complete (
omnia_coreandpulpcontainers are running). - The OIM has access to the public network, in order to download and store packages/images to the desired NFS share.
- All required certificates are stored using Ansible Vault to ensure complete confidentiality and integrity within the cluster.
- All repository URLs for the software packages are accessible. If not, the download will fail for that specific package.
- By default, an active RHEL subscription may configure the repository to RHEL 10.1. However, Omnia requires the repository to be set to RHEL 10.0. Before starting, verify and adjust:
subscription-manager release --show
sudo subscription-manager release --set=10.0
- The Configure Inputs procedure is complete
(
software_config.jsonandlocal_repo_config.ymlare configured).
Procedure¶
-
Enter the omnia_core container:
Run on: OIM hostssh omnia_core -
Verify software_config.json is configured with the desired software stacks:
Run on: omnia_core containercat /opt/omnia/input/project_default/software_config.json | python3 -m json.toolConfirm the
softwareslist includes all packages you need (e.g.,service_k8s,slurm_custom,openldap,openmpi,ucx,csi_driver_powerscale). -
Run the local_repo playbook:
Run on: omnia_core containercd /omnia/local_repo ansible-playbook local_repo.ymlThe playbook will:
- Download and save software packages/images to the Pulp container.
- All cluster nodes can then access these packages from the Pulp container.
Warning
Initial synchronization can take a significant amount of time depending on the number of repositories, internet bandwidth, and selected software stacks. CUDA repositories are particularly large.
-
Check the status report after execution:
After
local_repo.ymlhas been executed, a status report is displayed containing the status for each downloaded package along with the complete playbook execution time:- SUCCESS: The package has been successfully downloaded to the Pulp container.
- FAILED: The package couldn't be downloaded successfully.
Note
- The
local_repo.ymlplaybook execution fails if any software package has a FAILED status. In such a scenario, re-run thelocal_repo.ymlplaybook. - If any software package fails to download, other scripts/playbooks that rely on the package may also fail.
- To download additional software packages, update
/opt/omnia/input/project_default/software_config.jsonwith the new software information and re-runlocal_repo.yml.
Metadata Report¶
After a successful execution of local_repo.yml, a metadata file called
localrepo_metadata.yml is created under /opt/omnia/offline_repo/.data/.
This file captures the repo_config (always, partial) details provided
during playbook execution. If local_repo.yml is re-run, it compares the
current repository policy with the previously captured metadata:
- If a change in policy is detected, the system displays a warning:
WARNING: Metadata has changed since last run. Execution may fail if there
is no internet on OIM. Proceeding automatically in 15 seconds...
The playbook pauses for 15 seconds and then continues automatically. After successful execution, the metadata file is updated with the new policy.
- If there is no change in policy, the playbook proceeds without prompting.
Configuring Specific Software¶
To include specific software, add the corresponding entry under softwares
in software_config.json:
| Software | Entry | Notes |
|---|---|---|
| Kubernetes | {"name": "service_k8s", "version": "1.35.1", "arch": ["x86_64"]} |
Only the specified version is supported. |
| Slurm | {"name": "slurm_custom", "arch": ["x86_64", "aarch64"]} |
Provide the corresponding repository in user_repo_url_<arch> of local_repo_config.yml. |
| OpenLDAP | {"name": "openldap", "arch": ["x86_64"]} |
|
| OpenMPI | {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64"]} |
If you change the version, update openmpi.json in the config directory as well. |
| UCX | {"name": "ucx", "version": "1.19.0", "arch": ["x86_64"]} |
|
| Dell CSI PowerScale | {"name": "csi_driver_powerscale", "version": "v2.17.0", "arch": ["x86_64"]} |
Default Packages and Admin Debug Packages¶
The softwares list in software_config.json supports two foundational
package entries:
default_packages(Mandatory) -- Installs essential system packages and core dependencies required for basic Omnia cluster operation. This entry must always be present in thesoftwareslist.
{"name": "default_packages", "arch": ["x86_64", "aarch64"]}
admin_debug_packages(Optional) -- Installs debugging, profiling, and development tools (e.g.,gdb,strace,valgrind,gcc,perf) on the cluster nodes. To enable, add the following entry to thesoftwareslist:
{"name": "admin_debug_packages", "arch": ["x86_64", "aarch64"]}
The full list of packages included in each entry is defined in the
corresponding JSON files located at
/opt/omnia/input/project_default/config/<architecture>/rhel/10.0/.
Note
default_packagesis mandatory and must not be removed from thesoftwareslist.- Deploying
admin_debug_packagesincreases the size of the local repository and requires additional disk space. - The accepted software names are taken from
/opt/omnia/input/project_default/config/<architecture>/<cluster_os_type>/<cluster_os_version>.
Updating Local Repositories after Modifying JSON Files¶
After local_repo.yml execution is complete, any modifications to a
<software_name>.json file (e.g., service_k8s.json, slurm_custom.json,
additional_software.json) will not be reflected automatically. Re-run the
playbook:
ansible-playbook local_repo.yml
Local Repository Resync¶
The Local Repository Resync feature updates the local RPM repositories by synchronizing them with their respective remote sources. During resynchronization, new and updated RPM packages are downloaded, repository metadata is refreshed, and only incremental changes are fetched while preserving the existing local cache.
Resync all RPM repositories:
ansible-playbook local_repo.yml -e "resync_repos=all"
Resync a specific RPM repository:
ansible-playbook local_repo.yml -e "resync_repos=x86_64_rhel_10.0_epel"
Note
- Use
allto resync all configured RPM repositories. - Specify the exact RPM repository name for targeted resync.
- Existing RPM packages remain available during sync.
- Logs are created in
/opt/omnia/log/local_repo/.
Log Files¶
The local_repo.yml playbook generates two types of log files:
standard.log: Located in/opt/omnia/log/local_repo/<cluster_os_type>/<cluster_os_version>/, contains the overall status oflocal_repo.ymlexecution.- Package-based logs: Each package download has its own log file at
/opt/omnia/log/local_repo/<cluster_os_type>/<cluster_os_version>/<arch_type>/<sw_name>/logs/.
Note
To view status of each software in .csv format, navigate to
/opt/omnia/log/local_repo/<cluster_os_type>/<cluster_os_version>/status.csv.
Next Steps¶
- Build Cluster Images -- Build OS boot images using the local repos.
- Discover Nodes -- Discover and PXE-boot target nodes.