HOWTO: Mirroring Yum repositories using Yum-Utils

As promised before in one of my previous post, a Howto on how to mirror and manage yum repositories using some of the utilities in yum-utils.

The first step is, well, of course, is to get yum-utils from fedora repository
yum install yum-utils

Reposync is a utility for mirroring and synchronizing local copy of a yum/rpmmetadata repository.

This utility is very useful if you wanted to make a yum repository mirror. Before this, I used "wget -R -np -N" but this method is a little bit tedious and it doesnt work with repos that didn't use directory listing. Plus, it also download together additional site stuff that I don't need/want and it doesn't verify checksum of the downloaded packages.

Mirroring a repo using this utility is easy, just execute this command
reposync -r <repoid> -a <arch> -n

and the repo will be mirrored in a folder with the same name of the repoid in the directory you executed the command. Eg: you executed the command in /mnt/storage/mirrors/ and the repo you are mirroring is extras, so, the RPMs will be downloaded at /mnt/storage/mirrors/extras/.

Available options
$ reposync --help
Reposync is used to synchronize a remote yum repository to a local
directory using yum to retrieve the packages.

/usr/bin/reposync [options]

-h, --help show this help message and exit
-c CONFIG, --config=CONFIG
config file to use (defaults to /etc/yum.conf)
-a ARCH, --arch=ARCH act as if running the specified arch (default: current
arch, note: does not override $releasever)
-r REPOID, --repoid=REPOID
specify repo ids to query, can be specified multiple
times (default is all enabled)
-t, --tempcache Use a temp dir for storing/accessing yum-cache
-p DESTDIR, --download_path=DESTDIR
Path to download packages to: defaults to current dir
-u, --urls Just list urls of what would be downloaded, don't
-n, --newest-only Download only newest packages per-repo
-q, --quiet Output as little as possible

Repomanage is a utility for repository managers to manage old and new packages in a repository. It will read the RPM packages in the directory and list out old/new packages from the directory to stdout.

Example of using repomanage for removing old packages in the current directory and its subdirectories.
repomanage --old . |xargs rm -rf

Available options
$ reposync --help
usage: repomanage [--old] [--new] path.

-h, --help show this help message and exit
-o, --old print the older packages
-n, --new print the newest packages
-s, --space space separated output, not newline
-k KEEP, --keep=KEEP newest N packages to keep - defaults to 1
-c, --nocheck do not check package paload signatures/digests

Regenerating the repo

Now thats you've done mirroring and cleaning up old packages, its time to regenerate a repository metadata for the repo and make it usable through yum. Read my post on how to create your own Yum repository here.

Enjoy your new local repos~ :)


Anonymous said…
Thank you KageSenshi. You made my day.
Right now my machine is running:

reposync -p '/home/user1/Desktop/f14reposync'

My expectation is that it's going to take a while (days) and my 300GB (free-space) home folder might get a little company. Thank you for clarifying reposync.

Popular posts from this blog

Announcing PlatoCDP, a Plone distribution for enterprises.

Adding simple popup to Plone frontpage

Consolidated community site infrastructure on Plone