Nimbin[12]?Mirrors & Forks / jhalfs / commits / 55e82d2

jhalfs git · trunk

jhalfs LFS build automation (mirror)

lfs mirror bash · first commit 2005-09-11 · last commit 2024-02-13 (2 years ago) · synced 3 days ago · upstream: git.linuxfromscratch.org/jhalfs

Python 78.4% Shell 19.8% Makefile 1.8%
git clone https://git.christianimmanuel.de/mirrors-forks/jhalfs.gitwget https://git.christianimmanuel.de/mirrors-forks/jhalfs/archive/jhalfs.tar.gz

Various updates for pacman PM

Pierre Labastie · 2022-06-12 20:54 · 55e82d2ae0411c3e82a9605577d1aceb8aced011

- update versions and instructions in packageManager.xml.pacman.
  Also remove the pages for old books.
- Fix packInstall.sh.pacman, so that restarting after a failure
  is possible
- Change LFS/lfs.xsl so that destdir install use symlinks for
  /lib, /sbin, and /bin. Remove also absolete commands for old
  books
- fix gcc script in book parser
 LFS/lfs.xsl                       |  46 ++++----
 common/libs/func_book_parser      |   9 +-
 pkgmngt/packInstall.sh.pacman     |  13 ++-
 pkgmngt/packageManager.xml.pacman | 218 +++++---------------------------------
 4 files changed, 61 insertions(+), 225 deletions(-)

diff --git a/LFS/lfs.xsl b/LFS/lfs.xsl
index f7fee54..c1ccdcc 100644
--- a/LFS/lfs.xsl
+++ b/LFS/lfs.xsl
@@ -10,13 +10,13 @@
 
   <!-- use package management ?
        n = no, original behavior
-       y = yes, add PKG_DEST to scripts in install commands of chapter06-08
+       y = yes, add PKG_DEST to scripts in install commands of chapter08-10
   -->
   <xsl:param name="pkgmngt" select="'n'"/>
 
   <!-- Package management with "porg style" ?
        n = no,  same as pkgmngt description above
-       y = yes, wrap install commands of chapter06-08 into a bash function.
+       y = yes, wrap install commands of chapter08-10 into a bash function.
                 note that pkgmngt must be 'y' in this case
   -->
   <xsl:param name="wrap-install" select='"n"'/>
@@ -187,26 +187,13 @@ otherwise it is in /bin.-->
     <!-- Inclusion of package manager scriptlets -->
     <xsl:if test="$pkgmngt='y' and
                   following-sibling::sect1[1][@id='ch-tools-stripping' or @id='ch-tools-cleanup']">
-      <xsl:choose>
-        <xsl:when test="$bashdir='/tools'">
-          <xsl:apply-templates
-            select="document('packageManager.xml')//sect1[
-                                              contains(@id,'ch-tools')]"
-            mode="pkgmngt">
-            <xsl:with-param name="order" select="$order+1"/>
-            <xsl:with-param name="dirname" select="$dirname"/>
-          </xsl:apply-templates>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:apply-templates
-            select="document('packageManager.xml')//sect1[
-                                              contains(@id,'ch-chroot')]"
-            mode="pkgmngt">
-            <xsl:with-param name="order" select="$order+1"/>
-            <xsl:with-param name="dirname" select="$dirname"/>
-          </xsl:apply-templates>
-        </xsl:otherwise>
-      </xsl:choose>
+      <xsl:apply-templates
+        select="document('packageManager.xml')//sect1[
+                                          contains(@id,'ch-chroot')]"
+        mode="pkgmngt">
+        <xsl:with-param name="order" select="$order+1"/>
+        <xsl:with-param name="dirname" select="$dirname"/>
+      </xsl:apply-templates>
     </xsl:if>
     <xsl:if test="$pkgmngt='y' and
                   following-sibling::sect1[2][@id='ch-system-strippingagain' or @id='ch-system-stripping']">
@@ -245,14 +232,19 @@ otherwise it is in /bin.-->
         </xsl:when>
         <xsl:otherwise>
 <!-- We cannot know which directory(ies) are needed by the package. Create a
