Requirements
This method works best with a connected computer with same OS and Version.
This enables one to ascertain the dependent packages that need to be downloaded by the Package Manager for the disconnected (air-gapped) computer.
sudo will only be used when necessary.
Centos 7 Example
On Redhat and Centos OS, tar and libnsl may need to be installed as they are needed to unpack the installer runfile.
On the disconnected (air-gapped) computer we will firstly determine which pre-installation required packages need to be downloaded:
# Navigate to a clean directory to download packages to
mkdir -p /tmp/omk_opXyz_packages
cd /tmp/omk_opXyz_packages/
# Extract the list of dependent packages - I've used sort and formatted the results
# to make the needed comparison to those packages already installed easier:
# to see the unsorted results run command yum -q deplist tar
yum -q deplist tar|grep -e "package:" -e "provider:"|sed -r -e 's/^\s*(package|provider):\s+(.+?)$/\2/' -e 's/ /\t\t\t\t/'|sort|uniqbash.x86_64 4.2.46-34.el7
glibc.i686 2.17-307.el7.1
glibc.x86_64 2.17-307.el7.1
info.x86_64 5.1-5.el7
libacl.x86_64 2.2.51-15.el7
libselinux.x86_64 2.5-15.el7
tar.x86_64 2:1.26-35.el7
# libnsl is not needed in this example as no package is returned:
yum -q deplist libnsl# Now we check each package and package-version against the dependency lists above:
rpm -q bash.x86_64
bash-4.2.46-34.el7.x86_64rpm -q glibc.i686
# Nothing returned by above command: glibc.i686 needs to be downloaded and installedrpm -q info.x86_64
info-5.1-5.el7.x86_64rpm -q libacl.x86_64
libacl-2.2.51-15.el7.x86_64rpm -q libselinux.x86_64
libselinux-2.5-15.el7.x86_64rpm -q tar.x86_64
tar-1.26-35.el7.x86_64# From the above checks on this disconnected (air-gapped) computer, we have ascertained that the following packages are needed:
glibc.i686 2.17-307.el7.1
Using the connected computer with same OS and Version we will now fetch the pre-installation required packages:
# Download each of the dependent packages:
yumdownloader glibc.i686Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 4.4 kB 00:00:00
* base: mirror.nsw.coloau.com.au
* epel: fedora.melbourneitmirror.net
* extras: mirror.nsw.coloau.com.au
* updates: mirror.nsw.coloau.com.au
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
glibc-2.17-307.el7.1.i686.rpm# Downloaded packages will now be in the current directory and ready for transferring to the disconnected (air-gapped) computer where they will be installed:
ls -la-rw-rw-r--. 1 user user 4463036 Apr 3 21:12 glibc-2.17-307.el7.1.i686.rpm
On the disconnected (air-gapped) computer we will now install the downloaded required packages:
# Install each of the downloaded required packages:
sudo yum install glibc-2.17-307.el7.1.i686.rpm
Debian 9 Example
On Debian and Ubuntu OS, tar, which is normally installed by default, may need to be installed as it is needed to unpack the installer runfile.
On the disconnected (air-gapped) computer we will firstly determine which pre-installation required packages need to be downloaded:
# Navigate to a clean directory to download packages to
mkdir -p /tmp/omk_opXyz_packages
cd /tmp/omk_opXyz_packages/
# Extract the list of dependent packages - I've used sort and formatted the results
# to make the needed comparison to those packages already installed easier:
# to see the unsorted results run command apt-cache show tar
apt-cache show tar|grep "Pre-Depends:"|sed -e 's/Pre-Depends:\s\+//' -e 's/,\s*/\n/g'|sort|uniqlibacl1 (>= 2.2.51-8)
libc6 (>= 2.17)
libselinux1 (>= 1.32)# Now we check each package and package-version against the dependency lists above:
dpkg -s libacl1|grep -e "Status:" -e "Version:"
Status: install ok installed
Version: 2.2.52-3+b1dpkg -s libc6|grep -e "Status:" -e "Version:"Status: install ok installed
Status: install ok installed
Version: 2.24-11+deb9u4dpkg -s libselinux1|grep -e "Status:" -e "Version:"
Status: install ok installed
Version: 2.6-3+b3# From the above checks on this disconnected (air-gapped) computer, we have ascertained that no packages are needed.
Using the connected computer with same OS and Version we would now fetch the pre-installation required packages:
# Download each of the dependent packages, here using libacl1 as an example, even though it is not actually needed in this case:
apt-get download libacl1Get:1 http://ftp.us.debian.org/debian stretch/main amd64 libacl1 amd64 2.2.52-3+b1 [28.1 kB]
Fetched 28.1 kB in 1s (16.6 kB/s)# Downloaded packages will now be in the current directory and ready for transferring to the disconnected (air-gapped) computer where they will be installed:
ls -la-rw-rw-r--. 1 user user 4463036 Apr 3 21:12 libacl1_2.2.52-3+b1_amd64.deb
On the disconnected (air-gapped) computer we will now install the downloaded required packages:
# Install each of the downloaded required packages, here using libacl1 as an example, even though it is not actually needed in this case:
sudo apt-get install libacl1_2.2.52-3+b1_amd64.deb