Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel7
Info

Virtual machines on this document are created on VMware ESXi.

Prepare local repos

There are three major dependencies for external libraries:

...

Podman 3.0.1 - Required for HTTP support. Version 3.0 is the source from the Kubic repo maintained by SUSE. 

...

Minimal Requirements and Needs

Requirement

Need

CentOS/RHEL

RHEL/CentOS 7 or RHEL/Rocky Linux 8. See Setup RHEL/CentOS for SCS.

Offline repository

Creating an offline repository of RPM dependencies is required to install SCS on VMs with air-gapped network.

io_pause container image

k8s.gcr.io_pause:3.2 is a container and the offline copy is required to hold the network namespace for the

...

Bash Autocompletion - Required for tabbing on scsctl. It is sourced from the EPEL repository for CentOS.

Dependences

Offline installation for CentOS requires RPMs and dependencies for all those packages on a repository. This is a real challenge in air-gapped networks or networks with no internet access, so the best way is to create a local offline repository.

Let’s prepare the smallest installation base to start with.

  1. Install a VM with CentOS 7.9 (or previous version) and the “Minimal Server” profile.

  2. Run yum to resolve dependencies for a package.

  3. Need CentOS 7 server with internet access and some disk space to pull repo files.

Pull repo files close to install to make sure gpg key changes update to date. 

Method

Install a set of packages to download RPMs and dependencies then create a repository. To pull, RPMs and their dependencies use a yum-plugin called downloadonly. To create the repository for offline usage, we use a tool called createrepo

  1. Install the yum-downloadonly plugin
    yum -y install yum-plugin-downloadonly
    By default, this package comes in large installations.

  2. Create a directory for download packages.
    mkdir packages

  3. Query RPM’s dependencies. First, install SCS and then query the RPM for dependencies.
    rpm -qpR swarm-platform-14.1.0-14.1.0.a16.x86_64.rpm

Result is: 

...

glibc >= 2.17 
bash-completion 
bash-completion-extras 
dhcp 
python3 
iproute 
chrony 
NetworkManager 
rsyslog 
logrotate 
cronie 
/bin/sh 
/bin/sh 
/bin/sh 
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 
rpmlib(CompressedFileNames) <= 3.0.4-1

Download SCS Dependencies 

Pull the following from the above list to download SCS and RPM’s dependencies:

...

Query

...

Command

...

bash-completion

...

yum -y install --downloadonly --downloaddir=packages/ bash-completion 

...

bash-completion-extras

...

yum -y install --downloadonly --downloaddir=packages/ bash-completion-extras 

...

chrony

...

yum -y install --downloadonly --downloaddir=packages/ chrony 

...

cronie

...

yum -y install --downloadonly --downloaddir=packages/ cronie 

...

dhcp

...

yum -y install --downloadonly --downloaddir=packages/ dhcp

...

iproute

...

yum -y install --downloadonly --downloaddir=packages/ iproute 

...

logrotate

...

yum -y install --downloadonly --downloaddir=packages/ logrotate

...

NetworkManager

...

yum -y install --downloadonly --downloaddir=packages/ NetworkManager

...

python3

...

yum -y install --downloadonly --downloaddir=packages/ python3

...

rsyslog

...

yum -y install --downloadonly --downloaddir=packages/ rsyslog

Download Podman 3.0 Repo 

To pull the correct version and its dependencies, we need to enable the Kubic repository.

...

Create Kubic repo at “/etc/yum.repos.d/kubic.repo” manually.

Code Block
[kubic] 
name=Stable Releases of Upstream   packages (CentOS_7) 
type=rpm-md 
baseurl=https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/ 
gpgcheck=1 
gpgkey=https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/repodata/repomd.xml.key 
enabled=1

or download Kubic repo from SUSE.

Code Block
languagebash
cd /etc/yum.repo.d/ 
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo
https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_7/devel:kubic:libcontainers:stable.repo 

Download Podman packages and dependencies.

Code Block
languagepowershell
yum repolist 
yum -y install --downloadonly --downloaddir=packages/ podman

