Thursday, June 23, 2011

novi merge utility for creating a fully updated install (base plus updates)

Novi is a very handy repository merging utility! The purpose of novi is to remove the problem of a system install followed by an immediate update in order to get a system fully patched and ready to go into service. Maybe this quote from the website makes it more clear:
novi is a tool for finding the latest-version RPMs in a tree. You can use it to create Kickstart trees or yum repos that contain the updated RPMS. In the case of Kickstart, this means machines come to life with the updates already applied. Using novi for yum repos trims the size of the repodata files, which reduces client download and processing time.
In reality, novi saves time and resources. This is especially true when dealing with the Fedora distribution.

For example, if an install takes 15 minutes and then the update takes 30 minutes depending how you update (local mirror I hope), you end up with about 45 minutes of time. With novi, that's just 15 minutes total time to get to the same place. Plus you have a much cleaner install without all of those pesky .rpmnew and .rpmsave files cluttering up the pristine new filesystem.

Naturally, I team novi with PXE boot and Kickstart files for the ultimate in lazy installs on systems. I will only focus on the novi portion as much as possible and leave the other pieces for another time.

The most basic setup requires a machine with enough drive capacity to handle the the base install files (however you want to get them) and all of the updates that you may want. I don't want EVERY update, so I tend to limit what I get by excluding packages I will NEVER install. Really, I don't need anyone install AlienArena on any system under my control, for example ;) Luckily, novi can hard link the merged repository and not just add to any space issue. You will also need that server to provide ftp or http services for the merged repository in order to install a client. Ethan McCallum was nice enough to VERY WELL explain most all of the entire concept, already.

My current multi-repository mirror is a CentOS 5.x server. This example is *very simple* Fedora 13 via ftp install. This could also be a http accessible area. As stated above, I do have a fair number of items to exclude via rsync. I took the extra step of rpmbuild'ing the latest CentOS 5 capable version, 1.1.9 from src.rpm. Sadly, most every repository I found only had the 1.1.5 version. CentOS 6 will be able to use the newer 2.1.11 version (when released).

#!/bin/bash BASE_DIR="/var/ftp/pub/yum/Fedora/linux/releases/13" EXCLUDES="$BASE_DIR/13.excludes" INCLUDES="--include-from=$BASE_DIR/13.includes" LOCAL_DIR="$BASE_DIR/updates/" MERGED="$BASE_DIR/merged/i386" ADMINEMAIL=admin@yoursite.com MIRROR_SITE="rsync://mirrors3.kernel.org/fedora/updates/13/i386" LOGFILE="/tmp/`basename $0`.out" cd $MERGED for DIR in $LOCAL_DIR $MERGED_DIR do if [ ! -d "$DIR" ] then mkdir -p "$DIR" fi done rsync -PvaH --bwlimit=300 --timeout=600 $INCLUDES --exclude-from=$EXCLUDES --numeric-ids --delete --delete-after --delay-updates --delete-excluded $MIRROR_SITE $LOCAL_DIR >& $LOGFILE EXIT="$?" if [ "$EXIT" -eq "0" ] then rm -f Packages/*.rpm novi -a hardlink -t $MERGED/Packages $BASE_DIR/os/i386/Packages $LOCAL_DIR/i386 createrepo -g repodata/fce31f091be8211a394d8942fcf4f6cbeffa3d40d87b61af55a97b1a88b46987-Fedora-13-comps.xml $PWD else cat $LOGFILE | "ERROR in $0 on `hostname -s` exit status of $EXIT" $ADMINEMAIL fi

As usual, comments are welcome and appreciated! Again, this is a basic chunk of code that should be better fleshed out by you. It also only includes the i386 branch and is easily extended.

(Note: I know F13 is EOL, but we have been utilizing novi for a long time)

No comments:

Post a Comment