On 08/06/2016 05:42 PM, Ken Moffat wrote:
On Sat, Aug 06, 2016 at 05:15:40PM -0500, Douglas R. Reno wrote:
I continue to build Xorg in /usr regularly. I know the advantages of
running it in /opt, but... binary programs!

[...]
I would need it, so it would probably screw up any updates that I do
further if we make this change. I have two binary programs that I run
regularly. The most important one for me is an application/game called
Uplink, created by Introversion Software. As it is, for that one, I have to
change it from a .deb file into a .tar.gz using the deb2targz script. The
other is a version control manager on a system I maintain for a friend of
mine. That is called PVSS, and it is a pain to get running in general, but
I always have the client installed in case I have to do anything.

I've had to accept that I'm not any good at most of this stuff, even
estimating (4 expletive-deleted months to look at fonts, allowing an
extra month for various texlive and firefox stuff, when I assumed I'd
get it done in 2 - and I still haven't posted my suggestions for
changes) so, as an alternative, maybe somebody who understands this
[ Hi Chris, Hi DJ ] could produce a hint on removing /lib64 ?

Actually, Chris already did. See the "Was" on BLFS-Dev. :-) But also see attached a rough sketch of the proposed changes (3rd incarnation) based on Chris's previous patch set. Keep in mind that this is not fully baked yet, and is absolutely not 100% as all of the GCC libs wound up in /tools/lib64 on try 2 (didn't copy over commands to modify t-linux64). Looks like everything else from CH5 wound up in /tools/lib as was intended. This is most certainly for *after* our next release. Even if I have it working reliably tomorrow morning, we'll need additional time to fully test LLVM, QT, and CMake packages, and I really don't think our branch time is sufficient to test this thoroughly.

Years ago, I used to run pure64 CLFS on x86_64 - and it was clean,
but in those days one or two source programs needed attention.  I
really miss that cleanliness, and I suspect that a lot of the
libtool "appears to be moved" messages are related to this - but
then I haven't built 32-bit for perhaps a year, so maybe I'm
mistaken about that message.

Yes, that is where those messages actually come from. I was just exploring. So far, no *major* changes look necessary, but binutils and glibc updates threw in a minor monkey wrench with my original build following Chris's changes, and a bunch of typos killed the first this morning, forgotten t-linux64 changes the second earlier this evening, so not tested yet. I was just curious if there was a reason for modifying all those files, or if left over from somewhere else.

As to binary compatibility, keeping the symlinks and modifying the linker path will clean those messages up, but also may not be necessary. I think just creating symlinks in a real /lib64 directory using both the real ld, and the appropriately named LSB one will do the job nicely (and same for /lib/ld-linux.so and /lib/ld-lsb-whatever.so.3 -> /lib32/ld-linux.so if you were to add multi-lib after the fact). There also might be some corner cases (?path) in binaries in the wild.

--DJ
diff -Naurp lfs-20160806/chapter05/binutils-pass1.xml 
lfs-20160806-no-lib64-symlinks/chapter05/binutils-pass1.xml
--- lfs-20160806/chapter05/binutils-pass1.xml   2016-05-31 21:52:10.639626000 
-0500
+++ lfs-20160806-no-lib64-symlinks/chapter05/binutils-pass1.xml 2016-08-06 
11:52:13.967870649 -0500
@@ -146,13 +146,6 @@ cd       build</userinput></screen>
     tests at this point are minimal since the programs from this
     first pass will soon be replaced by those from the second.</para>
 
-    <para>If building on x86_64, create a symlink to ensure the sanity of
-    the toolchain:</para>
-
-<screen><userinput remap="install">case $(uname -m) in
-  x86_64) mkdir -v /tools/lib &amp;&amp; ln -sv lib /tools/lib64 ;;
-esac</userinput></screen>
-
     <para>Install the package:</para>
 
 <screen><userinput remap="install">make install</userinput></screen>
