Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Dec 2018 21:47:14 +0100
From:      Polytropon <freebsd@edvax.de>
To:        Paul Schmehl <pschmehl_lists@tx.rr.com>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: Forcing port reinstalls without rebuilding over and over again
Message-ID:  <20181212214714.4017e195.freebsd@edvax.de>
In-Reply-To: <296D11C4E1B5870932452073@Pauls-MacBook-Pro.local>
References:  <47758EF2A172AE3BCA2F6E66@Pauls-MacBook-Pro.local> <1793865D5AEE79C2FC27331F@Pauls-MacBook-Pro.local> <20181212204151.659fb436.freebsd@edvax.de> <296D11C4E1B5870932452073@Pauls-MacBook-Pro.local>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 12 Dec 2018 13:55:01 -0600, Paul Schmehl wrote:
> --On December 12, 2018 at 8:41:51 PM +0100 Polytropon <freebsd@edvax.de> 
> wrote:
> 
> > On Wed, 12 Dec 2018 12:52:36 -0600, Paul Schmehl wrote:
> >> --On December 12, 2018 at 2:07:35 AM -0600 Paul Schmehl
> >> <pschmehl_lists@tx.rr.com> wrote:
> >>
> >> > Is there a way, using portmaster, to force the rebuild of all ports
> >> > without rebuilding the same ports over and over and over again?
> >> >
> >> > I've noticed that using portmaster -f forces the rebuild of every
> >> > dependency. I think I've now rebuild perl and python at least 20 or 30
> >> > times. Once should be enough. I guess if you're going to rebuild
> >> > everything, it would be ok to ignore dependencies for ports, since
> >> > they're all going to be rebuilt anyway.
> >> >
> >> > What's the magic potion for that?
> >>
> >> After reading through the man page, I thought that portmaster -Rfd would
> >> do  the trick, but it didn't.
> >>
> >> ISTM that, when you're building every port on a box, you shouldn't need
> >> to  build all the dependencies for every port, because they're all going
> >> to be  built anyway. Rebuilding perl (for example) repeatedly, makes no
> >> sense at  all. It would be nice if there were a
> >> --force-with-no-dependencies switch  so that every port could be built
> >> once and once only.
> >
> > Maybe I'm thinking into the wrong direction, but how about
> > the following thoughts?
> >
> > The task of building is different from the task of installing.
> > If you run each build task separatedly, both depencency trees
> > (build dependencies + runtime dependencies) need to be resolved
> > from scratch.
> >
> > For normal usage, and taking your perl example, the following
> > situation would be present:
> >
> > 1. port "foo" requires perl as a build dependency
> >
> > 2. port "perl" is installed and can then be used
> >
> > 3. port "foo" is built, using the just installed perl
> >
> > 4. port "bar" requires perl as a build dependency
> >
> > 5. port "bar" is build, using the already installed perl
> >    (and perl is not built again)
> >
> > It should work the same with runtime dependencies. This thought
> > experiment includes the assumtion that the correct _versions_ of
> > perl are always the same. ;-)
> 
> It should, but it doesn't seem to.
> 
> I found this near the end of the man page. I believe I'll try this next 
> time.
> 
>  Using portmaster to do a complete reinstallation of all ports:
>            1. portmaster --list-origins > ~/installed-port-list
>            2. Update the ports tree
>            3. portmaster -ty --clean-distfiles
>            4. portmaster -Faf
>            5. pkg delete -afy
>            6. rm -rf /usr/local/lib/compat/pkg
>            7. Back up any files in /usr/local you wish to save,
>               such as configuration files in /usr/local/etc
>            8. Manually check /usr/local and /var/db/pkg
>               to make sure that they are really empty
>            9. Install ports-mgmt/pkg and then ports-mgmt/portmaster.
>               Remove both from ~/installed-port-list.
>            10. portmaster --no-confirm `cat ~/installed-port-list`

This instruction contains one little thing that _might_ be a
problem, or at least a nuisance:

Let's say your installation contains a port "foo" which
requires the dependency "bar". Step 1 will add "foo" and
"bar" to your ports list. After the ports tree update in
step 2, a newer version of "foo" is described, and it no
longer requires "bar". Step 10 will use the list from
step 1, and in addition to "foo" (the program you want
to use), it will also install its dependency "bar" (which
you have absolutely no interest in).

In my opinion, it's a little better to create your own
"top ports list" instead of saving the current state (or
at least have both lists at hand, but only use your own).
In that "top ports list", you list the things you actually
want to use, and you do not care about their depencencies,
simply because portmaster can resolve them on its own. So
first, your list is much more readable (as it will only
contain the software you are interested in, and nothing
of the software you might need to build or run them), and
second, your list will be much more portable and also deal
with the "port not needed, but still installed" problem
described above.




-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20181212214714.4017e195.freebsd>