Set environment variables and download CASE files
If your host must connect to the internet via a proxy, you must set environment variables on the machine that accesses the internet via the proxy server.
export https_proxy=http://proxy-server-hostname:port
export http_proxy=http://proxy-server-hostname:port
# Example:
export https_proxy=http://server.proxy.xyz.com:5018
export http_proxy=http://server.proxy.xyz.com:5018
- Create the following environment variables with the installer image name and the
version.
export CASE_NAME=ibm-sccmTo find the CASE name and version, see IBM: Product CASE to Application Version.
- Connect your host to the intranet.
- The plug-in can detect the locale of your environment and provide textual helps and
messages accordingly. You can optionally set the locale by running the following
command:
oc ibm-pak config locale -l LOCALEwhere LOCALE can be one of
de_DE, en_US, es_ES, fr_FR, it_IT, ja_JP, ko_KR, pt_BR, zh_Hans, zh_Hant. - Configure the plug-in to download CASEs as OCI artifacts from IBM Cloud Container
Registry
(ICCR).
oc ibm-pak config repo 'IBM Cloud-Pak OCI registry' -r oci:cp.icr.io/cpopen --enable - Enable color output (optional with v1.4.0 and
later)
oc ibm-pak config color --enable true - Download the image inventory for your IBM Cloud Pak to your host.Tip: If you do not specify the CASE version, it will download the latest CASE.
oc ibm-pak get \ $CASE_NAME \ --version $CASE_VERSION
By default, the root directory used by plug-in is ~/.ibm-pak. This means
that the preceding command will download the CASE under
~/.ibm-pak/data/cases/$CASE_NAME/$CASE_VERSION. You can configure this root
directory by setting the IBMPAK_HOME environment variable. Assuming
IBMPAK_HOME is set, the preceding command will download the CASE under
$IBMPAK_HOME/.ibm-pak/data/cases/$CASE_NAME/$CASE_VERSION.
The logs files will be available at
$IBMPAK_HOME/.ibm-pak/logs/oc-ibm_pak.log.
Your host is now configured and you are ready to mirror your images.
Mirroring images to your private container registry
The process of mirroring images takes the image from the internet to your host, then effectively copies that image to your private container registry. After you mirror your images, you can configure your cluster and complete air-gapped installation.
- Generate mirror manifests
- Authenticating the registry
- Mirror images to final location
- Configure the cluster
- Install IBM Cloud® Paks by way of Red Hat OpenShift Container Platform
Generate mirror manifests
-
If you want to install subsequent updates to your air-gapped environment, you must do a
CASE getto get the image list when performing those updates. A registry namespace suffix can optionally be specified on the target registry to group mirrored images. -
Define the environment variable
$TARGET_REGISTRYby running the following command:export TARGET_REGISTRY=<target-registry>The
<target-registry>refers to the registry (hostname and port) where your images will be mirrored to and accessed by the oc cluster. For example setting TARGET_REGISTRY tomyregistry.com:5000/mynamespacewill create manifests such that images will be mirrored to the top-level namespacemynamespace. - Run the following commands to generate mirror manifests to be used when mirroring from a bastion host (connected mirroring):Example
oc ibm-pak generate mirror-manifests \ $CASE_NAME \ $TARGET_REGISTRY \ --version $CASE_VERSION~/.ibm-pakdirectory structure for connected mirroringThe~/.ibm-pakdirectory structure is built over time as you save CASEs and mirror. The following tree shows an example of the~/.ibm-pakdirectory structure for connected mirroring:tree ~/.ibm-pak /root/.ibm-pak ├── config │ └── config.yaml ├── data │ ├── cases │ │ └── YOUR-CASE-NAME │ │ └── YOUR-CASE-VERSION │ │ ├── XXXXX │ │ ├── XXXXX │ └── mirror │ └── YOUR-CASE-NAME │ └── YOUR-CASE-VERSION │ ├── catalog-sources.yaml │ ├── image-content-source-policy.yaml │ └── images-mapping.txt └── logs └── oc-ibm_pak.logNotes: A new directory
~/.ibm-pak/mirroris created when you issue theoc ibm-pak generate mirror-manifestscommand. This directory holds theimage-content-source-policy.yaml,images-mapping.txt, andcatalog-sources.yamlfiles.Tip: If you are using a Red Hat® Quay.io registry and need to mirror images to a specific organization in the registry, you can target that organization by specifying:export ORGANIZATION=<your-organization> oc ibm-pak generate mirror-manifests $CASE_NAME $TARGET_REGISTRY/$ORGANIZATION --version $CASE_VERSION
--final-registry: oc ibm-pak generate mirror-manifests \
$CASE_NAME \
$INTERMEDIATE_REGISTRY \
--version $CASE_VERSION
--final-registry $FINAL_REGISTRY
In this case, in place of a single mapping file (images-mapping.txt), two mapping files are created.
- images-mapping-to-registry.txt
- images-mapping-from-registry.txt
- Run the following commands to generate mirror manifests to be used when mirroring from a file system (disconnected mirroring):Example
oc ibm-pak generate mirror-manifests \ $CASE_NAME \ file://local \ --final-registry $TARGET_REGISTRY~/.ibm-pakdirectory structure for disconnected mirroringThe following tree shows an example of the~/.ibm-pakdirectory structure for disconnected mirroring:tree ~/.ibm-pak /root/.ibm-pak ├── config │ └── config.yaml ├── data │ ├── cases │ │ └── ibm-cp-common-services │ │ └── 1.9.0 │ │ ├── XXXX │ │ ├── XXXX │ └── mirror │ └── ibm-cp-common-services │ └── 1.9.0 │ ├── catalog-sources.yaml │ ├── image-content-source-policy.yaml │ ├── images-mapping-to-filesystem.txt │ └── images-mapping-from-filesystem.txt └── logs └── oc-ibm_pak.logNote: A new directory~/.ibm-pak/mirroris created when you issue theoc ibm-pak generate mirror-manifestscommand. This directory holds theimage-content-source-policy.yaml,images-mapping-to-filesystem.txt,images-mapping-from-filesystem.txt, andcatalog-sources.yamlfiles.
--filter argument and image grouping. The
--filter argument provides the ability to customize which images are
mirrored during an air-gapped installation. As an example for this functionality
ibm-cloud-native-postgresql CASE can be used, which contains groups
that allow mirroring specific variant of ibm-cloud-native-postgresql
(Standard or Enterprise). Use the --filter argument to target a variant
of ibm-cloud-native-postgresql to mirror rather than the entire library.
The filtering can be applied for groups and architectures. Consider the following
command: oc ibm-pak generate mirror-manifests \
ibm-cloud-native-postgresql \
file://local \
--final-registry $TARGET_REGISTRY \
--filter $GROUPS
The command was updated with a --filter argument. For example, for
$GROUPS equal to ibmEdbStandard the mirror manifests
will be generated only for the images associated with
ibm-cloud-native-postgresql in its Standard variant. The resulting image
group consists of images in the ibm-cloud-native-postgresql image group as
well as any images that are not associated with any groups. This allows products to include
common images as well as the ability to reduce the number of images that you need to
mirror.
oc ibm-pak describe $CASE_NAME --version $CASE_VERSION --list-mirror-images
- Mirroring Details from Source to Target Registry
-
Mirroring Details from Target to Final Registry. A connected mirroring path that does not involve a intermediate registry will only have the first section.
Note down the
Registries foundsub sections in the preceding command output. You will need to authenticate against those registries so that the images can be pulled and mirrored to your local registry. See the next steps on authentication. TheTop level namespaces foundsection shows the list of namespaces under which the images will be mirrored. These namespaces should be created manually in your registry (which appears in the Destination column in the above command output) root path if your registry does not allow automatic creation of namespaces.
Authenticating the registry
Complete the following steps to authenticate your registries:
-
Store authentication credentials for all source Docker registries.
Your product might require one or more authenticated registries. The following registries require authentication:
cp.icr.ioregistry.redhat.ioregistry.access.redhat.com
You must run the following command to configure credentials for all target registries that require authentication. Run the command separately for each registry:
Note: Theexport REGISTRY_AUTH_FILEcommand only needs to run once.export REGISTRY_AUTH_FILE=<path to the file which will store the auth credentials generated on podman login> podman login <TARGET_REGISTRY>Important: When you log in tocp.icr.io, you must specify the user ascpand the password which is your Entitlement key from the IBM Cloud Container Registry. For example:podman login cp.icr.io Username: cp Password: Login Succeeded!
For example, if you export REGISTRY_AUTH_FILE=~/.ibm-pak/auth.json, then
after performing podman login, you can see that the file is populated with
registry credentials.
docker login, the authentication file is typically located at
$HOME/.docker/config.json on Linux or
%USERPROFILE%/.docker/config.json on Windows. After docker
login you should export REGISTRY_AUTH_FILE to point to that
location. For example in Linux you can issue the following
command:export REGISTRY_AUTH_FILE=$HOME/.docker/config.json
| Directory | Description |
|---|---|
~/.ibm-pak/config |
Stores the default configuration of the plug-in and has information about the public GitHub URL from where the cases are downloaded. |
~/.ibm-pak/data/cases |
This directory stores the CASE files when they are downloaded by issuing the
oc ibm-pak get command. |
~/.ibm-pak/data/mirror |
This directory stores the image-mapping files, ImageContentSourcePolicy
manifest in image-content-source-policy.yaml and CatalogSource
manifest in one or more catalog-sourcesXXX.yaml. The files
images-mapping-to-filesystem.txt and
images-mapping-from-filesystem.txt are input to the oc
image mirror command, which copies the images to the file system and from
the file system to the registry respectively. |
~/.ibm-pak/data/logs |
This directory contains the oc-ibm_pak.log file, which
captures all the logs generated by the plug-in. |
Mirror images to final location
Complete the steps in this section on your host that is connected to both the local Docker registry and the Red Hat® OpenShift® Container Platform cluster.
-
Mirror images to the final location.
-
For mirroring from a bastion host (connected mirroring):
Mirror images to theTARGET_REGISTRY:oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=trueIf you generated manifests in the previous steps to mirror images to an intermediate registry server followed by a final registry server, run the following commands:
-
Mirror images to the intermediate registry server:
oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-to-registry.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true -
Mirror images from the intermediate registry server to the final registry server:
oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-from-registry.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=trueThe
oc image mirror --helpcommand can be run to see all the options available on the mirror command. Note that we usecontinue-on-errorto indicate that the command should try to mirror as much as possible and continue on errors.oc image mirror --helpNote: Sometimes based on the number and size of images to be mirrored, theoc image mirrormight take longer. If you are issuing the command on a remote machine it is recommended that you run the command in the background with a nohup so even if network connection to your remote machine is lost or you close the terminal the mirroring will continue. For example, the below command will start the mirroring process in background and write the log tomy-mirror-progress.txt.nohup oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping.txt \ -a $REGISTRY_AUTH_FILE \ --filter-by-os '.*' \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true > my-mirror-progress.txt 2>&1 &You can view the progress of the mirror by issuing the following command on the remote machine:tail -f my-mirror-progress.txt
-
-
For mirroring from a file system (disconnected mirroring):
Mirror images to your file system:export IMAGE_PATH=<image-path> oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-to-filesystem.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true \ --dir "$IMAGE_PATH"The
<image-path>refers to the local path to store the images. For example, in the previous section if providedfile://localas input during generate mirror-manifests, then the preceding command will create a subdirectory v2/local inside directory referred by<image-path>and copy the images under it.
The following command can be used to see all the options available on the mirror command. Note that
continue-on-erroris used to indicate that the command should try to mirror as much as possible and continue on errors.oc image mirror --helpNote: Sometimes based on the number and size of images to be mirrored, theoc image mirrormight take longer. If you are issuing the command on a remote machine, it is recommended that you run the command in the background withnohupso that even if you lose network connection to your remote machine or you close the terminal, the mirroring will continue. For example, the following command will start the mirroring process in the background and write the log tomy-mirror-progress.txt.export IMAGE_PATH=<image-path> nohup oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-to-filesystem.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true \ --dir "$IMAGE_PATH" > my-mirror-progress.txt 2>&1 &You can view the progress of the mirror by issuing the following command on the remote machine:
tail -f my-mirror-progress.txt -
-
For disconnected mirroring only: Continue to move the following items to your file system:
- The
<image-path>directory you specified in the previous step - The
authfile referred by$REGISTRY_AUTH_FILE ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-from-filesystem.txt
- The
-
For disconnected mirroring only: Mirror images to the target registry from file system
Complete the steps in this section on your file system to copy the images from the file system to the
$TARGET_REGISTRY. Your file system must be connected to the target docker registry.Important: If you used the placeholder value ofTARGET_REGISTRYas a parameter to--final-registryat the time of generating mirror manifests, then before running the following command, find and replace the placeholder value ofTARGET_REGISTRYin the file,images-mapping-from-filesystem.txt, with the actual registry where you want to mirror the images. For example, if you want to mirror images tomyregistry.com/mynamespacethen replaceTARGET_REGISTRYwithmyregistry.com/mynamespace.-
Run the following command to copy the images (referred in the
images-mapping-from-filesystem.txtfile) from the directory referred by<image-path>to the final target registry:export IMAGE_PATH=<image-path> oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping-from-filesystem.txt \ -a $REGISTRY_AUTH_FILE \ --from-dir "$IMAGE_PATH" \ --filter-by-os '.*' \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true
-
Configure the cluster
-
Update the global image pull secret for your Red Hat OpenShift cluster. Follow the steps in Updating the global cluster pull secret.
The documented steps in the link enable your cluster to have proper authentication credentials in place to pull images from your
TARGET_REGISTRYas specified in theimage-content-source-policy.yamlwhich you will apply to your cluster in the next step. -
Create ImageContentSourcePolicy
Important:-
Before you run the command in this step, you must be logged into your OpenShift cluster. Using the
oc logincommand, log in to the Red Hat OpenShift Container Platform cluster where your final location resides. You can identify your specific oc login by clicking the user drop-down menu in the Red Hat OpenShift Container Platform console, then clicking Copy Login Command.- If you used the placeholder value of
TARGET_REGISTRYas a parameter to--final-registryat the time of generating mirror manifests, then before running the following command, find and replace the placeholder value ofTARGET_REGISTRYin file,~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/image-content-source-policy.yamlwith the actual registry where you want to mirror the images. For example, replaceTARGET_REGISTRYwithmyregistry.com/mynamespace.
- If you used the placeholder value of
Run the following command to create ImageContentSourcePolicy:
oc apply -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/image-content-source-policy.yamlIf you are using Red Hat OpenShift Container Platform version 4.7 or earlier, this step might cause your cluster nodes to drain and restart sequentially to apply the configuration changes.
-
-
Verify that the ImageContentSourcePolicy resource is created.
oc get imageContentSourcePolicy -
Verify your cluster node status and wait for all the nodes to be restarted before proceeding.
oc get MachineConfigPool$ oc get MachineConfigPool -w NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-53bda7041038b8007b038c08014626dc True False False 3 3 3 0 10d worker rendered-worker-b54afa4063414a9038958c766e8109f7 True False False 3 3 3 0 10dAfter the
ImageContentsourcePolicyand global image pull secret are applied, the configuration of your nodes will be updated sequentially. Wait until allMachineConfigPoolsare in theUPDATED=Truestatus before proceeding. -
Go to the project where deployment has to be done:
Note: You must be logged into a cluster before performing the following steps.export NAMESPACE=<YOUR_NAMESPACE>oc new-project $NAMESPACE -
Optional: If you use an insecure registry, you must add the target registry to the cluster insecureRegistries list.
oc patch image.config.openshift.io/cluster --type=merge \ -p '{"spec":{"registrySources":{"insecureRegistries":["'${TARGET_REGISTRY}'"]}}}' -
Verify your cluster node status and wait for all the nodes to be restarted before proceeding.
oc get MachineConfigPool -wAfter the
ImageContentsourcePolicyand global image pull secret are applied, the configuration of your nodes will be updated sequentially. Wait until allMachineConfigPoolsare updated.At this point your cluster is ready for IBM Connect:Direct for UNIX deployment. The helm chart is present in
~/.ibm-pak/data/cases/$CASE_NAME/$CASE_VERSION/charts/ibm-sccm-1.2.x.tgzdirectory. Use it for deployment. Copy it in current directory.cp ~/.ibm-pak/data/cases/$CASE_NAME/$CASE_VERSION/charts/ibm-sccm-1.2.x.tgz .Note: Replace with version information in above command. - Configuration required in Helm chart: To use the image mirroring in OpenShift cluster, helm chart should be configured to use the digest value for referring to container image. Set image.digest.enabled to true in values.yaml file or pass this parameter using Helm CLI.
Setting up a repeatable mirroring process
Once you complete a CASE save, you can mirror the CASE as
many times as you want to. This approach allows you to mirror a specific version of the IBM
Cloud Pak into development, test, and production stages using a private container
registry.
Follow the steps in this section if you want to save the CASE to multiple
registries (per environment) once and be able to run the CASE in the future
without repeating the CASE save process.
-
Run the following command to save the
CASEto ~/.ibm-pak/data/cases/$CASE_NAME/$CASE_VERSION which can be used as an input during the mirror manifest generation:oc ibm-pak get \ $CASE_NAME \ --version $CASE_VERSION -
Run the
oc ibm-pak generate mirror-manifestscommand to generate theimage-mapping.txt:oc ibm-pak generate mirror-manifests \ $CASE_NAME \ $TARGET_REGISTRY \ --version $CASE_VERSIONThen add theimage-mapping.txtto theoc image mirrorcommand:oc image mirror \ -f ~/.ibm-pak/data/mirror/$CASE_NAME/$CASE_VERSION/images-mapping.txt \ --filter-by-os '.*' \ -a $REGISTRY_AUTH_FILE \ --insecure \ --skip-multiple-scopes \ --max-per-registry=1 \ --continue-on-error=true
If you want to make this repeatable across environments, you can reuse the same saved
CASE cache (~/.ibm-pak/$CASE_NAME/$CASE_VERSION) instead of executing a
CASE save again in other environments. You do not have to worry about
updated versions of dependencies being brought into the saved cache.