RHEL7: Set up a local repository for a lab.

Share this link


Downloading packages from the Internet takes time.
To be able to quickly deploy new VMs, you need a local repository.

Configuration Procedure

Install the Apache package:

# yum group install -y "Basic Web Server"

Create the directories for the CentOS distribution and the updates:

# cd /var/www/html
# mkdir -p conf repo/CentOS/7
# cd repo/CentOS/7
# mkdir -p centosplus/x86_64 extras/x86_64 os/x86_64 updates/x86_64

In the software requirements, it was specified to download the DVD version or the Everything version of the CentOS 7 distribution. It is now time to use it.

Mount the previously downloaded iso and copy it into the right place:

# mount -o loop CentOS-7.0-1406-x86_64-DVD.iso /mnt
# cd /mnt
# tar cvf - . | (cd /var/www/html/repo/CentOS/7/os/x86_64; tar xvf -)
# cd /; umount /mnt

In order to prepare the centosplus, extras and updates repositories, install the createrepo package:

# yum install createrepo

Prepare the centosplus, extras and updates repositories:

# cd /var/www/html/repo/CentOS/7/centosplus/x86_64; createrepo .
# cd ../../extras/x86_64; createrepo .
# cd ../../updates/x86_64; createrepo .

Go into the directory where the repository configuration is:

# cd /etc/yum.repos.d

Create the local.repo file and paste the following lines:

name=master - Base

name=master - Updates

name=master - Extras

name=master - CentosPlus

Note1: A yum update command will update the system with what the local Apache server’s got.
Note2: Don’t try to display the $releasever and $basearch variables with the echo command. They aren’t shell variables but specific values provided by yum (see this thread for more details).

Copy the local.repo file into the /var/www/html/conf directory to make it available to the new VMs:

# cp local.repo /var/www/html/conf

Assign the SELinux attributes to the files:

# restorecon -R /var/www/html

Activate the Apache server at boot and start it:

# systemctl enable httpd && systemctl start httpd

Clean up the yum configuration:

# yum clean all

Check the yum configuration:

# yum repolist all
Loaded plugins: fastestmirror, langpacks
centosplus                                            | 2.9 kB     00:00
extras                                                | 2.9 kB     00:00
os                                                    | 3.6 kB     00:00
updates                                               | 2.9 kB     00:00
(1/2): os/7/x86_64/group_gz                             | 157 kB   00:00
(2/2): os/7/x86_64/primary_db                           | 4.9 MB   00:00
Loading mirror speeds from cached hostfile
repo id                        repo name                       status
centosplus/7/x86_64            master - CentosPlus             enabled:     0
extras/7/x86_64                master - Extras                 enabled:     0
os/7/x86_64                    master - Base                   enabled: 8,465
updates/7/x86_64               master - Updates                enabled:     0
repolist: 8,465

Finally, you need an extra step to regularly update your lab local repository.
Create a Bash script called /root/rsync.sh and paste the following lines (where mirror.ovh.net/ftp.centos.org/7/ is the url of a close CentOS repository):

/usr/bin/rsync -av --delete --delete-excluded --exclude "local" --exclude "isos" --exclude "*.iso" --exclude "xen4" --exclude "*.i686.*" --exclude "i386" rsync://centos.mirrors.ovh.net/ftp.centos.org/7/ /var/www/html/repo/CentOS/7

Give the execution permissions:

# chmod u+x /root/rsync.sh

