How To Create Local YUM repository on CentOS 7 / RHEL 7 using DVD

THIS DOCUMENT IS ALSO AVAILABLE FOR

YUM is the package management tool that helps you to install or update the package through the network or local and at the same time, it provides an easy method to install a package with its dependent packages.

READ: Linux Basics: 30 YUM Command Examples for Linux Package Management

Repository sources can be created either using the createrepo package or mounting the DVD on the directory. Mounting the DVD/CD ROM will lead to saving the space on HDD used by being copied to HDD.

Create Local YUM Repository with DVD

Create Source

Mount the CD/DVD ROM on any directory of your wish. For testing, mount it on /cdrom.

mkdir /cdrom

mount /dev/cdrom /cdrom

Create Repo file

Before creating a repo file, move your existing repo files present in /etc/yum.repos.d directory, if not required.

mv /etc/yum.repos.d/*.repo /tmp/

Create the new repo file called cdrom.repo under /etc/repos.d directory.

vi /etc/yum.repos.d/local.repo

Add the following details.

[LocalRepo]
name=LocalRepository
baseurl=file:///cdrom
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Where,

[LocalRepo] = Repository Name which will be displayed during package installation
name = Name of the repository
baseurl = Location of the package
Enabled = Enable repository
gpgcheck = Enable secure installation
gpgkey = Location of the key
gpgcheck is optional (If you set gpgcheck=0, there is no need to mention gpgkey)

Install Package from Local DVD YUM repository

Clear the repository cache by issuing the following command.
yum clean all

Let’s install the vsftpd package from the local repository.

yum install vsftpd

The output will be like below; it will try to cache the package information. When you give yes to download the package, it will prompt you to accept gpg signing key.

Loaded plugins: fastestmirror
LocalRepo                                                | 3.6 kB     00:00
(1/2): LocalRepo/group_gz                                  | 157 kB   00:00
(2/2): LocalRepo/primary_db                                | 2.7 MB   00:00
Determining fastest mirrors
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-9.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package         Arch            Version               Repository          Size
================================================================================
Installing:
vsftpd          x86_64          3.0.2-9.el7           LocalRepo          165 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 165 k
Installed size: 343 k
Is this ok [y/d/N]: y
Downloading packages:
warning: /cdrom/Packages/vsftpd-3.0.2-9.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for vsftpd-3.0.2-9.el7.x86_64.rpm is not installed
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package    : centos-release-7-0.1406.el7.centos.2.3.x86_64 (@anaconda)
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : vsftpd-3.0.2-9.el7.x86_64                                    1/1
Verifying  : vsftpd-3.0.2-9.el7.x86_64                                    1/1

Installed:
vsftpd.x86_64 0:3.0.2-9.el7

Complete!</security@centos.org>

You have successfully configured the local repository on the machine, but it is limited to a single machine where the CD or DVD is mounted.

Create Local YUM Repository with FTP or HTTP

If you have quite number machines and all of them connected over the intranet, then this is the best option for you.

Host RPM Packages

Normally YUM server uses FTP or Apache as the medium to transfer packages. So, install either FTP or Apache on your yum server.

You can use either FTP or Apache, not both.

Mount the DVD on /cdrom.

mkdir /cdrom;mount /dev/cdrom /cdrom

Copy packages from DVDROM to /var/ftp or /var/www/html receptively for FTP and Apache.

FTP

Copy the packages from the DVD-ROM to the FTP folder.

cp -a /cdrom/Packages/* /var/ftp

Apache

Copy packages from the DVD-ROM to the Apache home directory.

cp -a /cdrom/Packages/* /var/www/html/

Edit Apache configuration file and enable the indexes.

vi /etc/httpd/conf/httpd.conf

From

Options Indexes FollowSymLinks

To

Options All Indexes FollowSymLinks

Remove the welcome page.

rm -rf /etc/httpd/conf.d/welcome.conf

Restart Services

### FTP ###

systemctl restart vsftpd

### Apache ###

systemctl restart httpd

Firewall

You need to allow FTP and HTTP port on the firewall so that client machines can able to get packages from YUM server.

### For HTTP ###

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

### For FTP ###

firewall-cmd  --permanent --add-port=21/tcp 
firewall-cmd --reload

SELinux

Consider disabling SELinux on CentOS / RHEL.

Verify Services

Verify the accessibility using the web browser by visiting respective service.

FTP:

ftp://ip-address

Apache:

http://ip-address

Create Repository

After hosting the packages, we need to create the repository of packages that we have copied from the disc. createrepo is the tool that helps you to create the XML based rpm meta-structure repository, like an index file that points to rpm files.

cd /cdrom/Packages
rpm -ivh createrepo-*el7.noarch.rpm libxml2-python-*.x86_64.rpm deltarpm-*.el7.x86_64.rpm python-deltarpm-*el7.x86_64.rpm

FTP

createrepo /var/ftp

Apache

createrepo /var/www/html

Create Repo File

Once created the repository, just go on to the client machine and add the repository file under the /etc/yum.repos.d directory.

Before creating a repo file, move the existing repo files present in /etc/yum.repos.d directory, if not required.

mv /etc/yum.repos.d/*.repo /tmp/

Create remote.repo file.

vi /etc/yum.repos.d/remote.repo

Create a repo entry like below, depends on the protocol you are using. Change IP address to your server ip address.

FTP

[remote]
name=RHEL FTP
baseurl=ftp://192.168.1.10
enabled=1
gpgcheck=0

Apache

[remote]
name=RHEL Apache
baseurl=http://192.168.1.10
enabled=1
gpgcheck=0

Install Packages from Local YUM repository

Now you can install packages using the yum command.
yum -y install mariadb-server mariadb

Conclusion

That’s All. Please share your feedback in the comments section.

centos 7repositoryrhel 7yum
Comments (9)
Add Comment
  • djinn

    The local repository local.repo should be in the directory /etc/yum.repos.d/ not /etc/repos.d/

    • Raj

      That is typo, thanks for notifying

  • Amril

    Hi,

    I have write such as your instruction.

    come to directory :

    cd /etc/yum.repos.d/

    create file :
    touch local.repo

    run the local.repo file

    vi local.repo

    after it, run ..

    I still get error such as “no more mirrors bla blabla”

    I run this CentOS 7 in virtualbox, and also have success mount of ISO to CentOS 7

    Please help me

    • Amril

      Hi,

      Solved.. I just disable all of online repository.
      anyway thank you so much.

      • Narayan

        How would you disable only online repository ??

        • Raj

          Sorry for the late reply, you can just move unwanted (online) .repo file out of /etc/yum.repos.d directory. once done, execute yum clean all

  • DV

    Following are the steps to create a local repo .

    1) Copy the *.iso image of OS on the server using winscp or ftp.

    2) Mount the Image on server to access its file

    #mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /mnt/.

    #df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg_nagiosbbops-lv_root 78G 7.3G 66G 10% /
    tmpfs 3.9G 0 3.9G 0% /dev/shm
    /dev/cciss/c0d0p1 485M 40M 420M 9% /boot
    /dev/mapper/vg_nagiosbbops-lv_home 50G 180M 47G 1% /home
    /root/CentOS-6.5-x86_64-bin-DVD1to2/CentOS-6.5-x86_64-bin-DVD1.iso 4.2G 4.2G 0 100% /mnt

    3) Copy the package file in following directory, if destination directory does not exist then creates one.

    #mkdir -p /var/www/html/yum/centos6
    #cp /mnt/Packages/* /var/www/html/yum/centos6/.
    #umount /root/CentOS-6.5-x86_64-bin-DVD1to2/CentOS-6.5-x86_64-bin-DVD1.iso

    4) If you are having another iso image, then mount next iso image and follow following steps.

    #mount -o loop CentOS-6.5-x86_64-bin-DVD2.iso /mnt/.
    #cp /mnt/Packages/* /var/www/html/yum/centos6/.
    #umount /root/CentOS-6.5-x86_64-bin-DVD1to2/CentOS-6.5-x86_64-bin-DVD2.iso

    5) Now create repo with following commands

    #cd /var/www/html/yum/centos6/.
    #rpm -ivh createrepo-0.9.9-18.el6.noarch.rpm deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm

    or

    #rpm -ivh createrepo* deltarpm* python-deltarpm* (For different OS version and packages)

    warning: createrepo-0.9.9-18.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing… ########################################### [100%]
    1:deltarpm ########################################### [ 33%]
    2:python-deltarpm ########################################### [ 67%]
    3:createrepo ########################################### [100%]

    6) #cd /var/www/html/yum/centos6/
    #createrepo .

    Spawning worker 0 with 6367 pkgs
    Workers Finished
    Gathering worker results

    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete

    7) #yum clean all

    Loaded plugins: fastestmirror, security
    Cleaning repos: base extras updates
    Cleaning up Everything

    8) Rename all file under following directory
    #cd /etc/yum.repos.d/
    #mv CentOS-Vault.repo CentOS-Vault.repo_orig
    #mv CentOS-Media.repo CentOS-Media.repo_orig
    #mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo_orig
    #mv CentOS-Base.repo CentOS-Base.repo_orig

    9) Create following file for locating yum repo
    #cd /etc/yum.repos.d/
    #vi Centos-local.repo
    [Centos-local]
    name=Centos-local repository
    baseurl=file:///var/www/html/yum/centos6/
    enabled=1
    gpgcheck=0

    10) Cross check the Repo, whether working or not

    #yum update

    Loaded plugins: fastestmirror, security
    Loading mirror speeds from cached hostfile
    Centos-local | 2.9 kB 00:00 …
    Centos-local/primary_db | 4.4 MB 00:00 …
    Setting up Update Process
    No Packages marked for Update

    #yum repolist

    Loaded plugins: fastestmirror, security
    Loading mirror speeds from cached hostfile
    repo id repo name status
    Centos-local Centos-local repository 6,367
    repolist: 6,367

    • Kapil Madaan

      Thanks.

  • pklausner

    Does YUM really need to mount the CD / ISO? The openSUSE packaging takes an ISO location as repository