Mirror MAS and dependencies images

Use the mas cli to mirror the images:

Interactive mode

[ibmmas/cli:13.16.0]mascli$ mas mirror-images
IBM Maximo Application Suite Air Gap Image Mirror (v13.16.0)
Powered by https://github.com/ibm-mas/ansible-devops/



1) Configure Catalog Version (see https://ibm-mas.github.io/cli/catalogs/ for details on catalogs)
MAS Catalog Version > v9-250306-amd64
MAS Channel > 9.0.X


2) Configure Mirror Mode
Working Directory > /images
Mirror Mode:
  1. Direct
  2. To filesystem
  3. From filesystem
Select Mirror Mode > 1


3) Configure Target Mirror
Mirror Registry Host > img-registry1.fyre.ibm.com
Mirror Registry Port > 5000
Mirror Registry Prefix > 


4) Configure Authentication
Mirror Registry Username > admin
Re-use saved registry password? [Y/n] 


5) Configure Images to Mirror
Mirror all MAS images (with dependencies) [y/N] 
IBM Maximo Operator Catalog [Y/n] 
IBM Maximo Application Suite - Core [Y/n] n
IBM Maximo Application Suite - Assist [y/N] 
IBM Maximo Application Suite - IoT [y/N] 
IBM Maximo Application Suite - Manage [y/N] 
IBM Maximo Application Suite - Monitor [y/N] 
IBM Maximo Application Suite - Optimizer [y/N] 
IBM Maximo Application Suite - Predict [y/N] 
IBM Maximo Application Suite - Visual Inspection [y/N] 
IBM Foundational Services [Y/n] n
IBM Suite License Service [Y/n] n
IBM Truststore Manager [Y/n] n
MongoDb Community Edition [Y/n] n
IBM Db2 [Y/n] n
IBM Cloud Pak for Data (CP4D) [y/N] n
IBM Watson Studio Local [y/N] 
IBM Watson Machine Learning [y/N] 
IBM Analytics Engine (Spark) [y/N] 
IBM Cognos Analytics [y/N] 
IBM AppConnect [y/N] 
Red Hat ODF [y/N] 


6) Configure Authentication
Re-use saved IBM Entitlement Key? [Y/n] 


7) Review Settings

    Settings
    Mirror Mode ......................... direct
    Working Directory ................... /images
    Target Registry ..................... img-registry1.fyre.ibm.com:5000

    IBM Operator Catalog
    Catalog Version ..................... v9-250306-amd64
    MAS Update Channel .................. 9.0.X

    Content Selection (Core Platform)
    IBM Maximo Operator Catalog ......... Mirror
    IBM Maximo Application Suite Core ... Skip

    Content Selection (Applications)
    IBM Maximo Assist ................... Skip
    IBM Maximo IoT ...................... Skip
    IBM Maximo Manage ................... Skip
    + IBM Maximo IT ..................... Skip
    IBM Maximo Monitor .................. Skip
    IBM Maximo Predict .................. Skip
    IBM Maximo Optimizer ................ Skip
    IBM Maximo Visual Inspection ........ Skip

    Content Selection (Cloud Pak for Data)
    IBM Cloud Pak for Data (CP4D) ....... Skip
    IBM Watson Studio ................... Skip
    IBM Watson Machine Learning ......... Skip
    IBM Analytics Engine (Spark)......... Skip
    IBM Cognos Analytics ................ Skip

    Content Selection (Other Dependencies)
    IBM Cloud Pak Foundation Services ... Skip
    IBM Suite License Service ........... Skip
    IBM Truststore Manager .............. Skip
    MongoDb Community Edition ........... Skip
    + Version 4 ......................... Skip
    + Version 5 ......................... Skip
    + Version 6 ......................... Skip
    + Version 7 ......................... Skip
    IBM Db2 ............................. Skip
    IBM AppConnect ...................... Skip
    RedHat ODF .......................... Skip

Proceed with these settings [y/N] y


8) Run Mirror Process
[SKIPPED] IBM Maximo Application Suite Core
[SKIPPED] IBM Maximo Assist
[SKIPPED] IBM Maximo IoT
[SKIPPED] IBM Maximo Manage
[SKIPPED] IBM Maximo Monitor
[SKIPPED] IBM Maximo Predict
[SKIPPED] IBM Maximo Optimizer
[SKIPPED] IBM Maximo Visual Inspection
[SUCCESS] Selected Dependencies: /images/logs/mirror-20250430-132211-dependencies.log

in the interactive command you have to provide the various options, like the catalog version, the subscription, the private registry details, the working folder, the mirror mode and authentication for the registry.