Code Block
languagebash
yum -y install --downloadonly --downloaddir=packages/ podman 
Loaded plugins: fastestmirror 
Loading mirror speeds from cached hostfile 
base:   
epel:   
extras:   
updates: mirror.sjc02.svwh.net 
Resolving Dependencies 
--> Running transaction check 
---> Package podman.x86_64 0:3.0.1-2.el7.3.1 will be installed 
--> Processing Dependency: podman-plugins = 3.0.1-2.el7.3.1 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: slirp4netns >= 0.3.0-2 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: runc >= 2:1.0.0-148.rc93 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: containers-common >= 4:1-4 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: containernetworking-plugins >= 0.9.1-1 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: conmon >= 2:2.0.16-1 for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: nftables for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: container-selinux for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Processing Dependency: catatonit for package: podman-3.0.1-2.el7.3.1.x86_64 
--> Running transaction check 
---> Package catatonit.x86_64 0:0.1.5-6.el7.3.1 will be installed 
---> Package conmon.x86_64 2:2.0.29-1.el7.3.2 will be installed 
---> Package container-selinux.noarch 2:2.119.2-1.911c772.el7_8 will be installed 
--> Processing Dependency: policycoreutils-python for package: 2:container-selinux-2.119.2-1.911c772.el7_8.noarch 
---> Package containernetworking-plugins.x86_64 0:1.0.0-0.2.rc1.el7.6.2 will be installed 
---> Package containers-common.noarch 4:1-18.el7.20.1 will be installed 
--> Processing Dependency: fuse-overlayfs for package: 4:containers-common-1-18.el7.20.1.noarch 
---> Package nftables.x86_64 1:0.8-14.el7 will be installed 
--> Processing Dependency: libnftnl.so.7(LIBNFTNL_5)(64bit) for package: 1:nftables-0.8-14.el7.x86_64 
--> Processing Dependency: libnftnl.so.7()(64bit) for package: 1:nftables-0.8-14.el7.x86_64 
---> Package podman-plugins.x86_64 0:3.0.1-2.el7.3.1 will be installed
--> Processing Dependency: dnsmasq for package: podman-plugins-3.0.1-2.el7.3.1.x86_64 
---> Package runc.x86_64 2:1.0.1-0.el7.1.2 will be installed 
--> Processing Dependency: criu for package: 2:runc-1.0.1-0.el7.1.2.x86_64 
---> Package slirp4netns.x86_64 0:1.1.8-4.el7.7.1 will be installed 
--> Processing Dependency: libslirp.so.0(SLIRP_4.1)(64bit) for package: slirp4netns-1.1.8-4.el7.7.1.x86_64 
--> Processing Dependency: libslirp.so.0(SLIRP_4.0)(64bit) for package: slirp4netns-1.1.8-4.el7.7.1.x86_64 
--> Processing Dependency: libslirp.so.0()(64bit) for package: slirp4netns-1.1.8-4.el7.7.1.x86_64 
--> Running transaction check 
---> Package criu.x86_64 0:3.12-2.el7 will be installed 
--> Processing Dependency: libprotobuf-c.so.1(LIBPROTOBUF_C_1.0.0)(64bit) for package: criu-3.12-2.el7.x86_64 
--> Processing Dependency: libprotobuf-c.so.1()(64bit) for package: criu-3.12-2.el7.x86_64 
--> Processing Dependency: libnet.so.1()(64bit) for package: criu-3.12-2.el7.x86_64 
---> Package dnsmasq.x86_64 0:2.76-17.el7_9.3 will be installed 
--> Processing Dependency: libnettle.so.4()(64bit) for package: dnsmasq-2.76-17.el7_9.3.x86_64 
---> Package fuse-overlayfs.x86_64 0:1.5.0-1.el7.1.1 will be installed 
--> Processing Dependency: libfuse3.so.3(FUSE_3.2)(64bit) for package: fuse-overlayfs-1.5.0-1.el7.1.1.x86_64 
--> Processing Dependency: libfuse3.so.3(FUSE_3.0)(64bit) for package: fuse-overlayfs-1.5.0-1.el7.1.1.x86_64 
--> Processing Dependency: fuse3 for package: fuse-overlayfs-1.5.0-1.el7.1.1.x86_64 
--> Processing Dependency: libfuse3.so.3()(64bit) for package: fuse-overlayfs-1.5.0-1.el7.1.1.x86_64 
---> Package libnftnl.x86_64 0:1.0.8-3.el7 will be installed 
---> Package libslirp.x86_64 0:4.3.1-4.el7 will be installed 
---> Package policycoreutils-python.x86_64 0:2.5-34.el7 will be installed 
--> Processing Dependency: setools-libs >= 3.3.8-4 for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libsemanage-python >= 2.5-14 for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: audit-libs-python >= 2.1.3-4 for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: python-IPy for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libqpol.so.1(VERS_1.4)(64bit) for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libqpol.so.1(VERS_1.2)(64bit) for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libcgroup for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libapol.so.4(VERS_4.0)(64bit) for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: checkpolicy for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libqpol.so.1()(64bit) for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Processing Dependency: libapol.so.4()(64bit) for package: policycoreutils-python-2.5-34.el7.x86_64 
--> Running transaction check 
---> Package audit-libs-python.x86_64 0:2.8.5-4.el7 will be installed 
---> Package checkpolicy.x86_64 0:2.5-8.el7 will be installed 
---> Package fuse3.x86_64 0:3.6.1-4.el7 will be installed 
--> Processing Dependency: /etc/fuse.conf for package: fuse3-3.6.1-4.el7.x86_64 
---> Package fuse3-libs.x86_64 0:3.6.1-4.el7 will be installed 
---> Package libcgroup.x86_64 0:0.41-21.el7 will be installed 
---> Package libnet.x86_64 0:1.1.6-7.el7 will be installed 
---> Package libsemanage-python.x86_64 0:2.5-14.el7 will be installed 
---> Package nettle.x86_64 0:2.7.1-9.el7_9 will be installed 
---> Package protobuf-c.x86_64 0:1.0.2-3.el7 will be installed 
---> Package python-IPy.noarch 0:0.75-6.el7 will be installed 
---> Package setools-libs.x86_64 0:3.3.8-4.el7 will be installed 
--> Running transaction check 
---> Package fuse.x86_64 0:2.9.2-11.el7 will be installed 
--> Finished Dependency Resolution 

