Tuesday, 28 May 2013

Create a local yum repository using ISO

This tutorial is going to show you how to create a local Yum Repository on your CentOS/ Red hat/ Fedora machine using their respective ISO DVDs...

There are a few things to note in this tutorial however:

This tutorial
will help you set up a local Repo successfully, however the availability of
RPMs strictly depends on the version of the DVD release you are using. Since
this Repo is created using the DVD as a RPM source, you wont get all the RPMs
the you may want.. but definitely, the necessary ones are always covered in the
DVD.

This tutorial
can be followed to create a local Repo where there is no internet connectivity
present (Hence, I call it as an Offline Repo !!)

There are other
ways of setting this up as well, but I have documented it using standard steps
that are generally very easy to manipulate on any CentOS machine irrespective
of version.

NOTE: The following tutorial uses RHEL 6.2 64 Bit ISO DVD. You can however use the same steps for either the latest release of CentOS or Fedora as well.

Make sure you have enough of disk space available for the following tutorial. We will need approx 5 GB of it.

There are two ways to go about creating an offline/ local repo on your system:

Using createrepo command

Using localmedia.repo file

Using createrepo command:

Mount the ISO file (DVD) on your machine. To check
whether it has been successfully mounted, run the mount command as shown. You
should see the output as shown below:

# mount

Once mounted, we now need to create a new directory in
/var/www/html folder. You can name this directory in accordance with the flavor of ISO you are using. In my case, I am using a RHEL 6.2 ISO.

# mkdir -p /var/www/html/rhel62

Next, we now need to copy all the RPMs from the mounted
ISO File (DVD) to this new folder (rhel62). The RPMs in the ISO will generally reside in a folder typically named "Packages".

# cp -R /media/RHEL_6.2/Packages* /var/www/html/rhel62/

Once the copying is done, if you do a word count (wc -l)
in the rhel62 folder, you should see a large number of RPMs listed here.

Now once all the RPMs have been successfully copied, we
need to install few necessary packages in order to set up our local repo using "createrepo".

createrepo is a program that creates a repomd (xml-based
rpm metadata) repository from a set of RPMs. To know more about createrepo,
click HERE.

First, we need to install a couple of dependent packages for our createrepo command. Install the following two RPMs:

deltarpm

python-deltarpm

NOTE: These two RPMs will be present within the ISO itself.

Once these dependencies are done, we can now install the createrepo RPM as shown.

With the RPM now installed, in your rhel62 folder, run the following command to create your local repo.

# createrepo .

You can run this command from withing that directory or
even one level up as createrepo will descend down to all LOWER directories too. We ran this
command at /var/www/html/rhel62

directory level. When you run createrepo, it will generate a directory
called repodata in the directory where it is run.

NOTE: This step also takes little time (approx 3-4 mins)
depending on the number of RPMs present.

With this step, our Repo is almost complete. We will now
setup apache server (provided with the ISO installation)

# vi /etc/httpd/conf/httpd.conf

In this file, you only have to make changes in two places.

ServerAdmin root@<YOUR MACHINE'S IP ADDRESS>

SERVERNAME <YOUR MACHINE'S IP ADDRESS>:80

Once the changes are done, save and close the file.

Next, enable the httpd service to be switched on even
after boot using chkconfig command

Start the httpd service if its stopped.

# service httpd status

# service httpd start

# chkconfig httpd on

NOTE: If there is some error message while starting the
httpd service, suggest you check out the httpd.conf file that we earlier edited
for any errors.

Next, we now need to create our own repo file. For that,
go to /etc/yum.repo.d folder and rename all the existing repo files (*.repo) to
.repo.old (OR) you can just create a new folder there and move all these repo
files in it (as down below)

# cd /etc/yum.repo.d

# mkdir old

# mv *.repo old/

With this done,
create a new .repo file as shown below:

# vi localrepo.repo

In this new file, type in the following info:

[YOUR REPO FOLDER NAME]

name=<YOUR REPO FOLDER NAME>

baseurl=http://<YOUR MACHINE'S IPADDRESS>/<YOUR REPOFOLDER NAME>/

Once entered, save and close the file.

Clean the Repository

# yum clean all

List the Repository

# yum repolist

If you get an output similar to the one below, then you
have successfully configured a local RHEL yum repository on this machine :-)

Using localmedia.repo File

This is a much easier and simpler way to set up a local repo. All you need to do is mount the ISO file as done in our previous steps

Create a new repo file at /etc/yum.repo.d location with the following information:

[NEWREPONAME]

name=<YOURREPONAME>

baseurl=file:///<LOCATION TO YOUR MOUNTED ISO>/

enabled=1

gpgcheck=0

Once entered, save and close the file.

Run the clean up and repolist commands for the newly created repo

# yum clean all# yum repolist

You should see the newly added Repo as shown below

So what's the difference between using the createrepo command and simply using the file:/// path?

Its simple. If you add or remove more RPMs to your repo, you will need to run the createrepo command to build the repodata.xml file. This you cant do when using the localmedia.repo file. In short, if you plan to add external RPMs to your repository, then better to work with the createrepo way. Else, the easier localmedia file way.