diff -Naurp lfs-20160806/chapter05/gcc-pass1.xml 
lfs-20160806-no-lib64-symlinks/chapter05/gcc-pass1.xml
--- lfs-20160806/chapter05/gcc-pass1.xml        2016-05-31 21:52:10.639626000 
-0500
+++ lfs-20160806-no-lib64-symlinks/chapter05/gcc-pass1.xml      2016-08-07 
04:00:37.783917765 -0500
@@ -68,19 +68,32 @@ mv -v mpc-&mpc-version; mpc</userinput><
     class="directory">/usr/include</filename> from GCC's include search path.
     Issue:</para>
 
-<screen><userinput remap="pre">for file in \
- $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
+<screen><userinput remap="pre">for file in gcc/config/{linux,i386/linux{,64}}.h
 do
   cp -uv $file{,.orig}
   sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&amp;@g' \
       -e 's@/usr@/tools@g' $file.orig &gt; $file
+  case $(uname -m) in
+    x86_64)
+      sed -e 's@/lib/@/lib32/@g' \
+          -e 's@/lib64/@/lib/@g' -i $file
+    ;;
+  esac
   echo '
 #undef STANDARD_STARTFILE_PREFIX_1
 #undef STANDARD_STARTFILE_PREFIX_2
 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
 #define STANDARD_STARTFILE_PREFIX_2 ""' &gt;&gt; $file
   touch $file.orig
-done</userinput></screen>
+done
+case $(uname -m) in
+  x86_64)
+    sed -e '/MULTILIB_OSDIRNAMES/s@lib\$@lib32$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@lib64\$@lib$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@,../lib\)@)@'  \
+        -i.orig gcc/config/i386/t-linux64
+  ;;
+esac</userinput></screen>
 
     <para>In case the above seems hard to follow, let's break it down a bit.
     First we find all the files under the <filename
diff -Naurp lfs-20160806/chapter05/gcc-pass2.xml 
lfs-20160806-no-lib64-symlinks/chapter05/gcc-pass2.xml
--- lfs-20160806/chapter05/gcc-pass2.xml        2016-05-31 21:52:10.639626000 
-0500
+++ lfs-20160806-no-lib64-symlinks/chapter05/gcc-pass2.xml      2016-08-07 
04:01:03.326047694 -0500
@@ -70,19 +70,32 @@ esac</userinput></screen>
     use the one installed in <filename
     class="directory">/tools</filename>.</para>
 
-<screen><userinput remap="pre">for file in \
- $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
+<screen><userinput remap="pre">for file in gcc/config/{linux,i386/linux{,64}}.h
 do
   cp -uv $file{,.orig}
   sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&amp;@g' \
       -e 's@/usr@/tools@g' $file.orig &gt; $file
+  case $(uname -m) in
+    x86_64)
+      sed -e 's@/lib/@/lib32/@g' \
+          -e 's@/lib64/@/lib/@g' -i $file
+    ;;
+  esac
   echo '
 #undef STANDARD_STARTFILE_PREFIX_1
 #undef STANDARD_STARTFILE_PREFIX_2
 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
 #define STANDARD_STARTFILE_PREFIX_2 ""' &gt;&gt; $file
   touch $file.orig
-done</userinput></screen>
+done
+case $(uname -m) in
+  x86_64)
+    sed -e '/MULTILIB_OSDIRNAMES/s@lib\$@lib32$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@lib64\$@lib$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@,../lib\)@)@'  \
+        -i.orig gcc/config/i386/t-linux64
+  ;;
+esac</userinput></screen>
 
     <para>As in the first build of GCC it requires the GMP, MPFR and MPC
     packages. Unpack the tarballs and move them into the required directory
diff -Naurp lfs-20160806/chapter06/creatingdirs.xml 
lfs-20160806-no-lib64-symlinks/chapter06/creatingdirs.xml
--- lfs-20160806/chapter06/creatingdirs.xml     2016-05-31 21:52:10.639626000 
-0500
+++ lfs-20160806-no-lib64-symlinks/chapter06/creatingdirs.xml   2016-08-06 
12:10:45.373547290 -0500
@@ -24,9 +24,7 @@ mkdir -v  /usr/libexec
 mkdir -pv /usr/{,local/}share/man/man{1..8}
 
 case $(uname -m) in
