Managing a [local] package repository....

Eric Schuele e.schuele at computer.org
Sat May 20 13:56:37 PDT 2006


Hello,

I'm wondering how others manage a local store of packages... or even if 
anyone does this sort of thing.  Let me explain...

Some short time back I decided to start stockpiling packages of all the 
ports I have installed on my machine.  I was/am doing this because I 
intend on doing a fresh install to 6.1-RELEASE when I have the time. 
But, although I do prefer to compile the ports (as opposed to 
downloading the packages) I do not wish to recompile them all *again*, 
because it is a significant amount of time.  I intend to just transfer 
them to the new installation.  So I wrote a small script (appended 
below, comments welcome) to create packages of everything on my system. 
  I did that one time, and have since done "make install package clean" 
to install new packages, and done "portupgrade -aprR" to upgrade those 
presently installed.

While this does seem to work well for me, it has left one problem I did 
not foresee.  As ports get upgraded, their new package is built and 
placed in my package dir, but the *old* port's package is not removed. 
So I now have quite a few packages in my package directory that are not 
the most recent, and hence are just taking up space.

Example (/usr/ports/packages/All):
----
ImageMagick-6.2.5.5_4.tbz
ORBit-0.5.17_3.tbz
ORBit2-2.14.0.tbz     <---
ORBit2-2.14.0_1.tbz   <---
OpenSP-1.5_7.tbz
aspell-0.60.4_3.tbz
at-spi-1.7.7.tbz    <---
at-spi-1.7.7_1.tbz  <---
aterm-1.0.0_1.tbz
atk-1.11.4.tbz      <---
atk-1.11.4_1.tbz    <---
autoconf-2.13.000227_5.tbz
autoconf-2.59_2.tbz
automake-1.4.6_2.tbz
automake-1.9.6.tbz
avahi-0.6.10.tbz      <---
avahi-0.6.10_1.tbz    <---
avahi-0.6.10_3.tbz    <---
avahi-0.6.9_5.tbz     <---
-----

So my question is:
Is there a way to automatically remove the old packages as existing 
packages get upgraded?  Or is there some more appropriate means for 
generating packages (and keeping them up to date) that I could transfer 
to a fresh install (or even another machine for that matter)?

My mk_pkgs.sh.  Comments are appreciated.
=================
#!/bin/sh

# This will create a binary package for all ports installed on a machine.
# It will place the packages in /usr/ports/packages/All

db_pkg_dir=/var/db/pkg

pkg_dir=/usr/ports/packages/All
mkdir -p $pkg_dir

cd $db_pkg_dir
for dname in *
   do

     if [ "$dname" != "pkgdb.db" ]
     then

       pkg_create -v -b $dname $pkg_dir/$dname.tbz

     fi

   done
===============


Thanks for your help.

-- 
Regards,
Eric


More information about the freebsd-questions mailing list