Forcing port reinstalls without rebuilding over and over again

Paul Schmehl pschmehl_lists at
Wed Dec 12 19:55:09 UTC 2018

--On December 12, 2018 at 8:41:51 PM +0100 Polytropon <freebsd at> 

> 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 at> 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 

 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`

Paul Schmehl, Retired
As if it wasn't already obvious, my opinions
are my own and not those of my employer.
"It is as useless to argue with those who have
renounced the use of reason as to administer
medication to the dead." Thomas Jefferson
"There are some ideas so wrong that only a very
intelligent person could believe in them." George Orwell

More information about the freebsd-questions mailing list