Dependencies Resolved

====================================================================================== 

Package                       Arch     Version                       Repository
                                                                                 Size 
====================================================================================== 
Installing:
 podman                        x86_64   3.0.1-2.el7.3.1               kubic      21 M 
Installing for dependencies: 
 audit-libs-python             x86_64   2.8.5-4.el7                   base       76 k 
 catatonit                     x86_64   0.1.5-6.el7.3.1               kubic     326 k 
 checkpolicy                   x86_64   2.5-8.el7                     base      295 k 
 conmon                        x86_64   2:2.0.29-1.el7.3.2            kubic      45 k 
 container-selinux             noarch   2:2.119.2-1.911c772.el7_8     extras     40 k 
 containernetworking-plugins   x86_64   1.0.0-0.2.rc1.el7.6.2         kubic      39 M 
 containers-common             noarch   4:1-18.el7.20.1               kubic      57 k 
 criu                          x86_64   3.12-2.el7                    base      453 k 
 dnsmasq                       x86_64   2.76-17.el7_9.3               updates   281 k 
 fuse                          x86_64   2.9.2-11.el7                  base       86 k 
 fuse-overlayfs                x86_64   1.5.0-1.el7.1.1               kubic      67 k 
 fuse3                         x86_64   3.6.1-4.el7                   extras     47 k 
 fuse3-libs                    x86_64   3.6.1-4.el7                   extras     82 k 
 libcgroup                     x86_64   0.41-21.el7                   base       66 k 
 libnet                        x86_64   1.1.6-7.el7                   base       59 k 
 libnftnl                      x86_64   1.0.8-3.el7                   base       78 k 
 libsemanage-python            x86_64   2.5-14.el7                    base      113 k 
 libslirp                      x86_64   4.3.1-4.el7                   kubic      60 k 
 nettle                        x86_64   2.7.1-9.el7_9                 updates   328 k 
 nftables                      x86_64   1:0.8-14.el7                  base      186 k 
 podman-plugins                x86_64   3.0.1-2.el7.3.1               kubic     2.5 M 
 policycoreutils-python        x86_64   2.5-34.el7                    base      457 k 
 protobuf-c                    x86_64   1.0.2-3.el7                   base       28 k 
 python-IPy                    noarch   0.75-6.el7                    base       32 k 
 runc                          x86_64   2:1.0.1-0.el7.1.2             kubic     6.0 M 
 setools-libs                  x86_64   3.3.8-4.el7                   base      620 k 
 slirp4netns                   x86_64   1.1.8-4.el7.7.1               kubic      49 k 

Transaction Summary
====================================================================================== 
Install  1 Package (+27 Dependent packages)