-     reasonable bunch of them. Should be close to "Creating Directories".-->
-          <xsl:text>mkdir -pv $PKG_DEST/{bin,boot,etc,lib,sbin}
+     reasonable bunch of them. Should be close to "Creating Directories".
+     Create also symlinks from /lib, /bin, /sbin to their counterpart
+     in usr, so that the package only has files in /usr-->
+          <xsl:text>mkdir -pv $PKG_DEST/{boot,etc}
 mkdir -pv $PKG_DEST/usr/{bin,include,lib/pkgconfig,sbin}
 mkdir -pv $PKG_DEST/usr/share/{doc,info,bash-completion/completions}
 mkdir -pv $PKG_DEST/usr/share/man/man{1..8}
 case $(uname -m) in
  x86_64) mkdir -v $PKG_DEST/lib64 ;;
 esac
+ln -sv usr/sbin $PKG_DEST
+ln -sv usr/bin  $PKG_DEST
+ln -sv usr/lib  $PKG_DEST
 </xsl:text>
         </xsl:otherwise>
       </xsl:choose>
@@ -299,17 +291,18 @@ SECONDS=${PREV_SEC}
 rm -fv $PKG_DEST/sbin/nologin
 </xsl:text>
           </xsl:if>
-<!-- remove empty directories -->
+<!-- remove empty directories and symlinks-->
           <xsl:text>for dir in $PKG_DEST/usr/share/man/man{1..8} \
            $PKG_DEST/usr/share/bash-completion{/completions,} \
            $PKG_DEST/usr/share/{doc,info,man,} \
            $PKG_DEST/usr/lib/pkgconfig \
            $PKG_DEST/usr/{lib,bin,sbin,include} \
-           $PKG_DEST/{boot,etc,lib,bin,sbin}; do
+           $PKG_DEST/{boot,etc}; do
   [ -d "$dir" ] &amp;&amp; [ -z "$(ls $dir)" ] &amp;&amp; rmdir -v $dir
 done
 [ -d $PKG_DEST/lib64 ] &amp;&amp; [ -z "$(ls $PKG_DEST/lib64)" ] &amp;&amp;
   rmdir -v $PKG_DEST/lib64
+rm -v $PKG_DEST/{lib,bin,sbin}
 <!-- prevent overwriting symlinks: if a package install something in
      these directories, it'll be lost if not using package management,
      since they are symlinks to tmpfs. So, remove it too if using PM. -->
@@ -1266,6 +1259,7 @@ PKGDIR=$(tar -tf $PACKAGE | head -n1 | sed 's@^./@@;s@/.*@@')
 export PKGDIR VERSION PKG_DEST
 
 if [ -d "$PKGDIR" ]; then rm -rf $PKGDIR; fi
+if [ -d "$PKG_DEST" ]; then rm -rf $PKG_DEST; fi
 if [ -d "${PKGDIR%-*}-build" ]; then  rm -rf ${PKGDIR%-*}-build; fi
 </xsl:text>
     </xsl:if>
