yum local { partial } mirror

David Timms dtimms at iinet.net.au
Sat Jul 21 02:45:06 UTC 2007


Timothy Murphy wrote:
> Kam Leo wrote:
> 
>>> I asked a while ago if there was any way
>>> of only downloading a package once
>>> and then installing it on several machine,
>>> and I was advised that the yum-downloadonly plugin
>>> would serve this purpose.
> 
>> You do not need the yum-downloadonly plugin. Edit /etc/yum.conf and
>> change "keepcache=0" to "keepcache=1". All the rpms that yum downloads
>> will remain in the /var/cache/yum directories (separate directory for
>> each repo) until you dispose of them (yum clean packages, rm xxx, mv
>> yyy, etc.).
>>
>> If you want other machines on your network to be able to use those
>> downloaded rpm files copy or move them to another directory, e.g. your
>> localrepo directory.
> 
> Thanks very much to you and the other responders.
> Having read all the suggestions, what I'm proposing is:
> 
> 0. Set keepcache=1 in /etc/yum.conf on each machine .
> 
> 1. Soft-link /var/cache/yum on each machine to /common/yum ,
> where /common is NFS-shared by all my computers.
You might find locking issue if multiple machines try to access the 
central cached repodata at the same time, since each machine stores its 
yum lock file on it's local disk, ie a different location. This is 
likely to lead to corruption of the downloaded metadata IMHO.

> 2. Now on each machine run - perhaps daily -
>         yum localupdate /common/yum/*.rpm
You don't need the localupdate {unless you want to vet updated packages 
before releasing them to other machines}. You want machines with 
differing installed packages to be able to get packages from your 
nearest mirror.
A normal yum update will use already downloaded packages in the 
/var/cache/yum/fedora/packages dir {as long as the package has the 
correct checksum according to the repodata}. This saves yum needing to 
download the header as well {AFAICT}.

> 3. Every week run "yum clean cache" on the machine carrying /common .
clean cache used to be a yum option but isn't any longer. It is split 
into dbcache {sqlite} and metadata. Yum uses the conf setting:
metadata_expire=1800  # this is seconds=> 30 mins, this might be 15 mins 
by default. If the repodata hasn't been retrieved in longer than this 
time, then the repodata is refetched. You could avoid this for the extra 
machines by setting the expire time to 24 hours or so. Might help with 
{1} as well.

> I'd be interested to know what the experts think of this proposal.
No expert, but:

Might just work ?
===
My version:
main machine:
- /etc/yum.conf:
   - keepcache=1
   - failovermethod=priority {go through baseurls/mirrorlist in order, 
not random}
- /etc/yum.repos.d/*.repo
   - add baseurls for my nearest mirrors {my own isp first = free 
downloads}.
- install every package that is installed on any other machine.
- to not install every update automatically on the main machine:
   - yum install yum-downloadonly, and add --downloadonly to yum update 
line below.
- yum -y update every day in cron job. {I align the time to within an 
hour of when my nearest mirror gets synced}.
- {6} copy the repodata from each active repo yum cache to a folder so 
that it matches the original relative paths compared to /packages folder.
- vsftp server anon_root the files.

other machines:
- /etc/yum.conf:
   - failovermethod=priority {go through baseurls/mirrorlist in order, 
not random}
- /etc/yum.repos.d/*.repo s
   - put the main machine as the first mirror baseurl.
- cron schedule yum -y update to be soon after main machine is usually 
complete.

Your method {shared cache folder} makes part {6} not required, so let us 
know if it works OK, and how many client machines are checking.

DaveT.




More information about the fedora-list mailing list