Put this script into the root crontab (# crontab -e):

00 02 * * * /root/rsync.sh

Note: The first synchronization will last a while but, after, it will be quick.

After synchronization, you will get this kind of result:

# yum repolist all
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                          repo name                        status
centosplus/7/x86_64              master - CentosPlus              enabled:    70
extras/7/x86_64                  master - Extras                  enabled:    44
os/7/x86_64                      master - Base                    enabled: 8,465
updates/7/x86_64                 master - Updates                 enabled:   866
repolist: 9,445

Add a rule to the firewall (except if the local repository is the KVM host itself):

# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 4.00 out of 5)
26 comments on “RHEL7: Set up a local repository for a lab.
  1. travisby says:

    Depending on the disc you used to install CentOS 7, you may need to remove the currently existing repos to achieve the same output — and avoid a warning about each repo “being defined twice.”

    Just do an rm /etc/yum.repos.d/* before you create your local.repo, and you should be set!

  2. anisK says:

    thanks for making such a great site! I have purchased the new RHEL 7 book by Michael Jang which you recomended which is being released today (8 April) – I can’t wait to receive it shortly.

    I have been following your lab tutorial and I have a problem with the rsync.sh command… when I type this into my terminal it gives me an error is this normal?

    [root@master yum.repos.d]# /usr/bin/rsync -av –delete –delete-excluded –exclude “local” –exclude “isos” –exclude “*.iso” –exclude “xen4” –exclude “*.i686.*” –exclude “i386” rsync://mirror.ovh.net/ftp.centos.org/7/ /var/www/html/repo/CentOS/7

    @ERROR: Unknown module ‘ftp.centos.org’
    rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.9]

    I haven’t let rsync.sh run on it’s own yet, but I just wanted to test it’s functionally and test my closest mirror format.

    My closest mirror is: http://mirror.its.sfu.ca/mirror/CentOS/7/

    Anyways thanks for reading my comment and I would appretiate any feedback given on my error.

    Yours Sincerely

    • CertDepot says:

      My example doesn’t work anymore because the url has changed.
      I updated the tutorial because the line should now be:
      # /usr/bin/rsync -av –delete –delete-excluded –exclude “local” –exclude “isos” –exclude “*.iso” –exclude “xen4” –exclude “*.i686.*” –exclude “i386” rsync://centos.mirrors.ovh.net/ftp.centos.org/7/ /var/www/html/repo/CentOS/7

      • anisK says:

        ah sorry when I said it doesn’t give any error now that was because I forgot to remove the #…it stills give me an error

        [root@master yum.repos.d]# /usr/bin/rsync -av –delete –delete-excluded –exclude “local” –exclude “isos” –exclude “*.iso” –exclude “xen4” –exclude “*.i686.*” –exclude “i386” rsync://centos.mirrors.ovh.net/ftp.centos.org/7/ /var/www/html/repo/CentOS/7
        Unexpected remote arg: rsync://centos.mirrors.ovh.net/ftp.centos.org/7/
        rsync error: syntax or usage error (code 1) at main.c(1214) [sender=3.0.9]

  3. Cory Brown says:

    Should also be included in “Prepare the centosplus, extras and updates repositories:” step?

  4. thetron says:

    Hi I followed the guide

    However I found the 7.3 has the firewall enabled. So you should add the following

    firewall-cmd –add-port=80/tcp –permanent
    firewall-cmd –add-port=443/tcp –permanent
    firewall-cmd –reload

  5. number 6 says:

    Hello again CertDepot, I’d like to ask if the repository is at an ip that’s in a different network, let’s say (we don’t know the subnet mask, nor its gateway or dns) and the system eth0 is but we can’t ping anything from the 10.* network, how can we make it ping/connect to that repository?
    Would it need an eth-route config and sysctl parameters like ip forwarding and source routing?

  6. Mike_ says:

    I was wondering if for RHCE purposes we aren’t better off not updating our repos. From my understanding, the tests are based on RHEL 7.0. If so, upgrading versions could lead to some ambiguities with versions of files when using iSCSi and other applications. Any thoughts?

    If your objective is to know as much as possible, then updating is good. However, if your objective is passing the exam, can updating cause confusion?



    • CertDepot says:

      This is a tricky question: if you don’t update your repos, you could have bugs not fixed; if you update your repos, you could change the standard behaviour. Personally, I won’t update the repos to keep the standard behaviour.

    • Lisenet says:

      What you can do is to download all RHEL 7.x DVDs from Red Hat website, and create repos for each DVD. Disable them all but the 7.0. Do as much testing as you can on RHEL 7.0, and then move to RHEL 7.1 (enable 7.1 repo and update your system). Repeat the process, do as much testing as you can on RHEL 7.1, and then move to RHEL 7.2.

      Simply create a snapshot of the system at the start of the process, so that you can always roll back to.

Leave a Reply

Upcoming Events (Local Time)

There are no events.

RHCSA7: Task of the day

Allowed time: 10 minutes.
Set up a default configuration HTTP server with SELinux in Enforcing mode and active firewalld configuration.

RHCE7: Task of the day

Allowed time: 10 minutes.
Set up a NFS server that exports the /opt directory in read-only mode.

Follow me on Twitter

Poll for favorite RHEL 7 book

What is your favorite RHEL 7 book to prepare RHCSA & RHCE exams?

View Results

Loading ... Loading ...

Poll for most difficult RHCSA 7 topic

What do you think is the most difficult RHCSA 7 topic?

View Results

Loading ... Loading ...

Poll for most difficult RHCE 7 topic

What do you think is the most difficult RHCE 7 topic?

View Results

Loading ... Loading ...