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>