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 > > /usr > /lib > /perl5 > /5.30.2 > /... > /site_perl > > 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 > > /usr > /lib > /perl5 > /5.30.2 > /... > /5.30.3 > /... > /site_perl > > 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. 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 ? > 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. > > 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). ĸ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