Table of Contents
ClusterControl can be installed without any kind of internet access. In this section we are presenting two ways to install it, one that does not require any internet connectivity at all and second, that is easier to perform but it requires temporary network access to prepare an offline repository server with all packages required by ClusterControl.
Offline Installation Without Internet Access
Take note that the following ClusterControl features will not work without an Internet connection:
- Backup → Create/Schedule Backup → Upload to Cloud – requires a connection to cloud providers.
- Integrations → Cloud Providers – requires a connection to cloud providers.
- Manage → Load Balancer – requires a connection to EPEL, ProxySQL, HAProxy, MariaDB repository.
- Manage → Upgrades – requires a connection to the provider’s repository.
- Deploy Database Cluster – requires a connection to the database provider’s repository.
Prior to the offline install, make sure you meet the following requirements for the ClusterControl node:
-
- Ensure the offline repository is ready. We assume that you already configured an offline repository for this guide. The details on how to set up an offline repository are explained in the next section.
- Firewall, SElinux, or AppArmor must be turned off. You can turn on the firewall once the installation has been completed. Make sure to allow ports as defined on this page.
- HTTPD/Apache and MySQL databases must be installed on the ClusterControl host.
Setting up Offline Repository
In this documentation, we provide steps to configure offline repository on CentOS/AlmaLinux/RockyLinux 8 & 9 and Ubuntu 20.04 & 22.04 LTS. The offline repository is configured in the ClusterControl host and it’s required to have an DVD iso file for the Operating System to mount all the packages into the ClusterControl host.
1. Insert the DVD installation disc into the DVD drive.
2. Mount the DVD installation disc into the default media location. In this case we use RockyLinux 8 and the media at /media/Rocky
:
$ mount /dev/cdrom /media/Rocky
3. Disable the default repository by adding enabled=0 to “base”, “updates” and “extras” directives. You should have something like this inside /etc/yum.repos.d/Rocky-BaseOS.repo
:
# Rocky-BaseOS.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client. You should use this for Rocky updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.
[baseos]
name=Rocky Linux $releasever - BaseOS
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
4. Update the “enabled” value under the media-baseos
and media-appstream
directive in /etc/yum.repos.d/Rocky-Media.repo
, as shown below:
# Rocky-Media.repo
#
# You can use this repo to install items directly off the installation media.
# Verify your mount point matches one of the below file:// paths.
[media-baseos]
name=Rocky Linux $releasever - Media - BaseOS
baseurl=file:///media/Rocky/BaseOS
file:///media/cdrom/BaseOS
file:///media/cdrecorder/BaseOS
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[media-appstream]
name=Rocky Linux $releasever - Media - AppStream
baseurl=file:///media/Rocky/AppStream
file:///media/cdrom/AppStream
file:///media/cdrecorder/AppStream
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
5. Get the list of available packages:
$ yum list
1. Download the ISO images from the respective vendor site and upload them onto the ClusterControl host. You should have something like this on Debian debian-12.7.0-amd64-DVD-1.iso
.
$ $ ls -1 | grep debian
debian-12.7.0-amd64-DVD-1.iso
2. Create mount points and mount each of the ISO images accordingly:
$ mkdir /mnt/debian-dvd1
$ mount debian-12.7.0-amd64-DVD-1.iso /mnt/debian-dvd1
3. Add the following lines into /etc/apt/sources.list and comment other lines:
deb file:/mnt/debian-dvd1/ bookworm main contrib
4. Retrieve the new list of packages:
$ apt-get update
Performing Offline Installation
1. Disable SElinux and open required ports (or stop iptables):
$ sed -i 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/selinux/config
$ setenforce 0
$ service iptables stop # RedHat/CentOS 6
$ systemctl stop firewalld # RedHat 7/8 or CentOS 7/8
2. Install required packages via package manager:
# Rocky/RHEL/CentOS 8
$ yum -y install wget dmidecode hostname python36 mariadb mariadb-server httpd mod_ssl
$ alternatives --set python /usr/bin/python3
# Rocky/RHEL/CentOS 7
$ yum -y install wget dmidecode python jq mariadb mariadb-server httpd mod_ssl
# Rocky/RHEL/CentOS 6
$ yum -y install wget dmidecode python jq mariadb mariadb-server httpd mod_ssl
3. Install EPEL packages:
# RHEL/CentOS 8
$ dnf config-manager --set-enabled powertools
$ dnf -y install epel-release epel-next-release
# RHEL/CentOS 7
$ yum -y install epel-release
# RHEL/CentOS 6
$ yum -y install epel-release
4. Create the staging directory and download the latest version of the ClusterControl RPM package from the Severalnines download page. The latest stable version is listed on this page.
$ wget https://severalnines.com/downloads/cmon/clustercontrol2-2.2.5-1647.x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-controller-dbg-2.2.0-10707-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-controller-2.2.0-10707-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-proxy-2.2.5-49-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-clud-2.2.5-413-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-cloud-2.2.5-413-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-ssh-2.2.5-201-x86_64.rpm
$ wget https://severalnines.com/downloads/cmon/clustercontrol-notifications-2.2.5-360-x86_64.rpm
$ wget https://repo.severalnines.com/s9s-tools/CentOS_8/x86_64/s9s-tools-1.9-30.1.x86_64.rpm
If the ClusterControl server has no internet connection, please download/upload the above files manually to the server.
5. Perform the package installation manually:
$ yum localinstall clustercontrol*
$ yum localinstall s9s-tools
6. Start the MySQL server (MariaDB for RHEL 7/8 or CentOS 7/8), enable it on boot, and set a MySQL root password:
$ service mysqld start # Redhat/CentOS 6
$ systemctl start mariadb # Redhat/CentOS 7/8
$ chkconfig mysqld on # Redhat/CentOS 6
$ systemctl enable mariadb # Redhat/CentOS 7/8
$ mysqladmin -uroot password 'themysqlrootpassword'
7. Create the cmon
user and grant the cmon
user:
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"localhost" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"127.0.0.1" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"{controller_ip_address}" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'FLUSH PRIVILEGES'
8. Generate a ClusterControl key to be used by RPC_TOKEN
:
$ uuidgen | tr -d '-'
6856d96a19d049aa8a7f4a5ba57a34740b3faf57
9. Initialize the cmon
service by running the below command:
$ cmon --init \
--mysql-hostname="127.0.0.1" \
--mysql-port="3306" \
--mysql-username="cmon" \
--mysql-password="{cmonpassword}" \
--mysql-database="cmon" \
--hostname="{ClusterControl Primary IP Address}" \
--rpc-token="{ClusterControl API key as generated above}" \
--controller-id="clustercontrol"
The value of the hostname
must be either a valid FQDN or IP address of the ClusterControl node. If the host has multiple IP addresses, pick the primary IP address of the host. The cmon user password taken from previous step when creating the user.
10. ClusterControl event and cloud modules require their service definition inside /etc/default/cmon
. Create the file and add the following lines:
EVENTS_CLIENT="http://127.0.0.1:9510"
CLOUD_SERVICE="http://127.0.0.1:9518"
11. Create a temporary directory SSL and certificate:
$ mkdir -p /tmp/ssl
$ cat > /tmp/ssl/v3.ext << EOF
basicConstraints = CA:FALSE
#authorityKeyIdentifier=keyid,issuer
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = DNS:dev.severalnines.local
EOF
12. Generate self-signed certificates:
$ openssl genrsa -out /tmp/ssl/server.key 2048
$ openssl req -new -key /tmp/ssl/server.key -out /tmp/ssl/server.csr \
-addext "subjectAltName = DNS:dev.severalnines.local" \
-subj "/C=SE/ST=Stockholm/L=Stockholm/O='Severalnines AB'/OU=Severalnines/CN=*.severalnines.local/[email protected]"
$ openssl x509 -req -extfile /tmp/ssl/v3.ext -days 1825 -sha256 -in /tmp/ssl/server.csr -signkey /tmp/ssl/server.key -out /tmp/ssl/server.crt
13. Copy the certificate into default ClusterControl default directory:
$ cp -f /tmp/ssl/server.crt /etc/ssl/certs/s9server.crt
$ cp -f /tmp/ssl/server.key /etc/ssl/private/s9server.key
14. Configure header origin in the /etc/httpd/conf.d/security.conf
:
$ cat > /etc/httpd/conf.d/security.conf << EOF
Header set X-Frame-Options: "sameorigin"
EOF
15. Copy the Apache configuration file cc-frontend.conf
from /usr/share/cmon/apache/
to /etc/httpd/conf.d/cc-webapp.conf
:
$ cp /usr/share/cmon/apache/cc-frontend.conf /etc/httpd/conf.d/cc-webapp.conf
16. Replace the default URL with the correct hostname
:
$ sed -i "s|https://cc2.severalnines.local:9443.*|https://{controller_ip_address}\/|g" /etc/httpd/conf.d/cc-webapp.conf
$ sed -i "s|Listen 9443|#Listen 443|g" /etc/httpd/conf.d/cc-webapp.conf
$ sed -i "s|9443|443|g" /etc/httpd/conf.d/cc-webapp.conf
Replace {controller_ip_address}
with valid FQDN or IP address of the ClusterControl node.
17. Enable ClusterControl and Apache daemons on boot and start them:
For Sysvinit:
$ chkconfig --levels 235 cmon on
$ chkconfig --levels 235 cmon-ssh on
$ chkconfig --levels 235 cmon-events on
$ chkconfig --levels 235 cmon-cloud on
$ chkconfig --levels 235 httpd on
$ service cmon start
$ service cmon-ssh start
$ service cmon-events start
$ service cmon-cloud start
$ service httpd start
For Systemd:
$ systemctl enable cmon cmon-ssh cmon-events cmon-cloud httpd
$ systemctl start cmon cmon-ssh cmon-events cmon-cloud httpd
18. Create the ccrpc
user which is required since the ClusterControl version 1.8.2 to support new user management:
$ export S9S_USER_CONFIG=$HOME/.s9s/ccrpc.conf
$ s9s user --create --new-password={generated ClusterControl API token} --generate-key --private-key-file==$HOME/.s9s/ccrpc.key --group=admins --controller=https://localhost:9501 ccrpc
$ s9s user --set --first-name=RPC --last-name=API --cmon-user=ccrpc &>/dev/null
19. Create ccsetup
user for registration new account:
$ export S9S_USER_CONFIG=/tmp/ccsetup.conf
$ s9s user --create --new-password=admin --group=admins --email-address="{your_email_address}" --controller="https://localhost:9501" ccsetup
$ unset S9S_USER_CONFIG
The email {your_email_address}
is used to register a new account.
https://ClusterControl_host/
. Setup the super admin account by specifying a valid email address and password on the welcome page.
You would see this error: “Sorry we are not able to retrieve your license information. Please register your license under Settings – Subscription”. This is expected because the demo license is automatically retrieved from our license server automatically via the Internet. Please contact our Sales or Support team to get a free 30-day demo license. Otherwise, you will be running ClusterControl as a community edition.
/var/www/html
with /var/www
in the following instructions.1. If you have AppArmor running, disable it and open the required ports (or stop iptables):
$ sudo /etc/init.d/apparmor stop
$ sudo /etc/init.d/apparmor teardown
$ sudo update-rc.d -f apparmor remove
$ sudo service iptables stop
2. Install ClusterControl dependencies:
$ sudo apt-get update
$ sudo apt-get install -y python3 apache2 software-properties-common mysql-client mysql-server
$ update-alternatives --install /usr/bin/python python /usr/bin/python3 1
3. Create the staging directory and download the latest version of the ClusterControl DEB package from the Severalnines download page. The latest stable version is listed on this page.
$ wget https://severalnines.com/downloads/cmon/clustercontrol2_2.2.5-1647_amd64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-controller-dbg-2.2.0-10707-x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-controller-2.2.0-10707-x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-proxy_2.2.5-49_x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-clud_2.2.5-413_x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-cloud_2.2.5-413_x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-ssh_2.2.5-201_x86_64.deb
$ wget https://severalnines.com/downloads/cmon/clustercontrol-notifications_2.2.5-360_x86_64.deb
$ wget https://repo.severalnines.com/s9s-tools/bookworm/amd64/s9s-tools_1.9.2024100217-release1_amd64.deb
If the ClusterControl server has no internet connection, please download/upload the above files manually to the server.
3. Install the ClusterControl controller package:
$ sudo apt-get install -y clustercontrol2_2.2.5-1647_amd64.deb clustercontrol-controller-dbg-2.2.0-10707-x86_64.deb clustercontrol-controller-dbg-2.2.0-10707-x86_64.deb clustercontrol-controller-dbg-2.2.0-10707-x86_64.deb clustercontrol-clud_2.2.5-413_x86_64.deb clustercontrol-cloud_2.2.5-413_x86_64.deb clustercontrol-ssh_2.2.5-201_x86_64.deb clustercontrol-notifications_2.2.5-360_x86_64.deb s9s-tools_1.9.2024100217-release1_amd64.deb
4. Start MySQL server, enable it on boot and set a MySQL root password:
$ systemctl start mysql
$ systemctl enable mysql
$ mysqladmin -uroot password 'themysqlrootpassword'
5. Create the cmon
user and grant the cmon user:
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"localhost" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"127.0.0.1" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO "cmon"@"{controller_ip_address}" IDENTIFIED BY "{cmonpassword}" WITH GRANT OPTION'
$ mysql -uroot -p -e 'FLUSH PRIVILEGES'
6. Generate a ClusterControl key to be used by RPC_TOKEN
:
$ uuidgen | tr -d '-'
6856d96a19d049aa8a7f4a5ba57a34740b3faf57
7. Initialize the cmon service by running below command:
$ cmon --init \
--mysql-hostname="127.0.0.1" \
--mysql-port="3306" \
--mysql-username="cmon" \
--mysql-password="{cmonpassword}" \
--mysql-database="cmon" \
--hostname="{ClusterControl Primary IP Address}" \
--rpc-token="{ClusterControl API key as generated above}" \
--controller-id="clustercontrol"
The value of the hostname
must be either a valid FQDN or IP address of the ClusterControl node. If the host has multiple IP addresses, pick the primary IP address of the host. The cmon user password taken from previous step when creating the user.
/etc/default/cmon
for service definition. Create the file and add the following lines:
EVENTS_CLIENT="http://127.0.0.1:9510"
CLOUD_SERVICE="http://127.0.0.1:9518"
9. Create temporary directory SSL and certificate:
$ mkdir -p /tmp/ssl
$ cat > /tmp/ssl/v3.ext << EOF
basicConstraints = CA:FALSE
#authorityKeyIdentifier=keyid,issuer
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = DNS:dev.severalnines.local
EOF
10. Generate self signed certificates:
$ openssl genrsa -out /tmp/ssl/server.key 2048
$ openssl req -new -key /tmp/ssl/server.key -out /tmp/ssl/server.csr \
-addext "subjectAltName = DNS:dev.severalnines.local" \
-subj "/C=SE/ST=Stockholm/L=Stockholm/O='Severalnines AB'/OU=Severalnines/CN=*.severalnines.local/[email protected]"
$ openssl x509 -req -extfile /tmp/ssl/v3.ext -days 1825 -sha256 -in /tmp/ssl/server.csr -signkey /tmp/ssl/server.key -out /tmp/ssl/server.crt
11. Copy the certificate into default ClusterControl default directory:
$ cp -f /tmp/ssl/server.crt /etc/ssl/certs/s9server.crt
$ cp -f /tmp/ssl/server.key /etc/ssl/private/s9server.key
12. Configure header origin in the /etc/apache2/conf-available/security.conf
:
$ sed -ibak "s|^#Header set X-Frame-Options: \"sameorigin\"|Header set X-Frame-Options: \"sameorigin\"|g" /etc/apache2/conf-available/security.conf
$ ln -sfn /etc/apache2/conf-available/security.conf /etc/apache2/conf-enabled/security.conf
13. Replace the default URL with the correct hostname
:
$ sed -i "s|^[ \t]*ServerName.*| ServerName {controller_ip_address}|g" /etc/apache2/sites-available/cc-frontend.conf
$ sed -i "s|https://cc2.severalnines.local:9443.*|https://{controller_ip_address}\/|g" /etc/apache2/sites-available/cc-frontend.conf
$ sed -i "s|Listen 9443|#Listen 443|g" /etc/apache2/sites-available/cc-frontend.conf
$ sed -i "s|9443|443|g" /etc/apache2/sites-available/cc-frontend.conf
{controller_ip_address}
with valid FQDN or IP address of the ClusterControl node.
14. Enable required Apache modules and create a symlink to sites-enabled for default HTTPS virtual host:
$ a2enmod ssl rewrite proxy proxy_http proxy_wstunnel
$ a2ensite default-ssl
15. Restart Apache webserver to apply the changes:
$ sudo service apache2 restart
16. Enable ClusterControl on boot and start them:
For sysvinit/upstart:
$ sudo update-rc.d cmon defaults
$ sudo update-rc.d cmon-ssh defaults
$ sudo update-rc.d cmon-events defaults
$ sudo update-rc.d cmon-cloud defaults
$ service cmon start
$ service cmon-ssh start
$ service cmon-events start
$ service cmon-cloud start
For systemd:
$ systemctl enable cmon cmon-ssh cmon-events cmon-cloud
$ systemctl restart cmon cmon-ssh cmon-events cmon-cloud
17. Create the ccrpc
user which is required since the ClusterControl version 1.8.2 to support new user management
$ export S9S_USER_CONFIG=$HOME/.s9s/ccrpc.conf
$ s9s user --create --new-password={generated ClusterControl API token} --generate-key --private-key-file==$HOME/.s9s/ccrpc.key --group=admins --controller=https://localhost:9501 ccrpc
$ s9s user --set --first-name=RPC --last-name=API --cmon-user=ccrpc &>/dev/null
18. Create ccsetup
user for registration new account.
$ export S9S_USER_CONFIG=/tmp/ccsetup.conf
$ s9s user --create --new-password=admin --group=admins --email-address="{your_email_address}" --controller="https://localhost:9501" ccsetup
$ unset S9S_USER_CONFIG
The email {your_email_address}
is used to register a new account.
https://ClusterControl_host/clustercontrol
. Setup the super admin account by specifying a valid email address and password on the welcome page.
Post-installation
Once ClusterControl is up and running, you can import your existing cluster or deploy a new database cluster and start managing them from one place. Make sure passwordless SSH is configured from the ClusterControl node to your database nodes. Please use the repository template in ClusterControl host for the database server and load balancer server.
1. Generate an SSH key on the ClusterControl node:
$ ssh-keygen -t rsa # press Enter on all prompts
2. Setup passwordless SSH to ClusterControl and database nodes:
$ ssh-copy-id -i ~/.ssh/id_rsa {os_user}@{IP address/hostname}
Repeat step 2 for all database hosts that you are going to manage (including the ClusterControl node itself).
Offline installation With Temporary Internet Access
ClusterControl provides a script to install and configure ClusterControl packages in an Internetless environment, available at this URL using the OFFLINE=1
parameter.
Take note that the following ClusterControl features will not work without an Internet connection:
-
-
- Backup → Create/Schedule Backup → Upload to Cloud – requires a connection to cloud providers.
- Integrations → Cloud Providers – requires a connection to cloud providers.
- Manage → Load Balancer – requires a connection to EPEL, ProxySQL, HAProxy, MariaDB repository.
- Manage → Upgrades – requires a connection to the provider’s repository.
- Deploy Database Cluster – requires a connection to the database provider’s repository.
-
Prior to the offline install, make sure you meet the following requirements for the ClusterControl node:
-
-
- Ensure the offline repository is ready. We assume that you already configured an offline repository. Details on how to set up an offline repository are explained in the Setting up Offline Repository section.
- Firewall, SELinux or AppArmor must be turned off. You can turn on the firewall once the installation has completed. Make sure to allow ports as defined in Firewall and Security Groups.
- MySQL server must be installed and running on the ClusterControl host.
-
Setting up Offline Repository
The installer script requires an offline repository to satisfy the dependencies. In this documentation, we provide steps to configure offline repository on CentOS/AlmaLinux/RockyLinux 8 & 9 and Ubuntu 20.04 & 22.04 LTS. It’s necessary to have a temporary internet access to download all the packages in the Repository Server.
1. Setup the webserver on the repo server to serve up packages to the yum package manager remotely:
$ dnf install -y nginx
$ systemctl start nginx
$ systemctl enable nginx
$ systemctl status nginx
2. Setup software required for repository server
$ dnf install -y createrepo yum-utils wget
$ dnf install -y epel-release
3. Create directory for repo packages:
$ mkdir -p /usr/share/nginx/html/repos
4. Configure the nginx
in the Repository Server:
$ sudo vi /etc/nginx/conf.d/repos.conf
server {
listen 80;
server_name repo-server;
root /usr/share/nginx/html/repos;
index index.html;
location / {
autoindex on;
}
}
5. Configure hostname repo-server
in the /etc/hosts
on the Repository Server.
$ vi /etc/hosts
your_ip_address repo-server
6. Restart the nginx
service:
$ systemctl restart nginx
$ chcon -Rt httpd_sys_content_t /usr/share/nginx/html/repos
7. Perform repository syncing with appropriate repositories (the following commands will consume time to finish):
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=baseos --newest-only --download-metadata
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=appstream--newest-only --download-metadata
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=extras --newest-only --download-metadata
-- For AlmaLinux/RockyLinux/CentOS 9 (CodeReadyBuilder)
$ dnf config-manager set-enabled crb
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=crb--newest-only --download-metadata
-- For AlmaLinux/RockyLinux/CentOS 8 (Powertools)
$ dnf config-manager set-enabled powertools
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=powertools--newest-only --download-metadata
8. Adding Severalnines Repository to the Repo Server.
Import the public key:
$ rpm --import http://repo.severalnines.com/severalnines-repos.asc
Download the s9s-repo fom the Severalnines Repository
$ wget http://www.severalnines.com/downloads/cmon/s9s-repo.repo -P /etc/yum.repos.d/
Edit the s9s-repo.repo
and add s9s-tools
repo to the existing repo file with the following content:
[s9s-tools]
name=s9s-tools (RHEL_8)
type=rpm-md
baseurl=http://repo.severalnines.com/s9s-tools/{os_codename}
gpgcheck=1
gpgkey=http://repo.severalnines.com/s9s-tools/{os_codename}/repodata/repomd.xml.key
enabled=1
Replace {os_codename}
based on the list of Operating System code below: RHEL_7
,RHEL_8
,RHEL_9
,CentOS_7
,CentOS_8
,CentOS_9
.
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=s9s-repo --newest-only --download-metadata
$ dnf reposync -g --delete -p /usr/share/nginx/html/repos/ --repoid=s9s-tools --newest-only --download-metadata
9. Adding PostgreSQL Repository to the Repo Server.
Download the PostgreSQL release package:
$ dnf install https://download.postgresql.org/pub/repos/yum/reporpms/{os_code}-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Replace the {os_code}
for each version of Operating System; EL-7
, EL-8
, EL-9
.
$ dnf clean all
$ dnf repolist
Perform repository syncing of PostgreSQL:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg-common --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg16 --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg15 --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg14 --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg13 --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=pgdg12 --newest-only --download-metadata
10. Adding MongoDB Repository to the Repo Server.
The package name of the MongoDB server as seen in the yum command is dnf install mongodb-org
. Therefore, the /etc/yum.repos.d/mongodb-org.repo
can only have one entry pointing to the appropriate version of MongoDB (one and only one of either 4.4, 5.0or 6.0).
Create a repo file located at /etc/yum.repos.d/mongodb-org.repo
and make sure it has the following lines (the example shows we activate MongoDB 6.0):
# cat mongodb-org.repo
[mongodb-org-6.0-latest]
name=MongoDB lastest 6.0 Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=0
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
#[mongodb-org-5.0]
#name=MongoDB Repository
#baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
#gpgcheck=1
#enabled=1
#gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
Disable GPGkey checking if you don’t have an internet connection. Furthermore, only one version (i.e., either 6.0, 5.0, 4.4) can be supported at any given time. The reason is, that all the versions are called “mongodb-org”.
$ dnf clean all
$ dnf repolist
Perform repository syncing of MongoDB:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mongodb-org-6.0-latest --newest-only --download-metadata
11. Adding Percona MongoDB Repository to the Repo Server.
The package name of the Percona MongoDB server as seen in the yum command is dnf install percona-server-mongodb
. Therefore, the /etc/yum.repos.d/percona-mongodb-org.repo
can only have one entry pointing to the appropriate version of MongoDB (one and only one of either 4.4, 5.0 or 6.0).
Create a repo file located at /etc/yum.repos.d/percona-mongodb.repo
and make sure it has the following lines (the example shows we activate Percona MongoDB 6.0):
[psmdb-60-release-x86_64]
name = Percona Server for MongoDB 6.0 release/x86_64 YUM repository
baseurl = http://repo.percona.com/psmdb-60/yum/release/$releasever/RPMS/x86_64
enabled = 1
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[psmdb-60-release-noarch]
name = Percona Server for MongoDB 6.0 release/noarch YUM repository
baseurl = http://repo.percona.com/psmdb-50/yum/release/$releasever/RPMS/noarch
enabled = 1
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[psmdb-60-release-sources]
name = Percona Server for MongoDB 6.0 release/sources YUM repository
baseurl = http://repo.percona.com/psmdb-60/yum/release/$releasever/SRPMS
enabled = 0
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[tools-release-x86_64]
name = Percona Tools release/x86_64 YUM repository
baseurl = http://repo.percona.com/tools/yum/release/$releasever/RPMS/x86_64
enabled = 1
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[tools-release-noarch]
name = Percona Tools release/noarch YUM repository
baseurl = http://repo.percona.com/tools/yum/release/$releasever/RPMS/noarch
enabled = 1
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[tools-release-sources]
name = Percona Tools release/sources YUM repository
baseurl = http://repo.percona.com/tools/yum/release/$releasever/SRPMS
enabled = 0
gpgcheck = 0
#gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
Disable GPGkey checking if you don’t have an internet connection. Furthermore, only one version (i.e., either 6.0, 5.0, 4.4) can be supported at any given time. The reason is, that all the versions are called “percona-mongodb-org”.
$ dnf clean all
$ dnf repolist
Perform repository syncing of Percona MongoDB:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=psmdb-60-release-x86_64 --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=tools-release-x86_64 --newest-only --download-metadata
12. Adding Oracle MySQL Repository to the Repo Server.
Download the appropriate Oracle MySQL community release package
$ dnf install https://dev.mysql.com/get/mysql84-community-release-{os_code}-1.noarch.rpm
Replace the {os_code}
for each verion of Operating System; el7
, el8
, el9
.
Clear the repository cache and list out the repositories, make sure the newly added MySQL 8 repository is in the list:
$ dnf clean all
$ dnf repolist
Perform repository syncing of Oracle MySQL:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mysql80-community --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mysql-connectors-community --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mysql-tools-community --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mysql-cluster-8.0-community --newest-only --download-metadata
13. Adding Percona MySQL Repository to the Repo Server.
Download the appropriate Percona MySQL release package
$ dnf install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Enable the Percona Server for MSQL 8.0 (the latest version at the time of this writing):
$ percona-release setup ps80
Clear the repository cache and list out the repositories, make sure the newly added Percona Server repository is in the list:
$ dnf clean all
$ dnf repolist
Perform repository syncing of Percona MySQL:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=ps-80-release-x86_64 --newest-only --download-metadata
14. Adding MariaDB Repository to the Repo Server.
Install the MariaDB repository by using the following script:
$ curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
Clear the repository cache and list out the repositories, make sure the newly added MariaDB repository is in the list:
$ dnf clean all
$ dnf repolist
Perform repository syncing of MariaDB:
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mariadb-main --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mariadb-maxscale --newest-only --download-metadata
$ dnf reposync --delete -p /usr/share/nginx/html/repos/ --repoid=mariadb-tools --newest-only --download-metadata
15. Creating Repository
$ createrepo /usr/share/nginx/html/repos/
1. Install the Apache Webserver.
$ sudo apt install -y apache2
$ sudo sudo systemctl enable apache2
2. Configure the directory for the repo path:
$ sudo mkdir -p /var/www/html/ubuntu
$ sudo chown www-data:www-data /var/www/html/ubuntu
3. Install the apt-mirror
package :
sudo apt install -y apt-mirror
4. Copy the original file of mirror.list
:
$ sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.orig
5. Edit the file /etc/apt/mirror.list
. Please uncomment the parameter set base_path
and adjust to the directory that we had created. We will the all the packages for the Ubuntu 22.04 (jammy) and some others repos as below:
$ sudo vi /etc/apt/mirror.list
############# config ##################
#
# set base_path /var/spool/apt-mirror
set base_path /var/www/html/ubuntu
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads 20
set _tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu {os_code} main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu {os_code}-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu {os_code}-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu {os_code}-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu {os_code}-backports main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu {os_code} main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu {os_code}-security main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu {os_code}-updates main restricted universe multiverse
##deb-src http://archive.ubuntu.com/ubuntu {os_code}-proposed main restricted universe multiverse
##deb-src http://archive.ubuntu.com/ubuntu {os_code}-backports main restricted universe multiverse
Replace the {os_code}
for each version of Operating System; jammy
, focal
, bionic
, noble
.
6. Create the directory for the postmirror
file and copy the file into the directory
$ sudo mkdir -p /var/www/html/ubuntu/var
$ sudo cp /var/spool/apt-mirror/var/postmirror.sh /var/www/html/ubuntu/var/
7. Execute the apt-mirror
command, it will download all the packages into the repository server.
$ sudo apt-mirror
8. Download all the Severalnines Repos and Databases Repositories by add the following into /etc/apt/mirror.list
$ sudo vi /etc/apt/mirror.list
### Severalnines & DB's Repository additions
deb [arch=amd64] http://repo.severalnines.com/deb ubuntu main
deb http://repo.severalnines.com/s9s-tools/{os_code}/ ./
deb http://apt.postgresql.org/pub/repos/apt/ {os_code}-pgdg main
deb http://repo.mysql.com/apt/ubuntu/ {os_code} mysql-apt-config
deb http://repo.mysql.com/apt/ubuntu/ {os_code} mysql-8.0
deb http://repo.percona.com/ps-80/apt {os_code} main
deb-src http://repo.percona.com/ps-80/apt {os_code} main
deb http://repo.percona.com/pxc-80/apt {os_code} main
deb-src http://repo.percona.com/pxc-80/apt {os_code} main
deb http://repo.percona.com/tools/apt {os_code} main
deb-src http://repo.percona.com/tools/apt {os_code} main
deb http://repo.percona.com/percona/apt {os_code} main
deb https://repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/4.4 multiverse
deb https://repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/5.0 multiverse
deb https://repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/6.0 multiverse
deb https://repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/7.0 multiverse
deb [arch=amd64,arm64] https://dlm.mariadb.com/repo/mariadb-server/10.6/repo/ubuntu {os_code} main
deb [arch=amd64,arm64] https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/ubuntu {os_code} main
deb [arch=amd64,arm64] https://dlm.mariadb.com/repo/mariadb-server/10.6/repo/ubuntu {os_code} main/debug
deb [arch=amd64,arm64] https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/ubuntu {os_code} main/debug
deb [arch=amd64,arm64] https://dlm.mariadb.com/repo/maxscale/latest/apt {os_code} main
deb [arch=amd64] http://downloads.mariadb.com/Tools/ubuntu {os_code} main
9. Execute the apt-mirror
command again, it will download all the Severalnines and Databases packages into the repository server.
$ sudo apt-mirror
Performing Offline Installation
1. The offline installation script will need a running MySQL server on the host. Install MySQL server and client, enable it to start on boot and start the service:
$ yum install -y mariadb mariadb-server
$ systemctl enable mariadb
$ systemctl start mariadb
2. Configure MySQL root password for the newly installed MySQL server:
$ mysqladmin -uroot password yourR00tP4ssw0rd
3. Move the default repository to the backup.
$ mv /etc/yum.repo.d/*.repo /etc/yum.repo.d/bak/
4. Create the repository pointing to the Repo Server in the ClusterControl host. You can use the following template:
[appstream]
name=AlmaLinux $releasever - AppStream
baseurl=http://repo-server/appstream/
enabled=1
gpgcheck=0
[baseos]
name=AlmaLinux $releasever - BaseOS
baseurl=http://repo-server/baseos/
enabled=1
gpgcheck=0
[crb]
name=AlmaLinux $releasever - CRB
baseurl=http://repo-server/crb/
enabled=1
gpgcheck=0
[extras]
name=AlmaLinux $releasever - Extras
baseurl=http://repo-server/extras/
enabled=1
gpgcheck=0
[epel]
name=AlmaLinux $releasever - Epel
baseurl=http://repo-server/epel/
enabled=1
gpgcheck=0
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo-server/mysql80-community/
enabled=1
gpgcheck=0
[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo-server/mysql-tools-community/
enabled=1
gpgcheck=0
[pgdg-common]
name=PostgreSQL common RPMs for RHEL / Rocky / AlmaLinux $releasever - $basearch
baseurl=http://repo-server/pgdg-common/
enabled=1
gpgcheck=0
[pgdg15]
name=PostgreSQL 16 for RHEL / Rocky / AlmaLinux $releasever - $basearch
baseurl=http://repo-server/pgdg16/
enabled=1
gpgcheck=0
[pgdg15]
name=PostgreSQL 15 for RHEL / Rocky / AlmaLinux $releasever - $basearch
baseurl=http://repo-server/pgdg15/
enabled=1
gpgcheck=0
[pgdg14]
name=PostgreSQL 15 for RHEL / Rocky / AlmaLinux $releasever - $basearch
baseurl=http://repo-server/pgdg14/
enabled=1
gpgcheck=0
[s9s-repo]
name = Severalnines Release Repository
baseurl=http://repo-server/s9s-repo/
enabled=1
gpgcheck=0
[s9s-tools]
name = Severalnines Tools Repository
baseurl=http://repo-server/s9s-tools/
enabled=1
gpgcheck=0
5. Add the alias of repo-server
in ClusterControl host /etc/hosts
:
$ vi /etc/hosts
ip_repository_server repo-server
You should change the ip_repository_server
with the correct IP Address of the Repo Server.
install-cc
script and put the file into ClusterControl hosts. Give execute permission to the file.
$ chmod +x install-cc
6. Execute install-cc
script to install ClusterControl and follow the installation wizard accordingly:
$ $ S9S_ADMIN_EMAIL="[email protected]" OFFLINE=1 S9S_ROOT_PASSWORD="XXX" S9S_CMON_PASSWORD="YYY" ./install-cc
Fill the S9S_ADMIN_EMAIL
using your email, S9S_ROOT_PASSWORD
with the correct password and S9S_CMON_PASSWORD
you defined.
https://ClusterControl_host/
. Setup the super admin account by specifying a valid email address and password on the welcome page.
You would see this error: “Sorry we are not able to retrieve your license information. Please register your license under Settings – Subscription”. This is expected because the demo license is automatically retrieved from our license server automatically via the Internet. Please contact our Sales or Support team to get a free 30-day demo license. Otherwise, you will be running ClusterControl as a community edition.
1. Backup the /etc/apt/source.list
file before we made the changes.
$ sudo cp -Rp /etc/apt/source.list /etc/apt/source.list.bak
2. Edit the file /etc/apt/source.list
and adjust the hostname repo-server-ubuntu22_04
with the correct IP Address of your repository server.:
$ sudo vi /etc/apt/source.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code} main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu {os_code} main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu {os_code}-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code} universe
# deb-src http://us.archive.ubuntu.com/ubuntu {os_code} universe
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-updates universe
# deb-src http://us.archive.ubuntu.com/ubuntu {os_code}-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code} multiverse
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-backports main restricted universe multiverse
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-security main restricted
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-security universe
deb http://repo-server-ubuntu22_04/ubuntu/mirror/archive.ubuntu.com/ubuntu {os_code}-security multiverse
# Severalnines Repository
deb [arch=amd64] http://repo-server-ubuntu22_04/ubuntu/mirror/repo.severalnines.com/deb ubuntu main
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.severalnines.com/s9s-tools/{os_code}/ ./
# PostgreSQL Repository
deb http://repo-server-ubuntu22_04/ubuntu/mirror/apt.postgresql.org/pub/repos/apt/ {os_code}-pgdg main
# Oracle Repository
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.mysql.com/apt/ubuntu/ {os_code} mysql-apt-config
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.mysql.com/apt/ubuntu/ {os_code} mysql-8.0
# Percona MySQL
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/ps-80/apt {os_code} main
#deb-src http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/ps-80/apt {os_code} main
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/pxc-80/apt {os_code} main
#deb-src http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/pxc-80/apt {os_code} main
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/tools/apt {os_code} main
#deb-src http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/tools/apt {os_code} main
# include the main repository as well
deb http://repo-server-ubuntu22_04/ubuntu/mirror/repo.percona.com/percona/apt {os_code} main
# MongoDB Repository
deb https://repo-server-ubuntu22_04/ubuntu/mirror/repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/4.4 multiverse
deb https://repo-server-ubuntu22_04/ubuntu/mirror/repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/5.0 multiverse
deb https://repo-server-ubuntu22_04/ubuntu/mirror/repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/6.0 multiverse
deb https://repo-server-ubuntu22_04/ubuntu/mirror/repo.mongodb.org/apt/ubuntu {os_code}/mongodb-org/7.0 multiverse
Replace the {os_code}
for each version of Operating System; jammy
, focal
, bionic
, noble
.
$ sudo apt-get install -y --force-yes mysql-client mysql-server
$ sudo systemctl enable mysql
4. Configure MySQL root password for the newly installed MySQL server:
$ sudo mysql_secure_installation
5. Download the install-cc
script and put the file into ClusterControl hosts. Give execute permission to the file.
$ chmod +x install-cc
6. Execute install-cc
script to install ClusterControl and follow the installation wizard accordingly:
$ $ S9S_ADMIN_EMAIL="[email protected]" OFFLINE=1 S9S_ROOT_PASSWORD="XXX" S9S_CMON_PASSWORD="YYY" ./install-cc
Fill the S9S_ADMIN_EMAIL
using your email, S9S_ROOT_PASSWORD
with the correct password and S9S_CMON_PASSWORD
you defined.
https://ClusterControl_host/clustercontrol
. Setup the super admin account by specifying a valid email address and password on the welcome page.
Post-installation
Once ClusterControl is up and running, you can import your existing cluster or deploy a new database cluster and start managing them from one place. Make sure passwordless SSH is configured from the ClusterControl node to your database nodes. Please use the repository template in ClusterControl host for the database server and load balancer server.
1. Generate an SSH key on the ClusterControl node:
$ ssh-keygen -t rsa # press Enter on all prompts
2. Setup passwordless SSH to ClusterControl and database nodes:
$ ssh-copy-id -i ~/.ssh/id_rsa {os_user}@{IP address/hostname}
Repeat step 2 for all database hosts that you are going to manage (including the ClusterControl node itself).