Non-Interactive Mode

for the non-interactive options you can refer to the help:

[ibmmas/cli:13.24.0]mascli$ mas mirror-images -h
IBM Maximo Application Suite Air Gap Image Mirror (v13.24.0)
Powered by https://github.com/ibm-mas/ansible-devops/

Usage:
  mas mirror-images [options]
Where specified each option may also be defined by setting the appropriate environment variable.
When no options are specified on the command line, interactive-mode will be enabled by default.

Mirror Mode (Required):
  -m, --mode MIRROR_MODE                         Operation mode (direct, to-filesystem, from-filesystem)
  -d, --dir MIRROR_WORKING_DIR                   Working directory for the mirror process

Registry Details (Required):
  -H, --host REGISTRY_PUBLIC_HOST                 Hostname of the target registry
  -P, --port REGISTRY_PUBLIC_PORT                 Port number for the target registry
  -u, --username REGISTRY_USERNAME                Username to authenticate to the target registry
  -p, --password REGISTRY_PASSWORD                Password to authenticate to the target registry

Registry Prefix (Optional):
  -x, --prefix REGISTRY_PREFIX            Prefix for the mirror image

Source Registry Entitlements (Required based on what content you choose to mirror):
      --ibm-entitlement IBM_ENTITLEMENT_KEY       IBM Entitlement Key
      --artifactory-username ARTIFACTORY_USERNAME Artifactory Username
      --artifactory-token ARTIFACTORY_TOKEN       Artifactory Token

Maximo Operator Catalog Selection (Optional):
  -c, --catalog MAS_CATALOG_VERSION               Maximo Operator Catalog Version to mirror (e.g. v9-240625-amd64)
  -C, --channel MAS_CHANNEL                       Maximo Application Suite Channel to mirror (e.g. 9.0.x)

Content Selection (Core Platform):
      --mirror-catalog                            Mirror the IBM Maximo Operator Catalog
      --mirror-core                               Mirror images for IBM Maximo Application Suite Core

Content Selection (Applications):
      --mirror-assist                             Mirror images for IBM Maximo Assist
      --mirror-iot                                Mirror images for IBM Maximo IoT
      --mirror-manage                             Mirror images for IBM Maximo Manage
      --mirror-icd                                Mirror image  for IBM Maximo IT (Separately entitled IBM Maximo Manage extension)
      --mirror-monitor                            Mirror images for IBM Maximo Monitor
      --mirror-optimizer                          Mirror images for IBM Maximo Optimizer
      --mirror-predict                            Mirror images for IBM Maximo Predict
      --mirror-visualinspection                   Mirror images for IBM Maximo Visual Inspection

Content Selection (Cloud Pak for Data):
      --mirror-cp4d                               Mirror images for IBM Cloud Pak for Data Platform
      --mirror-wsl                                Mirror images for IBM Watson Studio Local
      --mirror-wml                                Mirror images for IBM Watson Machine Learning
      --mirror-spark                              Mirror images for IBM Analytics Engine (Spark)
      --mirror-cognos                             Mirror images for IBM Cognos Analytics

Content Selection (Other Dependencies):
      --mirror-cfs                                Mirror images for IBM Cloud Pak Foundation Services
      --mirror-sls                                Mirror images for IBM Suite License Service
      --mirror-tsm                                Mirror images for IBM Truststore Manager
      --mirror-mongo                              Mirror images for MongoDb Community Edition
      --mirror-mongo-v5                           Mirror images for MongoDb Community Edition version 5
      --mirror-mongo-v6                           Mirror images for MongoDb Community Edition version 6
      --mirror-mongo-v7                           Mirror images for MongoDb Community Edition version 7
      --mirror-db2                                Mirror images for IBM Db2
      --mirror-appconnect                         Mirror images for IBM AppConnect
      --mirror-odf                                Mirror images for ODF

Content Selection (All images included):
      --mirror-everything                         Mirror all MAS related images (including dependencies)

Other Commands:
      --no-confirm                                Mirror images without prompting for confirmation
  -h, --help                                      Show this help message

and to the following example: https://ibm-mas.github.io/cli/examples/mirror-db2/

Troubleshotting

if there are error, you can see them in the log file, you get the link at the end of the run.

in the log file you see the details of the ansible playbook executed. In this example the playbook executed was mirror_core

you can find more details about the command here:
https://github.com/ibm-mas/cli/blob/master/image/cli/mascli/functions/mirror_images

