Set up and Use Local Yum Repository

Just like the blogs I wrote before: Offline Package Installation I and Solve Conflicts in RPM installation, Use rpm or bare yum command to install downloaded rpm file works but I find somehow this will cause some maintenance problems, for example

1
2
3
4
5
6
Warning: RPMDB altered outside of yum.
** Found 51 pre-existing rpmdb problem(s), 'yum check' output follows:
bash-4.2.46-31.el7.x86_64 is a duplicate with bash-4.2.46-30.el7.x86_64
binutils-2.27-34.base.el7.x86_64 is a duplicate with binutils-2.27-28.base.el7_5.1.x86_64
coreutils-8.22-23.el7.x86_64 is a duplicate with coreutils-8.22-21.el7.x86_64
cryptsetup-libs-2.0.3-3.el7.x86_64 is a duplicate with cryptsetup-libs-1.7.4-4.el7.x86_64

I need to find a way that can automatically figure out the dependency chain, install the rpm required from download pool.

Create a yum repository

Install createrepo package:

1
yum install -y createrepo

Next, creates the necessary metadata for your Yum repository, as well as the sqlite database for speeding up yum operations. For example, /root/docker directory contains all rpms that install docker needs:

1
createrepo --database /root/docker

you will find it generates a folder called repodata that contains:

1
2
3
4
5
6
7
304457af78cd250275222993fa0da09256f64cc627c1e31fb3ec0848b28b28d8-primary.xml.gz
3d5ab2f5b706e5750e0ebe5802a278525da9cac4b9700634c51c2bfdf04a0d0e-primary.sqlite.bz2
421810a6b2d93e49bfe417404f937e17929f0d8c55953dbe8e96cbb19f40708d-filelists.sqlite.bz2
62c33f23a9485d74076d3db77064a9bdf606ce68d6702cd84fc5c6f1bcb48f01-other.sqlite.bz2
649e08cdba02219eb660f579b89e7a86cf805e4f989222cb1be556a8e0b82b5c-other.xml.gz
6cd1c3a2d6f385b1cbb878a88f86b8ef7e32d6e5c2c32c41a81f51464c3785c7-filelists.xml.gz
repomd.xml

Create yum repo file

To define a new repository, you can either add a [repository] section to the /etc/yum.conf file, or to a .repo file in the /etc/yum.repos.d/ directory. All files with the .repo file extension in this directory are read by yum, and it is recommended to define your repositories here instead of in /etc/yum.conf.

For example, create a docker-local.repo file in /etc/yum.repos.d/ directory, baseurl points to the folder that holds downloaded rpms:

1
2
3
4
5
[docker-local.repo]
name=docker-local
baseurl=file:///root/docker
enabled=1
gpgcheck=0

Then if you run yum repolist all, you will see this new added yum repository:

1
2
3
4
5
6
7
yum repolist all

Loaded plugins: product-id, search-disabled-repos
repo id repo name status
...
docker-local.repo docker-local enabled: 134
...

You can also list enabled and disabled repository:

1
2
yum repolist enabled
yum repolist disabled

Install using yum

Now you can install docker by running:

1
yum install -y docker-ce

yum will check local repository and launch dependencies for you.

Sometimes it’s better to set enabled=0 in .repo file to disable it by default, so you can run:

1
yum --enablerepo=docker-local.repo install -y docker-ce
0%