I want to install a rpm package, (e.g. python 3), and all of its dependencies in a linux server that does not have internet connection.
How can I do that?
There is a way, but it is quite tricky and might mess up your servers, so be very careful.
Nomenclature:
Steps:
Compress your rpm database from the offline system and transfer it to the online system:
cd /var/lib/rpm/
tar -cvzf /tmp/rpmdb.tgz *
scp /tmp/rpmdb.tgz root@online:/tmp
on your online system; replace your rpm db with the one from the offline system:
cp -r /var/lib/rpm{,.bak} # back up your rpmdb from your online system. Make sure not to lose this!!
rm -rf /var/lib/rpm/*
cd /var/lib/rpm
tar -xvf /tmp/rpmdb.tgz # now your online system pretends to have the rpm database from the offline system. Don't start really installing / uninstalling rpms or you'll break everything
now simulate your update with download-only (I didn't run this with yum but with zypper, but it should be similar):
zypper up --download-only
Now you can fetch all the downloaded packages and they should suffice for updating your offline system
And now restore your online machine:
rm -rf /var/lib/rpm
cp -r /var/lib/rpm{.bak,}
Assuming you already downloaded the package before from another machine that has internet access and FTP the files to your server, you can use the following command to install a rpm
rpm -ivh package_name_x85_64.rpm
options:
You can also check the rpm manual for more options and details