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.
Pause Container - The
k8s.gcr.io_pause:3.2
is a container to hold the network namespace for the pod.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.
Install a VM with CentOS 7.9 (or previous version) and the “Minimal Server” profile.
Run
yum
to resolve dependencies for a package.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.
Install the yum-downloadonly plugin
yum -y install yum-plugin-downloadonly
By default, this package comes in large installations.Create a directory for download packages.
mkdir packages
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 |
Download Platform’s 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.
[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.
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.
yum repolist yum -y install --downloadonly --downloaddir=packages/ podman
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
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