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

next in thread | previous in thread | raw e-mail | index | archive | help
--On December 12, 2018 at 9:47:14 PM +0100 Polytropon <freebsd@edvax.de> 
wrote:

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

In general, I agree with you, but there are ports that get installed that I 
forget about but are needed. For example, the server I'm working on right 
now uses apache, squirrelmail, postfix, courier-imap, and mailman. 
Obviously, I would install those right away, because I know they're needed. 
But what if I installed something else, that I don't remember (like 
saslauthd), but is needed for some functionality that is not a dependency 
selected by options?

For example, I run a forum on a webserver that is not a port, but it 
requires some ports to be installed for it to work properly. I would 
immediately remember that mysql needs to be installed, but maybe I would 
forget about ImageMagik or p5-Net-DNS. The generated installed ports list 
will catch all that and save me having to remember every necessary port.

That way I don't end up chasing my tail trying to figure out why some minor 
functionality that I didn't even notice no longer worked until someone 
complained is no longer working. Then I end up having to read logs, 
documentation, scratch my head and go, Oh, that's right. I need to install 
p5-Net-DNS for that.

Real life is never as straightforward as I'd like it to be, and my memory 
isn't what it once was.

Paul Schmehl, Retired
*******************************************
"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




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