- x86_64) ln -sv lib /lib64
-         ln -sv lib /usr/lib64
-         ln -sv lib /usr/local/lib64 ;;
+ x86_64) mkdir -v /lib64 ;;
 esac
 
 mkdir -v /var/{log,mail,spool}
diff -Naurp lfs-20160806/chapter06/gcc.xml 
lfs-20160806-no-lib64-symlinks/chapter06/gcc.xml
--- lfs-20160806/chapter06/gcc.xml      2016-08-05 22:53:06.385717000 -0500
+++ lfs-20160806-no-lib64-symlinks/chapter06/gcc.xml    2016-08-07 
04:02:54.410612533 -0500
@@ -45,6 +45,23 @@
 
 <screen><userinput remap="pre">patch -Np1 -i 
../gcc-6.1.0-asan-1.patch</userinput></screen>
 
+    <para>If building on x86_64, change the default library path to
+    <filename>/lib,/usr/lib</filename>:</para>
+
+<screen><userinput remap="pre">case $(uname -m) in
+  x86_64)
+    for file in gcc/config/{linux,i386/linux{,64}}.h
+    do
+      sed -e 's@/lib/@/lib32/@g' \
+          -e 's@/lib64/@/lib/@g' -i $file
+    done
+    sed -e '/MULTILIB_OSDIRNAMES/s@lib\$@lib32$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@lib64\$@lib$@' \
+        -e '/MULTILIB_OSDIRNAMES/s@,../lib\)@)@'  \
+        -i.orig gcc/config/i386/t-linux64
+  ;;
+esac</userinput></screen>
+
     <para>The GCC documentation recommends building GCC in a dedicated build 
directory:</para>
 
 <screen><userinput remap="pre">mkdir -v build
diff -Naurp lfs-20160806/chapter06/glibc.xml 
lfs-20160806-no-lib64-symlinks/chapter06/glibc.xml
--- lfs-20160806/chapter06/glibc.xml    2016-08-06 10:00:51.603661000 -0500
+++ lfs-20160806-no-lib64-symlinks/chapter06/glibc.xml  2016-08-07 
02:42:16.572875078 -0500
@@ -57,6 +57,15 @@
 
 <screen><userinput remap="pre">patch -Np1 -i 
../&glibc-fhs-patch;</userinput></screen>
 
+    <para>If building on x86_64, enusre that the <command>ldd</command> script
+    uses the dynamic linker in <filename>/lib</filename>:</para>
+
+<screen><userinput remap="pre">case $(uname -m) in
+  x86_64)
+    sed -i '/RTLDLIST/d' $(find ${srcdir}/ -name ldd-rewrite.sed)
+  ;;
+esac</userinput></screen>
+
     <para>The Glibc documentation recommends building Glibc 
     in a dedicated build directory:</para>
 
@@ -67,7 +76,8 @@ cd       build</userinput></screen>
 
 <screen><userinput remap="configure">../configure --prefix=/usr          \
              --enable-kernel=&min-kernel; \
-             --enable-obsolete-rpc</userinput></screen>
+             --enable-obsolete-rpc        \
+             libc_cv_slibdir=/lib</userinput></screen>
 
     <para>Compile the package:</para>
 
@@ -198,6 +208,15 @@ localedef -i zh_CN -f GB18030 zh_CN.GB18
     <filename>glibc-&glibc-version;/localedata/SUPPORTED</filename> file
     in the unlikely case you need them.</para>
 
+    <para>Finally, create symlinks for LSB compliance and a compatibility link
+    required by many binary programs:</para>
+
+<screen><userinput remap="install">case $(uname -m) in
+    x86_64) ln -s ../lib/ld-linux-x86-64.so.2 /lib64
+            ln -s ../lib/ld-linxu-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
+    ;;
+esac</userinput></screen>
+
   </sect2>
 
   <sect2 id="conf-glibc" role="configuration">
-- 
http://lists.linuxfromscratch.org/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to