Skip to main content

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~ :)
1 comment

Popular posts from this blog

Adding simple popup to Plone frontpage

Here is a little guide for those who want to add a simple popup to the Plone frontpage for some purpose (eg: announcements, advertisements, etc).

Create a basic html file containing the content you want to appear in the popup. Upload it into $PLONE_SITE/portal_skins/custom (as Page Template) and for the sake of this example, name it popup.html

Afterward, create a Javascript file with your Pop-Up loader script. For example , this script:

function popup(mylink, windowname)
if (! window.focus)return true;
var href;
if (typeof(mylink) == 'string')
href=mylink.href;, windowname, 'width=220,height=400,scrollbars=no');
return false;

popup('popup.html', 'My Popup');

Also upload this file into $PLONE_SITE/portal_skins/custom (as Page Template too). For this example, name it as popup.js

Afterward, in $PLONE_SITE/portal_javascripts , add popup.js as a new script into portal_javascripts…

Tee'ing Python subprocess.Popen output

A little hack for python coders out there who wanted to have a functionality similar to the unix's tee command for redirecting output to multiple places.

import sys
from subprocess import Popen,PIPE
p = Popen(['put','command','and','arguments','here'],stdout=PIPE)

while True:
o = p.stdout.readline()
if o == '' and p.poll() != None: break
# the 'o' variable stores a line from the command's stdout
# do anything u wish with the 'o' variable here
# this loop will break once theres a blank output
# from stdout and the subprocess have ended