diff --git a/common/libs/func_book_parser b/common/libs/func_book_parser
index 268309a..c5d8c02 100644
--- a/common/libs/func_book_parser
+++ b/common/libs/func_book_parser
@@ -109,7 +109,14 @@ extract_commands() {         #
   # Remove flags requesting user action in some cases. Much easier here than
   # in the stylesheet...
   sed -i 's/-iv /-v /' "./${COMMANDS}/"chapter??/*kernel*
-
+  # If doing a destdir install (PM without wrap), the gcc instructions
+  # fail for two reasons: a missing dir, and gcc -dumpmachine returns a
+  # wrong string.
+  if [ "$PKGMNGT" = y ] && [ "$WRAP_INSTALL" = n ]; then
+    sed -e 's|(gcc|&/xgcc|' \
+        -e '/lto_plug/imkdir -pv $PKG_DEST/usr/lib/bfd-plugins' \
+        -i ./${COMMANDS}/chapter08/*gcc
+  fi
   echo "done"
 
   # Make the scripts executable.
diff --git a/pkgmngt/packInstall.sh.pacman b/pkgmngt/packInstall.sh.pacman
index 4397645..0b88cbc 100644
--- a/pkgmngt/packInstall.sh.pacman
+++ b/pkgmngt/packInstall.sh.pacman
@@ -30,13 +30,16 @@ pushd $PKG_DEST
 rm -fv ./usr/share/info/dir  # recommended since this directory is already there
                              # on the system
 # Right now, we have the files in the current directory. They should be moved
-# to /sources/$PACKAGE/src.
-mkdir -p ../$PACKAGE/src
+# to /sources/$PACKAGE/src. Also, in case there was a failure before, clean
+# /sources/$PACKAGE
+rm -rf /sources/$PACKAGE
+mkdir -p /sources/$PACKAGE/src
+
 # We'll build as user builder. We need this directory to be owned by that user.
-chown -R builder ../$PACKAGE
-mv * ../$PACKAGE/src
+chown -R builder /sources/$PACKAGE
+mv * /sources/$PACKAGE/src
 chown -R builder $PKG_DEST
-chmod -R o+r ../$PACKAGE
+chmod -R o+r /sources/$PACKAGE
 
 cat > PKGBUILD <<EOF
 pkgname=( '$PACKAGE' )
diff --git a/pkgmngt/packageManager.xml.pacman b/pkgmngt/packageManager.xml.pacman
index d4c6af9..e306efb 100644
--- a/pkgmngt/packageManager.xml.pacman
+++ b/pkgmngt/packageManager.xml.pacman
@@ -9,18 +9,18 @@ book if you prefer. That slightly changes the aspect if you render
 it in html -->
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY libarchive-version "3.4.3">
-<!ENTITY curl-version       "7.71.1">
-<!ENTITY fakeroot-version   "1.24">
-<!ENTITY pacman-version     "5.2.2">
+<!ENTITY libarchive-version "3.6.1">
+<!ENTITY curl-version       "7.83.1">
+<!ENTITY fakeroot-version   "1.29">
+<!ENTITY pacman-version     "6.0.1">
 <!ENTITY libarchive-url "https://github.com/libarchive/libarchive/releases/download/v&libarchive-version;/libarchive-&libarchive-version;.tar.xz">
-<!ENTITY curl-url       "https://curl.haxx.se/download/curl-&curl-version;.tar.xz">
+<!ENTITY curl-url       "https://curl.se/download/curl-&curl-version;.tar.xz">
 <!ENTITY fakeroot-url   "http://deb.debian.org/debian/pool/main/f/fakeroot/fakeroot_&fakeroot-version;.orig.tar.gz">
-<!ENTITY pacman-url     "https://sources.archlinux.org/other/pacman/pacman-&pacman-version;.tar.gz">
-<!ENTITY curl-md5       "b54b386057846ce3edd3584b19741569">
-<!ENTITY libarchive-md5 "4b216ea3015ecf8ae555a2026f9a6b73">
-<!ENTITY fakeroot-md5   "964e5f438f1951e5a515dd54edd50fa6">
-<!ENTITY pacman-md5     "3a9b078a83996a3272844807b91959c6">
+<!ENTITY pacman-url     "https://sources.archlinux.org/other/pacman/pacman-&pacman-version;.tar.xz">
+<!ENTITY curl-md5       "08c6d9c25d9cf8d17be28363753e42ca">
+<!ENTITY libarchive-md5 "9465f7995649c9ea84854a7fd8c76f30">
+<!ENTITY fakeroot-md5   "cab9604a7dc1d58346e0d15bb285bd0f">
+<!ENTITY pacman-md5     "f71e6f06867749735960d0c1d199d375">
 <!ENTITY % general-entities SYSTEM "BOOK/general.ent">
 %general-entities;
 ]>
@@ -54,173 +54,7 @@ Do not change  anything, except the url and the md5 checksum. -->
 </sect1>
 -->
 
-<!-- Do not change the next line. The name of the scriptlet will be taken
-from the dbhtml instruction: it is the name of the file less .html, with
-xxx-x-added before (x, digits).-->
-<sect1 id="ch-tools-libarchive" role="wrap">
-  <?dbhtml filename="libarchive.html"?>
-
-  <sect1info condition="script">
-    <productname>libarchive</productname>
-    <productnumber>&libarchive-version;</productnumber>
-    <address>&libarchive-url;</address>
-  </sect1info>
-
-  <title>Libarchive-&libarchive-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<screen><userinput remap="configure">./configure --prefix=/tools \
-            --without-bz2lib \
-            --without-xml2   \
-            --enable-bsdtar=static \
-            --enable-bsdcpio=static</userinput></screen>
-<screen><userinput remap="make">make</userinput></screen>
-<screen><userinput remap="install">make install</userinput></screen>
-  </sect2>
-
-</sect1>
-
-<sect1 id="ch-tools-openssl" role="wrap">
-  <?dbhtml filename="openssl.html"?>
-
-  <sect1info condition="script">
-    <productname>openssl</productname>
-    <productnumber>&openssl-version;</productnumber>
-    <address>&openssl-url;</address>
-  </sect1info>
-
-  <title>openssl-&openssl-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<screen><userinput remap="configure">./config --prefix=/tools            \
-         --openssldir=/tools/etc/ssl \
-         --libdir=lib</userinput></screen>
-<screen><userinput remap="make">make</userinput></screen>
-<screen><userinput remap="install">make install</userinput></screen>
-  </sect2>
-
-</sect1>
-
-<sect1 id="ch-tools-curl" role="wrap">
-  <?dbhtml filename="curl.html"?>
-
-  <sect1info condition="script">
-    <productname>curl</productname>
-    <productnumber>&curl-version;</productnumber>
-    <address>&curl-url;</address>
-  </sect1info>
-
-  <title>Curl-&curl-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<screen><userinput remap="configure">./configure --prefix=/tools \
-            --disable-static</userinput></screen>
-<screen><userinput remap="make">make</userinput></screen>
-<screen><userinput remap="install">make install</userinput></screen>
-  </sect2>
-
-</sect1>
-
-<sect1 id="ch-tools-libcap" role="wrap">
-  <?dbhtml filename="libcap.html"?>
-
-  <sect1info condition="script">
-    <productname>libcap</productname>
-    <productnumber>&libcap-version;</productnumber>
-    <address>&libcap-url;</address>
-  </sect1info>
-
-  <title>libcap-&libcap-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<screen><userinput remap="make">make lib=lib prefix=/tools GOLANG=no PAM_CAP=no</userinput></screen>
-<screen><userinput remap="install">make lib=lib prefix=/tools GOLANG=no PAM_CAP=no install</userinput></screen>
-  </sect2>
-
-</sect1>
-
-<sect1 id="ch-tools-fakeroot" role="wrap">
-  <?dbhtml filename="fakeroot.html"?>
-
-  <sect1info condition="script">
-    <productname>fakeroot</productname>
-    <productnumber>&fakeroot-version;</productnumber>
-    <address>&fakeroot-url;</address>
-  </sect1info>
-
-  <title>fakeroot-&fakeroot-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<screen><userinput remap="configure">./configure --prefix=/tools</userinput></screen>
-<screen><userinput remap="make">make</userinput></screen>
-<screen><userinput remap="install">make install</userinput></screen>
-  </sect2>
-
-</sect1>
-
-<sect1 id="ch-tools-pkgmngt" role="wrap">
-  <?dbhtml filename="pacman.html"?>
-
-  <sect1info condition="script">
-    <productname>pacman</productname>
-    <productnumber>&pacman-version;</productnumber>
-    <address>&pacman-url;</address>
-  </sect1info>
-
-  <title>Pacman-&pacman-version;</title>
-
-  <sect2 role="installation">
-    <title/>
-<!-- You can use any number of remap="pre", "configure", "make", "test", "install"
-<screen><userinput remap="something">Instructions</userinput></screen>.
-They are executed in that order. "pre" can be used for patching for example.
-In case testing is enabled, the instructions flagged test are logged to a different
-file (test-log). If testing is not enabled, they are not executed at all. Do not
-put line breaks before and after your instructions. <userinput> without
-remap attribute are considered configuration instructions and executed last. You
-can also use remap="adjust" for the same purpose. -->
-<screen><userinput remap="configure">mkdir build
-cd build
-meson --prefix=/tools                        \
-      --sysconfdir=/tools/etc                \
-      --localstatedir=/tools/var             \
-      -Dcrypto=openssl                       \
-      -Ddoc=disabled                         \
-      -Dgpgme=disabled                       \
-      -Dpkg_config_path=/tools/lib/pkgconfig</userinput></screen>
-
-<screen><userinput remap="make">ninja</userinput></screen>
-
-<screen><userinput remap="install">ninja install</userinput></screen>
-
-<screen><userinput>sed -e 's@/usr@/tools@g' \
-    -e 's/\([^!]\)strip/\1!strip/' \
-    -e 's/\([^!]\)libtool/\1!libtool/' \
-    -e 's/\([^!]\)zipman/\1!zipman/' \
-    -i /tools/etc/makepkg.conf
-cat &gt;&gt; /tools/etc/makepkg.conf &lt;&lt; EOF
-BUILDDIR=/sources
-PKGDEST=/var/lib/packages
-PACKAGER="Pierre Labastie &lt;lnimbus@club-internet.fr&gt;"
-EOF
-cat &gt;&gt; /tools/etc/pacman.conf &lt;&lt; EOF
-DBPath   = /var/lib/pacman/
-CacheDir = /var/cache/pacman/pkg/
-LogFile  = /var/log/pacman.log
-SigLevel = Never
-# Repository: do not add one now: repo-add needs openssl.
-EOF</userinput></screen>
-
-  </sect2>
-
-</sect1>
-
-<!-- version for new book: needs ninja and meson, which needs
+<!-- pacman now needs ninja and meson, which needs
      Python rebuilt with libffi and zlib. Needs also pkg-config -->
 <sect1 id="ch-chroot-libarchive" role="wrap">
   <?dbhtml filename="libarchive.html"?>
@@ -284,7 +118,8 @@ EOF</userinput></screen>
   <sect2 role="installation">
     <title/>
 <screen><userinput remap="configure">./configure --prefix=/usr \
-            --disable-static</userinput></screen>
+    --disable-static \
+    --with-openssl</userinput></screen>
 <screen><userinput remap="make">make</userinput></screen>
 <screen><userinput remap="install">make install</userinput></screen>
   </sect2>
@@ -304,13 +139,9 @@ EOF</userinput></screen>
 
   <sect2 role="installation">
     <title/>
-<screen><userinput remap="pre">sed -i '/install.*STACAPLIBNAME/d' libcap/Makefile</userinput></screen>
-<screen><userinput remap="make">make lib=lib</userinput></screen>
-<screen><userinput remap="install">make lib=lib PKGCONFIGDIR=/usr/lib/pkgconfig install
-chmod -v 755 /lib/libcap.so.&libcap-version;
-mv -v /lib/libpsx.a /usr/lib
-rm -v /lib/libcap.so
-ln -sfv ../../lib/libcap.so.2 /usr/lib/libcap.so</userinput></screen>
+<screen><userinput remap="pre">sed -i '/install -m.*STA/d' libcap/Makefile</userinput></screen>
+<screen><userinput remap="make">make prefix=/usr lib=lib</userinput></screen>
+<screen><userinput remap="install">make lib=lib prefix=/usr install</userinput></screen>
   </sect2>
 
 </sect1>
@@ -351,8 +182,7 @@ ln -sfv ../../lib/libcap.so.2 /usr/lib/libcap.so</userinput></screen>
 <screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen>
 <screen><userinput remap="make">make</userinput></screen>
 <screen><userinput remap="install">make install
-mv -v /usr/lib/libz.so.* /lib
-ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so</userinput></screen>
+rm -fv /usr/lib/libz.a</userinput></screen>
   </sect2>
 
 </sect1>
@@ -370,7 +200,7 @@ ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so</userinput></scr
 
   <sect2 role="installation">
     <title/>
-<screen><userinput remap="configure">./configure --prefix=/usr --disable-static --with-gcc-arch=native</userinput></screen>
+<screen><userinput remap="configure">./configure --prefix=/usr --disable-static --with-gcc-arch=native --disable-exec-static-tramp</userinput></screen>
 <screen><userinput remap="make">make</userinput></screen>
 <screen><userinput remap="install">make install</userinput></screen>
   </sect2>
@@ -522,10 +352,10 @@ find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
 find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;
 sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \
     -e 's:/var/spool/mail:/var/mail:'                 \
-    -i etc/login.defs
-sed -i 's/1000/999/' etc/useradd</userinput></screen>
+    -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                \
+    -i etc/login.defs</userinput></screen>
 <screen><userinput remap="configure">touch /usr/bin/passwd
-./configure --sysconfdir=/etc \
+./configure --sysconfdir=/etc --disable-static \
             --with-group-name-max-length=32</userinput></screen>
 <screen><userinput remap="make">make</userinput></screen>
 <screen><userinput remap="install">make install</userinput></screen>
@@ -604,10 +434,12 @@ sets of instructions end up in the same file, which is usually not a problem.
   <sect2 role="installation">
     <title/>
 <screen><userinput remap="configure">./configure --prefix=/usr \
-            --disable-static \
-            --enable-threaded-resolver</userinput></screen>
+            --disable-static --with-openssl \
+            --enable-threaded-resolver \
+            --with-ca-path=/etc/ssl/certs</userinput></screen>
 <screen><userinput remap="make">make</userinput></screen>
 <screen><userinput remap="install">make DESTDIR=$PKG_DEST install
+rm -rf docs/examples/.deps
 find docs \( -name "Makefile*" -o -name "*.1" -o -name "*.3" \) -exec rm {} \;
 install -v -d -m755 $PKG_DEST/usr/share/doc/curl-&curl-version;
 cp -v -R docs/*     $PKG_DEST/usr/share/doc/curl-&curl-version;</userinput></screen>