How to Setup a Network Repository to Install or Update Packages – Part 11

Installing, updating, and removing (when needed) installed programs are key responsibilities in a system administrator’s daily life. When a machine is connected to the Internet, these tasks can be easily performed using a package management system such as aptitude (or apt-get), yum, or zypper, depending on your chosen distribution, as explained in Part 9 – Linux Package Management of the LFCE (Linux Foundation Certified Engineer) series. You can also download standalone .deb or .rpm files and install them with dpkg or rpm, respectively.

Setup Yum Local Repository in CentOS 7

Linux Foundation Certified Engineer – Part 11

Introducing The Linux Foundation Certification Program

However, when a machine does not have access to the world wide web, another methods are necessary. Why would anyone want to do that? The reasons range from saving Internet bandwidth (thus avoiding several concurrent connections to the outside) to securing packages compiled from source locally, and including the possibility of providing packages that for legal reasons (for example, software that is restricted in some countries) cannot be included in official repositories.

That is precisely where network repositories come into play, which is the central topic of this article.

Our Testing Environment
Network Repository Server:	CentOS 7 [enp0s3: 192.168.0.17] - dev1
Client Machine:			CentOS 6.6 [eth0: 192.168.0.18] - dev2

Setting Up a Network Repository Server on CentOS 7

As a first step, we will handle the installation and configuration of a CentOS 7 box as a repository server [IP address 192.168.0.17] and a CentOS 6.6 machine as client. The setup for openSUSE is almost identical.

For CentOS 7, follow the below articles that explains a step-by-step instructions of CentOS 7 installation and how to setup a static IP address.

  1. Installation of CentOS 7.0 with Screenshots
  2. How to Configure Network Static IP Address on CentOS 7

As for Ubuntu, there is a great article on this site that explains, step by step, how to set up your own, private repository.

  1. Setup Local Repositories with ‘apt-mirror’ in Ubuntu

Our first choice will be the way in which clients will access the repository server – FTP and HTTP are the most well used. We will choose the latter as the Apache installation was covered in Part 1 – Installing Apache of this LFCE series. This will also allow us to display the package listing using a web browser.

Next, we need to create directories to store the .rpm packages. We will create subdirectories within /var/www/html/repos accordingly. For our convenience, we may also want to create other subdirectories to host packages for different versions of each distribution (of course we can still add as many directories as needed later) and even different architectures.

Setting Up the Repository

An important thing to take into consideration when setting up your own repository is that you will need a considerable amount of available disk space (~20 GB). If you don’t, resize the filesystem where you’re planning on storing the repository’s contents, or even better add an extra dedicated storage device to host the repository.

That being said, we will begin by creating the directories that we will need to host the repository:

# mkdir -p /var/www/html/repos/centos/6/6

After we have created the directory structure for our repository server, we will initialize in /var/www/html/repos/centos/6/6 the database that keeps tracks of packages and their corresponding dependencies using createrepo.

Install createrepo if you haven’t already done so:

# yum update && yum install createrepo

Then initialize the database,

# createrepo /var/www/html/repos/centos/6/6
Createrepo Repository Initialization

Createrepo Repository Initialization

Updating the Repository

Assuming that the repository server has access to the Internet, we will pull an online repository to get the latest updates of packages. If that is not the case, you can still copy the entire contents of the Packages directory from a CentOS 6.6 installation DVD.

In this tutorial we will assume the first case. In order to optimize our download speed, we will choose a CentOS 6.6 mirror from a location near us. Go to CentOS download mirrorand pick the one that is closer to your location (Argentina in my case):

Select CentOS Download Mirror

Select CentOS Download Mirror

Then, navigate to the os directory inside the highlighted link and then choose the appropriate architecture. Once there, copy the link in the address bar and download the contents to the dedicated directory in the repository server:

Download CentOS Mirror

Download CentOS Mirror

# rsync -avz rsync://centos.ar.host-engine.com/6.6/os/x86_64/ /var/www/html/repos/centos/6/6/ 

In case that the chosen repository turns out to be offline for some reason, go back and choose a different one. No big deal.

Now is the time when you may want to relax and maybe watch an episode of your favourite TV show, because mirroring the online repository may take quite a while.

Once the download has completed, you can verify the usage of disk space with:

# du -sch /var/www/html/repos/centos/6/6/*
Check CentOS Mirror Size

Check CentOS Mirror Size

Finally, update the repository’s database.

# createrepo --update /var/www/html/repos/centos/6/6

You may also want to launch your web browser and navigate to the repos/centos/6/6 directory so as to verify that you can see the contents:

Verify CentOS Packages

Verify CentOS Packages

And you’re ready to go – now it’s time to configure the client.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Gabriel Cánepa

Gabriel Cánepa is a GNU/Linux sysadmin and web developer from Villa Mercedes, San Luis, Argentina. He works for a worldwide leading consumer product company and takes great pleasure in using FOSS tools to increase productivity in all areas of his daily work.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

28 Responses

  1. Ricardo says:

    Hi, I need to pass rsync through a proxy server to get to the mirror, what should i do?

    Thanks in advance

    • Ravi Saive says:

      @Ricardo,

      First you need to set proxy connection settings in your exports path as shown.

      # export HTTP_PROXY=http://user:[email protected]:8080
      

      Then you can tell that you want rsync to use below proxy settings for its traffic.

      # RSYNC_PROXY=user:[email protected]:8080
      

      You can modify the above command as per your proxy connection requirements (some do not need user/password)

      Finally you run your rsync job.

  2. Anssi Johansson says:

    Hi, I’m afraid your instructions are not correct. You must not use createrepo to create the repodata, but instead you should use the repodata you get from the mirror you sync from.

    If you create the repodata yourself, you will break the GPG signing of repomd.xml (see repomd.xml.asc). Please remove all references to “createrepo‘”.

    For those thinking of setting up a public CentOS mirror based on this blog posting, you should sync everything with one rsync command, and not by individual version or repository. In this case the -H (preserve hard links) rsync option would save you some bandwidth and hard disk space.

    Best regards, avij on behalf of the CentOS Linux Project.

  3. DINAKAR N K says:

    Dear Tecmint Team,

    Thanks for your support with reference to Hadoop and Maria DB. Good Article and very good for a beginner like me. I request to kindly help me with the article for creation Installation and usage of Active Directory Services for Centos 7 64bit Server and Centos 7 64bit Client.(i.e i should communicate with Centos 7 Server with Centos 7 Client).

    Please help
    Thanks and Regards
    Dinakar N K

  4. Md sameer says:

    How to block access of repository url in suse, Redhat over port 80 ?

  5. Bruno M. V. M. Salazar says:

    It’s important to remember that after you setup your rsync in cron, you also need to update the repo, may be include the update command after the rsync in cron.

  6. Ramprakash Surulirajan says:

    How do I add an Ubuntu repository to Red Hat satellite 5.x?

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.