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