Total download size: 72 M 
Installed size: 180 M 
Background downloading packages, then exiting: 
(1/28): container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm   |  40 kB  00:00:00 
(2/28): audit-libs-python-2.8.5-4.el7.x86_64.rpm               |  76 kB  00:00:00 
(3/28): checkpolicy-2.5-8.el7.x86_64.rpm                       | 295 kB  00:00:00 
warning: /root/packages/conmon-2.0.29-1.el7.3.2.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 75060aa4: NOKEY 
Public key for conmon-2.0.29-1.el7.3.2.x86_64.rpm is not installed 
(4/28): conmon-2.0.29-1.el7.3.2.x86_64.rpm                     |  45 kB  00:00:01 
(5/28): catatonit-0.1.5-6.el7.3.1.x86_64.rpm                   | 326 kB  00:00:01 
(6/28): fuse-2.9.2-11.el7.x86_64.rpm                           |  86 kB  00:00:00 
(7/28): containers-common-1-18.el7.20.1.noarch.rpm             |  57 kB  00:00:00 
(8/28): dnsmasq-2.76-17.el7_9.3.x86_64.rpm                     | 281 kB  00:00:00 
(9/28): fuse3-3.6.1-4.el7.x86_64.rpm                           |  47 kB  00:00:00 
(10/28): fuse-overlayfs-1.5.0-1.el7.1.1.x86_64.rpm             |  67 kB  00:00:00 
(11/28): libcgroup-0.41-21.el7.x86_64.rpm                      |  66 kB  00:00:00 
(12/28): fuse3-libs-3.6.1-4.el7.x86_64.rpm                     |  82 kB  00:00:00 
(13/28): libnet-1.1.6-7.el7.x86_64.rpm                         |  59 kB  00:00:00 
(14/28): libnftnl-1.0.8-3.el7.x86_64.rpm                       |  78 kB  00:00:00 
(15/28): libsemanage-python-2.5-14.el7.x86_64.rpm              | 113 kB  00:00:00 
(16/28): libslirp-4.3.1-4.el7.x86_64.rpm                       |  60 kB  00:00:00 
(17/28): nettle-2.7.1-9.el7_9.x86_64.rpm                       | 328 kB  00:00:00 
(18/28): nftables-0.8-14.el7.x86_64.rpm                        | 186 kB  00:00:00 
(19/28): criu-3.12-2.el7.x86_64.rpm                            | 453 kB  00:00:02 
(20/28): podman-3.0.1-2.el7.3.1.x86_64.rpm                     |  21 MB  00:00:07 
(21/28): protobuf-c-1.0.2-3.el7.x86_64.rpm                     |  28 kB  00:00:00 
(22/28): policycoreutils-python-2.5-34.el7.x86_64.rpm          | 457 kB  00:00:00 
(23/28): python-IPy-0.75-6.el7.noarch.rpm                      |  32 kB  00:00:00 
(24/28): podman-plugins-3.0.1-2.el7.3.1.x86_64.rpm             | 2.5 MB  00:00:02 
(25/28): setools-libs-3.3.8-4.el7.x86_64.rpm                   | 620 kB  00:00:00 
(26/28): runc-1.0.1-0.el7.1.2.x86_64.rpm                       | 6.0 MB  00:00:03 
(27/28): slirp4netns-1.1.8-4.el7.7.1.x86_64.rpm                |  49 kB  00:00:00 
(28/28): containernetworking-plugins-1.0.0-0.2.rc1.el7.6.2.x86 |  39 MB  00:00:17 
-------------------------------------------------------------------------------------- 
Total                                                    3.8 MB/s |  72 MB  00:18 
exiting because "Download Only" specified

Info

Note

Downloaded packages are not enough to install SCS Server due to their 3rd parties external packages. Suggest query on each downloaded RPM packages to get the new list for additional download.

For the test lab, we used Ansible Playbook to get the RPMs list from the extracted SCS Server directory. Query each RPM’s dependencies and download them to the package/directory. Query dependencies of the downloaded RPMs from the package/ directory, then download new RPM to package/directory. Run the Ansible Playbook several times to get all dependencies packages. Each run may take several hours.

Below link is the test repo.tar and up to date (~1.1GB):
https://msuen.cloud.datacore.com/public/repo.tar?domain=msuen.cloud.datacore.com 

Pause Container available (~700KB):

https://msuen.cloud.datacore.com/public/k8s.gcr.io_pause_3.2.tar?domain=msuen.cloud.datacore.com 

...

Podman.

There are two ways to set up repositories:

  • Follow the instructions to manually create a local repo then use it to install SCS offline.

  • Download the repo.tar and use it to install SCS offline.

Info

Contact DataCore Support team to download repo.tar for installing SCS offline.

Tip

Next, Manually Create a Local Repo.