the playbook executed:
https://github.com/ibm-mas/ansible-devops/blob/master/ibm/mas_devops/playbooks/mirror_dependencies.yml
for the other playbooks, you can refer to the code for the mirror_images command, for example:


  mirror_one_thing $MIRROR_MAS_CORE             "IBM Maximo Application Suite Core"     "$LOG_PREFIX-core.log"             mirror_core
  mirror_one_thing $MIRROR_MAS_ASSIST           "IBM Maximo Assist"                     "$LOG_PREFIX-assist.log"           mirror_add_assist
  mirror_one_thing $MIRROR_MAS_IOT              "IBM Maximo IoT"                        "$LOG_PREFIX-iot.log"              mirror_add_iot
  mirror_one_thing $MIRROR_MAS_MANAGE           "IBM Maximo Manage"                     "$LOG_PREFIX-manage.log"           mirror_add_manage
  mirror_one_thing $MIRROR_MAS_MONITOR          "IBM Maximo Monitor"                    "$LOG_PREFIX-monitor.log"          mirror_add_monitor
  mirror_one_thing $MIRROR_MAS_PREDICT          "IBM Maximo Predict"                    "$LOG_PREFIX-predict.log"          mirror_add_predict
  mirror_one_thing $MIRROR_MAS_OPTIMIZER        "IBM Maximo Optimizer"                  "$LOG_PREFIX-optimizer.log"        mirror_add_optimizer
  mirror_one_thing $MIRROR_MAS_VISUALINSPECTION "IBM Maximo Visual Inspection"          "$LOG_PREFIX-visualinspection.log" mirror_add_visualinspection
  mirror_one_thing $MIRROR_DEPS                 "Selected Dependencies"                 "$LOG_PREFIX-dependencies.log"     mirror_dependencies

Details of mirrored images

in the working directory, you will also find a manifest folder, where you will have the details of the images to be mirrored, based on the mirror type, direct, to-filesystem, from-filesystem

Verify the content of the registry:

verify content of catalog:
curl https://registry.apps.siccing.cp.fyre.ibm.com:443/v2/_catalog -k -u admin

Errors

possible errors in the mirror logs: - 'error: unable to retrieve source image registry.redhat.io/rhel8/postgresql-12 manifest sha256:fa920188f567e51d75aacd723f0964026e42ac060fed392036e8d4b3c7a8129f: Get "https://registry.redhat.io/v2/rhel8/postgresql-12/manifests/sha256:fa920188f567e51d75aacd723f0964026e42ac060fed392036e8d4b3c7a8129f": unauthorized: Please login to the Red Hat Registry using your Customer Portal credentials. Further instructions can be found here: https://access.redhat.com/articles/3399531' - 'error: unable to retrieve source image registry.redhat.io/ubi8/nodejs-14 manifest sha256:881e871f845b9395f5e21cfa45f0d1838dc9af60c4f18ece67bd56a9e44846cc: Get "https://registry.redhat.io/v2/ubi8/nodejs-14/manifests/sha256:881e871f845b9395f5e21cfa45f0d1838dc9af60c4f18ece67bd56a9e44846cc": unauthorized: Please login to the Red Hat Registry using your Customer Portal credentials. Further instructions can be found here: https://access.redhat.com/articles/3399531' - 'error: an error occurred during planning'

check your credentials for the RedHat Registry and check that you are able to pull that image: podman login registry.redhat.io podman pull registry.redhat.io/rhel8/postgresql-12

- 'error: unable to upload blob sha256:e74f44e4f683243a0446e47de088c9c8a1c55278bd3a0526e9e63c5f00000383 to image-registry1.fyre.ibm.com:5000/cp/mas/coreidp-login: received unexpected HTTP status: 500 Internal Server Error'
- 'error: unable to upload blob sha256:f391635980289b620e6da853245581ec547fb5028be82822ae4046a7a301cf76 to image-registry1.fyre.ibm.com:5000/cp/mas/coreidp-login: received unexpected HTTP status: 500 Internal Server Error'
- 'info: Mirroring completed in 1m37.83s (15.1MB/s)'
- 'error: one or more errors occurred while uploading images'

Manually mirror images

if you need to manually mirror some images, you can use skopeo copy, this command will preserve the digest where podman would change it.

for example to manually copy the cli image to the image registry
skopeo copy docker://quay.io/ibmmas/cli:13.13.0 docker://ml-registry1.fyre.ibm.com:5000/ibmmas/cli:13.13.0

References

https://github.com/ibm-mas/cli/blob/master/image/cli/mascli/functions/mirror_images
Playbooks:
https://github.com/ibm-mas/ansible-devops/blob/master/ibm/mas_devops/playbooks/mirror_dependencies.yml