On Mon, Jun 22, 2020 at 10:13:19PM +0200, Thomas Trepl wrote: > Am Samstag, den 20.06.2020, 14:53 +0100 schrieb Ken Moffat via lfs- > dev: > > On Sat, Jun 20, 2020 at 02:42:03PM +0200, Thomas Trepl via lfs-dev wrote: > > > Hi all, > > > > > > this is about hte configuration options of perl. > > > > > > Problem: > > > whenever perl is upgraded to a newer version (for example 5.30.2 to > > > 5.30.3), all perl modules needs to be reinstalled as the current > > > configuration of perl forces a directory structure like > > > > <snip> > > > > > > All modules are installed under /usr/lib/perl5/5.30.2 . Now, when > > > installing a newer patch-version by overwriting the existing one, the > > > structure looks like > > > > <snip> > > > > > > The 5.30.2-directory (which includes the modules) is more or less > > > garbage as the new perl will use 5.30.3. Therefore, any installed > > > module must be reinstalled to appear in the 5.30.3 structure. > > > > > > This all is not really a problem as long as the system is completely > > > built from scratch and all modules are installed freshly. For those > > > who uses some kind of pkgmnr or upgrade the system package by package > > > it might be a problem when perl is about to upgrade. > > > > > > > Yes, for my own systems I have had to rebuild all the modules if > > upgrading perl. > > > > > Suggestion: > > > The following is under the assumption that patch-versions of perl are > > > compatible to each other. To solve the upgrade issue described above, > > > add a few new options to the perl install command in the LFS book: > > > > > > sh Configure -des \ > > > -Dprefix=/usr \ > > > - > > > Dvendorprefix=/usr \ > > > * -Dprivlib=/usr/share/perl5/core_perl > > > \ > > > * -Darchlib=/usr/lib/perl5/&perl-version-min;/core_perl \ > > > * - > > > Dsitelib=/usr/share/perl5/site_perl \ > > > * - > > > Dsitearch=/usr/lib/perl5/&perl-version-min;/site_perl \ > > > * - > > > Dvendorlib=/usr/share/perl5/vendor_perl \ > > > * - > > > Dvendorarch=/usr/lib/perl5/&perl-version-min;/vendor_perl \ > > > - > > > Dman1dir=/usr/share/man/man1 \ > > > -Dman3dir=/usr/share/man/man3 \ > > > - > > > Dpager="/usr/bin/less -isR" \ > > > -Duseshrplib \ > > > - > > > Dusethreads > > > > > > assuming that we have in packages.ent: > > > > > > <!ENTITY perl-version-major "5"> > > > <!ENTITY perl-version-minor "30"> > > > <!ENTITY perl-version-patch "3"> > > > <!ENTITY perl-version-min "&perl-version-major;.&perl-version-minor;"> > > > <!ENTITY perl-version "&perl-version-major;.&perl-version- > > > minor;.&perl-version-patch;"> > > > > > > This will produce a directory structure: > > > > > > /usr > > > /lib > > > /perl5 > > > /5.30 > > > /core_perl > > > /... > > > /site_perl > > > /... > > > > > > where modules are installed under /usr/lib/perl5/5.30/site_perl/ . In > > > this case, overwriting the installed perl with a newer one has no > > > effect on the installed modules unless minor or even major version of > > > perl > > > > > Sounds nice. But just to be clear - under site_perl I have a > > versioned directory (e.g. 5.30.2 for your current example). I > > assume, or hope, that will either be 5.30 or completely omitted. > > This versioned subdir will be omitted completely. Files from > XML::Parser are installed as > > usr/lib/perl5/5.30/site_perl/auto > usr/lib/perl5/5.30/site_perl/auto/XML > usr/lib/perl5/5.30/site_perl/auto/XML/Parser > usr/lib/perl5/5.30/site_perl/auto/XML/Parser/.packlist > usr/lib/perl5/5.30/site_perl/auto/XML/Parser/Expat > usr/lib/perl5/5.30/site_perl/auto/XML/Parser/Expat/Expat.so > usr/lib/perl5/5.30/site_perl/XML > usr/lib/perl5/5.30/site_perl/XML/Parser > usr/lib/perl5/5.30/site_perl/XML/Parser/Encodings > usr/lib/perl5/5.30/site_perl/XML/Parser/Style > usr/lib/perl5/5.30/core_perl > usr/lib/perl5/5.30/core_perl/perllocal.pod > > net-ssleay installs as > > ... > usr/lib/perl5/5.30/site_perl/auto/Net/SSLeay/randomize.al > usr/lib/perl5/5.30/site_perl/auto/Net/SSLeay/do_httpx2.al > usr/lib/perl5/5.30/site_perl/auto/Net/SSLeay/put_https3.al > usr/lib/perl5/5.30/site_perl/auto/Net/SSLeay/do_https3.al > usr/lib/perl5/5.30/site_perl/Net > usr/lib/perl5/5.30/site_perl/Net/SSLeay.pod > usr/lib/perl5/5.30/site_perl/Net/SSLeay > usr/lib/perl5/5.30/site_perl/Net/SSLeay/Handle.pm > usr/lib/perl5/5.30/site_perl/Net/SSLeay.pm > ... > > > > > i.e. /usr/lib/perl5/5.30/site_perl/5.30/ or > > /usr/lib/perl5/5.30/site_perl/ for the directory where 'top level' > > modules SGMLS.pm and URI.pm live ? > URI: usr/share/perl5/site_perl/URI.pm > > this pkg seems to use the "sitelib" instead of "sitearch" > configuration target. Any info why/when this target is used? >
I had no idea, but from https://stackoverflow.com/questions/54470275/what-is-the-difference-between-the-core-vendor-and-site-locations-in-perl it might be a difference between 'pure perl' and binary, i.e. sitelib is for pure perl. > > > > A note to "make install" might be required as perl refuses to > > > overwrite an installation in case of an version mismatch (which makes > > > sense in case of incompatible version, maybe when minor or major > > > version changes). To overcome this, a > > > mv /usr/bin/perl{,.old} > > > can be executed before doing the install. > seems not to be true. Overwriting went fine without any hickups. > > I just tested: > Installed perl-5.30.2, installed XML::Parser and net-ssleay. "cpan -l" > shows both: > > perl --version: > This is perl 5, version 30, subversion 2 (v5.30.2) built for x86_64- > linux-thread-multi > > cpan -l: > XML::Parser 2.46 > Net::SSLeay 1.88 > ... > > > Than, followed books instruction (with adjusted configure options) to > build perl-5.30.3. "make install" went fine. > > perl --version: > This is perl 5, version 30, subversion 3 (v5.30.3) built for x86_64- > linux-thread-multi > > cpan -l: > XML::Parser 2.46 > Net::SSLeay 1.88 > ... > > I also downgraded back to 5.30.2, Modules still usable (running "cpan > -l" as well as a small test script which does xml parsing). > > > > > As far as i have seen, there is no change required for BLFS except one > > > textual adjustment in the "Perl Modules" page. > > > > > > All comments, suggestions, tomatos and eggs are welcome! > > > Is there something i have completely overseen? > > > > > > > For plain perl modules in site_perl this sounds like a no-brainer. > > A quick look at .so files installed under x86_64-linux-thread-multi > > suggests that the site_perl files (e.g. from ImageMagick) do not > > link to perl libs, so should be ok, and the many core .so files seem > > (from a brief look at one or two) to only link to libc, vdso and > > ld-linux - in any case, the core files will be overwritten by the > > upgrade of perl. > > > > If a module is dropped from core perl, I suppose that will leave the > > old core module in place. > > > > Overall, I think it might be worth trying (I've had so much pain > > from perl over the years that I don't really believe there is such a > > thing as a free lunch, and my first semi-supported version with this > > would be LFS-10.0 so I won't actually find out for some months if > > the approach lives up to expectations). > > It would be super cool if you, Ken (and of course others too!), could > test that too. > > -- > Thomas > It's on my ToDo list (or maybe my tuit list, as in waiting for a round tuit i.e. eventually I'll get around to it). First, I've got non-computer things to get started, but also forthcoming upgrades for mutt and (next week) firefox - and a bigger delay is that although I thought I'd matched my LFS scripts to the cross2 book, when I was exploring my gcc test failures I discovered that I still had SED=sed in the commands. I used to have separate git branches for my master (svn) and cross* LFS scripts, with BLFS only updated in master, and then I copied BLFS and, I thought, all later changes, into the branch and then swapped branches. I now suspect that I maybe missed one or two commits, or else didn't pay enough attention when checking against the book. But whichever, I'll be using 5.32 for new builds and I doubt 5.32.1 will appear before LFS-10.0 unless one of the monks has really screwed up somewhere. ĸen -- He died at the console, of hunger and thirst. Next day he was buried, face-down, nine-edge first. - the perfect programmer -- http://lists.linuxfromscratch.org/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page