A question about update(I think it should be added to our faq).

Matthew Seaman m.seaman at infracaninophile.co.uk
Thu Dec 25 10:16:16 UTC 2008


Li wrote:

> The question is:
> 
> If I update system from release_6.1 to release_7.0, whether I should
> re-compile every ports use the "portupgrade -af" command.
> 
> Somebody told me "yes", "no" or "recommendatory", but they have not give
> me any explanation, so I am confused about it.

Something like this as an answer to the FAQ?

The answer is definitely "yes" -- while a 7.0 system will run with
software compiled under 6.1, you will end up with stuff randomly
crashing and failing to work once you start installing other ports or
updating a portion of what you already have.

The simple reason is that software compiled for 6.1 will link against
libc.so.6 and software compiled on 7.0 will link against libc.so.7 -- 
this includes other shlibs, loadable modules etc. which themselves can be
linked against or loaded by end-user applications.  Applications that
ultimately try to load two different versions of libc.so tend to have
short and unhappy lives.

However, simply doing 'portupgrade -af' unfortunately won't get you
there.  portupgrade itself will crash when it updates packages it
depends on.

There are three procedures that should work effectively:

 1) Make a list of all your installed software, then 'pkg_delete -a'
    to remove everything and then reinstall it all from scratch.  This
    is the most effective method, in that it's impossible for any
    packages to slip through un-updated, but it means downtime for
    everything on that server throughout the whole update procedure. 
    If you have pkgs pre-built for everything you need so you can
    reinstall quickly, then this is definitely the way to go.

 2) First, delete portupgrade and everything it depends on.  ie.
    
       pkg_info -qrx portupgrade | cut -d ' ' -f 2 | xargs pkg_delete -f

    (Note: 'pkg_deinstall -fR portupgrade' is not recommended) 

    Then reinstall portupgrade (and dependencies):

       cd /usr/ports/port-mgmt/portupgrade
       make install
       pkgdb -F

    And then use the newly rebuilt portupgrade to reinstall all the
    rest of the software on the machine -- or rather, all ports installed
    before the current date:

       portupgrade -f '<2008-12-25'

    The big advantage of this command is that if something goes wrong (and
    it is quite likely to), you can fix the problem and then rerun the same
    command to pick up anything still left un-updated.

 3) Use portmaster instead of portupgrade.  Very simple, and because
    portmaster is a /bin/sh script with no dependencies other than
    the base system it won't suffer the same randomly-crashing fate.

	Cheers,

	Matthew

-- 
Dr Matthew J Seaman MA, D.Phil.                   7 Priory Courtyard
                                                  Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey     Ramsgate
                                                  Kent, CT11 9PW

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 258 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-doc/attachments/20081225/1cf1c756/attachment.sig>


More information about the freebsd-doc mailing list