Setting up BMC Deployment Engine in an air-gapped environment
Before you begin
- Make sure that you create the following virtual machines by using the same operating system image or template:
- Offline server—Virtual machine without internet access to set up BMC Deployment Engine in an air-gapped environment.
- Online server—Virtual machine with internet access to download artifacts required to set up air-gapped BMC Deployment Engine required for the offline server.
- The online server must be an exact replica of the offline server.
- The online server must have a nonroot user with sudo access to install and configure repositories and to download artifacts from the RHN, Jenkins, Red Hat OpenShift, Ansible, EPEL repositories, and Python modules.
- The online server must be registered with the Red Hat subscription manager and a valid subscription pool ID.
Make sure that the offline and online virtual machines meet the following specifications:
Component
Node
vCPU
Operating System
RAM (GB)
Disk (GB)
Jenkins server
1
2
- RHEL 8.6 or later
- RHEL 9.x
- Rocky Linux 9.x
Minimum 8 GB
100
Make sure that the /home, /var, /usr mount points have a minimum of 15 GB free space and /tmp has a minimum of 5 GB free space.
The following image shows the tasks to set up BMC Deployment Engine in an air-gapped environment:
Task 1: To set up BMC Deployment Engine on an online server
- Log in to your online server.
- Log in to your online server by using a user with sudo access.
Create the git user and provide sudo access to the git user by using the following commands:
Important: Make sure that you do not use special characters in the git user password.sudo useradd git -m
sudo passwd git- Log in to your online server by using the git user.
- Register the RHEL repository.
Make sure that the subscription manager is registered. Configure passwordless sudo access for the git user.
- Log in to BMC Deployment Engine as a root user or a user with permission to run visudo and to create a sudoers override file at the /etc/sudoers.d location.
- Create a sudoers override file such as /<your path to>/git_sudoers.
Add the following details to the file:
git ALL=(ALL) NOPASSWD: \
/usr/sbin/alternatives, \
/usr/bin/cat, \
/usr/bin/chmod, \
/usr/bin/chown, \
/usr/bin/cp, \
/usr/bin/curl, \
/usr/bin/dnf, \
/usr/bin/dos2unix, \
/usr/bin/firewall-cmd, \
/usr/bin/grep, \
/usr/bin/java, \
/usr/bin/ln, \
/usr/bin/ls, \
/usr/bin/mkdir, \
/usr/bin/mv, \
/usr/bin/netstat, \
/usr/bin/rpm, \
/usr/bin/sed, \
/usr/bin/su, \
/usr/sbin/subscription-manager, \
/usr/bin/systemctl, \
/usr/bin/unzip, \
/usr/sbin/update-alternatives, \
/usr/bin/wget, \
/usr/bin/yum, \
/usr/bin/crb, \
/usr/bin/perl, \
/usr/bin/updatedb, \
/usr/bin/ansible-config , \
/usr/bin/crb, \
/usr/bin/echo, \
/usr/bin/find, \
/usr/bin/yumdownloader , \
/usr/bin/sh, \
/usr/bin/updatedb, \
/usr/bin/locateVerify that the file has no errors by running the following command:
visudo -c -f /<your path to>/git_sudoersIf the output is parsed OK, the file is valid.
Identify the sudoers override file location from visudo by running the following command:
visudoSearch for the #includedir parameter in the command output:
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.dIn the example, /etc/sudoers.d is the location where you must copy the sudoers override file.
Copy the sudoers override file to the location found in visudo by using the following command:
cp <override file> <#includedir location>Example:
cp /path/git_sudoers /etc/sudoers.d/git_sudoersModify access to sudoers file by using the following command:
chmod 440 <#includedir location>Example:
chmod 440 /etc/sudoers.d/git_sudoersSwitch the user to git user, and validate passwordless sudo access by running the following command:
sudo ls /rootThe command works without prompting for the password.
- Download and extract the installer.
- Download the BMC_Helix_Innovation_Suite_And_Service_Management_Apps_Version_25.2.01.zip files from EPD to the server.
See Downloading-the-installation-files. - Extract the BMC_Helix_Innovation_Suite_And_Service_Management_Apps_Version_25.2.01.zip file.
This file contains the following files:- BMC_Remedy_Deployment_Manager_Configuration_Release_25.2.01.zip - This file contains the repositories that go in to git.
- BMC_Remedy_Deployment_Engine_Setup_25.2.01.zip
Extract the BMC_Remedy_Deployment_Engine_Setup_25.2.01.zip file.
This file is required to set up BMC Deployment Engine.- Create a working directory and copy files:
Create folders by using the following commands:
mkdir -p airgap_setup/build
mkdir -p airgap_setup/jenkins_plugins/jpi- Copy the following files to the airgap_setup/build folder:
- Jenkins_Config_Files.zip
- LIBRARY_REPO.zip
- BMC_Remedy_Deployment_Manager_Configuration_Release_25.2.01.zip
- Copy all the files from the AIRGAP folder to the airgap_setup folder.
The following files will be available in the AIRGAP folder:- online-airgapped-setup-Helix-ITSM-onPrem.pl
- plugins.txt
- offline-airgapped-setup-Helix-ITSM-onPrem.pl
- rhel8.airgapped
- rhel9.airgapped
- airgapped-build.properties
- rocky9.airgapped
Navigate to the airgap_setup folder and download Perl by using the following command:
sudo dnf download --resolve --downloaddir=. perl
sudo dnf download --resolve --downloaddir=. perl-Data-Dumper- Download the kubeconfig file and copy the file to the airgap_setup folder.
Contact your Kubernetes cluster administrator to download the kubeconfig file. - Run the BMC Deployment Engine online setup script:
Navigate to the airgap_setup folder and provide permissions by using the following commands:
sudo chmod -R 755 *
sudo chown -R git:git /home/git/airgap_setupIn the airgapped-build.properties file, update the following parameters:
Parameter
Description
ITSM_REPO_GIT_ZIP
Specify the path name to the BMC_Remedy_Deployment_Manager_Configuration_Release_25.2.01.zip file.
JENKINS_OFFLINE_PLUGIN_PATH
Specify the path name to the airgap_setup/jenkins_plugins/jpi folder.
JENKINS_CONFIG_FILES_ZIP_PATH
Specify the path name to the Jenkins_Config_Files.zip file.
LIBRARY_REPO_ZIP_PATH
Specify the path name to the LIBRARY_REPO.zip file.
KUBERNETES_VERSION
Specify the Kubernetes cluster version.
Important: Specify the entire version such as KUBERNETES_VERSION=1.25.13
For the supported Kubernetes version, see System-requirements.
Make sure that you specify the correct Kubernetes version value. See Kubernetes version in Kubernetes documentation.POSTGRES_VERSION Specify the value of your external PostgreSQL server used for BMC Helix Service Management, such as 13 or 15. Specify only the major version. GIT_REPO_USER
Specify the Git repository user such git.
GIT_USER_HOME_DIR
Specify the Git repository user home directory such as ~git
HELM_VERSION
Specify the Helm version.
Important: Specify the version HELM_VERSION value as 3.13.0
JENKINS_INSTALL_DIR
Specify value as /var/lib/jenkins
HTTP_PROTOCOL
Specify the value as http
JENKINS_HOSTNAME
Specify the fully qualified host name or IP address where online server setup is planned.
JENKINS_PORT
Specify the value as 8080
JENKINS_USER Specify the Jenkins user as jenkins.
Important: Do not specify any other user name.
ANSIBLE_NODE_ROOT_DIR
Specify the path name to the Ansible node root directory such as ~/<ansible_node_root_dir>
JENKINS_NODE_ROOT_DIR
Specify the path name to the Jenkins node root directory such as ~/<jenkins_node_root_dir>
The Jenkins_node uses this path name for various operations that are internal to Jenkins.GIT_REPO_DIR
Specify the path name to the Git repository directory such as ~/git_repo/
The entire Deployment Engine git code is copied by the installer to this location.JENKINS_CONFIG_FILES_DIR
Specify the path name to the Jenkins configuration files directory such as ~/Jenkins_Config_Files
The Jenkins pipeline uses this location to store its pipeline jobs.DB_TYPE
Specify the type of database to be used during the deployment. Specify the value such as postgres, mssql, or oracle.
ANSIBLE_SUPPORTED_VERSION Indicates the supported version of Ansible that is compatible with the current deployment. Run the script by using the following commands:
perl online-airgapped-setup-Helix-ITSM-onPrem.pl 2>&1 | tee ~/OnlineDElogs.log.$$The packages required for the BMC Deployment Engine components are downloaded and a completion message is displayed.
To ensure that all files are readable, run the following command:
sudo chmod a+r *
Task 2: To set up BMC Deployment Engine on an offline server
- Log in to your offline server by using a user with sudo access.
- Create git and jenkins users by using the following commands:sudo useradd git -m
sudo passwd git
sudo useradd jenkins -m
sudo passwd jenkinsImportant: Make sure that you do not use special characters in the git user password.
Configure passwordless sudo access for the git user.
- Log in to BMC Deployment Engine as a root user or a user with permission to run visudo and to create a sudoers override file at the /etc/sudoers.d location.
- Create a sudoers override file such as /<your path to>/git_sudoers.
Add the following details to the file:
git ALL=(ALL) NOPASSWD: \
/usr/sbin/alternatives, \
/usr/bin/cat, \
/usr/bin/chmod, \
/usr/bin/chown, \
/usr/bin/cp, \
/usr/bin/curl, \
/usr/bin/dnf, \
/usr/bin/dos2unix, \
/usr/bin/firewall-cmd, \
/usr/bin/grep, \
/usr/bin/java, \
/usr/bin/ln, \
/usr/bin/ls, \
/usr/bin/mkdir, \
/usr/bin/mv, \
/usr/bin/netstat, \
/usr/bin/rpm, \
/usr/bin/sed, \
/usr/bin/su, \
/usr/sbin/subscription-manager, \
/usr/bin/systemctl, \
/usr/bin/unzip, \
/usr/sbin/update-alternatives, \
/usr/bin/wget, \
/usr/bin/yum, \
/usr/bin/crb, \
/usr/bin/perl, \
/usr/bin/updatedb, \
/usr/bin/ansible-config , \
/usr/bin/crb, \
/usr/bin/echo, \
/usr/bin/find, \
/usr/bin/yumdownloader , \
/usr/bin/sh, \
/usr/bin/updatedb, \
/usr/bin/locateVerify that the file has no errors by running the following command:
visudo -c -f /<your path to>/git_sudoersIf the output is parsed OK, the file is valid.
Identify the sudoers override file location from visudo by running the following command:
visudoSearch for the #includedir parameter in the command output:
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.dIn the example, /etc/sudoers.d is the location where you must copy the sudoers override file.
Copy the sudoers override file to the location found in visudo by using the following command:
cp <override file> <#includedir location>Example:
cp /path/git_sudoers /etc/sudoers.d/git_sudoersModify access to sudoers file by using the following command:
chmod 440 <#includedir location>Example:
chmod 440 /etc/sudoers.d/git_sudoersSwitch the user to git user, and validate passwordless sudo access by running the following command:
sudo ls /rootThe command works without prompting for the password.
Copy the ssh keys.
Log in to BMC Deployment Engine as a git user.
- Configure the SSH keys for the git user to enable pipeline access to Git repositories.
Generate the SSH key by running the following command and accept all the defaults.
ssh-keygenCopy the ID by running the following command:
ssh-copy-id git@<jenkins_server_name>Verify that the passwordless ssh login works from git to git user by using the following command:
ssh git@<jenkins_server_name>
- Log in to BMC Deployment Engine as a jenkins user.
- Configure jenkins ssh keys to git so that the pipeline dry-run step is successful.
Generate the SSH key by running the following command and accept all the defaults.
ssh-keygenCopy the ID by running the following command:
ssh-copy-id git@<jenkins_server_name>Verify that you are logged in as git user and the passwordless ssh login works by using the following command:
ssh git@<jenkins_server_name>
- Copy the airgap_setup folder from the online server to offline server.
- Log in to the offline server as a git user.
In the git user home directory, create the airgap_setup folder by using the following command:
mkdir -p /home/git/airgap_setupCopy the airgap_setup folder from online server to offline server.
Example commands to copy the airgap_setup folder:cd /home/git/airgap_setup
scp -r <git user>@<online server>:<git user home dir path>/airgap_setup/* .
- Run the BMC Deployment Engine offline setup script:
Provide permissions to the airgap_setup folder by using the following commands:
sudo chmod -R 755 <airgap_setup folder location>
sudo chown -R git:git <airgap_setup folder location>In the airgapped-build.properties file, in the JENKINS_HOSTNAME parameter, specify the fully qualified host name or IP address where offline server setup is planned.
Run the BMC Deployment Engine offline setup script by using the following commands:
cd <airgap_setup folder location>
perl offline-airgapped-setup-Helix-ITSM-onPrem.pl 2>&1 | tee ~/OfflineDElogs.log.$$Make sure that you type YES to accept the license terms. This command creates the nohup.out file in the current folder.
- Review the logs for any errors.
Task 3: To verify BMC Deployment Engine components
Verify that the following components are installed:
Component
Command to verify
Ansible
ansible --version
Java
java --version
Helm
helm version
kubectl
kubectl version
Verify the Python version.
- Check the Python version that Ansible refers by using the following command:
anisble --version
Example command output:
ansible [core 2.15.3]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/git/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.11/site-packages/ansible
ansible collection location = /home/git/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.11.11 (main, Dec 9 2024, 15:32:27) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3.11)
jinja version = 3.1.2
libyaml = True
- Check the Python version by using the following command:
python --version If the Python versions in step 1 and step 2 do not match, update the Python version to the version that Ansible refers by using the following command:
sudo update-alternatives --config python
Example command output:
Selection Command
-----------------------------------------------
* 1 /usr/libexec/no-python
2 /usr/bin/python3
+ 3 /usr/bin/python3.11
Enter to keep the current election[+], or type selection number:
For example, to select Python 3.11, enter 3.
- Check the Python version that Ansible refers by using the following command:
Task 4: To perform postinstallation configurations
Complete the following configurations:
No. | Actions | Steps |
---|---|---|
1 | Log in to the Jenkins sever |
|
2 | Install plug-ins |
|
3 | To update the Jenkins credentials |
|
4 | Update the node configuration in a cloud environment |
|
Update the node configuration in a non cloud environment |
| |
5 | Add the Jenkins libraries | Perform the following steps to add the pipeline-framework library:
Important: After you complete the BMC Deployment Engine configurations, remove the sudo access of the Git user by using the following command: gpasswd --delete git wheel |
6 | Run the deployment pipelines in dry-run mode | Dry-run is a mandatory step to update the pipeline configuration for any changes to the BMC Helix Innovation Suite and Service Management Installer. Important: Even though you see the Build with Parameters option for all the parameters, you have to still perform a dry-run.
Important:
|
Troubleshooting
Refer to the troubleshooting information if you encounter any of the following issues while setting up BMC Deployment Engine.
Issue symptom
During deployment engine script execution, you might receive the following message:
Container startup failed
java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (No such file or directory)
Example:
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: #011at executable.Main.main(Main.java:335)
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: 2025-02-10 07:33:12.465+0000 [id=1]#011SEVERE#011winstone.Logger#logInternal: Container startup failed
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (No such file or directory)
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: #011at java.base/java.io.FileOutputStream.open0(Native Method)
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: #011at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293)
Feb 10 09:33:12 clm-aus-wnmmad jenkins[272829]: #011at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
Resolution
Run the following commands:
chown -R jenkins:jenkins /var/cache/jenkins
iptables -F
systemctl restart NetworkManager
systemctl restart jenkins
Where to go from here
Next task | Proceed with Installing-BMC-Helix-Platform-Common-services-25-2-00. |
---|---|
Back to process | If you are finished installing BMC Helix Platform services, return to the appropriate installation or upgrade process: |