Skip to the content.

13. Programming


A base LFS system can be used as a development platform, however the base system only includes language support for C, C++, Perl, and Python. This chapter provides instructions to build many popular programming environments to greatly expand your system’s development capabilities.

13.1 Autoconf2.13


Introduction to Autoconf2.13

Autoconf2.13 is an old version of Autoconf . This old version accepts switches which are not valid in more recent versions. Now that firefox has started to use python2 for configuring, this old version is required even if configure files have not been changed.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/autoconf213

Installation of Autoconf2.13

Install Autoconf by running the following commands:

patch -Np1 -i ../autoconf-2.13-consolidated_fixes-1.patch &&
mv -v autoconf.texi autoconf213.texi                      &&
rm -v autoconf.info                                       &&
./configure --prefix=/usr --program-suffix=2.13           &&
make

To test the installation issue make check (all 253 tests should pass).

Now, as the root user:

make install                                      &&
install -v -m644 autoconf213.info /usr/share/info &&
install-info --info-dir=/usr/share/info autoconf213.info

Command Explanations

mv -v autoconf.texi autoconf213.texi: ensure that the info file added by this package will not overwrite the more recent version.

rm -v autoconf.info: ensure that the info file will be created by the current version of texinfo.

–program-suffix=2.13: ensure that the installed programs have the version added to their names, so that only a script which specifically looks for these old versions will find them.

install -v -m644 …: the patch removes install-info from the Makefile because that would install (and if necessary recreate) standards.info which is an old version, so now autoconf213.info has to be manually installed.

Contents

Installed Programs: autoconf2.13, autoheader2.13, autoreconf2.13, autoscan2.13, autoupdate2.13, and ifnames2.13

Installed Library: None

Installed Directory: /usr/share/autoconf-2.13

Short Descriptions

autoconf2.13 Produces shell scripts that automatically configure software source code packages to adapt to many kinds of Unix-like systems.

autoheader2.13 is a tool for creating template files of C #define statements for configure to use.

autoreconf2.13 This automatically runs autoconf2.13, autoheader2.13, aclocal, automake, gettextize and libtoolize in the right order when changes have been made to autoconf or automake template files.

autoscan2.13 Can be used as a preliminary step in creating a configure.in file.

autoupdate2.13 Modifies a configure.in file that still calls autoconf macros by their old names to use the current macro names.

ifnames2.13 Prints the identifiers that the package uses in C preprocessor conditionals [If a package has already been set up to have some portability, this program can help determine what configure needs to check for. It can also fill in gaps in a configure.in file generated by autoscan].

13.2 Cbindgen-0.24.3


Introduction to Cbindgen

Cbindgen can be used to generate C bindings for Rust code.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

cbindgen Dependencies

Required

rustc-1.67.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cbindgen

Installation of cbindgen

Note

As with most Rust packages, this needs a network connection to check the current versions of the required cargo crates, and to download them if they are not already present.

Install cbindgen by running the following commands:

cargo build --release

To test the results, issue: cargo test. Three tests in the final suite are known to fail.

Now, as the root user:

install -Dm755 target/release/cbindgen /usr/bin/

Contents

Installed Program: cbindgen

Installed Library: none

Installed Directory: none

Short Descriptions

cbindgen generates C bindings for Rust code.

13.3 Clisp-2.49


Introduction to Clisp

GNU Clisp is a Common Lisp implementation which includes an interpreter, compiler, debugger, and many extensions.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

Clisp Dependencies

libsigsegv-2.14

Optional

libnsl-2.0.0 and libffcall

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/clisp

Installation of Clisp

Note

This package does not support parallel build.

If you are building on a 32-bit system, work around a bug in GCC caused by the latest version of binutils:

case $(uname -m) in
    i?86) export CFLAGS="${CFLAGS:--O2 -g} -falign-functions=4" ;;
esac

Remove two tests, which fail for unknown reasons:

sed -i -e '/socket/d' -e '/"streams"/d' tests/tests.lisp

Install Clisp by running the following commands:

If you are building clisp against libffcall, apply the patch to fix a build failure with current readline:

patch -Np1 -i ../clisp-2.49-readline7_fixes-1.patch

Install Clisp by running the following commands:

mkdir build &&
cd    build &&

../configure --srcdir=../                       \
             --prefix=/usr                      \
             --docdir=/usr/share/doc/clisp-2.49 \
             --with-libsigsegv-prefix=/usr &&

ulimit -s 16384 &&
make -j1

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

ulimit -s 16384: this increases the maximum stack size, as recommended by the configure.

–docdir=/usr/share/doc/clisp-2.49: this ensures the html documentation will go into a versioned directory instead of straight into /usr/share/html/.

–with-libsigsegv-prefix=/usr: use this to tell configure that you have installed libsigsegv in /usr, otherwise it will not be found.

--with-libffcall-prefix=/usr: use this to tell configure that you have installed the optional libffcall in /usr, otherwise like libsigsegv it will not be found.

Contents

Installed Programs: clisp, clisp-link

Installed Libraries: various static libraries in /usr/lib/clisp-2.49/base/

Installed Directories: /usr/lib/clisp-2.49 /usr/share/doc/clisp-2.49 /usr/share/emacs/site-lisp;

Short Descriptions

clisp is an ANSI Common Lisp compiler, interpreter, and debugger.

clisp-link is used to link an external module to clisp.

13.4 CMake-3.25.2


Introduction to CMake

The CMake package contains a modern toolset used for generating Makefiles. It is a successor of the auto-generated configure script and aims to be platform- and compiler-independent. A significant user of CMake is KDE since version 4.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

CMake Dependencies

cURL-7.88.1, libarchive-3.6.2, libuv-1.44.2, and nghttp2-1.52.0

Optional

GCC-12.2.0 (for gfortran), git-2.39.2 (for use during tests), Mercurial-6.3.2 (for use during tests), Qt-5.15.8 (for the Qt-based GUI), sphinx-6.1.3 (for building documents), Subversion-1.14.2 (for testing), and rhash

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cmake

Installation of CMake

Install CMake by running the following commands:

sed -i '/"lib64"/s/64//' Modules/GNUInstallDirs.cmake &&

./bootstrap --prefix=/usr        \
            --system-libs        \
            --mandir=/share/man  \
            --no-system-jsoncpp  \
            --no-system-librhash \
            --docdir=/share/doc/cmake-3.25.2 &&
make

To test the results, issue: LC_ALL=en_US.UTF-8 bin/ctest -j<N> -O cmake-3.25.2-test.log, where <N> is an integer between 1 and the number of system cores. Setting LC_ALL is needed to prevent some test failures when some of the locale variables are set to non English locales. One test, BundleUtilities, is known to fail.

If you want to investigate a problem with a given “problem1-test”, use bin/ctest -R “problem1-test” and, to omit it, use bin/ctest -E “problem1-test”. These options can be used together: bin/ctest -R “problem1-test” -E “problem2-test”. Option -N can be used to display all available tests, and you can run bin/ctest for a sub-set of tests by using separated by spaces names or numbers as options. Option --help can be used to show all options.

Now, as the root user:

make install

Command Explanations

sed … Modules/GNUInstallDirs.cmake: This command disables applications using cmake from attempting to install files in /usr/lib64/.

--system-libs: This switch forces the build system to link against Zlib, Bzip2, cURL, nghttp2, Expat and libarchive installed on the system.

--no-system-jsoncpp: This switch removes the JSON-C++ library from the list of system libraries. A bundled version of that library is used instead.

--no-system-librhash: This switch removes the librhash library from the list of system libraries used. A bundled version of that library is used instead.

--no-system-{curl,libarchive,libuv,nghttp2}: Use the corresponding option in the list for the bootstrap if one recommended dependency is not installed. A bundled version of the dependency will be used instead.

--qt-gui: This switch enables building the Qt-based GUI for CMake.

--parallel=: This switch enables performing the CMake bootstrap with multiple jobs at one time.

Contents

Installed Programs: ccmake, cmake, cmake-gui (optional), cpack, and ctest

Installed Libraries: None

Installed Directories: /usr/share/cmake-3.25 and /usr/share/doc/cmake-3.25.2

Short Descriptions

ccmake is a curses based interactive frontend to cmake.

cmake is the makefile generator.

cmake-gui (optional) is the Qt-based frontend to cmake.

cpack is the CMake packaging program.

ctest is a testing utility for cmake-generated build trees.

13.5 Doxygen-1.9.6


Introduction to Doxygen

The Doxygen package contains a documentation system for C++, C, Java, Objective-C, Corba IDL and to some extent PHP, C# and D. It is useful for generating HTML documentation and/or an off-line reference manual from a set of documented source files. There is also support for generating output in RTF, PostScript, hyperlinked PDF, compressed HTML, and Unix man pages. The documentation is extracted directly from the sources, which makes it much easier to keep the documentation consistent with the source code.

You can also configure Doxygen to extract the code structure from undocumented source files. This is very useful to quickly find your way in large source distributions. Used along with Graphviz, you can also visualize the relations between the various elements by means of include dependency graphs, inheritance diagrams, and collaboration diagrams, which are all generated automatically.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Doxygen Dependencies

Required

CMake-3.25.2 and git-2.39.2

Optional

Graphviz-7.1.0, ghostscript-10.00.0, libxml2-2.10.3 (required for the tests), LLVM-15.0.7 (with clang), Python-2.7.18, Qt-5.15.8 (for doxywizard), texlive-20220321 (or install-tl-unx), xapian-1.4.22 (for doxyindexer), and javacc

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/doxygen

Installation of Doxygen

Install Doxygen by running the following commands:

mkdir -v build &&
cd       build &&

cmake -G "Unix Makefiles"         \
      -DCMAKE_BUILD_TYPE=Release  \
      -DCMAKE_INSTALL_PREFIX=/usr \
      -Wno-dev .. &&

make

To test the results, issue: make tests.

If you wish to generate the package documentation, you must have Python, TeX Live (for HTML docs) and Ghostscript (for PDF docs) installed, then issue the following command:

cmake -DDOC_INSTALL_DIR=share/doc/doxygen-1.9.6 -Dbuild_doc=ON .. &&

make docs

Now, as the root user:

make install &&
install -vm644 ../doc/*.1 /usr/share/man/man1

If you have generated the package documentation, then the man pages are automatically installed, and you do not need to run the last install … command.

Command Explanations

-Dbuild_wizard=ON: Use this switch if Qt5 is installed and you wish to build the GUI front-end.

-Dbuild_search=ON: Use this switch if xapian is installed and you wish to build external search tools (doxysearch.cgi and doxyindexer).

-Duse_libclang=ON: Use this switch if llvm with clang are installed, to add support for libclang parsing.

Configuring Doxygen

There is no real configuration necessary for the Doxygen package although three additional packages are required if you wish to use extended capabilities. If you need to use the language translation features, you must have Python-2.7.18 installed. If you require formulas to create PDF documentation, then you must have texlive-20220321 installed. If you require formulas to convert PostScript files to bitmaps, then you must have ghostscript-10.00.0 installed.

Contents

Installed Programs: doxygen and optionally, doxywizard, doxyindexer and doxysearch.cgi

Installed Libraries: None

Installed Directory: /usr/share/doc/doxygen-1.9.6

Short Descriptions

doxygen is a command-line based utility used to generate template configuration files and then generate documentation from these templates. Use doxygen –help for an explanation of the command-line parameters.

doxywizard is a GUI front-end for configuring and running doxygen.

doxyindexer generates a search index called doxysearch.db from one or more search data files produced by doxygen. See, e.g. https://javacc.github.io/javacc/.

doxysearch.cgi is a CGI program to search the data indexed by doxyindexer.

13.6 GCC-12.2.0


Introduction to GCC

The GCC package contains the GNU Compiler Collection. This page describes the installation of compilers for the following languages: C, C++, Fortran, Objective C, Objective C++, and Go. Since C and C++ are installed in LFS, this page is either for upgrading C and C++, or for installing additional compilers.

Note

Additional languages, among which D and ADA, are available in the collection. D and ADA have a binary bootstrap requirement for the first installation, so their installation is not described here. To install them, you can proceed along the same lines as below after installing the corresponding compiler from a binary package, adding ada or d to the --enable-languages line.

This package is known to build and work properly using an LFS 11.3 platform.

Caution

If you are upgrading GCC from any other version prior to 12.2.0, then you must be careful compiling 3rd party kernel modules. You should ensure that the kernel and all its native modules are also compiled using the same version of GCC that you use to build the 3rd party module. This issue does not affect native kernel (and kernel modules) updates, as the instructions below are a complete reinstallation of GCC. If you have existing 3rd party modules installed, ensure they are recompiled using the updated version of GCC. As always, never update the kernel headers from the ones used when Glibc was compiled during LFS.

Some system headers need to be fixed to be used with GCC. This is done during the installation of GCC, and the “fixed” headers are installed in /usr/lib/gcc/<machine triplet>/<GCC version>/include-fixed . This is harmless if GCC is built during the LFS stage. But if you reinstall GCC in BLFS, some of the BLFS packages may be “fixed”. If one of those packages is reinstalled afterwards, the “fixed” headers are not updated, which may lead to version mismatches. In case that happens, the “fixed” headers must be updated by running (as root): /usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/install-tools/mkheaders . The machine triplet may be different on a 32-bit system.

Package Information

GCC Dependencies

Optional

GDB-13.1, Valgrind-3.20.0 (for tests), and ISL (to enable graphite optimization)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gcc

Installation of GCC

Important

Even if you specify only languages other than C and C++ to the ./configure command below, the installation process will overwrite your existing GCC C and C++ compilers and libraries. Running the full suite of tests is recommended.

Do not continue with the make install command until you are confident the build was successful. You can compare your test results with those found at https://gcc.gnu.org/ml/gcc-testresults/. You may also want to refer to the information found in the GCC section of Chapter 8 in the LFS book (../../../../lfs/view/11.3-systemd/chapter08/gcc.html).

The instructions below are intentionally performing a “bootstrap” process. Bootstrapping is needed for robustness and is highly recommended when upgrading the compilers version. To disable bootstrap anyway, add --disable-bootstrap to the ./configure options below.

Install GCC by running the following commands:

case $(uname -m) in
  x86_64)
    sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
  ;;
esac

mkdir build                                            &&
cd    build                                            &&

../configure                                           \
    --prefix=/usr                                      \
    --disable-multilib                                 \
    --with-system-zlib                                 \
    --enable-default-pie                               \
    --enable-default-ssp                               \
    --enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make

If you have installed additional packages such as Valgrind and GDB, the GCC part of the test suite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). As of gcc-12.2.0, about 60 FAIL occur in the “guality” suite, as well as miscellaneous failures throughout the rest of the test suite, fifteen of which are already present in the GCC tests of LFS. If all the compilers above are built, there will be around 80 unexpected failures out of over 482,000 tests. To run the tests, issue:

ulimit -s 32768 &&
make -k check

The tests are very long, and the results may be hard to find in the logs, specially if you use parallel jobs with make. You can get a summary of the tests with:

../contrib/test_summary

Now, as the root user:

make install &&

mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/12.2.0/include{,-fixed}

Some packages expect to find the C preprocessor in /lib or may refer to the C compiler under the name cc. The following symbolic links are not needed if you have followed the LFS instructions, since they have been already created. If you do not have them on your system, issue as the root user:

ln -v -sf ../usr/bin/cpp /lib          &&
ln -v -sf gcc /usr/bin/cc              &&
install -v -dm755 /usr/lib/bfd-plugins &&
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so /usr/lib/bfd-plugins/

Command Explanations

mkdir build; cd build: The GCC documentation recommends building the package in a dedicated build directory.

--disable-multilib: This parameter ensures that files are created for the specific architecture of your computer.

--with-system-zlib: Uses the system zlib instead of the bundled one. zlib is used for compressing and decompressing GCC’s intermediate language in LTO (Link Time Optimization) object files.

--enable-default-pie: Makes the -fpie option the default when compiling programs. Together with the ASLR feature enabled in the kernel, this defeats some kind of attacks based on known memory layouts.

--enable-default-ssp: Makes the -fstack-protector-strong option the default when compiling programs. SSP is a technique preventing alteration of the program flow by corrupting the parameter stack.

--enable-languages=c,c++,fortran,go,objc,obj-c++: This command identifies which languages to build. You may modify this command to remove undesired languages. Other languages can be added, including ADA, D, BRIG (add brig to the list of enabled languages), a binary format for HSAIL (Heterogeneous System Architecture Intermediate Language), and JIT (add jit to the list of enabled languages), a library which can be linked into interpreters that want to generate machine code “on the fly” at run-time. They have not been tested by the BLFS developers.

ulimit -s 32768: This command prevents several tests from running out of stack space.

make -k check: This command runs the test suite without stopping if any errors are encountered.

../contrib/test_summary: This command will produce a summary of the test suite results. You can append ** grep -A7 Summ** to the command to produce an even more condensed version of the summary. You may also wish to redirect the output to a file for review and comparison later on.

mv -v /usr/lib/*gdb.py …: The installation stage puts some files used by gdb under the /usr/lib directory. This generates spurious error messages when performing ldconfig. This command moves the files to another location.

chown -v -R root:root /usr/lib/gcc/*linux-gnu/…: If the package is built by a user other than root, the ownership of the installed include directory (and its content) will be incorrect. This command changes the ownership to the root user and group.

Contents

Some program and library names and descriptions are not listed here, but can be found at LFS section for GCC as they were initially installed during the building of LFS.

Installed Programs: gccgo, gfortran, go, and gofmt, hard-linked to architecture specific names

Installed Libraries: libgfortran.{so,a}, libgo.{so,a}, libgobegin.a, libgolibbegin.a, libobjc.{so,a}, and numerous other run-time libraries and executables

Installed Directories: /usr/lib/go

Short Descriptions

gccgo is a GCC-based compiler for the Go language.

go is a tool for managing Go source code.

gofmt is a tool for formatting Go source code.

gfortran is a GCC-based compiler for the Fortran language.

13.7 GC-8.2.2


Introduction to GC

The GC package contains the Boehm-Demers-Weiser conservative garbage collector, which can be used as a garbage collecting replacement for the C malloc function or C++ new operator. It allows you to allocate memory basically as you normally would, without explicitly deallocating memory that is no longer useful. The collector automatically recycles memory when it determines that it can no longer be otherwise accessed. The collector is also used by a number of programming language implementations that either use C as intermediate code, want to facilitate easier interoperation with C libraries, or just prefer the simple collector interface. Alternatively, the garbage collector may be used as a leak detector for C or C++ programs, though that is not its primary goal.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Optional

libatomic_ops-7.6.14

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gc

Installation of GC

Install GC by running the following commands:

./configure --prefix=/usr      \
            --enable-cplusplus \
            --disable-static   \
            --docdir=/usr/share/doc/gc-8.2.2 &&
make

To test the results, issue: make check.

Now, as the root user:

make install &&
install -v -m644 doc/gc.man /usr/share/man/man3/gc_malloc.3

Command Explanations

--docdir=/usr/share/doc/gc-8.2.2: This option is used so the package will install the documentation in a versioned directory.

--enable-cplusplus: This parameter enables the building and installing of the C++ library along with the standard C library.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None

Installed Libraries: libcord.so, libgc.so, libgccpp.so, and libgctba.so

Installed Directories: /usr/include/gc and /usr/share/doc/gc-8.2.2

Short Descriptions

libcord.so contains a tree-based string library.

libgc.so contains a C interface to the conservative garbage collector, primarily designed to replace the C malloc function.

libgccpp.so contains a C++ interface to the conservative garbage collector.

libgctba.so contains a C++ interface to throw bad allocations.

13.8 GDB-13.1


Introduction to GDB

GDB, the GNU Project debugger, allows you to see what is going on “inside” another program while it executes – or what another program was doing at the moment it crashed. Note that GDB is most effective when tracing programs and libraries that were built with debugging symbols and not stripped.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

GDB Dependencies

six-1.16.0 (Python 3 module, required at run-time to use GDB scripts from various LFS/BLFS packages with Python 3 installed in LFS)

Optional

Doxygen-1.9.6, GCC-12.2.0 (ada, gfortran, and go are used for tests), Guile-3.0.9, Python-2.7.18, rustc-1.67.1 (used for some tests), Valgrind-3.20.0, and SystemTap (run-time, used for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gdb

Installation of GDB

Install GDB by running the following commands:

mkdir build &&
cd    build &&

../configure --prefix=/usr          \
             --with-system-readline \
             --with-python=/usr/bin/python3 &&
make

Optionally, to build the API documentation using Doxygen-1.9.6, run:

make -C gdb/doc doxy

To test the results, issue:

pushd gdb/testsuite &&
make  site.exp      &&
echo  "set gdb_test_timeout 120" >> site.exp &&
runtest
popd

See gdb/testsuite/README and TestingGDB. There are many problems with the test suite:

Now, as the root user:

make -C gdb install

If you have built the API documentation, it is now in gdb/doc/doxy. You can install it (as the root user):

install -d /usr/share/doc/gdb-13.1 &&
rm -rf gdb/doc/doxy/xml &&
cp -Rv gdb/doc/doxy /usr/share/doc/gdb-13.1

Command Explanations

--with-system-readline: This switch forces GDB to use the copy of Readline installed in LFS.

--with-python=/usr/bin/python3: This switch forces GDB to use Python 3. Remove this switch if you have installed Python-2.7.18 and want to use it instead of Python 3.

Contents

Installed Programs: gcore, gdb and gdbserver

Installed Library: None

Installed Directories: /usr/{include,share}/gdb and /usr/share/doc/gdb-13.1

Short Descriptions

gcore generates a core dump of a running program.

gdb is the GNU Debugger.

gdbserver is a remote server for the GNU debugger (it allows programs to be debugged from a different machine).

13.9 Git-2.39.2


Introduction to Git

Git is a free and open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do. Git is used for version control of files, much like tools such as Mercurial-6.3.2, Bazaar, Subversion-1.14.2, CVS, Perforce, and Team Foundation Server.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

Git Dependencies

cURL-7.88.1 (needed to use Git over http, https, ftp or ftps)

Optional

GnuPG-2.4.0 (runtime, may be used to sign Git commits or tags, or verify the signatures of them), OpenSSH-9.2p1 (runtime, needed to use Git over ssh), pcre2-10.42 (or the deprecated PCRE-8.45), in either case configured with --enable-jit, Subversion-1.14.2 with Perl bindings (runtime, for git svn), Tk-8.6.13 (gitk, a simple Git repository viewer, uses Tk at runtime), Valgrind-3.20.0, Authen::SASL and MIME::Base64 (both runtime, for git send-email), and IO-Socket-SSL-2.081 (runtime, for git send-email to connect to a SMTP server with SSL encryption)

Optional (to create the man pages, html docs and other docs)

xmlto-0.0.28 and asciidoc-10.2.0 , and also dblatex (for the PDF version of the user manual), and docbook2x to create info pages

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/git

Installation of Git

Install Git by running the following commands:

./configure --prefix=/usr \
            --with-gitconfig=/etc/gitconfig \
            --with-python=python3 &&
make

You can build the man pages and/or html docs, or use downloaded ones. If you choose to build them, use the next two instructions.

If you have installed asciidoc-10.2.0 you can create the html version of the man pages and other docs:

make html

If you have installed asciidoc-10.2.0 and xmlto-0.0.28 you can create the man pages:

make man

The test suite can be run in parallel mode. To run the test suite, issue: make test. If run as a normal user, 0 tests should be reported as failed in the final summary.

Now, as the root user:

make perllibdir=/usr/lib/perl5/5.36/site_perl install

If you created the man pages and/or html docs

Install the man pages as the root user:

make install-man

Install the html docs as the root user:

make htmldir=/usr/share/doc/git-2.39.2 install-html

If you downloaded the man pages and/or html docs

If you downloaded the man pages untar them as the root user:

tar -xf ../git-manpages-2.39.2.tar.xz \
    -C /usr/share/man --no-same-owner --no-overwrite-dir

If you downloaded the html docs untar them as the root user:

mkdir -vp   /usr/share/doc/git-2.39.2 &&
tar   -xf   ../git-htmldocs-2.39.2.tar.xz \
      -C    /usr/share/doc/git-2.39.2 --no-same-owner --no-overwrite-dir &&

find        /usr/share/doc/git-2.39.2 -type d -exec chmod 755 {} \; &&
find        /usr/share/doc/git-2.39.2 -type f -exec chmod 644 {} \;

Reorganize text and html in the html-docs (both methods)

For both methods, the html-docs include a lot of plain text files. Reorganize the files as the root user:

mkdir -vp /usr/share/doc/git-2.39.2/man-pages/{html,text}         &&
mv        /usr/share/doc/git-2.39.2/{git*.txt,man-pages/text}     &&
mv        /usr/share/doc/git-2.39.2/{git*.,index.,man-pages/}html &&

mkdir -vp /usr/share/doc/git-2.39.2/technical/{html,text}         &&
mv        /usr/share/doc/git-2.39.2/technical/{*.txt,text}        &&
mv        /usr/share/doc/git-2.39.2/technical/{*.,}html           &&

mkdir -vp /usr/share/doc/git-2.39.2/howto/{html,text}             &&
mv        /usr/share/doc/git-2.39.2/howto/{*.txt,text}            &&
mv        /usr/share/doc/git-2.39.2/howto/{*.,}html               &&

sed -i '/^<a href=/s|howto/|&html/|' /usr/share/doc/git-2.39.2/howto-index.html &&
sed -i '/^\* link:/s|howto/|&html/|' /usr/share/doc/git-2.39.2/howto-index.txt

Command Explanations

--with-gitconfig=/etc/gitconfig: This sets /etc/gitconfig as the file that stores the default, system wide, Git settings.

--with-python=python3: Use this switch to use Python 3, instead of the EOL’ed Python 2. Python is used for the git p4 interface to Perforce repositories, and also used in some tests.

--with-libpcre2: Use this switch if PCRE2 is installed and has been built with the non-default JIT enabled.

--with-libpcre1: As an alternative to PCRE2, use this switch if the deprecated PCRE is installed and has been built with the non-default JIT enabled.

tar -xf ../git-manpages-2.39.2.tar.gz -C /usr/share/man –no-same-owner: This untars git-manpages-2.39.2.tar.gz. The -C option makes tar change directory to /usr/share/man before it starts to decompress the docs. The --no-same-owner option stops tar from preserving the user and group details of the files. This is useful as that user or group may not exist on your system; this could (potentially) be a security risk.

mv /usr/share/doc/git-2.39.2 …: These commands move some of the files into subfolders to make it easier to sort through the docs and find what you’re looking for.

find … chmod …: These commands correct the permissions in the shipped documentation tar file.

Configuring Git

Config Files

~/.gitconfig and /etc/gitconfig

Contents

Installed Programs: git, git-receive-pack, git-upload-archive, and git-upload-pack (hardlinked to each other), git-cvsserver, git-shell, gitk, and scalar

Installed Libraries: None

Installed Directories: /usr/libexec/git-core, and /usr/share/{doc/git-2.39.2,git-core,git-gui,gitk,gitweb}

Short Descriptions

git is the stupid content tracker.

git-cvsserver is a CVS server emulator for Git.

gitk is a graphical Git repository browser (needs Tk-8.6.13).

git-receive-pack is invoked by git send-pack and updates the repository with the information fed from the remote end.

git-shell is a login shell for SSH accounts to provide restricted Git access.

git-upload-archive is invoked by git archive –remote and sends a generated archive to the other end over the git protocol.

git-upload-pack is invoked by git fetch-pack, it discovers what objects the other side is missing, and sends them after packing.

scalar is a repository management tool that optimizes Git for use in large repositories.

13.10 Running a Git Server


Introduction

This section will describe how to set up, administer and secure a git server. Git has many options available. For more detailed documentation see https://git-scm.com/book/en/v2.

Server Dependencies

Required

git-2.39.2 and OpenSSH-9.2p1

Setting up a Git Server

The following instructions will install a git server. It will be set up to use OpenSSH as the secure remote access method.

Configuration of the server consists of the following steps:

1. Set Up Users, Groups, and Permissions

You will need to be user root for the initial portion of configuration. Create the git user and group and set and unusable password hash with the following commands:

groupadd -g 58 git &&
useradd -c "git Owner" -d /home/git -m -g git -s /usr/bin/git-shell -u 58 git &&
sed -i '/^git:/s/^git:[^:]:/git:NP:/' /etc/shadow

Putting in an unusable password hash (replacing the ! by NP) unlocks the account but it cannot be used to login via password authentication. That is required by sshd to work properly. Next, create some files and directories in the home directory of the git user allowing access to the git repository using ssh keys.

install -o git -g git -dm0700 /home/git/.ssh &&
install -o git -g git -m0600 /dev/null /home/git/.ssh/authorized_keys

For any developer who should have access to the repository add his/her public ssh key to /home/git/.ssh/authorized_keys. First, prepend some options to prevent users from using the connection to git for port forwarding to other machines the git server might reach.

echo -n "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " >> /home/git/.ssh/authorized_keys &&
cat <user-ssh-key> >> /home/git/.ssh/authorized_keys

It is also useful to set the default name of the initial branch of new repositories by modifying the git configuration. As the root user, run:

git config --system init.defaultBranch trunk

Finally add the /usr/bin/git-shell entry to the /etc/shells configuration file. This shell has been set in the git user profile and is to make sure that only git related actions can be executed:

echo "/usr/bin/git-shell" >> /etc/shells

2. Create a git repository

The repository can be anywhere on the filesystem. It is important that the git user has read/write access to that location. We use /srv/git as base directory. Create a new git repository with the following commands (as the root user):

Note

In all the instructions below, we use project1 as an example repository name. You should name your repository as a short descriptive name for your specific project.

install -o git -g git -m755 -d /srv/git/project1.git &&
cd /srv/git/project1.git                             &&
git init --bare                                      &&
chown -R git:git .

3. Populate the repository from a client system

Note

All the instructions in this section and the next should be done on a user system, not the server system.

Now that the repository is created, it can be used by the developers to put some files into it. Once the ssh key of the user is imported to git’s authorized_keys file, the user can interact with the repository.

A minimal configuration should be available on the developer’s system specifying its user name and the email address. Create this minimal config file on client side:

cat > ~/.gitconfig <<EOF
[user]
        name = <users-name>
        email = <users-email-address>
EOF

On the developer’s machine, set up some files to be pushed to the repository as the initial content:

Note

The gitserver term used below should be the host name (or ip address) of the git server.

mkdir myproject
cd myproject
git init --initial-branch=trunk
git remote add origin git@gitserver:/srv/git/project1.git
cat >README <<EOF
This is the README file
EOF
git add README
git commit -m 'Initial creation of README'
git push --set-upstream origin trunk

The initial content is now pushed to the server and is available for other users. On the current machine, the argument --set-upstream origin trunk is now no longer required as the local repository is now connected to the remote repository. Subsequent pushes can be performed as

git push

Other developers can now clone the repository and do modifications to the content (as long as their ssh keys has been installed):

git clone git@gitserver:/srv/git/project1.git
cd project1
vi README
git commit -am 'Fix for README file'
git push

Note

This is a very basic server setup based on OpenSSH access. All developers are using the git user to perform actions on the repository and the changes users are committing can be distinguished as the local user name (see ~/.gitconfig) is recorded in the changesets.

Access is restricted by the public keys added to git’s authorized_keys file and there is no option for the public to export/clone the repository. To enable this, continue with step 4 to set up the git server for public read-only access.

In the URL used to clone the project, the absolute path (here /srv/git/project1.git) has to be specified as the repository is not in git’s home directory but in /srv/git. To get rid of the need to expose the structure of the server installation, a symlink can be added in git’s home directory for each project like this:

ln -svf /srv/git/project1.git /home/git/

Now, the repository can be cloned using

git clone git@gitserver:project1.git

4. Configure the Server

The setup described above makes a repository available for authenticated users (via providing the ssh public key file). There is also a simple way to publish the repository to unauthenticated users — of course without write access.

The combination of access via ssh (for authenticated users) and the export of repositories to unauthenticated users via the daemon is in most cases enough for a development site.

Note

The daemon will be reachable at port 9418 by default. Make sure that your firewall setup allows access to that port.

To start the server at boot time, install the git-daemon.service unit from the blfs-systemd-units-20220720 package:

make install-git-daemon

In order to allow git to export a repository, a file named git-daemon-export-ok is required in each repository directory on the server. The file needs no content, just its existence enables, its absence disables the export of that repository.

touch /srv/git/project1.git/git-daemon-export-ok

Along with the git-daemon.service unit, a configuration file named /etc/default/git-daemon has been installed. Review this configuration file to match your needs.

There are only three options to set in the configuration file:

After starting the daemon, unauthenticated users can clone exported repositories by using

git clone git://gitserver/project1.git

As the base directory is /srv/git by default (or set to a custom value in the configuration), git interprets the incoming path (/project1.git) relative to that base directory so that the repository in /srv/git/project1.git is served.

13.11 Guile-3.0.9


Introduction to Guile

The Guile package contains the GNU Project’s extension language library. Guile also contains a stand alone Scheme interpreter.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Guile Dependencies

Required

GC-8.2.2 and libunistring-1.1

Optional

Emacs-28.2 and GDB-13.1 (run-time only dependencies).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/guile

Installation of Guile

Install Guile by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/guile-3.0.9 &&
make      &&
make html &&

makeinfo --plaintext -o doc/r5rs/r5rs.txt doc/r5rs/r5rs.texi &&
makeinfo --plaintext -o doc/ref/guile.txt doc/ref/guile.texi

To test the results, issue: ./check-guile. On an i686 system, as many as 10 tests will fail in the numbers.test test suite due to minor floating-point rounding errors.

Now, as the root user:

make install      &&
make install-html &&

mkdir -p                       /usr/share/gdb/auto-load/usr/lib &&
mv /usr/lib/libguile-*-gdb.scm /usr/share/gdb/auto-load/usr/lib &&
mv /usr/share/doc/guile-3.0.9/{guile.html,ref} &&
mv /usr/share/doc/guile-3.0.9/r5rs{.html,}     &&

find examples -name "Makefile*" -delete         &&
cp -vR examples   /usr/share/doc/guile-3.0.9   &&

for DIRNAME in r5rs ref; do
  install -v -m644  doc/${DIRNAME}/*.txt \
                    /usr/share/doc/guile-3.0.9/${DIRNAME}
done &&
unset DIRNAME

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: guild, guile, guile-config, guile-snarf and guile-tools

Installed Libraries: libguile-3.0.so and guile-readline.so

Installed Directories: /usr/include/guile, /usr/lib/guile, /usr/share/doc/guile-3.0.9 and /usr/share/guile

Short Descriptions

guile is a stand-alone Scheme interpreter for Guile.

guile-config is a Guile script which provides the information necessary to link your programs against the Guile library, in much the same way PkgConfig does.

guile-snarf is a script to parse declarations in your C code for Scheme visible C functions.

guild is a wrapper program installed along with guile, which knows where a particular module is installed and calls it, passing its arguments to the program.

guile-tools is a symlink to guild.

13.12 Librep-0.92.7


Introduction to Librep

The librep package contains a Lisp system. This is useful for scripting or for applications that may use the Lisp interpreter as an extension language.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/librep

Installation of Librep

Install librep by running the following commands:

./configure --prefix=/usr --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

sed -i '5043,5044 d' libtool &&
make install

Contents

Installed Programs: rep, rep-remote, rep-xgettext, and repdoc

Installed Libraries: librep.so and numerous modules installed in the /usr/lib/rep hierarchy

Installed Directories: /usr/lib/rep, /usr/share/emacs/site-lisp, and /usr/share/rep

Short Descriptions

rep is the Lisp interpreter.

librep.so contains the functions necessary for the Lisp interpreter.

13.13 LLVM-15.0.7


Introduction to LLVM

The LLVM package contains a collection of modular and reusable compiler and toolchain technologies. The Low Level Virtual Machine (LLVM) Core libraries provide a modern source and target-independent optimizer, along with code generation support for many popular CPUs (as well as some less common ones!). These libraries are built around a well specified code representation known as the LLVM intermediate representation (“LLVM IR”).

Clang provides new C, C++, Objective C and Objective C++ front-ends for LLVM and is required by some desktop packages such as firefox and for rust if that is built using the system LLVM.

The Compiler RT package provides runtime sanitizer and profiling libraries for developers who use Clang and LLVM.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

Cmake modules for LLVM

Clang

Optional Download

Compiler RT

LLVM Dependencies

Required

CMake-3.25.2

Optional

Doxygen-1.9.6, git-2.39.2, Graphviz-7.1.0, libxml2-2.10.3, Pygments-2.14.0, rsync-3.2.7 (for tests), recommonmark-0.7.1 (for building documentation), texlive-20220321 (or install-tl-unx), Valgrind-3.20.0, PyYAML-6.0, Zip-3.0, OCaml, psutil (for tests), and Z3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/llvm

Installation of LLVM

Starting with version 15.0.0, an additional tarball llvm-cmake-15.0.7.src.tar.xz is needed. The upstream expects it extracted at the same level as the llvm-15.0.7.src.tar.xz tarball, and the extracted directory renamed to cmake. Extract it and modify the build system to avoid creating a directory outside the llvm-15.0.7.src hierarchy:

tar -xf ../llvm-cmake-15.0.7.src.tar.xz &&
sed '/LLVM_COMMON_CMAKE_UTILS/s@../cmake@cmake-15.0.7.src@' \
    -i CMakeLists.txt

Install clang into the source tree by running the following commands:

tar -xf ../clang-15.0.7.src.tar.xz -C tools &&
mv tools/clang-15.0.7.src tools/clang

If you have downloaded compiler-rt, install it into the source tree by running the following commands:

tar -xf ../compiler-rt-15.0.7.src.tar.xz -C projects &&
mv projects/compiler-rt-15.0.7.src projects/compiler-rt

There are many Python scripts in this package which use /usr/bin/env python to access the system Python which on LFS is Python-3.11.2. Use the following command to fix these scripts:

grep -rl '#!.*python' | xargs sed -i '1s/python$/python3/'

If you have downloaded clang, apply the following patch to enable SSP by default in compiled programs.

patch -Np2 -d tools/clang <../clang-15.0.7-enable_default_ssp-1.patch

Install LLVM by running the following commands:

mkdir -v build &&
cd       build &&

CC=gcc CXX=g++                                  \
cmake -DCMAKE_INSTALL_PREFIX=/usr               \
      -DLLVM_ENABLE_FFI=ON                      \
      -DCMAKE_BUILD_TYPE=Release                \
      -DLLVM_BUILD_LLVM_DYLIB=ON                \
      -DLLVM_LINK_LLVM_DYLIB=ON                 \
      -DLLVM_ENABLE_RTTI=ON                     \
      -DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF" \
      -DLLVM_BINUTILS_INCDIR=/usr/include       \
      -DLLVM_INCLUDE_BENCHMARKS=OFF             \
      -DCLANG_DEFAULT_PIE_ON_LINUX=ON           \
      -Wno-dev -G Ninja ..                      &&
ninja

If you have installed recommonmark-0.7.1 and its dependencies, you can generate the html documentation and manual pages with the following commands:

cmake -DLLVM_BUILD_DOCS=ON            \
      -DLLVM_ENABLE_SPHINX=ON         \
      -DSPHINX_WARNINGS_AS_ERRORS=OFF \
      -Wno-dev -G Ninja ..            &&
ninja docs-llvm-html  docs-llvm-man

The clang documentation can be built too:

ninja docs-clang-html docs-clang-man

To test the results, issue: ninja check-all. Tests are built with all available cores, but run using the number of online processors. (The difference is that available cores can be limited using taskset, but taking them offline requires echoing 0 to /sys/devices/system/cpu/cpu<N>/online by the root user and makes them temporarily unusable by all jobs on the machine.) Note that four tests out of more than 64,700 are known to fail: DataFlowSanitizer-x86_64 :: custom.cpp, DataFlowSanitizer-x86_64 :: origin_unaligned_memtrans.c, DataFlowSanitizer-x86_64 :: release_shadow_space.c, LLVM :: tools/llvm-libtool-darwin/L-and-l.test,

Now, as the root user:

ninja install &&
cp bin/FileCheck /usr/bin

If you have built the llvm documentation, it has been installed by the above command, but it needs to be moved. As the root user:

install -v -d -m755 /usr/share/doc/llvm-15.0.7            &&
mv -v /usr/share/doc/LLVM/llvm /usr/share/doc/llvm-15.0.7 &&
rmdir -v --ignore-fail-on-non-empty /usr/share/doc/LLVM

If you have built the clang documentation, it has been installed, but needs to be moved too. Again as the root user:

install -v -d -m755 /usr/share/doc/llvm-15.0.7             &&
mv -v /usr/share/doc/LLVM/clang /usr/share/doc/llvm-15.0.7 &&
rmdir -v --ignore-fail-on-non-empty /usr/share/doc/LLVM

Command Explanations

-DLLVM_ENABLE_FFI=ON: This switch allows LLVM to use libffi.

-DLLVM_BUILD_LLVM_DYLIB=ON: This switch builds the libraries as static and links all of them into an unique shared one. This is the recommended way of building a shared library.

-DCMAKE_BUILD_TYPE=Release: This switch enables compiler optimizations in order to speed up the code and reduce its size. It also disables some compile checks which are not necessary on a production system.

-DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF": This switch enables building for the same target as the host, and also for the r600 AMD GPU used by the Mesa r600 and radeonsi drivers. The BPF target is required to build v4l-utils-1.22.1. The Default is all of the targets. You can use a semicolon separated list. Valid targets are: host, X86, Sparc, PowerPC, ARM, AArch64, Mips, Hexagon, Xcore, M68K, MSP430, NVPTX, SystemZ, AMDGPU, BPF, CppBackend, or all.

-DLLVM_LINK_LLVM_DYLIB=ON: Used in conjunction with -DLLVM_BUILD_LLVM_DYLIB=ON, this switch enables linking the tools against the shared library instead of the static ones. It slightly reduces their size and also ensures that llvm-config will correctly use libLLVM-15.so.

-DLLVM_ENABLE_RTTI=ON: This switch is used to build LLVM with run-time type information. This is required for building Mesa-22.3.5.

-DLLVM_BINUTILS_INCDIR=/usr/include: This switch is used to tell the build system the location of binutils headers, which were installed in LFS. This allows the building of LLVMgold.so, which is needed for building programs with clang and Link Time Optimization (LTO).

-DLLVM_INCLUDE_BENCHMARKS=OFF: is used to disable generation build targets for the LLVM benchmarks. This option requires additional code that is not currently available.

-DCLANG_DEFAULT_PIE_ON_LINUX=ON: makes -fpie option the default when compiling programs. Together with the ASLR feature enabled in the kernel, this defeats some kind of attacks based on known memory layouts.

-DBUILD_SHARED_LIBS=ON: if used instead of -DLLVM_BUILD_LLVM_DYLIB=ON and -DLLVM_LINK_LLVM_DYLIB=ON, builds all the LLVM libraries (about 60) as shared libraries instead of static.

-DLLVM_ENABLE_DOXYGEN: Enables the generation of browsable HTML documentation if you have installed Doxygen-1.9.6. You should run make doxygen-html afterwards, and install the generated documentation manually.

Contents

Installed Programs: analyze-build, bugpoint, c-index-test, clang, clang++ (symlinks to clang-15), clang-15, clang-check, clang-cl, clang-cpp (last two symlinks to clang), clang-extdef-mapping, clang-format, clang-linker-wrapper, clang-nvlink-wrapper, clang-offload-bundler, clang-offload-packager, clang-offload-wrapper, clang-refactor, clang-rename, clang-repl, clang-scan-deps, diagtool, dsymutil, FileCheck, git-clang-format, hmaptool, intercept-build, llc, lli, llvm-addr2line (symlink to llvm-symbolizer), llvm-ar, llvm-as, llvm-bcanalyzer, llvm-bitcode-strip (symlink to llvm-objcopy), llvm-cat, llvm-cfi-verify, llvm-config, llvm-cov, llvm-c-test, llvm-cvtres, llvm-cxxdump, llvm-cxxfilt, llvm-cxxmap, llvm-debuginfod, llvm-debuginfod-find, llvm-diff, llvm-dis, llvm-dlltool (symlink to llvm-ar), llvm-dwarfdump, llvm-dwarfutil, llvm-dwp, llvm-exegesis, llvm-extract, llvm-gsymutil, llvm-ifs, llvm-install-name-tool (symlink to llvm-objcopy), llvm-jitlink, llvm-lib (symlink to llvm-ar), llvm-libtool-darwin, llvm-link, llvm-lipo, llvm-lto, llvm-lto2, llvm-mc, llvm-mca, llvm-ml, llvm-modextract, llvm-mt, llvm-nm, llvm-objcopy, llvm-objdump, llvm-opt-report, llvm-otool (symlink to llv-objdump), llvm-pdbutil, llvm-profdata, llvm-profgen, llvm-ranlib (symlink to llvm-ar), llvm-rc, llvm-readelf (symlink to llvm-readobj), llvm-readobj, llvm-reduce, llvm-remark-size-diff, llvm-rtdyld, llvm-sim, llvm-size, llvm-split, llvm-stress, llvm-strings, llvm-strip (symlink to llvm-objcopy), llvm-symbolizer, llvm-tapi-diff, llvm-tblgen, llvm-tli-checker, llvm-undname, llvm-windres (symlink to llvm-rc), llvm-xray, opt, sancov, sanstats, scan-build, scan-build-py, scan-view, split-file, and verify-uselistorder

Installed Libraries: libLLVM.so, libLLVM.a (95 libraries), libLTO.so, libRemarks.so, libclang.so, libclang-cpp.so, libclang.a (41 libraries), and LLVMgold.so

Installed Directories: /usr/include/{clang,clang-c,llvm,llvm-c}, /usr/lib/{clang,cmake/{clang,llvm},libear,libscanbuild}, /usr/share/{clang,opt-viewer,scan-build,scan-view}, and /usr/share/doc/llvm-15.0.7

Short Descriptions

analyze-build is a static analysis tool.

bugpoint is the automatic test case reduction tool.

c-index-test is used to test the libclang API and demonstrate its usage.

clang is the Clang C, C++, and Objective-C compiler.

clang-check is a tool to perform static code analysis and display Abstract Syntax Trees (AST).

clang-extdef-mapping is a tool to collect the USR name and location of external definitions in a source file.

clang-format is a tool to format C/C++/Java/JavaScript/Objective-C/Protobuf code.

clang-linker-wrapper is a wrapper utility over the host linker.

clang-nvlink-wrapper is a wrapper tool over the nvlink program.

clang-offload-bundler is a tool to bundle/unbundle OpenMP offloaded files associated with a common source file.

clang-offload-packager is a tool to bundle several object files into a single binary, which can then be used to create a fatbinary containing offloading code.

clang-offload-wrapper is a tool to create wrapper bitcode for offload target binaries.

clang-refactor is a Clang-based refactoring tool for C, C++ and Objective-C.

clang-rename is a tool to rename symbols in C/C++ programs.

clang-scan-deps is a tool to scan for dependencies in a source file.

diagtool is a combination of tools for dealing with diagnostics in clang.

FileCheck is a tool that reads two files (one from standard input, and one specified on the command line) and uses one to verify the other.

dsymutil is a tool used to manipulate archived DWARF debug symbol files, compatible with the Darwin command dsymutil.

git-clang-format runs clang-format on git generated patches (requires git-2.39.2).

hmaptool is a Python tool to dump and construct header maps.

llc is the LLVM static compiler.

lli is used to directly execute programs from LLVM bitcode.

llvm-addr2line is a tool used to convert addresses into file names and line numbers.

llvm-ar is the LLVM archiver.

llvm-as is the LLVM assembler.

llvm-bcanalyzer is the LLVM bitcode analyzer.

llvm-bitcode-strip strips LLVM bitcode from an object.

llvm-cat is a tool to concatenate llvm modules.

llvm-cfi-verify identifies whether Control Flow Integrity protects all indirect control flow instructions in the provided object file, DSO, or binary.

llvm-config Prints LLVM compilation options.

llvm-cov is used to emit coverage information.

llvm-c-test is a bytecode disassembler.

llvm-cvtres is a tool to convert Microsoft resource files to COFF.

llvm-cxxdump is used as a C++ ABI Data Dumper.

llvm-cxxfilt is used to demangle C++ symbols in llvm code.

llvm-cxxmap is used to remap C++ mangled symbols.

llvm-debuginfod is a service providing debug information over an HTTP API for analyzing stripped binaries.

llvm-debuginfod-find is an interface to the llvm-debuginfod daemon for finding debuginfod artifacts.

llvm-diff is the LLVM structural ‘diff’.

llvm-dis is the LLVM disassembler.

llvm-dwarfdump prints the content of DWARF sections in object files.

llvm-dwarfutil is a tool to copy and manipulate debug info.

llvm-dwp merges split DWARF files.

llvm-elfabi is used to read information about an ELF binary’s ABI.

llvm-exegesis is a benchmarking tool that uses information available in LLVM to measure host machine instruction characteristics like latency or port decomposition.

llvm-extract is used to extract a function from an LLVM module.

llvm-gsymutil is used to process GSYM Symbolication Format files which convert memory addresses to function name and source file line. These files are smaller than DWARF or Breakpad files.

llvm-ifs is used to merge interface stubs with object files.

llvm-install-name-tool is used to rewrite load commands into MachO binary format.

llvm-jitlink is used to parse relocatable object files to make their contents executable in a target process.

llvm-libtool-darwin provides basic libtool functionality on Darwin-based systems. This is mostly useful if you are generating binaries for macOS systems.

llvm-link is the LLVM linker.

llvm-lipo is used to create universal binaries from MachO files.

llvm-lto is the LLVM LTO (link time optimization) linker.

llvm-lto2 is a test harness for the resolution based LTO interface.

llvm-mc is a standalone machine code assembler/disassembler.

llvm-mca is a performance analysis tool to statically measure the performance of machine code.

llvm-ml is a playground for machine code provided by LLVM.

llvm-modextract is a tool to extract one module from multimodule bitcode files.

llvm-mt is a tool to generate signed files and catalogs from a side-by-side assembly manifest (used for Microsoft SDK).

llvm-nm is used to list LLVM bitcode and object file’s symbol table.

llvm-objcopy is LLVM’s version of an objcopy tool.

llvm-objdump is an LLVM object file dumper.

llvm-opt-report is a tool to generate an optimization report from YAML optimization record files.

llvm-pdbutil is a PDB (Program Database) dumper. PDB is a Microsoft format.

llvm-profdata is a small tool to manipulate and print profile data files.

llvm-profgen generates LLVM SPGO profiling information.

llvm-ranlib is used to generate an index for a LLVM archive.

llvm-rc is a platform-independent tool to compile resource scripts into binary resource files.

llvm-readobj displays low-level format-specific information about object files.

llvm-reduce is used to automatically reduce testcases when running a test suite.

llvm-remark-size-diff reports the difference in instruction count and stack size remarks between two remark files.

llvm-rtdyld is the LLVM MC-JIT tool.

llvm-size is the LLVM object size dumper.

llvm-split is the LLVM module splitter

llvm-stress is used to generate random .ll files.

llvm-strings print strings found in a binary (object file, executable, or archive library).

llvm-symbolizer converts addresses into source code locations.

llvm-tblgen is the LLVM Target Description To C++ Code Generator.

llvm-tli-checker is the LLVM TargetLibraryInfo versus SDK checker.

llvm-undname is a tool to demangle names.

llvm-xray is an implementation of Google’s XRay function call tracing system.

intercept-build generates a database of build commands for a project.

opt is the LLVM optimizer.

sancov is the sanitizer coverage processing tool.

sanstats is the sanitizer statistics processing tool.

scan-build is a Perl script that invokes the Clang static analyzer.

scan-build-py is a Python script that invokes the Clang static analyzer.

scan-view is a viewer for Clang static analyzer results.

split-file splits an input file into multiple parts separated by regex.

verify-uselistorder is the LLVM tool to verify use-list order.

13.14 Lua-5.4.4


Introduction to Lua

Lua is a powerful light-weight programming language designed for extending applications. It is also frequently used as a general-purpose, stand-alone language. Lua is implemented as a small library of C functions, written in ANSI C, and compiles unmodified in all known platforms. The implementation goals are simplicity, efficiency, portability, and low embedding cost. The result is a fast language engine with small footprint, making it ideal in embedded systems too.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lua

Installation of Lua

Some packages check for the pkg-config file for Lua, which is created with:

cat > lua.pc << "EOF"
V=5.4
R=5.4.4

prefix=/usr
INSTALL_BIN=${prefix}/bin
INSTALL_INC=${prefix}/include
INSTALL_LIB=${prefix}/lib
INSTALL_MAN=${prefix}/share/man/man1
INSTALL_LMOD=${prefix}/share/lua/${V}
INSTALL_CMOD=${prefix}/lib/lua/${V}
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: Lua
Description: An Extensible Extension Language
Version: ${R}
Requires:
Libs: -L${libdir} -llua -lm -ldl
Cflags: -I${includedir}
EOF

Install Lua by running the following commands:

patch -Np1 -i ../lua-5.4.4-shared_library-2.patch &&
make linux

To test the results, issue: make test. “This will run the interpreter and print its version”. More comprehensive tests can be performed if you downloaded the “Test suite” tarball. Those tests need to be executed after the package is installed, thus we defer to the description below.

Now, as the root user:

make INSTALL_TOP=/usr                \
     INSTALL_DATA="cp -d"            \
     INSTALL_MAN=/usr/share/man/man1 \
     TO_LIB="liblua.so liblua.so.5.4 liblua.so.5.4.4" \
     install &&

mkdir -pv                      /usr/share/doc/lua-5.4.4 &&
cp -v doc/*.{html,css,gif,png} /usr/share/doc/lua-5.4.4 &&

install -v -m644 -D lua.pc /usr/lib/pkgconfig/lua.pc

Here we describe only the “Basic tests”. Untar the tarball and change to the lua-5.4.4-tests directory, then issue lua -e “_U=true” all.lua. If the tests finish without error, you will see a message containing the string “final OK”.

Contents

Installed Programs: lua and luac

Installed Library: liblua.so

Installed Directories: /usr/{lib,share}/lua and /usr/share/doc/lua-5.4.4

Short Descriptions

lua is the standalone Lua interpreter.

luac is the Lua compiler.

liblua.so contains the Lua API functions.

13.15 Lua-5.2.4


Introduction to Lua 5.2

Lua is a powerful light-weight programming language designed for extending applications. It is also frequently used as a general-purpose, stand-alone language. Lua is implemented as a small library of C functions, written in ANSI C, and compiles unmodified in all known platforms. The implementation goals are simplicity, efficiency, portability, and low embedding cost. The result is a fast language engine with small footprint, making it ideal in embedded systems too.

This is an older version of Lua needed only for compatibility with other programs such as Wireshark-4.0.3.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lua

Installation of Lua 5.2

Some packages check for the pkg-config file for Lua, which is created with:

cat > lua.pc << "EOF"
V=5.2
R=5.2.4

prefix=/usr
INSTALL_BIN=${prefix}/bin
INSTALL_INC=${prefix}/include/lua5.2
INSTALL_LIB=${prefix}/lib
INSTALL_MAN=${prefix}/share/man/man1
INSTALL_LMOD=${prefix}/share/lua/${V}
INSTALL_CMOD=${prefix}/lib/lua/${V}
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/lua5.2

Name: Lua
Description: An Extensible Extension Language
Version: ${R}
Requires:
Libs: -L${libdir} -llua5.2 -lm -ldl
Cflags: -I${includedir}
EOF

Install Lua by running the following commands:

patch -Np1 -i ../lua-5.2.4-shared_library-1.patch &&

sed -i '/#define LUA_ROOT/s:/usr/local/:/usr/:' src/luaconf.h &&

sed -r -e '/^LUA_(SO|A|T)=/ s/lua/lua5.2/' \
       -e '/^LUAC_T=/ s/luac/luac5.2/'     \
       -i src/Makefile &&

make MYCFLAGS="-fPIC" linux

The installation of this package is complex, so we will use the DESTDIR method of installation:

make TO_BIN='lua5.2 luac5.2'                     \
     TO_LIB="liblua5.2.so liblua5.2.so.5.2 liblua5.2.so.5.2.4" \
     INSTALL_DATA="cp -d"                        \
     INSTALL_TOP=$PWD/install/usr                \
     INSTALL_INC=$PWD/install/usr/include/lua5.2 \
     INSTALL_MAN=$PWD/install/usr/share/man/man1 \
     install &&

install -Dm644 lua.pc install/usr/lib/pkgconfig/lua52.pc &&

mkdir -pv install/usr/share/doc/lua-5.2.4 &&
cp -v doc/*.{html,css,gif,png} install/usr/share/doc/lua-5.2.4 &&

ln -s liblua5.2.so install/usr/lib/liblua.so.5.2   &&
ln -s liblua5.2.so install/usr/lib/liblua.so.5.2.4 &&

mv install/usr/share/man/man1/{lua.1,lua5.2.1} &&
mv install/usr/share/man/man1/{luac.1,luac5.2.1}

Now, as the root user:

chown -R root:root install  &&
cp -a install/* /

Command Explanations

sed -i … src/luaconf.h: This command changes the Lua search path to match the install path.

sed -i … src/Makefile: This command deconflicts this installation with the latest version of lua.

Contents

Installed Programs: lua5.2 and luac5.2

Installed Library: liblua5.2.so

Installed Directories: /usr/include/lua5.2, /usr/lib/lua/5.2, /usr/share/doc/lua-5.2.4, and /usr/share/lua/5.2

Short Descriptions

lua5.2 is the standalone Lua version 5.2 interpreter.

luac5.2 is the Lua version 5.2 compiler.

liblua5.2.so contains the Lua version 5.2 API functions.

13.16 Mercurial-6.3.2


Introduction to Mercurial

Mercurial is a distributed source control management tool similar to Git and Bazaar. Mercurial is written in Python and is used by projects such as Mozilla for Firefox and Thunderbird.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Mercurial Dependencies

Optional

docutils-0.19 (required to build the documentation), git-2.39.2, GPGME-1.18.0 (with Python bindings), OpenSSH-9.2p1 (runtime, to access ssh://… repositories), Pygments-2.14.0, rustc-1.67.1 (see rust/README.rst and rust/rhg/README.md), Subversion-1.14.2 (with Python bindings), Bazaar, CVS, pyflakes, pyOpenSSL, and re2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mercurial

Installation of Mercurial

Build Mercurial by issuing the following command:

make build

To build the documentation (requires docutils-0.19), issue:

make doc

To run the test suite, issue:

TESTFLAGS="-j<N> --tmpdir tmp --blacklist blacklists/fsmonitor --blacklist blacklists/linux-vfat" make check

where <N> is an integer between one and the number of ( processor X threads ), inclusive. Several tests (about 20) fail because some error messages have changed in Python, or some deprecation warnings are printed, that were not present when the test was designed. In order to investigate any apparently failing tests, you may use the run-tests.py script. To see the almost forty switches, some of them very useful, issue tests/run-tests.py –help. Running the following commands, you will execute only the tests that failed before:

pushd tests  &&
  rm -rf tmp &&
  ./run-tests.py --tmpdir tmp test-gpg.t
popd

Normally, the previous failures will be reproducible. However, if you add the switch --debug before --tmpdir, and run the tests again, some failures may disappear, which is a problem with the test suite. If this happens, there will be no more of these failures even if you do not pass the –debug switch again.

An interesting switch is --time, which will generate a table of all the executed tests and their respective start, end, user, system and real times once the tests are complete. Note that these switches may be used with make check by including them in the TESTFLAGS environment variable.

Install Mercurial by running the following command (as root):

make PREFIX=/usr install-bin

If you built the documentation, install it by running the following command (as root):

make PREFIX=/usr install-doc

After installation, two very quick and simple tests should run correctly. The first one needs some configuration:

cat >> ~/.hgrc << "EOF"
[ui]
username = <user_name> <user@mail>
EOF

where you must replace and <your@mail> (mail is optional and can be omitted). With the user identity defined, run **hg debuginstall** and several lines will be displayed, the last one reading "no problems detected". Another quick and simple test is just **hg**, which should output basic commands that can be used with **hg**.

Configuring Mercurial

Config Files

/etc/mercurial/hgrc and ~/.hgrc

The great majority of extensions are disabled by default. Run hg help extensions if you need to enable any, e.g. when investigating test failures. This will output a list of enabled and disabled extensions, as well as more information such as how to enable or disable extensions using configuration files.

If you have installed make-ca-1.12 and want Mercurial to use the certificates, as the root user, issue:

install -v -d -m755 /etc/mercurial &&
cat > /etc/mercurial/hgrc << "EOF"
[web]
cacerts = /etc/pki/tls/certs/ca-bundle.crt
EOF

Contents

Installed Programs: hg

Installed Libraries: several internal modules under /usr/lib/python3.11/site-packages/mercurial

Installed Directories: /etc/mercurial, /usr/lib/python3.11/site-packages/hgdemandimport, /usr/lib/python3.11/site-packages/hgext, /usr/lib/python3.11/site-packages/hgext3rd, /usr/lib/python3.11/site-packages/mercurial, and /usr/lib/python3.11/site-packages/mercurial-6.3.2-py3.11.egg-info

Short Descriptions

hg is the mercurial version control system..

13.17 NASM-2.16.01


Introduction to NASM

NASM (Netwide Assembler) is an 80x86 assembler designed for portability and modularity. It includes a disassembler as well.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

NASM Dependencies

Optional (for generating documentation):

asciidoc-10.2.0 and xmlto-0.0.28

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nasm

Installation of NASM

If you downloaded the optional documentation, put it into the source tree:

tar -xf ../nasm-2.16.01-xdoc.tar.xz --strip-components=1

Install NASM by running the following commands:

./configure --prefix=/usr &&
make

This package does not come with a test suite.

Now, as the root user:

make install

If you downloaded the optional documentation, install it with the following instructions as the root user:

install -m755 -d         /usr/share/doc/nasm-2.16.01/html  &&
cp -v doc/html/*.html    /usr/share/doc/nasm-2.16.01/html  &&
cp -v doc/*.{txt,ps,pdf} /usr/share/doc/nasm-2.16.01

Contents

Installed Programs: nasm and ndisasm

Installed Libraries: None

Installed Directory: /usr/share/doc/nasm-2.16.01

Short Descriptions

nasm is a portable 80x86 assembler.

ndisasm is an 80x86 binary file disassembler.

13.18 Patchelf-0.17.2


Introduction to Patchelf

The patchelf package contains a small utility to modify the dynamic linker and RPATH of ELF executables.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/patchelf

Installation of Patchelf

Install patchelf by running the following commands:

./configure --prefix=/usr \
            --docdir=/usr/share/doc/patchelf-0.17.2 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Program: patchelf

Short Descriptions

patchelf is a simple utility for modifying existing ELF executables and libraries; it can change the dynamic loader (“ELF interpreter”) of executables and change the RPATH of executables and libraries.

13.19 Perl Modules


Introduction to Perl Modules

The Perl module packages (also referred to as Distributions, because each can contain multiple modules) add useful objects to the Perl language. The packages listed on this page are required or recommended for other packages in the book. If they have dependent modules, those are either on this page or else on the next page (Perl Module Dependencies).

In many cases, only the required or recommended dependencies are listed - there might be other modules which allow more tests to be run, but omitting them will still allow the tests to PASS.

For a few modules, the BLFS editors have determined that other modules still listed as prerequisites are not required, and omitted them.

Where an alphabetically-earlier dependency of the same module pulls in a dependency, it is not mentioned for the later dependencies of the same module. You should build the listed dependencies in order.

It is generally worth running the tests for perl modules, they often can show problems such as missing dependencies which are required to use the module. Here, the editors have attempted to separate those dependencies which are only required for running test suites, but they will not be mentioned for a module where one of its dependencies uses that module for its own test suite. That is to say, if you intend to run the test suites, please run them for each dependency of the module.

It is possible to automatically install the current versions of a module and all missing or too-old dependencies recommended by upstream using CPAN. See CPAN automated install of perl modules at the end of this page.

Most of these modules only install files below /usr/lib/perl5/site_perl/5.xx.y and those will not be documented. One or two install programs (mostly, perl scripts), or a library, into /usr/bin/ or /usr/lib/ and these are documented.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/perl-modules

Archive::Zip-1.68

Introduction to Archive::Zip

The Archive::Zip module allows a Perl program to create, manipulate, read, and write Zip archive files.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Archive::Zip Dependencies

UnZip-6.0 (with its patch)

Optional

Test-MockModule-v0.176.0

Installation of Archive::Zip

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Contents

Installed Programs: crc32

Short Descriptions

crc32 computes and prints to stdout the CRC-32 values of the given files.

autovivification-0.18

Introduction to the autovivification module

This module allows you disable autovivification (the automatic creation and population of new arrays and hashes whenever undefined variables are dereferenced), and optionally throw a warning or an error when it would have occurred.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of autovivification

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Business::ISBN-3.007

Introduction to Business::ISBN

The Business::ISBN module is for work with International Standard Book Numbers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Business::ISBN Dependencies

Required

Business-ISBN-Data-20210112.006

Installation of Business::ISBN

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Business::ISMN-1.202

Introduction to Business::ISMN

The Business::ISMN module is for work with International Standard Music Numbers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Business::ISMN Dependencies

Required

Tie-Cycle-1.227

Installation of Business::ISMN

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Business::ISSN-1.005

Introduction to Business::ISSN

The Business::ISSN module is for work with International Standard Serial Numbers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Business::ISSN

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Class::Accessor-0.51

Introduction to Class::Accessor

Class::Accessor generates accessors/mutators for your class.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Class::Accessor

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Data::Compare-1.27

Introduction to Data::Compare

The Data::Compare module compares two perl data structures.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Data::Compare Dependencies

Required

Clone-0.46, File-Find-Rule-0.34

Installation of Data::Compare

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Data::Dump-1.25

Introduction to Data::Dump

Data::Dump provides pretty printing of data structures.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Data::Dump

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Data::Uniqid-0.12

Introduction to Data::Uniqid

Data::Uniqid provides three simple routines for generating unique IDs.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Data::Uniqid

Although the final test fails and reports an Error, the test suite returns a status of 0. The error can safely be ignored.

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime::Calendar::Julian-0.107

Introduction to DateTime::Calendar::Julian

DateTime::Calendar::Julian implements the Julian Calendar.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime::Calendar::Julian Dependencies

Required

DateTime-1.59

Installation of DateTime::Calendar::Julian

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime::Format::Builder-0.83

Introduction to DateTime::Format::Builder

DateTime::Format::Builder created DateTime parser classes and objects.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime::Format::Builder Dependencies

Required

DateTime-Format-Strptime-1.79 and Params-Validate-1.31

Installation of DateTime::Format::Builder

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Encode::EUCJPASCII-0.03

Introduction to Encode::EUCJPASCII

Encode::EUCJPASCII provides an eucJP-open (Extended Unix Code, Japanese) mapping.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Encode::EUCJPASCII

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Encode::HanExtra-0.23

Introduction to Encode::HanExtra

The Encode::HanExtra module provides extra sets of Chinese Encodings which are not included in the core Encode module because of size issues.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Encode::HanExtra

This module uses the ‘unsafe’ build and installation instructions (In perl-5.26.0 the use of the current directory in @INC was removed for security reasons and this module has not been updated) :

PERL_USE_UNSAFE_INC=1 perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Encode::JIS2K-0.03

Introduction to Encode::JIS2K

The Encode::JIS2K module provides JIS X 0212 (aka JIS 2000) Encodings.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Encode::JIS2K

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::Slurper-0.014

Introduction to File::Slurper

File::Slurper is a simple, sane and efficient module to slurp a file.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

File::Slurper Dependencies

Test-Warnings-0.031

Installation of File::Slurper

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::Which-1.27

Introduction to File::Which

File::Which provides a portable implementation of the ‘which’ utility.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of File::Which

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTML::Parser-3.81

Introduction to HTML::Parser

The HTML::Parser distribution is a collection of modules that parse and extract information from HTML documents.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTML::Parser Dependencies

Required

HTML-Tagset-3.20

Required (runtime)

HTTP-Message-6.44 (its module HTTP::Headers is a run-time requirement for HTML::HeadParser from this distribution).

Installation of HTML::Parser

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTTP::Daemon-6.15

Introduction to HTTP::Daemon

Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen on a socket for incoming requests. The HTTP::Daemon is a subclass of IO::Socket::INET, so you can perform socket operations directly on it too.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTTP::Daemon Dependencies

Required

HTTP-Message-6.44

Note

Makefile.PL and running the tests will complain that Module::Build::Tiny is missing, but that is only needed for Build.PL which is used if the system lacks a C compiler.

Installation of HTTP::Daemon

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

IO::Socket::SSL-2.081

Introduction to IO::Socket::SSL

IO::Socket::SSL makes using SSL/TLS much easier by wrapping the necessary functionality into the familiar IO::Socket interface and providing secure defaults whenever possible.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

IO::Socket::SSL Dependencies

Required

make-ca-1.12 and Net-SSLeay-1.92

URI-5.17 (to access international domain names)

Installation of IO::Socket::SSL

This module uses a variant of the standard build and installation instructions:

yes | perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Command Explanations

yes: Perl will ask if you wish to run external tests, which will ‘fail soft’ if there are network problems. The default is ‘y’, this allows you to script the build.

IO::String-1.08

Introduction to IO::String

IO::String - Emulate file interface for in-core strings.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of IO::String

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

IPC::Run3-0.048

Introduction to IPC::Run3

IPC::Run3 is used to run a subprocess with input/output redirection.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of IPC::Run3

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

JSON-4.10

Introduction to JSON

JSON provides a simple wrapper for JSON::XS-compatible modules with some additional features.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of JSON

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Lingua::Translit-0.29

Introduction to Lingua::Translit

Lingua::Translit and its translit program transliterate text between writing systems.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Lingua::Translit

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Contents

Installed Programs: translit

Short Descriptions

translit transliterates text between writing systems using various standards.

LWP (libwww-perl-6.67)

Introduction to LWP - The World-wide Web library for Perl

The libwww-perl collection is a set of Perl modules which provides a simple and consistent application programming interface (API) to the World-Wide Web. The main focus of the library is to provide classes and functions that allow you to write WWW clients. The library also contains modules that are of more general use and even classes that help you implement simple HTTP servers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

libwww-perl Dependencies

Required

File-Listing-6.15, HTTP-Cookies-6.10, HTTP-Daemon-6.15, HTTP-Negotiate-6.01, HTML-Parser-3.81, Net-HTTP-6.22, Try-Tiny-0.31 and WWW-RobotRules-6.02

Test-Fatal-0.017, Test-Needs-0.002010 and Test-RequiresInternet-0.05

Installation of libwww-perl

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

After installing this package, if you want HTTPS protocol support install LWP-Protocol-https-6.10.

Contents

Installed Programs: lwp-download, lwp-dump, lwp-mirror, lwp-request

Short Descriptions

lwp-download is a script to fetch a large file from the web.

lwp-dump is used to see what headers and content is returned for a URL.

lwp-mirror is a simple mirror utility.

lwp-request is a simple command line user agent.

List::AllUtils-0.19

Introduction to List::AllUtils

The List::Allutils module combines List::Util and List::MoreUtils in one bite-sized package.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

List::AllUtils Dependencies

Required

List-SomeUtils-0.59, List-UtilsBy-0.12

Installation of List::AllUtils

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

List::MoreUtils-0.430

Introduction to List::MoreUtils

List::MoreUtils provides the stuff missing in List::Util.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

List::MoreUtils Dependencies

Required

Exporter-Tiny-1.006000 and List-MoreUtils-XS-0.430

Installation of List::MoreUtils

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Log::Log4perl-1.57

Introduction to Log::Log4perl

Log::Log4perl provides a Log4j implementation for perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Log::Log4perl

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Contents

Installed Programs: l4p-templ

Short Descriptions

l4p-templ prints out the text of a template Log4perl configuration for starting a new Log4perl configuration file.

LWP::Protocol::https-6.10

Introduction to LWP::Protocol::https

LWP::Protocol::https provides https support for LWP::UserAgent (i.e. libwww-perl-6.67). Once the module is installed LWP is able to access sites using HTTP over SSL/TLS.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Download

LWP::Protocol::https Dependencies

Required

IO-Socket-SSL-2.081, libwww-perl-6.67 and make-ca-1.12 with /etc/pki/tls/certs/ca-bundle.crt.

Installation of LWP::Protocol::https

First, apply a patch to use the system certificates (using the CPAN automated install will instead use Mozilla::CA which is usually not up to date and does not use local certificates).

patch -Np1 -i ../LWP-Protocol-https-6.10-system_certs-2.patch

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Module::Build-0.4232

Introduction to Module::Build

Module::Build allows perl modules to be built without a make command being present.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Module::Build

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Note that this module can also be built using Build.PL

Contents

Installed Programs: config_data

Short Descriptions

config_data is used to query or change the configuration of perl modules.

Net::DNS-1.36

Introduction to Net::DNS

Net::DNS is a DNS resolver implemented in Perl. It can be used to perform nearly any type of DNS query from a Perl script.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Net::DNS

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Parse::RecDescent-1.967015

Introduction to Parse::RecDescent

Parse::RecDescent incrementally generates top-down recursive-descent text parsers from simple yacc-like grammar specifications.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Parse::RecDescent

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Parse::Yapp-1.21

Introduction to Parse::Yapp

Parse::Yapp is a Perl extension for generating and using LALR parsers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Parse::Yapp

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Contents

Installed Programs: yapp

Short Descriptions

yapp is a frontend to the Parse::Yapp module, which lets you create a Perl OO parser from an input grammar file.

PerlIO::utf8_strict-0.010

Introduction to PerlIO::utf8_strict

PerlIO::utf8_strict provides a fast and correct UTF-8 PerlIO layer. Unlike perl’s default :utf8 layer it checks the input for correctness.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PerlIO::utf8_strict Dependencies

Test-Exception-0.43

Installation of PerlIO::utf8_strict

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Regexp::Common-2017060201

Introduction to Regexp::Common

Regexp::Common provides commonly requested regular expressions.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Regexp::Common

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

SGMLSpm-1.1

Introduction to SGMLSpm

The SGMLSpm module is a Perl library used for parsing the output from James Clark’s SGMLS and NSGMLS parsers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of SGMLSpm

Before beginning the build, issue the following command to prevent an error:

chmod -v 644 MYMETA.yml

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

After the package has been installed, run the following command as the root user:

ln -sv sgmlspl.pl /usr/bin/sgmlspl

Contents

Installed Programs: sgmlspl.pl, sgmlspl

Short Descriptions

sgmlspl.pl is an SGML processor.

sgmlspl is a symbolic link used during the install of DocBook-utils-0.6.14.

Sort::Key-1.33

Introduction to Sort::Key

Sort::Key provides a set of functions to sort lists of values by some calculated key value.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Sort::Key

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Command-0.11

Introduction to Test::Command

Test::Command tests the exit status, STDOUT, or STDERR, of an external command.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Command

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Differences-0.69

Introduction to Test::Differences

Test::Differences tests strings and data structures and shows the differences if they do not match.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::Differences Dependencies

Required

Text-Diff-1.45,

Capture-Tiny-0.48

Installation of Test::Differences

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Text::BibTeX-0.89

Introduction to Text::BibTeX

Text::BibTeX provides an interface to read and parse BibTeX files.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Text::BibTeX Dependencies

Required

Config-AutoConf-0.320, ExtUtils-LibBuilder-0.08

Installation of Text::BibTeX

This module is built using Build.PL:

perl Build.PL &&
./Build       &&
./Build test

Now, as the root user:

./Build install

Contents

Installed Programs: biblex, libparse, dumpnames

Installed Libraries: libtparse.so

Short Descriptions

biblex performs lexical analysis on a BibTeX file.

bibparse parses a series of BibTeX files with command line options to control the string post-processing behavior.

dumpnames parses a BibTeX file, splitting ‘author’ and ‘editor’ fields into lists of names, and then dumps everything to stdout.

libbtparse.so is a library for parsing and processing BibTeX data files.

Text::CSV-2.02

Introduction to Text::CSV

Text::CSV is a comma-separated values manipulator, using XS (eXternal Subroutine - for subroutines written in C or C++) or pure perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Text::CSV Dependencies

Text-CSV_XS-1.49 (required by biber-2.18)

Installation of Text::CSV

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Text::Roman-3.5

Introduction to Text::Roman

Text::Roman allows conversion between Roman and Arabic algorisms (number systems, e.g. MCMXLV and 1945).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Text::Roman

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Unicode::Collate-1.31

Introduction to Unicode::Collate

Unicode::Collate provides a Unicode collation algorithm.

Note

This is a core module. If you are using perl-5.28.0 or later, its version is good enough for biber-2.18 and you do not need to reinstall this module.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Unicode::Collate

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Unicode::LineBreak-2019.001

Introduction to Unicode::LineBreak

Unicode::LineBreak provides a UAX #14 Unicode Line Breaking Algorithm.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Unicode::LineBreak Dependencies

Required

MIME-Charset-1.013.1, also Wget-1.21.3 (to download two files from unicode.org in the test suite)

Optional

libthai (to break Thai words into segments)

Installation of Unicode::LineBreak

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

URI-5.17

Introduction to URI

This module implements the URI class. Objects of this class represent “Uniform Resource Identifier references” as specified in RFC 2396 (and updated by RFC 2732). A Uniform Resource Identifier is a compact string of characters that identifies an abstract or physical resource. A Uniform Resource Identifier can be further classified as either a Uniform Resource Locator (URL) or a Uniform Resource Name (URN). The distinction between URL and URN does not matter to the URI class interface. A “URI-reference” is a URI that may have additional information attached in the form of a fragment identifier.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

URI Dependencies

Test-Fatal-0.017, Test-Needs-0.002010, and Test-Warnings-0.031

Optional

Business-ISBN-3.007

Installation of URI

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::LibXML::Simple-1.01

Introduction to XML::LibXML::Simple

The XML::LibXML::Simple module is a rewrite of XML::Simple to use the XML::LibXML parser for XML structures,instead of the plain Perl or SAX parsers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

XML::LibXML::Simple Dependencies

Required

XML-LibXML-2.0208

Installation of XML::LibXML::Simple

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::LibXSLT-2.002001

Introduction to XML::LibXSLT

XML-LibXSLT provides an interface to libxslt-1.1.37

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

XML::LibXSLT Dependencies

Required

libxslt-1.1.37, XML-LibXML-2.0208

Installation of XML::LibXSLT

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::Simple-2.25

Introduction to XML::Simple

XML::Simple provides an easy API to read and write XML (especially config files). It is deprecated and its use is discouraged.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

XML::Simple Dependencies

Optional

XML-SAX-1.02 (for an alternative parser which will be used if available, otherwise XML::Parser which was installed in LFS will be used),

Installation of XML::Simple

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::Writer-0.900

Introduction to XML::Writer

XML::Writer provides a Perl extension for writing XML documents.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of XML::Writer

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

CPAN automated install of perl modules

Automatic Installation of Perl Modules.

There is an alternate way of installing the modules using the cpan shell install command. The command automatically downloads the latest source from the CPAN archive for the module and any missing prerequisite modules listed by upstream. Then for each module it extracts it, runs the compilation, the tests and installs it.

You still need to install any non-perl dependencies before running the automated installation method. You may wish to clean out the build/ directory after installing, to free up the space. If any post-install actions such as creating a symlink are mentioned, you should also do those.

The first time you run cpan, you’ll be prompted to enter some information regarding download locations and methods. This information is retained in files located in ~/.cpan.

In particular, you may wish to configure it so that Sudo-1.9.13p1 is used for the installs, allowing you to build and test as a regular user. The following examples have not used that approach.

Start the cpan shell by issuing ‘cpan’ as the root user. Any module may now be installed from the cpan>  prompt with the command:

install <Module::Name>

For additional commands and help, issue ‘help’ from the cpan>  prompt.

Alternatively, for scripted or non-interactive installations, use the following syntax as the root user to install one or more modules:

cpan -i <Module1::Name> <Module2::Name>

Review the cpan.1 man page for additional parameters you can pass to cpan on the command line.

13.20 Perl Module Dependencies


Perl Modules which are only required by other modules

The modules on the previous page are referenced from other pages in BLFS, but these modules are only in the book as dependencies of those modules. If you use the CPAN install method, you do not need to read this page.

The BLFS editors pay much less attention to these modules, and the versions will not be regularly reviewed. In all cases, only the required or recommended dependencies are listed - there might be other modules which allow more tests to be run, but omitting them will still allow the tests to PASS.

Note

The links on this page (to metacpan.org) should go to “known good” versions, for which their dependencies are correct. If you wish to use a later version, please check the Changes file at https://metacpan.org - sometimes added dependencies are listed, other times not. Some of these modules have very frequent updates, often bringing different dependencies. The linked metacpan.org versions below were known to work with the the module versions in BLFS when last reviewed.

However, if you notice that the Changes file for a newer version than is in the current development book reports a fix for a security issue, please report this to either the blfs-dev or the blfs-support list.

Similarly, if you discover that an updated module on the previous page needs an extra dependency, please report this.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/perl-modules

Algorithm::Diff-1.201

Introduction to Algorithm::Diff

Algorithm::Diff computes ‘intelligent’ differences between two files or lists.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Algorithm::Diff

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Alien::Build-2.77

Introduction to Alien::Build

Alien::Build provides tools for building external (non-CPAN) dependencies for CPAN.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Alien::Build Dependencies

Required

Capture-Tiny-0.48, File-Which-1.27, FFI-CheckLib-0.31 and File-chdir-0.1011

Installation of Alien::Build

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Alien::Build::Plugin::Download::GitLab-0.01

Introduction to Alien::Build::Plugin::Download::GitLab

Alien::Build::Plugin::Download::GitLab allows Alien::Build to download from GitLab (in practice, this does not download if the required library is already installed on the system).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Alien::Build::Plugin::Download::GitLab Dependencies

Required

Alien-Build-2.77 and URI-5.17

Installation of Alien::Build::Plugin::Download::GitLab

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Alien::Libxml2-0.19

Introduction to Alien::Libxml2

Alien::Libxml2 is designed to allow modules to install the C libxml2 library on your system. In BLFS, it uses pkg-config to find how to link to the installed libxml2-2.10.3.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Alien::Libxml2 Dependencies

Required

Alien-Build-Plugin-Download-GitLab-0.01, libxml2-2.10.3, Path-Tiny-0.144

Test2-Suite-0.000145

Installation of Alien::Libxml2

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

B::COW-0.007

Introduction to B::COW

B::COW provides additional helpers for the B core module to check Copy On Write.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of B::COW

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

B::Hooks::EndOfScope-0.26

Introduction to B::Hooks::EndOfScope

B::Hooks::EndOfScope allows you to execute code when perl finished compiling the surrounding scope.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

B::Hooks::EndOfScope Dependencies

Required

Module-Implementation-0.09, Sub-Exporter-Progressive-0.001013 and Variable-Magic-0.63

Try-Tiny-0.31

Installation of B::Hooks::EndOfScope

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Business::ISBN::Data-20210112.006

Introduction to Business-ISBN-Data

Business-ISBN-Data is a data pack for Business::ISBN.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Business-ISBN-Data

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Capture::Tiny-0.48

Introduction to Capture::Tiny

The Capture::Tiny module captures STDOUT and STDERR from Perl, XS (eXternal Subroutine, i.e. written in C or C++) or external programs.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Capture::Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Class::Data::Inheritable-0.09

Introduction to Class::Data::Inheritable

Class::Data::Inheritable is for creating accessor/mutators to class data. That is, if you want to store something about your class as a whole (instead of about a single object).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Class::Data::Inheritable

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Class::Inspector-1.36

Introduction to Class::Inspector

Class::Inspector allows you to get information about a loaded class.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Class::Inspector

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Class::Singleton-1.6

Introduction to Class::Singleton

A Singleton describes an object class that can have only one instance in any system, such as a print spooler. This module implements a Singleton class from which other classes can be derived.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Class::Singleton

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Class:Tiny-1.008

Introduction to Class:Tiny

Class:Tiny offers a minimalist class construction kit.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Class:Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Clone-0.46

Introduction to Clone

Clone recursively copies perl datatypes.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Clone Dependencies

B-COW-0.007

Installation of Clone

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Config::AutoConf-0.320

Introduction to Config::AutoConf

The Config::AutoConf module implements some of the AutoConf macros (detecting a command, detecting a library, etc.) in pure perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Config::AutoConf Dependencies

Required

Capture-Tiny-0.48, File-Slurper-0.014

Installation of Config::AutoConf

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

CPAN::Meta::Check-0.017

Introduction to CPAN::Meta::Check

CPAN::Meta::Check verifies if requirements described in a CPAN::Meta object are present.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of CPAN::Meta::Check

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime-1.59

Introduction to DateTime

DateTime is a date and time object for perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime Dependencies

Required

DateTime-Locale-1.37, DateTime-TimeZone-2.57

CPAN-Meta-Check-0.017, Test-Fatal-0.017, Test-Warnings-0.031 and Test-Without-Module-0.21

Installation of DateTime

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime::Format::Strptime-1.79

Introduction to DateTime::Format::Strptime

DateTime::Format::Strptime implements most of strptime(3), i.e. it takes a string and a pattern and returns a DateTime object.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime::Format::Strptime Dependencies

Required

DateTime-1.59

Installation of DateTime::Format::Strptime

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime::Locale-1.37

Introduction to DateTime::Locale

DateTime::Locale provides localization support for DateTime-1.59.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime::Locale Dependencies

Required

Dist-CheckConflicts-0.11, File-ShareDir-1.118, namespace-autoclean-0.29 and Params-ValidationCompiler-0.31

CPAN-Meta-Check-0.017, IPC-System-Simple-1.30 and Test-File-ShareDir-1.001002

Installation of DateTime::Locale

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

DateTime::TimeZone-2.57

Introduction to DateTime::TimeZone

This class is the base class for all time zone objects. A time zone is represented internally as a set of observances, each of which describes the offset from GMT for a given time period.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

DateTime::TimeZone Dependencies

Required

Class-Singleton-1.6, Module-Runtime-0.016, and Params-ValidationCompiler-0.31, also

Both Test-Fatal-0.017 and Test-Requires-0.11, but only if a copy of DateTime-1.59 (for which this is a dependency) has already been installed

Installation of DateTime::TimeZone

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Devel::StackTrace-2.04

Introduction to Devel::StackTrace

Devel::StackTrace provides an object representing a stacvk trace.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Devel::StackTrace

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Dist::CheckConflicts-0.11

Introduction to Dist::CheckConflicts

Dist::CheckConflicts declares version conflicts for a distribution, to support post-install updates of dependent distributions.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Dist::CheckConflicts Dependencies

Required

Module-Runtime-0.016

Test-Fatal-0.017

Installation of Dist::CheckConflicts

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Encode::Locale-1.05

Introduction to Encode::Locale

Encode::Locale determines the locale encoding.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Encode::Locale

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Eval::Closure-0.14

Introduction to Eval::Closure

Eval::Closure safely and cleanly creates closures via string eval.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Eval::Closure Dependencies

Test-Fatal-0.017, Test-Requires-0.11

Installation of Eval::Closure

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Exception::Class-1.45

Introduction to Exception::Class

Exception::Class allows you to declare real exception classes in Perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Exception::Class Dependencies

Required

Class-Data-Inheritable-0.09, Devel-StackTrace-2.04

Installation of Exception::Class

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Exporter::Tiny-1.006000

Introduction to Exporter::Tiny

Exporter::Tiny is an exporter with the features of Sub::Exporter but only core dependencies.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Exporter::Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

ExtUtils::LibBuilder-0.08

Introduction to ExtUtils::LibBuilder

ExtUtils::LibBuilder is a tool to build C libraries.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

ExtUtils::LibBuilder Dependencies

Required

Module-Build-0.4232

Installation of ExtUtils::LibBuilder

This module is built using Build.PL:

perl Build.PL &&
./Build       &&
./Build test

Now, as the root user:

./Build install

FFI::CheckLib-0.31

Introduction to FFI::CheckLib

FFI::CheckLib checks whether a particular dynamic library is available for FFI (Foreign Function Interface) to use.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

FFI::CheckLib Dependencies

Capture-Tiny-0.48, Path-Tiny-0.144, Test2-Suite-0.000145

Installation of FFI::CheckLib

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::chdir-0.1011

Introduction to File::chdir

File::chdir provides a more sensible way to change directories.

Perl’s chdir() has the unfortunate problem of being very, very, very global. If any part of your program calls chdir() or if any library you use calls chdir(), it changes the current working directory for the whole program. File::chdir gives you an alternative, $CWD and @CWD.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of File::chdir

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::Copy::Recursive-0.45

Introduction to File::Copy::Recursive

This module copies and moves directories recursively (or single files), to an optional depth and attempts to preserve each file or directory’s mode.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

File::Copy::Recursive Dependencies

Path-Tiny-0.144, Test-Deep-1.204, Test-Fatal-0.017, Test-File-1.993 and Test-Warnings-0.031

Installation of File::Copy::Recursive

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::Find::Rule-0.34

Introduction to File::Find::Rule

File::Find::Rule is a friendlier interface to File::Find. It allows you to build rules which specify the desired files and directories.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

File::Find::Rule Dependencies

Required

Number-Compare-0.03, Text-Glob-0.11

Installation of File::Find::Rule

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Contents

Installed Programs: findrule

Short Descriptions

findrule is a command line wrapper to File::Find::Rule.

File::Listing-6.15

Introduction to File::Listing

File::Listing parses a directory listing.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

File::Listing Dependencies

Required

HTTP-Date-6.05,

Installation of File::Listing

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::ShareDir-1.118

Introduction to File::ShareDir

File::ShareDir allows you to access data files which have been installed by File::ShareDir::Install.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

File::ShareDir Dependencies

Required

Class-Inspector-1.36, File-ShareDir-Install-0.14

Installation of File::ShareDir

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

File::ShareDir::Install-0.14

Introduction to File::ShareDir::Install

File::ShareDir::Install allows you to install read-only data files from a distribution.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of File::ShareDir::Install

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTML::Tagset-3.20

Introduction to HTML::Tagset

HTML::Tagset provides several data tables useful in parsing HTML.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of HTML::Tagset

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTTP::Cookies-6.10

Introduction to HTTP::Cookies

HTTP::Cookies provides a class for objects that represent a “cookie jar” – that is, a database of all the HTTP cookies that a given LWP::UserAgent (from libwww-perl-6.67) object knows about.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTTP::Cookies Dependencies

Required

HTTP-Message-6.44

Installation of HTTP::Cookies

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTTP::Date-6.05

Introduction to HTTP::Date

HTTP::Date provides functions to deal with the date formats used by the HTTP protocol and also with some other date formats.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTTP::Date Dependencies

TimeDate-2.33 (to allow it to recognize zones other than GMT and numeric)

Installation of HTTP::Date

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTTP::Message-6.44

Introduction to HTTP::Message

HTTP::Message provides a base class for HTTP style message objects.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTTP::Message Dependencies

Required

Clone-0.46, Encode-Locale-1.05, HTTP-Date-6.05, IO-HTML-1.004, LWP-MediaTypes-6.04 and URI-5.17

Test-Needs-0.002010, Try-Tiny-0.31

Installation of HTTP::Message

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

HTTP::Negotiate-6.01

Introduction to HTTP::Negotiate

HTTP::Negotiate provides a complete implementation of the HTTP content negotiation algorithm.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

HTTP::Negotiate Dependencies

HTTP-Message-6.44

Installation of HTTP::Negotiate

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Importer-0.026

Introduction to Importer

Importer provides an alternative but compatible interface to modules that export symbols.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Importer

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

IO::HTML-1.004

Introduction to IO::HTML

IO::HTML opens an HTML file with automatic character set detection.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of IO::HTML

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

IPC::System::Simple-1.30

Introduction to IPC::System::Simple

IPC::System::Simple takes the hard work out of calling external commands and producing detailed diagnostics.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of IPC::System::Simple

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

List::MoreUtils::XS-0.430

Introduction to List::MoreUtils::XS

List::MoreUtils::XS is a compiled backend for List::MoreUtils

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of List::MoreUtils::XS

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

List::SomeUtils-0.59

Introduction to List::SomeUtils

List::SomeUtils provides the stuff missing in List::Util.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

List::SomeUtils Dependencies

Required

Module-Implementation-0.09, List-SomeUtils-XS-0.58

Installation of List::SomeUtils

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

List::SomeUtils::XS-0.58

Introduction to List::SomeUtils::XS

List::SomeUtils::XS is a (faster) XS (eXternal Subroutine) implementation for List::SomeUtils.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

List::SomeUtils::XS Dependencies

Test-LeakTrace-0.17, Test-Warnings-0.031

Installation of List::SomeUtils::XS

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

List::UtilsBy-0.12

Introduction to List::UtilsBy

List::UtilsBy provides a number of higher-order list utility functions.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of List::UtilsBy

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

LWP::MediaTypes-6.04

Introduction to LWP::MediaTypes

LWP::MediaTypes guesses the media type (i.e. the MIME Type) for a file or URL.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

LWP::MediaTypes Dependencies

Test-Fatal-0.017

Installation of LWP::MediaTypes

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

MIME::Charset-1.013.1

Introduction to MIME::Charset

MIME::Charset provides information about character sets used for MIME messages o nthe internet, such as their encodings.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

MIME::Charset Dependencies

Encode-EUCJPASCII-0.03, Encode-HanExtra-0.23 and Encode-JIS2K-0.03 (because all are required by biber-2.18)

Installation of MIME::Charset

This module uses a variant of the standard build and installation instructions:

yes '' | perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Command Explanations

**yes **: Perl will ask if you wish to install a further module for handling legacy Japanese encodings, and another which it would use for translating documentation to Japanese. The default option is ‘n’, using ‘yes’ allows you to script the build.

Module::Implementation-0.09

Introduction to Module::Implementation

Module::Implementation loads one of several alternate underlying implementations of a module (e.g. eXternal Subroutine or pure Perl, or an implementation for a given OS).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Module::Implementation Dependencies

Required

Module-Runtime-0.016, Try-Tiny-0.31

Test-Fatal-0.017, Test-Requires-0.11

Installation of Module::Implementation

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Module::Pluggable-5.2

Introduction to Module::Pluggable

Module::Pluggable provides a way of having ‘plugins’ for your module.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Module::Pluggable

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Module::Runtime-0.016

Introduction to Module::Runtime

Module::Runtime provides functions to deal with runtime handling of Perl modules.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Module::Runtime

Although Module::Build is still listed as a prerequisite, it is no-longer necessary on systems with a working make.

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

MRO::Compat-0.15

Introduction to MRO::Compat

The “mro” namespace provides several utilities for dealing with method resolution order and method caching in general in Perl 5.9.5 and higher. This module provides those interfaces for earlier versions of Perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of MRO::Compat

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

namespace::autoclean-0.29

Introduction to namespace::autoclean

This module is very similar to namespace::clean, except it will clean all imported functions, no matter if you imported them before or after you used the pragma. It will also not touch anything that looks like a method.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

namespace::autoclean Dependencies

Required

namespace-clean-0.27, Sub-Identify-0.14

Test-Needs-0.002010

Installation of namespace::autoclean

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

namespace::clean-0.27

Introduction to namespace::clean

This package allows you to keep imports and functions out of your namespace.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

namespace::clean Dependencies

Required

B-Hooks-EndOfScope-0.26, Package-Stash-0.40

Installation of namespace::clean

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Net::HTTP-6.22

Introduction to Net::HTTP

The Net::HTTP class is a low level HTTP client. An instance of the class represents a connection to an HTTP server.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Net::HTTP Dependencies

Required

URI-5.17

Installation of Net::HTTP

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Net::SSLeay-1.92

Introduction to Net::SSLeay

Net::SSLeay is a PERL extension for using OpenSSL.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Net::SSLeay

Note

If enabling the external tests, one test in t/external/15_altnames.t may fail.

This module uses a variant of the standard build and installation instructions:

yes '' | perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Command Explanations

yes ‘‘: Perl will ask if you wish to run external tests, which will fail if you do not have network connectivity. The default is ‘n’, specifying this allows you to script the build.

Number::Compare-0.03

Introduction to Number::Compare

Number::Compare compiles a simple comparison to an anonymous subroutine, which you can call with a value to be tested against. It understands IEC standard magnitudes (k, ki, m, mi, g, gi).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Number::Compare

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Package::Stash-0.40

Introduction to Package::Stash

Manipulating stashes (Perl’s symbol tables) is occasionally necessary, but incredibly messy, and easy to get wrong. This module hides all of that behind a simple API.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Package::Stash Dependencies

Required

Dist-CheckConflicts-0.11, Module-Implementation-0.09

CPAN-Meta-Check-0.017, Test-Fatal-0.017, Test-Needs-0.002010

Installation of Package::Stash

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Params::Validate-1.31

Introduction to Params::Validate

Params::Validate allows you to validate method or function call parameters to an arbitrary level of specificity.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Params::Validate Dependencies

Required

Module-Build-0.4232, Module-Implementation-0.09

Test-Fatal-0.017, Test-Requires-0.11

Installation of Params::Validate

This module is built using Build.PL:

perl Build.PL &&
./Build       &&
./Build test

Now, as the root user:

./Build install

Params::ValidationCompiler-0.31

Introduction to Params::ValidationCompiler

Params::ValidationCompiler builds an optimized subroutine parameter validator.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Params::ValidationCompiler Dependencies

Required

Exception-Class-1.45, Specio-0.48

Test-Without-Module-0.21, Test2-Plugin-NoWarnings-0.09

Installation of Params::ValidationCompiler

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Path::Tiny-0.144

Introduction to Path::Tiny

Path::Tiny provides a small fast utility for working with file paths.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Path::Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Role::Tiny-2.002004

Introduction to Role::Tiny

Role::Tiny is a minimalist role composition tool.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Role::Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Scope::Guard-0.21

Introduction to Scope::Guard

Scope::Guard provides a convenient way to perform cleanup or other forms of resource management at the end of a scope.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Scope::Guard

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Specio-0.48

Introduction to Specio

Specio provides classes for representing type constraints and coercion, along with syntax sugar for declaring them.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Specio Dependencies

Required

Devel-StackTrace-2.04, Eval-Closure-0.14, Module-Runtime-0.016, Role-Tiny-2.002004, Sub-Quote-2.006008 and Try-Tiny-0.31

MRO-Compat-0.15, Test-Fatal-0.017 and Test-Needs-0.002010

Optional

namespace-autoclean-0.29 (for the test suite)

Installation of Specio

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Sub::Exporter::Progressive-0.001013

Introduction to Sub::Exporter::Progressive

Sub::Exporter::Progressive is a wrapper for Sub::Exporter.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Sub::Exporter::Progressive

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Sub::Identify-0.14

Introduction to Sub::Identify

Sub::Identify allows you to retrieve the real name of code references. It is encouraged to migrate to Sub::Util (a core module) when possible.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Sub::Identify

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Sub::Info-0.002

Introduction to Sub::Info

Sub::Info is a tool for inspecting subroutines.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sub::Info Dependencies

Required

Importer-0.026

Installation of Sub::Info

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Sub::Quote-2.006008

Introduction to Sub::Quote

Sub::Quote provides ways to generate subroutines from strings.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Sub::Quote

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Sub::Uplevel-0.2800

Introduction to Sub::Uplevel

Sub::Uplevel allows you to fool a caller that it is running in a higher stack frame.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Sub::Uplevel

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

SUPER-1.20190531

Introduction to SUPER

SUPER provides easier methods to dispatch control to the superclass (when subclassing a class).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

SUPER Dependencies

Sub-Identify-0.14

Installation of SUPER

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Term::Table-0.016

Introduction to Term::Table

Term::Table formats a header and rows into a table. This is used by some failing tests to provide diagnostics about what has goen wrong.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Term::Table Dependencies

Required

Importer-0.026

Installation of Term::Table

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Deep-1.204

Introduction to Test::Deep

Test::Deep gives you very flexible ways to check that the result you got is the result you were expecting.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Deep

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Exception-0.43

Introduction to Test::Exception

Test::Exception provides convenience methods for testing exception based code.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::Exception Dependencies

Required

Sub-Uplevel-0.2800

Installation of Test::Exception

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Fatal-0.017

Introduction to Test::Fatal

The Test::Fatal module provides simple helpers for testing code which throws exceptions.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::Fatal Dependencies

Required

Try-Tiny-0.31

Installation of Test::Fatal

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::File-1.993

Introduction to Test::File

Test::File provides a collection of test utilities for file attributes.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::File Dependencies

Test-utf8-1.02

Installation of Test::File

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::File::ShareDir-1.001002

Introduction to Test::File::ShareDir

Test::File::ShareDir is some low level plumbing to enable a distribution to perform tests while consuming its own share directories in a manner similar to how they will be once installed. This allows File-ShareDir-1.118 to see the latest version of content instead of whatever is installed on the target system where you are testing.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::File::ShareDir Dependencies

Required

Class-Tiny-1.008, File-Copy-Recursive-0.45, File-ShareDir-1.118, Path-Tiny-0.144 and Scope-Guard-0.21

Test-Fatal-0.017

Installation of Test::File::ShareDir

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::LeakTrace-0.17

Introduction to Test::LeakTrace

Test::LeakTrace traces memory leaks.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::LeakTrace

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::MockModule-v0.176.0

Introduction to Test::MockModule

Test::MockModule lets you temporarily redefine subroutines in other packages for the purposes of unit testing.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test::MockModule Dependencies

Required

Module-Build-0.4232, SUPER-1.20190531

Test-Warnings-0.031

Installation of Test::MockModule

This module is built using Build.PL:

perl Build.PL &&
./Build       &&
./Build test

Now, as the root user:

./Build install

Test::Needs-0.002010

Introduction to Test::Needs

Test::Needs skips tests if a requested module is not present.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Needs

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Requires-0.11

Introduction to Test::Requires

The Test::Requires module checks if another (optional) module can be loaded, and if not it skips all the current tests.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Requires

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::RequiresInternet-0.05

Introduction to Test::RequiresInternet

Test::RequiresInternet is intended to easily test network connectivity before functional tests begin to non-local Internet resources.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::RequiresInternet

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::utf8-1.02

Introduction to Test::utf8

Test::utf8 is a collection of tests useful for dealing with utf8 strings in Perl.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::utf8

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Warnings-0.031

Introduction to Test::Warnings

Test::Warnings tests for warnings and the lack of them.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Warnings

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test::Without::Module-0.21

Introduction to Test::Without::Module

This module allows you to deliberately hide modules from a program even though they are installed. This is mostly useful for testing modules that have a fallback when a certain dependency module is not installed.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Test::Without::Module

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test2::Plugin::NoWarnings-0.09

Introduction to Test2::Plugin::NoWarnings

Test2::Plugin::NoWarnings causes tests to fail if there are any warnings while they run.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test2::Plugin::NoWarnings Dependencies

Required

Test2-Suite-0.000145

IPC-Run3-0.048

Installation of Test2::Plugin::NoWarnings

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Test2::Suite-0.000145

Introduction to Test2::Suite

Test2::Suite is a distribution with a rich set of tools built upon the Test2 framework.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Test2::Suite Dependencies

Required

Module-Pluggable-5.2, Scope-Guard-0.21, Sub-Info-0.002 and Term-Table-0.016

Installation of Test2::Suite

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Text::CSV_XS-1.49

Introduction to Text::CSV_XS

Text::CSV_XS provides facilities for the composition and decomposition of comma-separated values.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Text::CSV_XS

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Text::Diff-1.45

Introduction to Text::Diff

Text::Diff performs diffs on files and record sets.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Text::Diff Dependencies

Required

Algorithm-Diff-1.201

Installation of Text::Diff

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Text::Glob-0.11

Introduction to Text::Glob

Text::Glob implements glob(3) style matching that can be used to match against text, rather than fetching names from a filesystem.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Text::Glob

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Tie::Cycle-1.227

Introduction to Tie::Cycle

You use Tie::Cycle to go through a list over and over again. Once you get to the end of the list, you go back to the beginning. You don’t have to worry about any of this since the magic of tie does that for you.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Tie::Cycle

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

TimeDate-2.33

Introduction to TimeDate

TimeDate provides miscellaneous timezone manipulation routines.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of TimeDate

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Try::Tiny-0.31

Introduction to Try::Tiny

Try::Tiny provides try and catch to expect and handle exceptional conditions, avoiding quirks in Perl and common mistakes.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Try::Tiny Dependencies

Optional (can be used by the test suite)

Capture-Tiny-0.48

Installation of Try::Tiny

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Variable::Magic-0.63

Introduction to Variable::Magic

Magic is Perl’s way of enhancing variables. With this module, you can add your own magic to any variable.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Variable::Magic

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

WWW::RobotRules-6.02

Introduction to WWW::RobotRules

WWW::RobotRules parses robots.txt files, creating a WWW::RobotRules object with methods to check if access to a given URL is prohibited.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

WWW::RobotRules Dependencies

Required (runtime)

libwww-perl-6.67 (install this module first and install that later)

Installation of WWW::RobotRules

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::LibXML-2.0208

Introduction to XML::LibXML

XML::LibXML is a perl binding for libxml2-2.10.3.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

XML::LibXML Dependencies

Required

Alien-Libxml2-0.19, XML-SAX-1.02

Installation of XML::LibXML

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::NamespaceSupport-1.12

Introduction to XML::NamespaceSupport

XML::NamespaceSupport offers a simple way to process namespaced XML names from within any application that may need them.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of XML::NamespaceSupport

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

XML::SAX-1.02

Introduction to XML::SAX

XML::SAX is a SAX parser access API for Perl. It includes classes and APIs required for implementing SAX drivers, along with a factory class for returning any SAX parser installed on the user’s system.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

XML::SAX Dependencies

Required

libxml2-2.10.3, XML-NamespaceSupport-1.12 and XML-SAX-Base-1.09

Installation of XML::SAX

This module uses a variant of the standard build and installation instructions:

yes | perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

Command Explanations

yes: Perl will ask if you want it to alter ParserDetails.ini and then wait for a response. The default is ‘y’. Using ‘yes’ allows you to script this.

XML::SAX::Base-1.09

Introduction to XML::SAX::Base

This module has a very simple task - to be a base class for PerlSAX drivers and filters.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of XML::SAX-Base

This module uses the standard build and installation instructions:

perl Makefile.PL &&
make             &&
make test

Now, as the root user:

make install

13.21 PHP-8.2.3


Introduction to PHP

PHP is the PHP Hypertext Preprocessor. Primarily used in dynamic web sites, it allows for programming code to be directly embedded into the HTML markup. It is also useful as a general purpose scripting language.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

PHP Dependencies

Apache-2.4.55 and libxml2-2.10.3

Optional System Utilities and Libraries

Aspell-0.60.8, enchant-2.3.3, libxslt-1.1.37, an MTA (that provides a sendmail command), pcre2-10.42, Pth-2.0.7, AppArmor, Dmalloc, Net-SNMP, oniguruma, OSSP mm, re2c, and XMLRPC-EPI

Optional Graphics Utilities and Libraries

FreeType-2.13.0, libexif-0.6.24, libjpeg-turbo-2.1.5.1, libpng-1.6.39, libtiff-4.5.0, libwebp-1.3.0, a graphical environment, FDF Toolkit, GD, and t1lib

Optional Web Utilities

cURL-7.88.1, tidy-html5-5.8.0, Caudium, Hyperwave, Roxen WebServer, and WDDX

Optional Data Management Utilities and Libraries

Berkeley DB-5.3.28 (Note that PHP does not officially support versions above 5.3), libiodbc-3.52.15, lmdb-0.9.29, MariaDB-10.6.12 or MySQL, OpenLDAP-2.6.4, PostgreSQL-15.2, SQLite-3.40.1, unixODBC-2.3.11, Adabas, Birdstep, cdb, DBMaker, Empress, FrontBase, IBM DB2, Mini SQL, Monetra, and QDBM

PHP also provides support for many commercial database tools such as Oracle, SAP and ODBC Router.

Optional Security/Encryption Utilities and Libraries

Cyrus SASL-2.1.28, MIT Kerberos V5-1.20.1, libmcrypt, and mhash

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/php

Installation of PHP

You can use PHP for server-side scripting, command-line scripting or client-side GUI applications. This book provides instructions for setting up PHP for server-side scripting as it is the most common form.

Note

PHP has many more configure options that will enable support for various things. You can use ./configure –help to see a full list of the available options. Also, use of the PHP web site is highly recommended, as their online docs are very good. An example of a configure command that utilizes many of the most common dependencies can be found at https://anduin.linuxfromscratch.org/BLFS/files/php_configure.txt.

If, for whatever reason, you don’t have libxml2-2.10.3 installed, you need to add --disable-libxml to the configure command in the instructions below. Note that this will prevent the pear command from being built.

Install PHP by running the following commands:

./configure --prefix=/usr                \
            --sysconfdir=/etc            \
            --localstatedir=/var         \
            --datadir=/usr/share/php     \
            --mandir=/usr/share/man      \
            --enable-fpm                 \
            --without-pear               \
            --with-fpm-user=apache       \
            --with-fpm-group=apache      \
            --with-fpm-systemd           \
            --with-config-file-path=/etc \
            --with-zlib                  \
            --enable-bcmath              \
            --with-bz2                   \
            --enable-calendar            \
            --enable-dba=shared          \
            --with-gdbm                  \
            --with-gmp                   \
            --enable-ftp                 \
            --with-gettext               \
            --enable-mbstring            \
            --disable-mbregex            \
            --with-readline              &&
make
To test the results, issue: make test. Several tests (out of over 16000) may fail, in which case you are asked whether you want to send the report to the PHP developers. If you want to automate the test, you may prefix the command with **yes “n” ** .

Now, as the root user:

make install                                     &&
install -v -m644 php.ini-production /etc/php.ini &&

install -v -m755 -d /usr/share/doc/php-8.2.3 &&
install -v -m644    CODING_STANDARDS* EXTENSIONS NEWS README* UPGRADING* \
                    /usr/share/doc/php-8.2.3

The default configuration files for the fastCGI process manager are installed only if they do not already exist on the system. If this is the first installation, they should be renamed, as the root user:

if [ -f /etc/php-fpm.conf.default ]; then
  mv -v /etc/php-fpm.conf{.default,} &&
  mv -v /etc/php-fpm.d/www.conf{.default,}
fi

The pre-built HTML documentation is packaged in two forms: a tarball containing many individual files, useful for quick loading into your browser, and one large individual file, which is useful for using the search utility of your browser. If you downloaded either, or both, of the documentation files, issue the following commands as the root user to install them (note these instructions assume English docs, modify the tarball names below if necessary).

For the “Single HTML” file:

install -v -m644 ../php_manual_en.html.gz \
    /usr/share/doc/php-8.2.3 &&
gunzip -v /usr/share/doc/php-8.2.3/php_manual_en.html.gz

For the “Many HTML files” tarball:

tar -xvf ../php_manual_en.tar.gz \
    -C /usr/share/doc/php-8.2.3 --no-same-owner

The bundled pear is not installed because of a bug which might pollute the filesystem with several hidden files and directories. If pear is needed, execute the following commands to install it:

wget https://pear.php.net/go-pear.phar
php ./go-pear.phar

Command Explanations

--datadir=/usr/share/php: This works around a bug in the build machinery, which installs some data to a wrong location.

--enable-fpm: This parameter allows building the fastCGI Process Manager.

--with-fpm-systemd: This parameter allows the FastCGI Process Manager to integrate with systemd.

--without-pear: This switch disables installation of bundled pear software.

--with-config-file-path=/etc: This parameter makes PHP look for the php.ini configuration file in /etc.

--with-zlib: This parameter adds support for Zlib compression.

--enable-bcmath: Enables bc style precision math functions.

--with-bz2: Adds support for Bzip2 compression functions.

--enable-calendar: This parameter provides support for calendar conversion.

--enable-dba=shared: This parameter enables support for database (dbm-style) abstraction layer functions.

--enable-ftp: This parameter enables FTP functions.

--with-gettext: Enables functions that use Gettext text translation.

--enable-mbstring: This parameter enables multibyte string support.

--with-readline: This parameter enables command line Readline support.

--disable-libxml: This option allows building PHP without libxml2 installed.

--with-apxs2: Instead of building the fastCGI process manager, it is possible to build an apache module. This has some performance penalty for heavy loaded servers, but may be easier to set up. This switch is incompatible with the --enable-fpm and --with-fpm-... switches.

--with-mysqli=shared: This option includes MySQLi support.

--with-mysql-sock=/run/mysqld/mysqld.sock: Location of the MySQL unix socket pointer.

--with-pdo-mysql=shared: This option includes PDO: MySQL support.

--with-tidy=shared: This option includes tidy library support.

Configuring PHP

Config Files

/etc/php.ini, /etc/pear.conf, /etc/php-fpm.conf, and /etc/php-fpm.d/www.conf

Configuration Information

The file used as the default /etc/php.ini configuration file is recommended by the PHP development team. This file modifies the default behavior of PHP. If no /etc/php.ini is used, all configuration settings fall to the defaults. You should review the comments in this file and ensure the changes are acceptable in your particular environment.

The fastCGI process manager uses the configuration file /etc/php-fpm.conf. The default file shipped with PHP includes all the /etc/php-fpm.d/*.conf in turn. There is a shipped /etc/php-fpm.d/www.conf file, that contains the parameters related to the interaction with the Apache Web server.

You may have noticed the following from the output of the make install command:

You may want to add: /usr/lib/php to your php.ini include_path

If desired, add the entry using the following command as the root user:

sed -i 's@php/includes"@&\ninclude_path = ".:/usr/lib/php"@' \
    /etc/php.ini

To enable fastCGI support in the Apache web server, two LoadModule directives must be added to the httpd.conf file. They are commented out, so just issue the following command as root user:

sed -i -e '/proxy_module/s/^#//'      \
       -e '/proxy_fcgi_module/s/^#//' \
       /etc/httpd/httpd.conf

Those modules accept various ProxyPass directives. One possibility is (as the root user):

echo \
'ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/srv/www/$1' >> \
/etc/httpd/httpd.conf

Additionally, it may be useful to add an entry for index.php to the DirectoryIndex directive of the httpd.conf file. Lastly, adding a line to set up the .phps extension to show highlighted PHP source may be desirable:

AddType application/x-httpd-php-source .phps

You’ll need to restart the Apache web server after making any modifications to the httpd.conf file.

Systemd Unit

To start the php-fpm daemon at boot, install the systemd unit from the blfs-systemd-units-20220720 package by running the following command as the root user:

make install-php-fpm

Contents

Installed Programs: phar (symlink), phar.phar, php, php-cgi, php-config, php-fpm, phpdbg, and phpize

Installed Libraries: dba.so and opcache.so in /usr/lib/php/extensions/no-debug-non-zts-20220829

Installed Directories: /etc/php-fpm.d, /usr/{include,lib,share}/php, and /usr/share/doc/php-8.2.3

Short Descriptions

php is a command line interface that enables you to parse and execute PHP code.

pear is the PHP Extension and Application Repository (PEAR) package manager. This isn’t installed by default.

php-fpm is the fastCGI process manager for PHP.

phpdbg is the interactive PHP debugger.

13.22 Python-2.7.18


Introduction to Python 2

The Python 2 package contains the Python development environment. It is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications. This version is for backward compatibility with other dependent packages.

Note

Python2 has been deprecated by the upstream developers. Support for Python2 was discontinued on January 1st, 2020.

BLFS is attempting to use Python3 as much as possible, but some packages have not been updated to support Python3.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Downloads

Python 2 Dependencies

SQLite-3.40.1 (For an additional module)

Optional

BlueZ-5.66 and Valgrind-3.20.0

Optional (For more additional modules)

libnsl-2.0.0 and Tk-8.6.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python

Installation of Python 2

First, disable the installation of a script that overwrites a more recent script:

sed -i '/2to3/d' ./setup.py

Install Python 2 by running the following commands:

patch -Np1 -i ../Python-2.7.18-security_fixes-1.patch &&
./configure --prefix=/usr                              \
            --enable-shared                            \
            --with-system-expat                        \
            --with-system-ffi                          \
            --enable-unicode=ucs4                     &&
make

If you invoke the tests, they will run through twice. To test the results, issue: make -k test. Several tests are known to fail, including test_ftplib, test_ssl, test_urllib2_localnet, test_xml_etree, test_xml_etree_c, and test_minidom. These failures are due to OpenSSL-3 and Expat-2.4.6.

Now, as the root user:

make altinstall                                &&
ln -s python2.7        /usr/bin/python2        &&
ln -s python2.7-config /usr/bin/python2-config &&
chmod -v 755 /usr/lib/libpython2.7.so.1.0

Since Python 2 is in maintenance mode, and Python 3 is recommended by upstream for development, you probably do not need to install the documentation. However, if you still want to install documentation for both Python versions, be sure to define the PYTHONDOCS variable for the version you want to use, each time you need to consult the documentation. If you have downloaded the preformatted documentation from https://docs.python.org/download.html, install it as the root user:

install -v -dm755 /usr/share/doc/python-2.7.18 &&

tar --strip-components=1                     \
    --no-same-owner                          \
    --directory /usr/share/doc/python-2.7.18 \
    -xvf ../python-2.7.18-docs-html.tar.bz2 &&

find /usr/share/doc/python-2.7.18 -type d -exec chmod 0755 {} \; &&
find /usr/share/doc/python-2.7.18 -type f -exec chmod 0644 {} \;

Command Explanations

--with-system-expat: This switch enables linking against system version of Expat.

--with-system-ffi: This switch enables linking against system version of libffi.

--enable-unicode=ucs4: This switch enables 32-bit Unicode support in Python.

--with-ensurepip=yes : This switch enables building pip and setuptools packaging programs. setuptools is needed for building some Python modules. This switch is not recommended because this version of Python is no longer maintained.

--with-dbmliborder=bdb:gdbm:ndbm: Use this switch if you want to build Python DBM Module against Berkeley DB instead of GDBM.

make altinstall: This make target omits some default symbolic links that may interfere with Python 3.

chmod …: Fix permissions for libraries to be consistent with other libraries.

Configuring Python 2

In order for python to find the installed documentation, you must add the following environment variable to individual user’s or the system’s profile:

export PYTHONDOCS=/usr/share/doc/python-2.7.18

Contents

Installed Programs: pydoc, python2 (symlink), python2-config (symlink), python2.7, python2.7-config, smtpd.py, and idle

Installed Library: libpython2.7.so

Installed Directories: /usr/{include,lib}/python2.7 and /usr/share/doc/python-2.7.18

Short Descriptions

idle is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built.

pydoc is the Python documentation tool.

python2 is an interpreted, interactive, object-oriented programming language.

python2.7 is a version-specific name for the python program.

smtpd.py is an SMTP proxy implemented in Python.

13.23 Python-3.11.2


Introduction to Python 3

The Python 3 package contains the Python development environment. This is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications.

Note

Python 3 was installed in LFS. The only reason to rebuild it here is if optional modules are needed, or to upgrade this package.

This package is known to build and work properly using an LFS 11.3 platform.

Important

If upgrading to a new Python-3 minor version (for example, from Python-3.10.x to Python-3.11.0), you will need to reinstall any Python3 modules you have installed. You should also reinstall packages that generate Python3 modules including gobject-introspection-1.74.0, opencv-4.7.0, Graphviz-7.1.0 (if swig is installed).

Before you upgrade, you can get a complete list of modules installed with pip3 list.

The wheel module and meson from LFS will also have to be reinstalled: https://www.linuxfromscratch.org/lfs/view/development/chapter08/wheel.html and https://www.linuxfromscratch.org/lfs/view/development/chapter08/meson.html.

On systemd systems, it is also necessary to reinstall the MarkupSafe and Jinja2 modules from LFS: https://www.linuxfromscratch.org/lfs/view/systemd/chapter08/markupsafe.html and https://www.linuxfromscratch.org/lfs/view/systemd/chapter08/jinja2.html.

Package Information

Additional Optional Download

Python 3 Dependencies

SQLite-3.40.1 (required if building firefox or thunderbird)

Optional

BlueZ-5.66, GDB-13.1 (required for some tests), Valgrind-3.20.0, and libmpdec

Optional (For Additional Modules)

Berkeley DB-5.3.28, libnsl-2.0.0, and Tk-8.6.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python3

Installation of Python 3

Install Python 3 by running the following commands:

CXX="/usr/bin/g++"               \
./configure --prefix=/usr        \
            --enable-shared      \
            --with-system-expat  \
            --with-system-ffi    \
            --enable-optimizations &&
make

To test the result, issue make test. Some tests may need an Internet connection. Two tests, test_distutils and test_embed are known to fail.

Now, as the root user:

make install

If upgrading and the documentation has been downloaded, optionally install it as the root user:

install -v -dm755 /usr/share/doc/python-3.11.2/html

tar --strip-components=1  \
    --no-same-owner       \
    --no-same-permissions \
    -C /usr/share/doc/python-3.11.2/html \
    -xvf ../python-3.11.2-docs-html.tar.bz2

Command Explanations

CXX=”/usr/bin/g++” ./configure …: Avoid an annoying message during configuration.

--with-system-expat: This switch enables linking against the system version of Expat.

--with-system-ffi: This switch enables linking against the system version of libffi.

--with-dbmliborder=bdb:gdbm:ndbm: Use this switch if you want to build the Python DBM Module against Berkeley DB instead of GDBM.

--enable-optimizations: This switch enables stable, but expensive, optimizations.

--with-lto: This optional switch enables thick Link Time Optimization. Unusually, it creates a much larger /usr/lib/python3.11/config-3.11-<arch>-linux-gnu/libpython3.11.a with a small increase in the time to compile Python. Run-time results do not appear to show any benefit from doing this.

Configuring Python 3

In order for python3 to find the installed documentation, create the following version independent symlink:

ln -svfn python-3.11.2 /usr/share/doc/python-3

and add the following environment variable to the individual user’s or system’s profile:

export PYTHONDOCS=/usr/share/doc/python-3/html

Contents

Installed Programs: 2to3 (symlink) and 2to3-3.11, idle3 (symlink) and idle3.11, pip3 (symlink) and pip3.11, pydoc3 and pydoc3.11, python3 (symlink); python3.11, and python3-config (symlink) and python3.11-config

Installed Libraries: libpython3.11.so and libpython3.so

Installed Directories: /usr/include/python3.11, /usr/lib/python3.11, and /usr/share/doc/python-3.11.2

Short Descriptions

idle3 is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built.

pydoc3 is the Python documentation tool.

python3 is an interpreted, interactive, object-oriented programming language.

python3.11 is a version-specific name for the python program.

13.24 Python Modules


Introduction to Python Modules

The Python module packages add useful objects to the Python language. Modules utilized by packages throughout BLFS are listed here, along with their dependencies.

Important

In BLFS, we normally build and install Python 3 modules with pip3. Please take care that the pip3 install commands in the book should be run as root unless it’s for a Python virtual environment. Running pip3 install as a non-root user may seem to work fine, but it will cause the installed module to be inaccessible by other users.

pip3 install will not reinstall an already installed module by default. For using the pip3 install command to upgrade a module (for example, from meson-0.61.3 to meson-0.62.0), insert --upgrade into the command line. If it’s really necessary to downgrade a module or reinstall the same version for some reason, insert --force-reinstall into the command line.

Asciidoc-10.2.0

Introduction to Asciidoc Module

The Asciidoc package is a text document format for writing notes, documentation, articles, books, ebooks, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including HTML, PDF, EPUB, and man page.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Asciidoc Dependencies

Optional (runtime)

docbook-xsl-nons-1.79.2, fop-2.8, libxslt-1.1.37, Lynx-2.8.9rel.1, dblatex, and W3m

Installation of Asciidoc

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user asciidoc

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: a2x and asciidoc

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/asciidoc and /usr/lib/python3.11/site-packages/asciidoc-10.2.0.dist-info

Short Descriptions

a2x is a toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats).

asciidoc converts an AsciiDoc text file to HTML or DocBook.

CSSSelect-1.2.0

Introduction to CSSSelect Module

CSSSelect provides CSS selectors for Python.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

CSSSelect Dependencies

Required

setuptools_scm-7.1.0

Optional (for testing)

pluggy-1.0.0 and pytest-7.2.1

Installation of CSSSelect

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user cssselect

To test the installation issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/cssselect

CacheControl-0.12.11

Introduction to CacheControl Module

CacheControl is a port of the caching algorithms in httplib2 for use with requests session object. It was written because httplib2’s better support for caching is often mitigated by its lack of thread safety. The same is true of requests in terms of caching.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

CacheControl Dependencies

Required

msgpack-1.0.4 and requests-2.28.2

Installation of CacheControl

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user cachecontrol

This module does not have a working test suite.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: doesitcache

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/CacheControl-0.12.11.dist-info and /usr/lib/python3.11/site-packages/cachecontrol

Short Descriptions

doesitcache is an undocumented command line script.

Cython-0.29.33

Introduction to Cython Module

The Cython package provides a compiler for writing C extensions for the Python language.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Cython

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user Cython

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: cygdb cython cythonize

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/Cython, /usr/lib/python3.11/site-packages/Cython-0.29.33.dist-info, and /usr/lib/python3.11/site-packages/pyximport

Short Descriptions

cygdb is the Cython debugger.

cython is a compiler for code written in the Cython language. It outputs a C/C++ program which can be compiled with a C/C++ compiler.

cythonize is a compiler for code written in the Cython language. It outputs an extension module which is directly importable from Python.

dbusmock-0.28.7

Introduction to dbusmock

dbusmock is a Python library useful for writing tests for software which talks to D-Bus services.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

dbusmock Dependencies

Required

D-Bus Python-1.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dbusmock

Installation of dbusmock

Build the package with:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the package run the following as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user python-dbusmock

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/dbusmock and /usr/lib/python3.11/site-packages/python_dbusmock-0.28.7.dist-info

D-Bus Python-1.3.2

Introduction to D-Bus Python Module

D-Bus Python provides Python bindings to the D-Bus API interface.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

D-Bus Python Dependencies

Required

dbus-1.14.6, GLib-2.74.5, meson_python-0.12.0, and patchelf-0.17.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dbus-python

Installation of D-Bus Python

Build the D-Bus Python module by running the following command:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now install the module as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user dbus-python

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/dbus and /usr/lib/python3.11/site-packages/dbus_python-1.3.2.egg-info

docutils-0.19

Introduction to docutils

docutils is a set of Python modules and programs for processing plaintext docs into formats such as HTML, XML, or LaTeX.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docutils

Installation of docutils

To build the Python 3 applications, run the following command:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the Python applications run the following as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user docutils &&

for f in /usr/bin/rst*.py; do
  ln -svf $(basename $f) /usr/bin/$(basename $f .py)
done

To reduce the time needed for loading Python scripts, pip3 install will compile the scripts with extension .py into byte code and save the result into .pyc files in the directory _pycache_. But this package installs .py scripts into /usr/bin. So the byte code files for them will be installed into /usr/bin/__pycache_, which is not allowed by FHS. Still as the root user, remove this directory:

rm -rfv /usr/bin/__pycache__

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: docutils, rst2html4, rst2html5, rst2html, rst2latex, rst2man, rst2odt_prepstyles, rst2odt, rst2pseudoxml, rst2s5, rst2xetex, rst2xml, and rstpep2html

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/docutils{,-0.19.dist-info}

Short Descriptions

docutils converts documents into various formats.

rst2html generates (X)HTML documents from standalone reStructuredText sources.

rst2html4 generates (X)HTML documents from standalone reStructuredText sources.

rst2html5 generates HTML5 documents from standalone reStructuredText sources.

rst2latex generates LaTeX documents from standalone reStructuredText sources.

rst2man generates plain unix manual documents from standalone reStructuredText sources.

rst2odt generates OpenDocument/OpenOffice/ODF documents from standalone reStructuredText sources.

rst2odt_prepstyles Fix a word-processor-generated styles.odt for odtwriter use.

rst2pseudoxml generates pseudo-XML from standalone reStructuredText sources (for testing purposes).

rst2s5 generates S5 (X)HTML slideshow from standalone reStructuredText sources.

rst2xetex generates LaTeX documents from standalone reStructuredText sources for compilation with the Unicode-aware TeX variants XeLaTeX or LuaLaTeX.

rst2xml generates Docutils-native XML from standalone reStructuredText sources.

rstpep2html generates (X)HTML from reStructuredText-format PEP files.

Doxypypy-0.8.8.7

Introduction to Doxypypy Module

The Doxypypy package is a doxygen filter for python.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Doxypypy Dependencies

Required

chardet-5.1.0 and Doxygen-1.9.6 (at run time)

Installation of Doxypypy

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user doxypypy

This package does not come with a working test suite.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: doxypypy

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/doxypypy and /usr/lib/python3.11/site-packages/doxypypy-0.8.8.7.dist-info

Short Descriptions

doxypypy filters Python code for use with Doxygen, using a syntax-aware approach.

Doxyqml-0.5.2

Introduction to Doxyqml Module

The Doxyqml package allows using Doxygen to document QML classes.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Doxyqml Dependencies

Required (Run Time)

Doxygen-1.9.6

Optional (for testing)

pytest-7.2.1

Installation of Doxyqml

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user doxyqml

To test the installation, run:

pytest

The test_qmlclass.py test is known to fail.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: doxyqml

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/doxyqml and /usr/lib/python3.11/site-packages/doxyqml-0.5.2.dist-info

Short Descriptions

doxyqml is a Doxygen input filter for QML files.

Gi-DocGen-2023.1

Introduction to Gi-DocGen Module

Gi-DocGen is a document generator for GObject-based libraries. GObject is the base type system of the GNOME project. GI-Docgen reuses the introspection data generated by GObject-based libraries to generate the API reference of these libraries, as well as other ancillary documentation.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Gi-DocGen Dependencies

Required

Markdown-3.4.1, Pygments-2.14.0, and typogrify-2.0.7

Optional (for testing)

pytest-7.2.1

Installation of gi-docgen

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user gi-docgen

To test the installation, issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: gi-docgen

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/gidocgen and /usr/lib/python3.11/site-packages/gi_docgen-2023.1.dist-info

Short Descriptions

gi-docgen manages documentation for libgobject based libraries.

libxml2-2.10.3 (for its Python2 module)

Introduction to the libxml2 Python2 module

These instructions provide the Python2 bindings for libxml2: the Python3 bindings are built as part of libxml2-2.10.3 and most packages in the book do not use these bindings for the older Python2.

By building these bindings after libxml2-2.10.3 has been installed, there is no need to rebuild the time-consuming (if all dependencies are used) main part of that package.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

libxml2 (Python2) Dependencies

Required

libxml2-2.10.3 and Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxml2

Installation of libxml2 Python2 module

To build the Python 2 module, run:

./configure PYTHON=python2 &&
cd python                  &&
python2 setup.py build

To install the Python 2 module, as the root user run:

python2 setup.py install --optimize=1

Contents

Installed Modules: drv_libxml2.py, libxml2.py

Installed Libraries: libxml2mod.so

Installed Directories: None

Short Descriptions

drv_libxml2.py is a SAX Python2 driver for libxml2.

libxml2.py is the Python2 binding for libxml2.

libxml2mod.so is the interface for Python2 to use libxml2.so.

lxml-4.9.2

Introduction to lxml Module

lxml provides Python bindings for libxslt-1.1.37 and libxml2-2.10.3.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

lxml Dependencies

Required

libxslt-1.1.37

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxml

Installation of lxml

To build the Python 3 module, run:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the module, issue the following command as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user lxml

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/lxml and /usr/lib/python3.11/site-packages/lxml-4.9.2.dist-info

Mako-1.2.4

Introduction to Mako Module

Mako is a Python module that implements hyperfast and lightweight templating for the Python platform.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Mako Dependencies

Optional (for Testing)

pytest-7.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Mako

Installation of Mako

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Install the module as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user Mako

To test the installation, issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: mako-render

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/mako and /usr/lib/python3.11/site-packages/Mako-1.2.4.dist-info

Short Descriptions

mako-render renders a template.

NumPy-1.24.2

Introduction to NumPy Module

NumPy is the fundamental package for scientific computing with Python.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

NumPy Dependencies

Required

cython-0.29.33

Optional

fortran from GCC-12.2.0, lapack and cblas, openblas

Optional (for testing)

attrs-22.2.0, pytest-7.2.1, hypothesis

Installation of NumPy

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user numpy

The installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install hypothesis                        &&
python3 runtests.py
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: f2py, f2py3 and f2py3.11 (3 copies of the same script)

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/numpy

Short Descriptions

f2py is the Fortran to Python interface generator utility.

Packaging-23.0

Introduction to Packaging Module

The Packaging library provides utilities that implement the interoperability specifications which have clearly one correct behaviour or benefit greatly from having a single shared implementation.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Packaging Dependencies

Required

flit_core-3.8.0

Optional (for testing)

pytest-7.2.1 and pretend

Installation of Packaging

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user packaging

Assuming pytest-7.2.1 is installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install pretend                           &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/packaging and /usr/lib/python3.11/site-packages/packaging-23.0.dist-info

Py3c-1.4

Introduction to Py3c

Py3c helps you port C extensions to Python 3. It provides a detailed guide, and a set of macros to make porting easy and reduce boilerplate.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/py3c

Installation of Py3c

The Py3c package is a headers-only package and because of that, no configuration and compilation is required.

To test the package, issue:

make test-python3 &&
make test-python3-cpp

To install the Python 3 module, run the following command as the root user:

make prefix=/usr install

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/include/py3c

PyAtSpi2-2.46.0

Introduction to PyAtSpi2

The PyAtSpi2 package contains Python bindings for the core components of the GNOME Accessibility.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyAtSpi2 Dependencies

Required

PyGObject-3.42.2

at-spi2-core-2.46.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pyatspi2

Installation of PyAtSpi2

To build PyAtSpi2 as a Python 3 module, run the following commands:

./configure --prefix=/usr --with-python=/usr/bin/python3

This package does not come with a test suite.

To install the Python 3 module, run the following command as the root user:

make install

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pyatspi

PyCairo-1.18.2

Introduction to PyCairo for Python2 Module

This version of PyCairo provides Python2 bindings to Cairo.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyCairo Dependencies

Required

Cairo-1.17.6 and Python-2.7.18

Optional

Hypothesis (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycairo

Installation of PyCairo

Note

This version of PyCairo is only retained for packages such as Gimp-2.10.32 which is stuck on Python2 until Gimp-3 is released.

Install PyCairo for Python2 by running the following commands:

python2 setup.py build

This package does not come with a test suite.

Now, as the root user:

python2 setup.py install --optimize=1   &&
python2 setup.py install_pycairo_header &&
python2 setup.py install_pkgconfig

Contents

Installed Program: None

Installed Library: _cairo.so

Installed Directories: /usr/include/pycairo, /usr/lib/python2.7/site-packages/cairo, /usr/lib/python2.7/site-packages/pycairo-1.18.2-py2.7.egg,

PyCairo-1.23.0

Introduction to PyCairo Module

PyCairo provides Python bindings to Cairo.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyCairo Dependencies

Required

Cairo-1.17.6

Optional

Hypothesis and pytest-7.2.1 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycairo

Installation of PyCairo

Note

The current version of pycairo no longer builds the Python2 module. If you need that module for packages such as Gimp-2.10.32, use PyCairo-1.18.2

Install PyCairo for Python3 by running the following commands:

mkdir build &&
cd    build &&

meson --prefix=/usr --buildtype=release .. &&
ninja

To run the tests, this package requires the optional pytest module. If it is installed, run the tests by running ninja test. The test_surface.py test has a failure.

Now, as the root user:

ninja install

Contents

Installed Program: None

Installed Library: None

Installed Directories: /usr/include/pycairo, /usr/lib/python3.11/site-packages/cairo, and /usr/lib/python3.11/site-packages/pycairo-1.23.0.egg-info

PyCryptodome-3.17.0

Introduction to the PyCryptodome Module

PyCryptodome is a collection of both secure hash functions (such as SHA256 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal, etc.), and is a drop-in replacement for PyCrypto.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycryptodome

Installation of PyCryptodome

To build PyCryptodome as a Python 3 module, run the following command:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the module, run the following command as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pycryptodome

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/Crypto /usr/lib/python3.11/site-packages/pycryptodome-3.17.0.dist-info

Pygments-2.14.0

Introduction to Pygments Module

Pygments is a general syntax highlighter written in Python, for more than 300 languages.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygments

Installation of Pygments

Build the Python 3 module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the package run the following as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user Pygments

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: pygmentize

Installed Library: None

Installed Directories: /usr/lib/python3.11/site-packages/pygments and /usr/lib/python3.11/site-packages/Pygments-2.14.0.dist-info

Short Descriptions

pygmentize highlights an input file and writes the result to an output file.

PyGObject-2.28.7

Introduction to PyGObject Module

PyGObject-2.28.7 provides Python 2 bindings to the GObject class from GLib.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyGObject Dependencies

Required

GLib-2.74.5, PyCairo-1.18.2 and Python-2.7.18

Optional

gobject-introspection-1.74.0 and libxslt-1.1.37 (to Build Documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygobject2

Installation of PyGObject

Install PyGObject by running the following commands:

./configure --prefix=/usr --disable-introspection &&
make

This package does not have a working test suite.

Now, as the root user:

make install

Command Explanations

--disable-introspection: Omit this switch if you have installed gobject-introspection-1.74.0. Note that it conflicts with PyGObject-3.42.2.

--disable-docs: This option disables the rebuilding of the html documentation if libxslt-1.1.37 is installed.

Contents

Installed Programs: pygobject-codegen-2.0

Installed Libraries: libpyglib-2.0-python.so, _gio.so, unix.so, _glib.so and _gobject.so.

Installed Directories: /usr/include/pygtk-2.0, /usr/lib/python2.7/site-packages/gtk-2.0/{gio,glib,gobject}, /usr/share/gtk-doc/html/pygobject and /usr/share/pygobject/2.0

PyGObject-3.42.2

Introduction to PyGObject3 Module

PyGObject3 provides Python bindings to the GObject class from GLib.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyGObject3 Dependencies

Required

gobject-introspection-1.74.0 and PyCairo-1.23.0 (Python 3 module)

Optional (for the tests)

GTK-4.8.3, pep8, pyflakes, and pytest-7.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygobject3

Installation of PyGObject3

First, remove a faulty test:

mv -v tests/test_gdbus.py{,.nouse}

Install pygobject3 by running the following commands:

mkdir build &&
cd    build &&

meson --prefix=/usr --buildtype=release .. &&
ninja

To test the results, issue: ninja test. An already active graphical session with a bus address is necessary to run the tests. Another round of tests may report ERROR if GTK-4.8.3 is not installed.

Now, as the root user:

ninja install

Command Explanations

--buildtype=release: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

Contents

Installed Programs: None

Installed Library: /usr/lib/python3.11/site-packages/gi/_gi{,_cairo}.cpython-311--linux-gnu.so

Installed Directories: /usr/include/pygobject-3.0 and /usr/lib/python3.11/site-packages/{gi,pygtkcompat}

PyGTK-2.24.0

Introduction to PyGTK Module

PyGTK lets you to easily create programs with a graphical user interface using the Python programming language.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyGTK Dependencies

Required

PyGObject-2.28.7 and Python-2.7.18

Required (atk module)

at-spi2-core-2.46.0

Required (pango module)

Pango-1.50.12

Required (pangocairo module)

PyCairo-1.18.2 and Pango-1.50.12

Required (gtk and gtk.unixprint modules)

PyCairo-1.18.2 and GTK+-2.24.33.

Required (gtk.glade module)

PyCairo-1.18.2 and libglade-2.6.4.

Optional

NumPy

Optional (to Build Documentation)

libxslt-1.1.37

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygtk

Installation of PyGTK

First, adapt PyGTK to changes in Pango by removing undefined APIs:

sed -i '1394,1402 d' pango.defs

Install PyGTK by running the following commands:

./configure --prefix=/usr &&
make

The tests must be run from an active X display. If this is so, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-docs: This option enables rebuilding the html documentation if libxslt-1.1.37 is installed.

Contents

Installed Programs: pygtk-codegen-2.0 and pygtk-demo.

Installed Libraries: atk.so, _gtk.so, glade.so, gtkunixprint.so, pango.so and pangocairo.so.

Installed Directories: /usr/include/pygtk-2.0, /usr/lib/pygtk, /usr/lib/python2.7/site-packages/gtk-2.0, /usr/share/gtk-doc/html/pygtk and /usr/share/pygtk.

Short Descriptions

pygtk-codegen-2.0 is a wrapper script to run the PyGTK codegen module.

pygtk-demo is a Python wrapper to run the PyGTK demo program.

pyparsing-3.0.9

Introduction to pyparsing Module

The pyparsing module is an alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions. It provides a library of classes that client code uses to construct the grammar directly in Python code.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

pyparsing Dependencies

Required

flit_core-3.8.0

Optional

railroad-diagrams (also needed for tests)

Optional (for testing)

pytest-7.2.1

Installation of pyparsing

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pyparsing

Assuming pytest-7.2.1 is installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install railroad-diagrams                 &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pyparsing and /usr/lib/python3.11/site-packages/pyparsing-3.0.9.dist-info

pySerial-3.5

Introduction to pySerial Module

The pySerial module encapsulates access to the serial port.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

pySerial Dependencies

Required

setuptools_scm-7.1.0

Optional (for testing)

pluggy-1.0.0 and pytest-7.2.1

Installation of pySerial

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pyserial

To test the installation issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: pyserial-miniterm and pyserial-ports

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pyserial-3.5.dist-info and /usr/lib/python3.11/site-packages/serial

Short Descriptions

pyserial-miniterm is a console application that provides a small terminal application. It may inherit terminal features from the terminal in which it is run.

pyserial-ports lists available ports.

Pytest-7.2.1

Introduction to Pytest Module

The Pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Pytest Dependencies

Required

attrs-22.2.0, iniconfig-2.0.0, packaging-23.0, pluggy-1.0.0, and py-1.11.0

setuptools_scm-7.1.0

Optional (for testing)

Pygments-2.14.0, requests-2.28.2, argcomplete, hypothesis, mock, nose, and xmlschema

Installation of Pytest

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pytest

The installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install pytest[testing]                   &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: pytest and py.test (different files but with same content)

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/_pytest, /usr/lib/python3.11/site-packages/pytest, and /usr/lib/python3.11/site-packages/pytest-7.2.1.dist-info

Short Descriptions

pytest sets up, manages, and/or runs test in python module source directories.

PyXDG-0.28

Introduction to PyXDG Module

PyXDG is a Python library to access freedesktop.org standards.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pyxdg

Installation of PyXDG

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Install the module as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pyxdg

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Directory: /usr/lib/python3.11/site-packages/xdg and /usr/lib/python3.11/site-packages/pyxdg-0.28.dist-info

PyYAML-6.0

Introduction to PyYAML Module

PyYAML is a Python module that implements the next generation YAML parser and emitter.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

PyYAML Dependencies

Required

cython-0.29.33 and libyaml-0.2.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/PyYAML

Installation of PyYAML

Build PyYAML with the following command:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, install the module as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user PyYAML

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python2.7/site-packages/yaml and /usr/lib/python3.11/site-packages/PyYAML-0.2.5.dist-info

Recommonmark-0.7.1

Introduction to Recommonmark Module

Recommonmark is a docutils-compatibility bridge to CommonMark. It allows writing CommonMark inside of Docutils and Sphinx projects. Recommonmark is now deprecated in favor of MyST-Parser. Unfortunately, LLVM-15.0.7 still depends on this module.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Recommonmark Dependencies

Required

commonmark-0.9.1 and sphinx-6.1.3

Optional (for testing)

pytest-7.2.1

Installation of Recommonmark

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user recommonmark

Recommonmark is now deprecated in favor of MyST-Parser. For this reason, a lot of tests have to be disabled because they do not pass with recent versions of Sphinx. The installation can be partially tested with the following command:

pytest -k 'not (test_integration or test_code or test_headings or test_image or test_links or test_lists)'

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: cm2html, cm2latex, cm2man, cm2pseudoxml, cm2xetex, and cm2xml

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/recommonmark and /usr/lib/python3.11/site-packages/recommonmark-0.7.1.dist-info

Short Descriptions

cm2html generates a html document from markdown sources.

cm2latex generates a latex document from markdown sources.

cm2man generates a manpage from markdown sources.

cm2pseudoxml generates a pseudo-XML document from markdown sources.

cm2xetex generates a xetex document from markdown sources.

cm2xml generates an XML document from markdown sources.

Requests-2.28.2

Introduction to Requests Module

The Requests package is an elegant and simple HTTP library for Python, built for human beings. It allows sending HTTP/1.1 requests extremely easily.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Additional Download

Requests Dependencies

Required

charset-normalizer-3.0.1, idna-3.4, and urllib3-1.26.14

make-ca-1.12, with p11-kit-0.24.1 (both needed to use system https: certificates, removing an unnecessary dependency on the Certifi module).

Optional

PySocks (also needed for testing)

Optional (for testing)

pytest-7.2.1, Flask<2, httpbin, MarkupSafe<2.1, pytest-mock, pytest-httpbin, sphinx<5, trustme, and Werkzeug<2

Installation of Requests

First apply a patch so that the same environment variable already used to point to system certificates in Python3 following the installation of make-ca can also be used by this module:

patch -Np1 -i ../requests-2.28.2-use_system_certs-1.patch

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user requests

Assuming pytest-7.2.1 is installed, but the other optional dependencies are not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install --force-reinstall sphinx\<5       &&
pip3 install pytest-mock    \
             werkzeug\<2    \
             flask\<2       \
             pytest-httpbin \
             pysocks        \
             trustme                           &&
pip3 install --force-reinstall Markupsafe\<2.1 &&
python3 /usr/bin/pytest tests                  &&
deactivate

Note

See make-ca-1.12 for how to set the environment variable, and for how local copies of the Certifi and Requests modules installed in a virtual environment will override the system certificates.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/requests and /usr/lib/python3.11/site-packages/requests-2.28.2.dist-info

Scour-0.38.2

Introduction to Scour Module

Scour is an SVG (Scalable Vector Graphics) optimizer/cleaner that reduces their size by optimizing structure and removing unnecessary data.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Scour Dependencies

Required

six-1.16.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/scour

Installation of scour

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

To install the module, run the following command as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user scour

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: scour

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/scour and /usr/lib/python3.11/site-packages/scour-0.38.2.dist-info

Short Descriptions

scour is a program to optimize and clean SVG files.

six-1.16.0

Introduction to Six Module

Six is a Python 2 to 3 compatibility library.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/six

Installation of Six

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user six

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/six-1.16.0.dist-info

Sphinx-6.1.3

Introduction to Sphinx Module

The Sphinx package is a set of tools for translating some structured text formats into pretty documentation in various formats.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinx Dependencies

Required

alabaster-0.7.13, Babel-2.11.0, docutils-0.19, imagesize-1.4.1, packaging-23.0, Pygments-2.14.0, requests-2.28.2, snowballstemmer-2.2.0, sphinxcontrib-applehelp-1.0.3, sphinxcontrib-devhelp-1.0.2, sphinxcontrib-htmlhelp-2.0.0, sphinxcontrib-jsmath-1.0.1, sphinxcontrib-qthelp-1.0.3, and sphinxcontrib-serializinghtml-1.1.5

Optional (for tests)

cython-0.29.33, pytest-7.2.1, texlive-20220321, and html5lib

Installation of Sphinx

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinx

Assuming cython-0.29.33 and pytest-7.2.1 are installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install html5lib                          &&
python3 /usr/bin/pytest
deactivate

One test, tests/test_config.py::test_needs_sphinx is known to fail.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: sphinx-apidoc, sphinx-autogen, sphinx-build, and sphinx-quickstart

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinx and /usr/lib/python3.11/site-packages/sphinx-6.1.3.dist-info

Short Descriptions

sphinx-apidoc creates an reST file from python modules and packages.

sphinx-autogen generates ReStructuredText from special directives contained in given input files.

sphinx-build generates documentation in various formats from ReStructuredText source files.

sphinx-quickstart generates required files for a sphinx project.

Sphinx_rtd_theme-1.2.0

Introduction to Sphinx_rtd_theme Module

The sphinx_rtd_theme module is a Sphinx theme designed to provide a great reader experience for documentation users on both desktop and mobile devices. This theme is used primarily on Read the Docs but can work with any Sphinx project.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinx_rtd_theme Dependencies

Required

sphinx-6.1.3 and sphinxcontrib-jquery-2.0.0

Optional (for tests)

pytest-7.2.1 and readthedocs-sphinx-ext

Installation of Sphinx_rtd_theme

Fix a wrong version for a dependency list:

sed -e s/0.19/0.20/ \
    -i setup.cfg

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinx_rtd_theme

Assuming pytest-7.2.1 is installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install readthedocs-sphinx-ext            &&
python3 /usr/bin/pytest
deactivate

Several tests return a warning because they use a deprecated sphinx API.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinx_rtd_theme and /usr/lib/python3.11/site-packages/sphinx_rtd_theme-1.2.0.dist-info.

13.25 Python Dependencies


Introduction to Python Dependencies

Python modules listed in Python Modules have dependencies that are not referenced by other packages in BLFS. These dependencies are listed here. They will not get updated on regular basis, unless a more recent version is needed.

Important

In BLFS, we normally build and install Python 3 modules with pip3. Please take care that the pip3 install commands in the book should be run as root unless it’s for a Python virtual environment. Running pip3 install as a non-root user may seem to work fine, but it will cause the installed module to be inaccessible by other users.

pip3 install will not reinstall an already installed module by default. For using the pip3 install command to upgrade a module (for example, from meson-0.61.3 to meson-0.62.0), insert --upgrade into the command line. If it’s really necessary to downgrade a module or reinstall the same version for some reason, insert --force-reinstall into the command line.

Alabaster-0.7.13

Introduction to Alabaster Module

The Alabaster package is a theme for the sphinx documentation system. Although developed separately, it is the default theme for sphinx.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Alabaster

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user alabaster

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/alabaster and /usr/lib/python3.11/site-packages/alabaster-0.7.13.dist-info

Attrs-22.2.0

Introduction to Attrs Module

The Attrs package is a theme for the sphinx documentation system. Although developed separately, it is the default theme for sphinx.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Optional (for testing)

pytest-7.2.1, coverage[toml], hypothesis, Pympler, mypy, pytest-mypy-plugins, zope.interface, and cloudpickle

Installation of Attrs

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user attrs

To test the installation, run:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install attrs[tests]                      &&
python3 /usr/bin/pytest                        &&
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/attr, /usr/lib/python3.11/site-packages/attrs, and /usr/lib/python3.11/site-packages/attrs-22.2.0.dist-info

Babel-2.11.0

Introduction to Babel Module

The Babel package is an integrated collection of utilities that assist in internationalizing and localizing Python applications, with an emphasis on web-based applications.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Babel Dependencies

Required

pytz-2022.7.1

Optional (for testing)

pytest-7.2.1, Python-3.11.2 (with the sqlite module), freezegun==0.3.12, and pytest-cov

Installation of Babel

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user Babel

Assuming pytest-7.2.1 is installed, but the other optional dependencies are not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install pytest-cov freezegun==0.3.12      &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: pybabel

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/babel and /usr/lib/python3.11/site-packages/Babel-2.11.0.dist-info

Short Descriptions

pybabel is a command-line interface for working with message catalogs.

Chardet-5.1.0

Introduction to chardet Module

Chardet is a universal character encoding detector.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Chardet Dependencies

Optional (for testing)

pytest-7.2.1

Installation of Chardet

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user chardet

To test the installation issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: chardetect

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/chardet and /usr/lib/python3.11/site-packages/chardet-5.1.0.dist-info

Short Descriptions

chardetect is a Universal Character Encoding Detector.

Charset-normalizer-3.0.1

Introduction to charset-normalizer Module

The charset-normalizer library helps reading text from an unknown character encoding.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Charset-normalizer Dependencies

Optional (for testing)

pytest-7.2.1 and pytest-cov

Installation of Charset-normalizer

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user charset-normalizer

Assuming pytest-7.2.1 is installed, but the other optional dependencies are not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install pytest-cov                        &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: normalizer

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/charset_normalizer and /usr/lib/python3.11/site-packages/charset_normalizer-3.0.1.dist-info

Short Descriptions

normalizer is a Universal Charset Detector (discovers originating encoding and normalizes text to unicode).

Commonmark-0.9.1

Introduction to Commonmark Module

Commonmark Python parser for the CommonMark Markdown specification.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Commonmark Dependencies

Optional (for testing)

pytest-7.2.1, flake8, and hypothesis

Installation of Commonmark

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user commonmark

Assuming pytest-7.2.1 is installed and the other optional dependency is not, the installation can be tested with:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install hypothesis                        &&
python3 /usr/bin/pytest commonmark/tests/unit_tests.py
python3 commonmark/tests/run_spec_tests.py
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: cmark

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/commonmark and /usr/lib/python3.11/site-packages/commonmark-0.9.1.dist-info

Short Descriptions

cmark processes Markdown according to the CommonMark specification.

Editables-0.3

Introduction to Editables Module

Editables is python library for creating “editable wheels”.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Editables

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user editables

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/editables and /usr/lib/python3.11/site-packages/editables-0.3.dist-info

Flit_core-3.8.0

Introduction to Flit_core Module

The Flit_core module is the key component of the Flit system, which provides a simple way to put Python packages and modules on PyPi.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Flit_core Dependencies

Optional (for testing)

pytest-7.2.1 and testpath

Installation of Flit_core

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user flit_core

Assuming pytest-7.2.1 is installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install testpath                          &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/flit_core and /usr/lib/python3.11/site-packages/flit_core-3.8.0.dist-info

Hatchling-1.12.2

Introduction to Hatchling Module

Hatchling is an extensible, standards compliant build backend for python modules.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Hatchling Dependencies

Required

editables-0.3, packaging-23.0, pathspec-0.10.3, and pluggy-1.0.0

Installation of Hatchling

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a working test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user hatchling

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: hatchling

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/hatchling and /usr/lib/python3.11/site-packages/hatchling-1.12.2.dist-info

Short Descriptions

hatchling is a python module builder.

Hatch_vcs-0.3.0

Introduction to Hatch-vcs Module

Hatch_vcs is a Hatch plugin for versioning with several VCS.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Hatch_vcs Dependencies

Required

hatchling-1.12.2 and setuptools_scm-7.1.0

Optional (for testing)

pytest-7.2.1

Installation of Hatch_vcs

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user hatch_vcs

To test the installation, issue pytest. One test fails.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/hatch_vcs and /usr/lib/python3.11/site-packages/hatch_vcs-0.3.0.dist-info

Idna-3.4

Introduction to Idna Module

The Idna module provides support for the Internationalized Domain Names in Applications (IDNA) protocol as specified in RFC 5891.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Idna Dependencies

Required

flit_core-3.8.0

Optional (for testing)

pytest-7.2.1

Installation of Idna

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user idna

To test the installation, run pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/idna and /usr/lib/python3.11/site-packages/idna-3.4.dist-info

Imagesize-1.4.1

Introduction to Imagesize Module

The imagesize package analyzes image file headers and returns the image size and DPI. It works with JPEG/JPEG 2000/PNG/GIF/TIFF/SVG/Netpbm/WebP formats.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Imagesize Dependencies

Optional (for testing)

pytest-7.2.1 and requests-2.28.2

Installation of Imagesize

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user imagesize

To test the installation, run pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/imagesize and /usr/lib/python3.11/site-packages/imagesize-1.4.1.dist-info

Iniconfig-2.0.0

Introduction to Iniconfig Module

Iniconfig is a small and simple INI-file parser module.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Iniconfig Dependencies

Required

hatch_vcs-0.3.0

Installation of Iniconfig

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user iniconfig

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/iniconfig and /usr/lib/python3.11/site-packages/iniconfig-2.0.0.dist-info

Markdown-3.4.1

Introduction to Markdown Module

Markdown is a Python parser for John Gruber’s Markdown specification.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Markdown Dependencies

Optional (for testing)

pytest-7.2.1, PyYAML-6.0, and coverage

Installation of Markdown

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user Markdown

Assuming pytest-7.2.1 and PyYAML-6.0 are installed and the other optional dependency is not, the installation can be tested with:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install coverage                          &&
python3 /usr/bin/pytest --ignore=tests/test_syntax/extensions/test_md_in_html.py
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: markdown_py

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/markdown and /usr/lib/python3.11/site-packages/Markdown-3.4.1.dist-info

Short Descriptions

markdown_py converts markdown files to (x)html.

Meson_python-0.12.0

Introduction to Meson_python Module

The Meson_python module contains a Python build backend (PEP 517) for Meson projects.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Meson_python Dependencies

Required

pyproject-metadata-0.7.0

patchelf-0.17.2

Installation of Meson_python

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user meson_python

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/meson_python and /usr/lib/python3.11/site-packages/meson_python-0.12.0.dist-info

MessagePack-1.0.4

Introduction to MessagePack Module

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it’s faster and smaller. This package provides CPython bindings for reading and writing MessagePack data.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

MessagePack Dependencies

Required

cython-0.29.33 and setuptools_scm-7.1.0

Optional (for testing)

pluggy-1.0.0 and pytest-7.2.1

Installation of MessagePack

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user msgpack

To test the installation issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/msgpack-1.0.4.dist-info and /usr/lib/python3.11/site-packages/msgpack

Pathspec-0.10.3

Introduction to Pathspec Module

Pathspec is a utility library for pattern matching of file paths.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Pathspec Dependencies

Optional (for testing)

pytest-7.2.1

Installation of Pathspec

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pathspec

To test the installation, issue pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pathspec and /usr/lib/python3.11/site-packages/pathspec-0.10.3.dist-info

Pluggy-1.0.0

Introduction to Pluggy Module

The Pluggy package gives users the ability to extend or modify the behaviour of a host program by installing a plugin for that program. The plugin code will run as part of normal program execution, changing or enhancing certain aspects of it. In essence, pluggy enables function hooking so a user can build “pluggable” systems.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Pluggy Dependencies

setuptools_scm-7.1.0

Optional (for testing)

pytest-7.2.1 and pytest-benchmark

Installation of Pluggy

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pluggy

Assuming pytest-7.2.1 is installed, but the other optional dependencies are not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install pytest-benchmark                  &&
python3 /usr/bin/pytest
deactivate

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pluggy and /usr/lib/python3.11/site-packages/pluggy-1.0.0.dist-info

Py-1.11.0

Introduction to Py Module

The Py library is a Python development support library used in Pytest. It is deprecated and should be removed at some point in time, but part of it is still used in Pytest.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Py Dependencies

setuptools_scm-7.1.0

Installation of Py

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

Due to the deprecation of this package, the test suite is not maintained and cannot be run.

pip3 install --no-index --find-links dist --no-cache-dir --no-user py

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/py and /usr/lib/python3.11/site-packages/py-1.11.0.dist-info

Pyproject-Metadata-0.7.0

Introduction to Pyproject-Metadata Module

The Pyproject-Metadata module contains a data class for PEP 621 metadata with support for “core metadata” (PEP 643) generation.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Pyproject-Metadata Dependencies

Required

packaging-23.0

Installation of Pyproject-Metadata

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pyproject-metadata

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pyproject_metadata and /usr/lib/python3.11/site-packages/pyproject_metadata-0.7.0.dist-info

Pytz-2022.7.1

Introduction to Pytz Module

The Pytz library brings the IANA tz database into Python. It allows accurate and cross-platform timezone calculations.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Pytz dependencies

Optional (for testing)

pytest-7.2.1

Installation of Pytz

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user pytz

To test the installation, run pytest. A few warnings are issued.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/pytz and /usr/lib/python3.11/site-packages/pytz-2022.7.1.dist-info

Setuptools_scm-7.1.0

Introduction to Setuptools_scm Module

The Setuptools_scm package is used to extract Python package versions from git or hg metadata instead of declaring them.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Setuptools_scm Dependencies

Required

packaging-23.0 and typing_extensions-4.4.0

Optional (for testing)

git-2.39.2, Mercurial-6.3.2, and pytest-7.2.1

Installation of Setuptools_scm

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user setuptools_scm

The installation can be tested with pytest. A few tests may fail if your git configuration is not the one expected by the test suite.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/setuptools_scm and /usr/lib/python3.11/site-packages/setuptools_scm-7.1.0.dist-info

Smartypants-2.0.1

Introduction to Smartypants Module

Smartypants translates plain ASCII punctuation characters into “smart” typographic punctuation HTML entities.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Smartypants

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a working test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user smartypants

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: smartypants

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/smartypants-2.0.1.dist-info

Short Descriptions

smartypants translates ASCII punctuation to HTML punctuation.

Snowballstemmer-2.2.0

Introduction to Snowballstemmer Module

The Snowballstemmer package is a small string processing language for creating stemming algorithms for use in Information Retrieval, plus a collection of stemming algorithms implemented using it. Stemming maps different forms of the same word to a common “stem” — for example, the English stemmer maps connection, connections, connective, connected, and connecting to connect. So a searching for connected would also find documents which only have the other forms.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Installation of Snowballstemmer

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user snowballstemmer

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/snowballstemmer and /usr/lib/python3.11/site-packages/snowballstemmer-2.2.0.dist-info

Sphinxcontrib-applehelp-1.0.3

Introduction to Sphinxcontrib-applehelp Module

The Sphinxcontrib-applehelp package is a Sphinx extension which outputs Apple help books.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-applehelp Dependencies

Optional (for testing)

pytest-7.2.1 and sphinx-6.1.3 (circular dependency)

Installation of Sphinxcontrib-applehelp

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-applehelp

To test the installation, run pytest. Several warnings may be issued, due to the use of deprecated functions.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_applehelp-1.0.3.dist-info

Sphinxcontrib-devhelp-1.0.2

Introduction to Sphinxcontrib-devhelp Module

The Sphinxcontrib-devhelp package is a Sphinx extension which outputs Devhelp documents.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-devhelp Dependencies

Optional (for testing)

pytest-7.2.1 and sphinx-6.1.3 (circular dependency)

Installation of Sphinxcontrib-devhelp

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-devhelp

To test the installation, run pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_devhelp-1.0.2.dist-info

Sphinxcontrib-htmlhelp-2.0.0

Introduction to Sphinxcontrib-htmlhelp Module

The Sphinxcontrib-htmlhelp package is a Sphinx extension which renders HTML help files.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-htmlhelp Dependencies

Optional (for testing)

pytest-7.2.1, sphinx-6.1.3 (circular dependency), and html5lib

Installation of Sphinxcontrib-htmlhelp

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-htmlhelp

Assuming pytest-7.2.1 is installed, but the other optional dependency is not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv   &&
source testenv/bin/activate                      &&
pip3 install html5lib                            &&
sed -i 's/text()/read_&/' tests/test_htmlhelp.py &&
python3 /usr/bin/pytest
deactivate

the sed … command is needed because of a change in Sphinx API for versions greater than 5.0.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_htmlhelp-2.0.0.dist-info

Sphinxcontrib-jquery-2.0.0

Introduction to Sphinxcontrib-jquery Module

The Sphinxcontrib-jquery package is a Sphinx extension which includes jQuery on newer Sphinx releases.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-jquery Dependencies

Optional (for testing)

pytest-7.2.1

Installation of Sphinxcontrib-jquery

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a testsuite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-jquery

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_jquery-2.0.0.dist-info

Sphinxcontrib-jsmath-1.0.1

Introduction to Sphinxcontrib-jsmath Module

The Sphinxcontrib-jsmath package is a Sphinx extension which renders display math in HTML via JavaScript.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-jsmath Dependencies

Optional (for testing)

pytest-7.2.1 and sphinx-6.1.3 (circular dependency)

Installation of Sphinxcontrib-jsmath

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-jsmath

The installation can be tested with the following commands:

sed -i 's/text()/read_&/' tests/test_jsmath.py &&
pytest

the sed … command is needed because of a change in Sphinx API for versions greater than 5.0.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info

Sphinxcontrib-qthelp-1.0.3

Introduction to Sphinxcontrib-qthelp Module

The Sphinxcontrib-qthelp package is a Sphinx extension which outputs QtHelp documents.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-qthelp Dependencies

Optional (for testing)

pytest-7.2.1 and sphinx-6.1.3 (circular dependency)

Installation of Sphinxcontrib-qthelp

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-qthelp

The installation can be tested with the following commands:

sed -i 's/text()/read_&/' tests/test_qthelp.py &&
pytest

The sed … command is needed because of a change in Sphinx API for versions greater than 5.0.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_qthelp-1.0.3.dist-info

Sphinxcontrib-serializinghtml-1.1.5

Introduction to Sphinxcontrib-serializinghtml Module

The Sphinxcontrib-serializinghtml package is a Sphinx extension which outputs “serialized” HTML files (json and pickle).

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sphinxcontrib-serializinghtml Dependencies

Optional (for testing)

pytest-7.2.1 and sphinx-6.1.3 (circular dependency)

Installation of Sphinxcontrib-serializinghtml

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user sphinxcontrib-serializinghtml

To test the installation, run pytest.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/sphinxcontrib and /usr/lib/python3.11/site-packages/sphinxcontrib_serializinghtml-1.1.5.dist-info

Typing_extensions-4.4.0

Introduction to Typing_extensions Module

The Typing_extensions module allows using new type system features not yet defined on the Python version in use on the system.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Typing_extensions Dependencies

Required

flit_core-3.8.0

Installation of Typing_extensions

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a test suite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user typing_extensions

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/typing_extensions-4.4.0.dist-info

Typogrify-2.0.7

Introduction to Typogrify Module

Typogrify provides filters to enhance web typography, including support for Django and Jinja templates.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Typogrify Dependencies

Required

smartypants-2.0.1

Installation of Typogrify

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

This package does not come with a testsuite.

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user typogrify

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/typogrify and /usr/lib/python3.11/site-packages/typogrify-2.0.7.dist-info

Urllib3-1.26.14

Introduction to Urllib3 Module

The Urllib3 module is a powerful, user-friendly HTTP client for Python. It brings many critical features that are missing from the Python standard libraries.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Urllib3 Dependencies

Optional (for tests)

pytest-7.2.1, mock, PySocks, pytest-freezegun, pytest-timeout, python-dateutil, tornado, and trustme

Installation of Urllib3

Build the module:

pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Now, as the root user:

pip3 install --no-index --find-links dist --no-cache-dir --no-user urllib3

Assuming pytest-7.2.1 is installed, but the other optional dependencies are not, the installation can be tested with the following commands:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install trustme         \
             tornado         \
             python-dateutil \
             mock            \
             pysocks         \
             pytest-timeout  \
             pytest-freezegun                  &&
python3 /usr/bin/pytest
deactivate

A few errors are known to occur.

Command Explanations

-w dist: builds the appropriate “wheel” for this module in the directory dist.

--no-build-isolation: tells pip3 to run the build in the system environment instead of creating a temporary build environment.

--no-deps: prevents pip3 from building wheels for the project’s dependencies.

--no-index: ignores the package index (only looking at –find-links URLs instead).

--find-links dist: looks for links to archives such as wheel (.whl) files in the directory dist.

--no-cache-dir: disables the cache to prevent a warning when installing as the root user.

--no-user: Prevent mistakenly running the install command as a non-root user.

--upgrade: Upgrade the package to the newest available version. This option is used with the install command if a version of the package is already installed.

--force-reinstall: Reinstall the package even if it is up-to-date. This option is used with the install command if reinstalling the package or reverting to an earlier version of the package.

--no-deps: Do not install package dependencies. This option may be needed with the –upgrade or –force-reinstall options.

Contents

Installed Programs: None

Installed Libraries: None

Installed Directories: /usr/lib/python3.11/site-packages/urllib3 and /usr/lib/python3.11/site-packages/urllib3-1.26.14.dist-info.

13.26 Ruby-3.2.1


Introduction to Ruby

The Ruby package contains the Ruby development environment. This is useful for object-oriented scripting.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Ruby Dependencies

Required

libyaml-0.2.5

Optional

Berkeley DB-5.3.28, Doxygen-1.9.6, Graphviz-7.1.0, rustc-1.67.1, Tk-8.6.13, Valgrind-3.20.0, and DTrace

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ruby

Installation of Ruby

Install Ruby by running the following command:

./configure --prefix=/usr      \
            --enable-shared    \
            --without-valgrind \
            --docdir=/usr/share/doc/ruby-3.2.1 &&
make

Optionally, build the CAPI documents by running the following commands:

make capi

To test the results, issue: make check. There are over 25,000 tests. Some tests related to ipv6 may indicate errors. If the tests are run in a directory that has a world writable component (e.g. /tmp) then several additional tests may fail. A few tests may fail due to system configuration expectations.

Now, as the root user:

make install

Note

If you have Ruby-On-Rails applications installed and did an upgrade of Ruby by installing this package, you might need to run an update there, too (as the root user):

cd /path/to/web/app
bundle update rake

and restart the webserver which serves the application.

Command Explanations

--enable-shared: This switch enables building the libruby shared library.

--disable-install-doc: This switch disables building and installing rdoc indexes and C API documents.

--disable-install-rdoc: This switch disables building and installing rdoc indexes.

--disable-install-capi: This switch disables building and installing C API documents.

--without-baseruby: This switch prevents using the system ruby if it is already installed. The build system will use the newly built version instead.

Contents

Installed Programs: bundle, bundler, erb, gem, irb, racc, rake, rbs, rdbg, rdoc, ri, ruby, and typeprof

Installed Libraries: libruby.so

Installed Directories: /usr/include/ruby-3.2.0, /usr/lib/ruby, /usr/share/doc/ruby-3.2.1 and /usr/share/ri

Short Descriptions

bundle creates bundles of Ruby Gems.

bundler manages an application’s dependencies throughout it’s lifecycle.

erb is a command line front-end for eRuby, which provides a templating system for Ruby.

gem is the command for RubyGems, which is a sophisticated package manager for Ruby. This is similar to Python’s ‘pip’ command.

irb is the interactive interface for Ruby.

rake is a make-like build utility for Ruby.

rdbg is an interactive debugger for Ruby.

rdoc generates Ruby documentation.

ri displays documentation from a database on Ruby classes, modules, and methods.

ruby is an interpreted scripting language for quick and easy object-oriented programming.

libruby.so contains the API functions required by Ruby.

13.27 Rustc-1.67.1


Introduction to Rust

The Rust programming language is designed to be a safe, concurrent, practical language.

This package is updated on a six-weekly release cycle. Because it is such a large and slow package to build, is at the moment only required by a few packages in this book, and particularly because newer versions tend to break older mozilla packages, the BLFS editors take the view that it should only be updated when that is necessary (either to fix problems, or to allow a new version of a package to build).

As with many other programming languages, rustc (the rust compiler) needs a binary from which to bootstrap. It will download a stage0 binary at the start of the build, so you cannot compile it without an Internet connection.

Note

Although BLFS usually installs in /usr, when you later upgrade to a newer version of rust the old libraries in /usr/lib/rustlib will remain, with various hashes in their names, but will not be usable and will waste space. The editors recommend placing the files in the /opt directory. In particular, if you have reason to rebuild with a modified configuration (e.g. using the shipped LLVM after building with shared LLVM, perhaps to compile crates for architectures which the BLFS LLVM build does not support) it is possible for the install to leave a broken cargo program. In such a situation, either remove the existing installation first, or use a different prefix such as /opt/rustc-1.67.1-build2.

If you prefer, you can of course change the prefix to /usr.

The current rustbuild build-system will use all processors, although it does not scale well and often falls back to just using one core while waiting for a library to compile. However it can be mostly limited to a specified number of processors by a combination of adding the switch --jobs <N> (e.g. ‘–jobs 4’ to limit to 4 processors) on each invocation of python3 ./x.py and using an environment variable CARGO_BUILD_JOBS=<N>. At the moment this is not effective when some of the rustc tests are run.

The current version of rust’s num_cpus crate now recognizes that cgroups can be used to restrict which processors it is allowed to use. So if your machine lacks DRAM (typically, less than 2GB DRAM per core) that might be an alternative to taking CPUs offline. That can be achieved by using systemd-run command with -p User=$(whoami) and -p AllowedCPUs=0-x (with x replaced with the number of CPU cores you want to use minus one) options.

At the moment Rust does not provide any guarantees of a stable ABI.

Note

Rustc defaults to building for ALL supported architectures, using a shipped copy of LLVM. In BLFS the build is only for the X86 architecture. If you intend to develop rust crates, this build may not be good enough for your purposes.

The build times of this version when repeated on the same machine are often reasonably consistent, but as with all compilations using rustc there can be some very slow outliers.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Rust Dependencies

Required

CMake-3.25.2

cURL-7.88.1, libssh2-1.10.0, and LLVM-15.0.7 (built with -DLLVM_LINK_LLVM_DYLIB=ON so that rust can link to system LLVM instead of building its shipped version)

Note

If a recommended dependency is not installed, a shipped copy in the Rustc source tarball will be built and used.

Optional

GDB-13.1 (used by the test suite if it is present) and libgit2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rust

Installation of Rust

Note

Currently Rust compiler produces SSE2 instructions for 32-bit x86, causing the generated code broken on 32-bit systems without a SSE2-capable processor. All x86 processor models released after 2004 should be SSE2-capable. Run **lscpu grep sse2** as a test. If it outputs anything, your CPU is SSE2-capable and OK. Otherwise you may try to build this package on a SSE2-capable system with the following fix applied:
sed 's@pentium4@pentiumpro@' -i \
    compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs

And copy the resulting /opt/rustc-1.67.1 to the system without SSE2 capability. But this change is still under upstream review and not tested by BLFS editors.

To install into the /opt directory, remove any existing /opt/rustc symlink and create a new directory (i.e. with a different name if trying a modified build of the same version). As the root user:

mkdir -pv /opt/rustc-1.67.1      &&
ln -svfn rustc-1.67.1 /opt/rustc

Note

If multiple versions of Rust are installed in /opt, changing to another version only requires changing the /opt/rustc symbolic link and then running ldconfig.

Create a suitable config.toml file which will configure the build.

cat << EOF > config.toml
# see config.toml.example for more possible options
# See the 8.4 book for an old example using shipped LLVM
# e.g. if not installing clang, or using a version before 13.0

# tell x.py to not keep printing an annoying warning
changelog-seen = 2

[llvm]
# by default, rust will build for a myriad of architectures
targets = "X86"

# When using system llvm prefer shared libraries
link-shared = true

[build]
# omit docs to save time and space (default is to build them)
docs = false

# install extended tools: cargo, clippy, etc
extended = true

# Do not query new versions of dependencies online.
locked-deps = true

# Specify which extended tools (those from the default install).
tools = ["cargo", "clippy", "rustfmt"]

# Use the source code shipped in the tarball for the dependencies.
# The combination of this and the "locked-deps" entry avoids downloading
# many crates from Internet, and makes the Rustc build more stable.
vendor = true

[install]
prefix = "/opt/rustc-1.67.1"
docdir = "share/doc/rustc-1.67.1"

[rust]
channel = "stable"
description = "for BLFS 11.3"

# BLFS used to not install the FileCheck executable from llvm,
# so disabled codegen tests.  The assembly tests rely on FileCheck
# and cannot easily be disabled, so those will anyway fail if
# FileCheck has not been installed.
#codegen-tests = false

[target.x86_64-unknown-linux-gnu]
# NB the output of llvm-config (i.e. help options) may be
# dumped to the screen when config.toml is parsed.
llvm-config = "/usr/bin/llvm-config"

[target.i686-unknown-linux-gnu]
# NB the output of llvm-config (i.e. help options) may be
# dumped to the screen when config.toml is parsed.
llvm-config = "/usr/bin/llvm-config"


EOF

Compile Rust by running the following commands:

{ [ ! -e /usr/include/libssh2.h ] ||
  export LIBSSH2_SYS_USE_PKG_CONFIG=1; } &&
python3 ./x.py build

Note

The test suite will generate some messages in the systemd journal for traps on invalid opcodes, and for segmentation faults. In themselves these are nothing to worry about, just a way for the test to be terminated.

To run the tests (again using all available CPUs) issue:

python3 ./x.py test --verbose --no-fail-fast | tee rustc-testlog

If FileCheck from LLVM has not been installed, all 47 tests from the “assembly” suite will fail.

As with all large test suites, other tests might fail on some machines - if the number of additional failures is in the single digits, check the log for ‘failures:’ and review lines above that, particularly the ‘stderr:’ lines. Any mention of SIGSEGV or signal 11 in a failing test is a cause for concern.

If you get any other failing test which reports an issue number then you should search for that issue. For example, when rustc >= 1.41.1 was built with a version of sysllvm before 10.0 the test for issue 69225 failed https://github.com/rust-lang/rust/issues/69225 and that should be regarded as a critical failure (they released 1.41.1 because of it). Most other failures will not be critical.

Therefore, you should determine the number of failures.

The number of tests which passed and failed can be found by running:

grep '^test result:' rustc-testlog |
 awk '{sum1 += $4; sum2 += $6} END { print sum1 " passed; " sum2 " failed" }'

The other available fields are $8 for those which were ignored (i.e. skipped), $10 for ‘measured’ and $12 for ‘filtered out’ but both those last two are probably zero.

Now, as the root user, install the package:

Note

If sudo or su is invoked for switching to the root user, ensure LIBSSH2_SYS_USE_PKG_CONFIG is correctly passed or the following command may completely rebuild this package. For sudo, use the --preserve-env=LIBSSH2_SYS_USE_PKG_CONFIG option. For su, do not use the - or --login.

python3 ./x.py install

Command Explanations

ln -svfn rustc-1.67.1 /opt/rustc: if this is not the first use of the /opt/rustc symlink, overwrite it by forcing, and use the ‘-n’ flag to avoid getting confusing results from e.g. ls -l.

targets = “X86”: this avoids building all the available linux cross-compilers (AArch64, MIPS, PowerPC, SystemZ, etc). Unfortunately, rust insists on installing source files for these below /opt/rustc/lib/src.

extended = true: this installs several tools (specified by the tools entry) alongside rustc.

tools = [“cargo”, “clippy”, “rustfmt”]: if the tools are not scecified, the absence of Miri now causes the install to fail. But Miri is not built in the stable channel. Some of the other tools are unlikely to be useful unless using (old) code analyzers or editing the standard library. This set match those from the ‘default’ profile in binary command rustup which are recommended for most users, except that the documentation was disabled at the start of the ‘[build]’ section.

channel = “stable”: this ensures only stable features can be used, the default in config.toml is to use development features, which is not appropriate for a released version.

[target.x86_64-unknown-linux-gnu]: the syntax of config.toml requires an llvm-config entry for each target for which system-llvm is to be used. Change the target to [target.i686-unknown-linux-gnu] if you are building on 32-bit x86. This whole section may be omitted if you wish to build against the shipped llvm, or do not have clang, but the resulting build will be larger and take longer.

export LIBSSH2_SYS_USE_PKG_CONFIG=1: Allow cargo to link to system libssh2.

–verbose: this switch can sometimes provide more information about a test which fails.

–no-fail-fast: this switch ensures that the test suite will not stop at the first error.

Configuring Rust

Configuration Information

If you installed rustc in /opt, you need to update the following configuration files so that rustc is correctly found by other packages and system processes.

As the root user, create the /etc/profile.d/rustc.sh file:

cat > /etc/profile.d/rustc.sh << "EOF"
# Begin /etc/profile.d/rustc.sh

pathprepend /opt/rustc/bin           PATH

# Include /opt/rustc/man in the MANPATH variable to access manual pages
pathappend  /opt/rustc/share/man     MANPATH

# End /etc/profile.d/rustc.sh
EOF

Immediately after installation, update the current PATH for your current shell as a normal user:

source /etc/profile.d/rustc.sh

Contents

Installed Programs: cargo-clippy, cargo-fmt, cargo, clippy-driver, rust-gdb, rust-gdbgui, rust-lldb, rustc, rustdoc, and rustfmt

Installed Libraries: librustc-driver-<16-byte-hash>.so, libstd-<16-byte-hash>.so, and libtest-<16-byte-hash>.so

Installed Directories: ~/.cargo, /opt/rustc, symbolic link to /opt/rustc-1.67.1

Short Descriptions

cargo-clippy provides lint checks for a cargo package.

cargo-fmt formats all bin and lib files of the current crate using rustfmt.

cargo is the Package Manager for Rust.

clippy-driver provides lint checks for Rust.

rust-gdb is a wrapper script for gdb, pulling in Python pretty-printing modules installed in /opt/rustc-1.67.1/lib/rustlib/etc.

rust-gdbgui is a wrapper script for a graphical front end to gdb that runs in a browser.

rust-lldb is a wrapper script for LLDB (the LLVM debugger) pulling in the Python pretty-printing modules.

rustc is the rust compiler.

rustdoc generates documentation from rust source code.

rustfmt formats rust code.

libstd-<16-byte-hash>.so is the Rust Standard Library, the foundation of portable Rust software.

13.28 SCons-4.4.0


Introduction to SCons

SCons is a tool for building software (and other files) implemented in Python.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

SCons Dependencies

Optional

docbook-xsl-nons-1.79.2 and libxslt-1.1.37

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/scons

Installation of SCons

Install SCons by running the following commands as the root user:

sed -i 's/env python/&3/' SCons/Utilities/*.py &&

python3 setup.py install --prefix=/usr \
                         --optimize=1  &&

mv -v /usr/lib/python3.11/site-packages/SCons-4.4.0-py3.11.egg/*.1 \
      /usr/share/man/man1

Contents

Installed Programs: scons, scons-configure-cache, and sconsign

Installed Libraries: None

Installed Directory: /usr/lib/python3.11/site-packages/SCons

Short Descriptions

scons is a software construction tool.

scons-configure-cache shows or converts the configuration of an SCons cache directory.

sconsign prints SCons .sconsign file information.

13.29 slang-2.3.3


Introduction to slang

S-Lang (slang) is an interpreted language that may be embedded into an application to make the application extensible. It provides facilities required by interactive applications such as display/screen management, keyboard input and keymaps.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Slang Dependencies

Optional

libpng-1.6.39, PCRE-8.45, and Oniguruma

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/slang

Installation of Slang

Note

This package does not support parallel build.

Install slang by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --with-readline=gnu &&
make -j1

To test the results, issue: make check.

Now, as the root user:

make install_doc_dir=/usr/share/doc/slang-2.3.3   \
     SLSH_DOC_DIR=/usr/share/doc/slang-2.3.3/slsh \
     install &&

chmod -v 755 /usr/lib/slang/v2/modules/*.so

Command Explanations

--with-readline=gnu: This parameter sets GNU Readline to be used by the parser interface instead of the slang internal version.

make install_doc_dir=/usr/share/doc/slang-2.3.3 SLSH_DOC_DIR=/usr/share/doc/slang-2.3.3/slsh install: This command installs this package with a versioned documentation installation directory.

Configuring slang

Config Files

~/.slshrc and /etc/slsh.rc

Contents

Installed Program: slsh

Installed Libraries: libslang.so and numerous support modules

Installed Directories: /usr/lib/slang, /usr/share/doc/slang-2.3.3 and /usr/share/slsh

Short Descriptions

slsh is a simple program for interpreting slang scripts. It supports dynamic loading of slang modules and includes a Readline interface for interactive use.

13.30 Subversion-1.14.2


Introduction to Subversion

Subversion is a version control system that is designed to be a compelling replacement for CVS in the open source community. It extends and enhances CVS’ feature set, while maintaining a similar interface for those already familiar with CVS. These instructions install the client and server software used to manipulate a Subversion repository. Creation of a repository is covered at Running a Subversion Server.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Subversion Dependencies

Required

Apr-Util-1.6.3 and SQLite-3.40.1

Serf-1.3.9 (for handling http:// and https:// URLs)

Optional

Apache-2.4.55, Boost-1.81.0, Cyrus SASL-2.1.28, dbus-1.14.6, Doxygen-1.9.6 (for generating HTML documentation), gnome-keyring-42.1, libsecret-0.20.5, Py3c-1.4 (for the python bindings, and tests) Python-2.7.18 (with sqlite support for the tests), Ruby-3.2.1, SWIG-4.1.1 (for building Perl, Python and Ruby bindings), LZ4, and UTF8proc

Optional (for the Java Bindings)

One of OpenJDK-19.0.2, Dante or Jikes, JUnit 4 (to test the Java bindings) and apache-ant-1.10.13.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/subversion

Installation of Subversion

First, adapt some Python scripts to use python3:

grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'

Next, adapt the Ruby bindings to Ruby-3.2:

sed -e 's/File.exists?/File.exist?/'               \
    -i subversion/bindings/swig/ruby/svn/util.rb   \
       subversion/bindings/swig/ruby/test/test_wc.rb

Install Subversion by running the following commands:

PYTHON=python3 ./configure --prefix=/usr             \
            --disable-static          \
            --with-apache-libexecdir  \
            --with-lz4=internal       \
            --with-utf8proc=internal &&
make

If you have Doxygen-1.9.6 installed and you wish to build the API documentation, issue:

doxygen doc/doxygen.conf

If you wish to build the Java bindings pass the --enable-javahl parameter to the configure command. In addition, if you want to run the Java test suite, you have to specify the location of the JUnit file by adding --with-junit=<path to junit jar> (for instance --with-junit=/usr/local/java/lib/junit-4.13.jar) to configure. The JUnit jar file is no longer included in apache-ant-1.10.13 and must be downloaded separately. To build the Java bindings, issue the following command:

make -j1 javahl

If you want to compile Perl, Python, or Ruby bindings, issue any of the following command:

make swig-pl # for Perl
make swig-py \
     swig_pydir=/usr/lib/python3.11/site-packages/libsvn \
     swig_pydir_extra=/usr/lib/python3.11/site-packages/svn # for Python
make swig-rb # for Ruby

To test the results, issue: make check. Four tests in the commit_tests.py, prop_tests.py, and update_tests.py suites are known to fail.

To test the results of any of the SWIG bindings, you can use any of the following commands: make check-swig-pl, make check-swig-py, or make check-swig-rb.

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/subversion-1.14.2 &&
cp      -v -R doc/* /usr/share/doc/subversion-1.14.2

If you built the Java bindings, issue the following command as the root user to install them:

make install-javahl

If you built the Perl, Python, or Ruby bindings, issue any of the following commands as the root user to install them:

make install-swig-pl
make install-swig-py \
      swig_pydir=/usr/lib/python3.11/site-packages/libsvn \
      swig_pydir_extra=/usr/lib/python3.11/site-packages/svn
make install-swig-rb

The java bindings need to be installed in order for the tests to run, since the tests attempt to look for them in CLASSPATH. To test the results of the Java bindings build, issue LANG=C make check-javahl.

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

--with-apache-libexecdir: If Apache-2.4.55 is installed, the shared Apache modules are built. This switch allows to have those modules installed to Apache’s configured module dir instead of /usr/libexec. It has no effect if Apache is not installed.

--with-lz4=internal, --with-utf8proc=internal: Remove these switches if you have installed the optional dependencies.

--enable-javahl: enables compilation of Java high level bindings. Running make javahl is necessary to do the compilation.

--with-junit=<location of the junit jar file>: gives the location of the junit jar, otherwise the javahl tests cannot be run.

--disable-gmock: Do not use the Googlemock testing framework.

Configuring Subversion

Config Files

~/.subversion/config and /etc/subversion/config

Configuration Information

/etc/subversion/config is the Subversion system-wide configuration file. This file is used to specify defaults for different svn commands.

~/.subversion/config is the user’s personal configuration file. It is used to override the system-wide defaults set in /etc/subversion/config.

Contents

Installed Programs: svn, svnadmin, svnbench, svndumpfilter, svnfsfs, svnlook, svnmucc, svnrdump, svnserve, svnsync, and svnversion

Installed Libraries: libsvn_*-1.so and optionally, a Java library, the mod_dav_svn.so and and mod_authz_svn.so Apache HTTP DSO modules and various Perl, Python and Ruby modules.

Installed Directories: /usr/include/subversion-1, /usr/lib/perl5/site_perl/5.36/{,auto/}SVN, /usr/lib/python3.11/site-packages/{libsvn,svn}, /usr/lib/ruby/site_ruby//{,-linux/}svn, /usr/lib/svn-javahl, and /usr/share/doc/subversion-1.14.2

Short Descriptions

svn is a command-line client program used to access Subversion repositories.

svnadmin is a tool for creating, tweaking or repairing a Subversion repository.

svnbench is a benchmarking tool.

svndumpfilter is a program for filtering Subversion repository dumpfile format streams.

svnfsfs is the FSFS (FileSystem atop of the FileSystem - Subversion filesystem implementation) repository manipulation tool.

svnlook is a tool for inspecting a Subversion repository.

svnmucc is a Multiple URL Command Client for Subversion.

svnrdump is a tool for dumping or loading a remote Subversion repository.

svnserve is a custom standalone server program, able to run as a daemon process or invoked by SSH.

svnsync is a Subversion repository synchronisation tool.

svnversion is used to report the version number and state of a working Subversion repository copy.

libsvn_*-1.so are the support libraries used by the Subversion programs.

mod_authz_svn.so is a plug-in module for the Apache HTTP server, used to authenticate users to a Subversion repository over the Internet or an intranet.

mod_dav_svn.so is a plug-in module for the Apache HTTP server, used to make a Subversion repository available to others over the Internet or an intranet.

13.31 Running a Subversion Server


Running a Subversion Server

This section will describe how to set up, administer and secure a Subversion server.

Subversion Server Dependencies

Required

Subversion-1.14.2 and OpenSSH-9.2p1

Setting up a Subversion Server.

The following instructions will install a Subversion server, which will be set up to use OpenSSH as the secure remote access method, with svnserve available for anonymous access.

Configuration of the Subversion server consists of the following steps:

1. Set Uup Users, Groups, and Permissions

You’ll need to be user root for the initial portion of configuration. Create the svn user and group with the following commands:

groupadd -g 56 svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

If you plan to have multiple repositories, you should have a group dedicated to each repository for ease of administration. Create the svntest group for the test repository and add the svn user to that group with the following commands:

groupadd -g 57 svntest &&
usermod -G svntest -a svn

Additionally you should set umask 002 while working with a repository so that all new files will be writable by owner and group. This is made mandatory by creating a wrapper script for svn and svnserve:

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}

Note

If you use Apache for working with the repository over HTTP, even for anonymous access, you should wrap /usr/sbin/httpd in a similar script.

2. Create a Subversion repository.

There are several ways to set up a subversion repository. It is recommended to have a look at the SVN Book corresponding chapter. A basic repository can be set up with the instructions below.

Create a new Subversion repository with the following commands (as the root user):

install -v -m 0755 -d /srv/svn &&
install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
svnadmin create /srv/svn/repositories/svntest

Now that the repository is created, it should be populated with something useful. You’ll need to have a predefined directory layout set up exactly as you want your repository to look. For example, here is a sample BLFS layout setup with a root of svntest/. You’ll need to set up a directory tree similar to the following:

svntest/                # The name of the repository
    trunk/              # Contains the existing source tree
        BOOK/
        bootscripts/
        edguide/
        patches/
        scripts/
    branches/           # Needed for additional branches
    tags/               # Needed for tagging release points

Once you’ve created your directory layout as shown above, you are ready to do the initial import:

svn import -m "Initial import." \
    </path/to/source/tree>      \
    file:///srv/svn/repositories/svntest

Now change owner and group information on the repository, and add an unprivileged user to the svn and svntest groups:

chown -R svn:svntest /srv/svn/repositories/svntest    &&
chmod -R g+w         /srv/svn/repositories/svntest    &&
chmod g+s            /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>

svntest is the group assigned to the svntest repository. As mentioned earlier, this eases administration of multiple repositories when using OpenSSH for authentication. Going forward, you’ll need to add your unprivileged user, and any additional users that you wish to have write access to the repository, to the svn and svntest groups.

In addition, you’ll notice that the new repository’s db directory is set-groupID. If the reasoning is not immediately obvious, when using any external authentication method (such as ssh), the sticky bit is set so that all new files will be owned by the user, but group of svntest. Anyone in the svntest group can create files, but still give the entire group write access to those files. This avoids locking out other users from the repository.

Now, return to an unprivileged user account, and take a look at the new repository using svnlook:

svnlook tree /srv/svn/repositories/svntest/

Note

You may need to log out and back in again to refresh your group memberships. su <username> should work as well.

3. Configure the Server

As mentioned previously, these instructions will configure the server to use only ssh for write access to the repository and to provide anonymous access using svnserve. There are several other ways to provide access to the repository. These additional configurations are best explained at https://svnbook.red-bean.com/.

Access configuration needs to be done for each repository. Create the svnserve.conf file for the svntest repository using the following commands:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
   /srv/svn/repositories/svntest/conf/svnserve.conf.default &&

cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

There is not a lot to the configuration file at all. You’ll notice that only the general section is required. Take a look at the svnserve.conf.default file for information on using svnserve’s built-in authentication method.

4. Starting the Server

To start the server at boot time, install the svnserve.service unit from the blfs-systemd-units-20220720 package:

make install-svnserve

Additionally, the instructions above require that svn server uses umask 002 so that all new files will be writable by owner and group. This can be achieved by creating a systemd unit override file by running the following command:

mkdir -p /etc/systemd/system/svnserve.service.d
echo "UMask=0002" > /etc/systemd/system/svnserve.service.d/99-user.conf

Options which are passed to svnserve daemon can be changed in /etc/default/svnserve.

13.32 SWIG-4.1.1


Introduction to SWIG

SWIG (Simplified Wrapper and Interface Generator) is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua, Octave, R, Scheme, and Ocaml. SWIG can also export its parse tree into Lisp s-expressions and XML.

SWIG reads annotated C/C++ header files and creates wrapper code (glue code) in order to make the corresponding C/C++ libraries available to the listed languages, or to extend C/C++ programs with a scripting language.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

SWIG Dependencies

Required

pcre2-10.42

Optional

Boost-1.81.0 for tests, and any of the languages mentioned in the introduction, as run-time dependencies

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/swig

Installation of SWIG

Install SWIG by running the following commands:

./configure --prefix=/usr                      \
            --without-javascript               \
            --without-maximum-compile-warnings &&
make

To test the results, issue: PY3=1 make -k check TCL_INCLUDE=. The unsetting of the variable TCL_INCLUDE is necessary since it is not correctly set by configure. The tests are only executed for the languages installed on your machine, so the disk space and SBU values given for the tests may vary, and should be considered as mere orders of magnitude. According to SWIG’s documentation, the failure of some tests should not be considered harmful. The go tests are buggy and may generate a lot of meaningless output.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/swig-4.1.1 &&
cp -v -R Doc/* /usr/share/doc/swig-4.1.1

Command Explanations

--without-maximum-compile-warnings: disables compiler ansi conformance enforcement, which triggers errors in the Lua headers (starting with Lua 5.3).

--without-<language>: allows disabling the building of tests and examples for , but all the languages capabilities of SWIG are always built.

Contents

Installed Programs: swig and ccache-swig

Installed Library: None

Installed Directories: /usr/share/doc/swig-4.1.1 and /usr/share/swig

Short Descriptions

swig takes an interface file containing C/C++ declarations and SWIG special instructions, and generates the corresponding wrapper code needed to build extension modules.

ccache-swig is a compiler cache, which speeds up re-compilation of C/C++/SWIG code.

13.33 Sysprof-3.46.0


Introduction to Sysprof

The sysprof package contains a statistical and system-wide profiler for Linux.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Sysprof Dependencies

Required

desktop-file-utils-0.26, GTK-4.8.3, itstool-2.0.7, JSON-GLib-1.6.6, libadwaita-1.2.2, libdazzle-3.44.0, libunwind-1.6.2, and Polkit-122

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sysprof

Installation of Sysprof

Install Sysprof by running the following commands:

mkdir build &&
cd    build &&

meson --prefix=/usr .. &&
ninja

To test the results, issue: ninja test.

Now, as the root user:

ninja install

Contents

Installed Programs: sysprof, sysprof-agent, and sysprof-cli

Installed Libraries: libsysprof-4.so, libsysprof-capture-4.a, libsysprof-memory-4.so, libsysprof-speedtrack-4.so, and libsysprof-ui-5.so

Installed Directories: /usr/include/sysprof-4, /usr/include/sysprof-ui-5, and /usr/share/help/*/sysprof

Short Descriptions

sysprof is a graphical interface to sysprof.

sysprof-agent is used to profile applications in containers.

sysprof-cli is a command line interface to sysprof.

libsysprof-4.so provides API functions for profiling processes running on a system.

libsysprof-capture-4.a provides a hook used to capture statistics from a process.

libsysprof-memory-4.so provides API functions for capturing memory statistics.

libsysprof-speedtrack-4.so provides API functions for tracking the speed of a running process.

libsysprof-ui-4.so provides API functions for the sysprof GUI.

13.34 Tk-8.6.13


Introduction to Tk

The Tk package contains a TCL GUI Toolkit.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Tk Dependencies

Required

Xorg Libraries

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tk

Installation of Tk

Install Tk by running the following commands:

cd unix &&
./configure --prefix=/usr \
            --mandir=/usr/share/man \
            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&

make &&

sed -e "s@^\(TK_SRC_DIR='\).*@\1/usr/include'@" \
    -e "/TK_B/s@='\(-L\)\?.*unix@='\1/usr/lib@" \
    -i tkConfig.sh

Running the tests is not recommended. Failures will be reported during the tests, depending on the screen resolution/capabilities, fonts installed and other X related parameters, but the end report can show 0 failures. Some tests will steal focus and some might crash your X Server. To test the results anyway, issue: make test. Ensure you run it from an X Window display device with the GLX extensions loaded, but even so, tests might hang.

Now, as the root user:

make install &&
make install-private-headers &&
ln -v -sf wish8.6 /usr/bin/wish &&
chmod -v 755 /usr/lib/libtk8.6.so

Command Explanations

$([ $(uname -m) = x86_64 ] && echo --enable-64bit): This switch is used to enable 64 bit support in Tk on 64 bit operating systems.

make install-private-headers: This command is used to install the Tk library interface headers used by other packages if they link to the Tk library.

ln -v -sf wish8.6 /usr/bin/wish: This command is used to create a compatibility symbolic link to the wish8.6 file as many packages expect a file named wish.

sed -e … tkConfig.sh: The Tk package expects that its source tree is preserved so that packages depending on it for their compilation can utilize it. This sed removes the references to the build directory and replaces them with saner system-wide locations.

Contents

Installed Programs: wish and wish8.6

Installed Libraries: libtk8.6.so and libtkstub8.6.a

Installed Directory: /usr/lib/tk8.6

Short Descriptions

wish is a symlink to the wish8.6 program.

wish8.6 is a simple shell containing the Tk toolkit that creates a main window and then processes Tcl commands.

libtk8.6.so contains the API functions required by Tk.

13.35 Vala-0.56.4


Introduction to Vala

Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Vala Dependencies

Required

GLib-2.74.5

Graphviz-7.1.0 (Required for valadoc)

Optional

dbus-1.14.6 (Required for the tests), libxslt-1.1.37 (Required for generating the documentation), help2man, jing, and weasyprint

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vala

Installation of Vala

Install Vala by running the following commands:

./configure --prefix=/usr &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--disable-valadoc: This option is required if Graphviz-7.1.0 is not installed.

Contents

Installed Programs: vala, vala-0.56, valac, valadoc, vala-gen-introspect, and vapigen (symlinks); valac-0.56, valadoc-0.56, vala-gen-introspect-0.56, and vapigen-0.56

Installed Library: libvala-0.56.so and libvaladoc-0.56.so

Installed Directories: /usr/include/vala-0.56, /usr/include/valadoc-0.56, /usr/lib/vala-0.56, /usr/lib/valadoc-0.56, /usr/share/vala, /usr/share/vala-0.56, /usr/share/valadoc-0.56, and /usr/share/devhelp/books/vala-0.56

Short Descriptions

valac is a compiler that translates Vala source code into C source and header files.

valadoc is a documentation generator for generating API documentation from Vala source code based on libvala.

vala-gen-introspect generates a GI file for GObject and GLib based packages.

vapigen is an utility which generates Vala API (VAPI) files from GI files.

libvala-0.56.so contains the Vala API functions.

13.36 Valgrind-3.20.0


Introduction to Valgrind

Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile programs in detail. Valgrind can also be used to build new tools.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Valgrind Dependencies

Optional

GDB-13.1 (for tests), LLVM-15.0.7 (with Clang), and Which-2.21 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/valgrind

Installation of Valgrind

Install Valgrind by running the following commands:

sed -i 's|/doc/valgrind||' docs/Makefile.in &&

./configure --prefix=/usr \
            --datadir=/usr/share/doc/valgrind-3.20.0 &&
make

To test the results, issue: make regtest. The tests may hang forever if GDB-13.1 is not installed. Some tests are known to hang also, depending on the version of glibc. A few tests can fail in various suites. Problematic tests can be disabled by changing the prereq: line in the corresponding .vgtest file to prereq: false. For example:

sed -e 's@prereq:.*@prereq: false@' \
    -i {helgrind,drd}/tests/pth_cond_destroy_busy.vgtest

Note

The OpenMP tests are skipped if libgomp has been compiled with --enable-linux-futex (the default). If needed, just recompile the libgomp library from the gcc build tree, passing --disable-linux-futex to configure, storing the library to some place and changing the link from /usr/lib/libgomp.so.1 to point to the new library.

Now, as the root user:

make install

Command Explanations

sed -i … docs/Makefile.in : This sed provides for installing the documentation in a versioned directory.

--enable-lto=yes: This option allows building Valgrind with LTO (link time optimization). This produces a smaller/faster Valgrind (up to 10%), but build time increases to about 5.5 SBU.

Contents

Installed Programs: callgrind_annotate, callgrind_control, cg_annotate, cg_diff, cg_merge, ms_print, valgrind, valgrind-di-server, valgrind-listener, and vgdb

Installed Libraries: None

Installed Directories: /usr/lib/valgrind, /usr/libexec/valgrind, /usr/include/valgrind, and /usr/share/doc/valgrind-3.20.0

Short Descriptions

valgrind is a program for debugging and profiling Linux executables.

callgrind_annotate takes an output file produced by the Valgrind tool Callgrind and prints the information in an easy-to-read form.

callgrind_control controls programs being run by the Valgrind tool Callgrind.

cg_annotate is a post-processing tool for the Valgrind tool Cachegrind.

cg_diff compares two Cachegrind output files.

cg_merge merges multiple Cachegrind output files into one.

ms_print takes an output file produced by the Valgrind tool Massif and prints the information in an easy-to-read form.

valgrind-di-server is a server that reads debuginfo from objects stored on a different machine.

valgrind-listener listens on a socket for Valgrind commentary.

vgdb is an intermediary between Valgrind and GDB or a shell.

13.37 yasm-1.3.0


Introduction to yasm

Yasm is a complete rewrite of the NASM-2.16.01 assembler. It supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binary, ELF32 and ELF64 object formats.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

yasm Dependencies

Optional

Python-2.7.18 and cython-0.29.33

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/yasm

Installation of yasm

Install yasm by running the following commands:

sed -i 's#) ytasm.*#)#' Makefile.in &&

./configure --prefix=/usr &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed -i ‘s#) ytasm.*#)#’ Makefile.in: This sed prevents it compiling 2 programs (vsyasm and ytasm) that are only of use on Microsoft Windows.

Contents

Installed Program: yasm

Installed Library: libyasm.a

Installed Directory: /usr/include/libyasm

Short Descriptions

yasm is a portable, retargetable assembler that supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binaries in ELF32 and ELF64 object formats.

libyasm.a provides all of the core functionality of yasm, for manipulating machine instructions and object file constructs.

Java

13.38 Java-19.0.2


About Java

Java is different from most of the packages in LFS and BLFS. It is a programming language that works with files of bytecode to obtain instructions and executes them in a Java Virtual Machine (JVM). An introductory java program looks like:

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World");
    }
}

This program is saved as HelloWorld.java. The file name, HelloWorld, must match the class name. It is then converted into byte code with javac HelloWorld.java. The output file is HelloWorld.class. The program is executed with java HelloWorld. This creates a JVM and runs the code. The ‘class’ extension must not be specified.

Several class files can be combined into one file with the jar command. This is similar to the standard tar command. For instance, the command jar cf myjar.jar *.class will combine all class files in a directory into one jar file. These act as library files.

The JVM can search for and use classes in jar files automatically. It uses the CLASSPATH environment variable to search for jar files. This is a standard list of colon-separated directory names similar to the PATH environment variable.

Binary JDK Information

Creating a JVM from source requires a set of circular dependencies. The first thing that’s needed is a set of programs called a Java Development Kit (JDK). This set of programs includes java, javac, jar, and several others. It also includes several base jar files.

To start, we set up a binary installation of the JDK created by the BLFS editors. It is installed in the /opt directory to allow for multiple installations, including a source based version.

This package is known to build and work properly using an LFS 11.3 platform.

Binary Package Information

Java Binary Runtime Dependencies

alsa-lib-1.2.8, Cups-2.4.2, giflib-5.2.1, and Xorg Libraries

Installation of the Java BinaryJDK

Begin by extracting the appropriate binary tarball for your architecture and changing to the extracted directory. Install the binary OpenJDK with the following commands as the root user:

install -vdm755 /opt/OpenJDK-19.0.2-bin &&
mv -v * /opt/OpenJDK-19.0.2-bin         &&
chown -R root:root /opt/OpenJDK-19.0.2-bin

The binary version is now installed. You may create a symlink to that version by issuing, as the root user:

ln -sfn OpenJDK-19.0.2-bin /opt/jdk

You may now proceed to Configuring the JAVA environment, where the instructions assume that the above link exists.

13.39 OpenJDK-19.0.2


Introduction to OpenJDK

OpenJDK is an open-source implementation of Oracle’s Java Standard Edition platform. OpenJDK is useful for developing Java programs, and provides a complete runtime environment to run Java programs.

This package is known to build and work properly using an LFS 11.3 platform.

OpenJDK is GPL’d code, with a special exception made for non-free projects to use these classes in their proprietary products. In similar fashion to the LGPL, which allows non-free programs to link to libraries provided by free software, the GNU General Public License, version 2, with the Classpath Exception allows third party programs to use classes provided by free software without the requirement that the third party software also be free. As with the LGPL, any modifications made to the free software portions of a third party application, must also be made freely available.

Note

The OpenJDK source includes a very thorough, open source test suite using the JTreg test harness. The testing instructions below allow testing the just built JDK for reasonable compatibility with the proprietary Oracle JDK. However, in order for an independent implementation to claim compatibility, it must pass a proprietary JCK/TCK test suite. No claims of compatibility, or even partial compatibility, may be made without passing an approved test suite.

Oracle does provide free community access, on a case by case basis, to a closed toolkit to ensure 100% compatibility with its proprietary JDK. Neither the binary version provided on the Java-19.0.2 page nor the JVM built with the instructions below have been tested against the TCK. Any version that is built using the instructions given, cannot claim to be compatible with the proprietary JDK, without the user applying for, and completing the compatibility tests themselves.

With that in mind, the binaries produced using this build method are regularly tested against the TCK by the members listed on the site above. In addition to the community license above, an educational, non-commercial license for the TCK can be obtained here.

Package Information

Additional Downloads

Optional test harness

OpenJDK Dependencies

Required Dependencies

An existing binary (Java-19.0.2 or an earlier built version of this package. The instructions below assume that you are using Configuring the JAVA environment), alsa-lib-1.2.8, cpio-2.13, Cups-2.4.2, UnZip-6.0, Which-2.21, Xorg Libraries, and Zip-3.0

make-ca-1.12, giflib-5.2.1, Little CMS-2.14, libjpeg-turbo-2.1.5.1, libpng-1.6.39, and Wget-1.21.3

Optional

git-2.39.2, Graphviz-7.1.0, Mercurial-6.3.2, pandoc, and pigz

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/openjdk

Installation of OpenJDK

If you have downloaded the optional test harness, unpack it now:

tar -xf ../jtreg-6.1+1.tar.gz

Note

Before proceeding, you should ensure that your environment PATH variable contains the location of the Java compiler used for bootstrapping OpenJDK. This is the only requirement for the environment. Modern Java installations do not need JAVA_HOME and CLASSPATH is not used here. Furthermore, OpenJDK developers recommend unsetting JAVA_HOME.

The build system does not allow the -j switch in MAKEFLAGS. See the command explanation for --with-jobs= for more information on customizing parallelization.

Configure and build the package with the following commands:

unset JAVA_HOME                             &&
bash configure --enable-unlimited-crypto    \
               --disable-warnings-as-errors \
               --with-stdc++lib=dynamic     \
               --with-giflib=system         \
               --with-jtreg=$PWD/jtreg      \
               --with-lcms=system           \
               --with-libjpeg=system        \
               --with-libpng=system         \
               --with-zlib=system           \
               --with-version-build="7"     \
               --with-version-pre=""        \
               --with-version-opt=""        \
               --with-cacerts-file=/etc/pki/tls/java/cacerts &&
make images

To test the results, you will need to execute the jtreg program. You can set the number of concurrent tests by adding the -conc:<X> value in the below command (tests will run sequentially otherwise):

export JT_JAVA=$(echo $PWD/build/*/jdk) &&
jtreg/bin/jtreg -jdk:$JT_JAVA -automatic -ignore:quiet -v1 \
    test/jdk:tier1 test/langtools:tier1 &&
unset JT_JAVA

For more control over the test suite, review the documentation available in jtreg/doc/jtreg/usage.txt. To review the results, see the files JTreport/test_{jdk,langtools}/text/stats.txt and JTreport/test_{jdk,langtools}/text/summary.txt. You should expect to see around 60 failures and 10 errors.

Install the package with the following commands as the root user:

install -vdm755 /opt/jdk-19.0.2+7             &&
cp -Rv build/*/images/jdk/* /opt/jdk-19.0.2+7 &&
chown -R root:root /opt/jdk-19.0.2+7          &&
for s in 16 24 32 48; do
  install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \
                  /usr/share/icons/hicolor/${s}x${s}/apps/java.png
done

Note

If you only wish to install the Java Runtime Environment, you can substitute build/*/images/jre in the above cp command.

There are now two OpenJDK SDKs installed in /opt. You should decide on which one you would like to use as the default. Normally, you would opt for the just installed OpenJDK. If so, do the following as the root user:

ln -v -nsf jdk-19.0.2+7 /opt/jdk

If desired, you can create .desktop files to add entries in the menu for java and jconsole. The needed icons have already been installed. As the root user:

mkdir -pv /usr/share/applications &&

cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
[Desktop Entry]
Name=OpenJDK Java 19.0.2 Runtime
Comment=OpenJDK Java 19.0.2 Runtime
Exec=/opt/jdk/bin/java -jar
Terminal=false
Type=Application
Icon=java
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true
EOF
cat > /usr/share/applications/openjdk-jconsole.desktop << "EOF"
[Desktop Entry]
Name=OpenJDK Java 19.0.2 Console
Comment=OpenJDK Java 19.0.2 Console
Keywords=java;console;monitoring
Exec=/opt/jdk/bin/jconsole
Terminal=false
Type=Application
Icon=java
Categories=Application;System;
EOF

Command Explanations

bash configure…: the top level configure is a wrapper around the autotools one. It is not executable and must be run through bash.

--enable-unlimited-crypto: Because of limitations on the usage of cryptography in some countries, there is the possibility to limit the size of encryption keys and the use of some algorithms in a policy file. This switch allows to ship a policy file with no restriction. It is the responsibility of the user to ensure proper adherence to the law.

--disable-warnings-as-errors: This switch disables use of -Werror in the build.

--with-stdc++lib=dynamic: This switch forces the build system to link to libstdc++.so (dynamic) instead of libstdc++.a (static).

--with-jobs=<X>: The -j passed to make does not work with make as invoked here. By default, the build system will use the number of CPUs - 1.

--with-jtreg=$PWD/jtreg: This switch tells configure where to find jtreg. Omit if you have not downloaded the optional test suite.

--with-{giflib,lcms,libjpeg,libpng,zlib}=system: These switches force the build system to use the system libraries instead of the bundled versions.

--with-version-build: Currently, the build system does not include the build number in the version string. It has to be specified here.

--with-version-pre: This switch allows you to prefix the version string with a custom string.

--with-version-opt: This switch allows you to add an optional build description to the version string.

--with-cacerts-file=/etc/pki/tls/java/cacerts: Specifies where to find a cacerts file, /etc/pki/tls/java/ on a BLFS system. Otherwise, an empty one is created. You can use the /usr/sbin/make-ca –force command to generate it, once you have installed the Java binaries.

--with-boot-jdk: This switch provides the location of the temporary JDK. It is normally not needed if java is found in the PATH.

Configuring OpenJDK

Configuration Information

Normally, the JAVA environment has been configured after installing the binary version, and can be used with the just built package as well. Review Configuring the JAVA environment in case you want to modify something.

To test if the man pages are correctly installed, issue source /etc/profile and man java to display the respective man page.

Setting up the JRE Certificate Authority Certificates (cacerts) file

If you have run the instructions on the make-ca-1.12 page, you only need to create a symlink in the default location for the cacerts file. As user root:

ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

To check the installation, issue:

cd /opt/jdk
bin/keytool -list -cacerts

At the prompt Enter keystore password:, enter changeit (the default) or just press the “Enter” key. If the cacerts file was installed correctly, you will see a list of the certificates with related information for each one. If not, you need to reinstall them.

Contents

Installed Programs: jar, jarsigner, java, javac, javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr, jhsdb, jimage, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript, jshell, jstack, jstat, jstatd, jwebserver, keytool, rmiregistry, and serialver

Installed Libraries: /opt/jdk-19.0.2/lib/*

Installed Directory: /opt/jdk-19.0.2

Short Descriptions

jar combines multiple files into a single jar archive.

jarsigner signs jar files and verifies the signatures and integrity of a signed jar file.

java launches a Java application by starting a Java runtime environment, loading a specified class and invoking its main method.

javac reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files.

javadoc parses the declarations and documentation comments in a set of Java source files and produces a corresponding set of HTML pages describing the classes, interfaces, constructors, methods, and fields.

javap disassembles a Java class file.

jcmd is a utility to send diagnostic command requests to a running Java Virtual Machine.

jconsole is a graphical console tool to monitor and manage both local and remote Java applications and virtual machines.

jdb is a simple command-line debugger for Java classes.

jdeprscan scans class or jar files for uses of deprecated API elements.

jdeps shows the package-level or class-level dependencies of Java class files.

jfr is a tool for working with “Flight Recorder” files.

jhsdb is a tool to analyze the content of a core dump from a crashed Java Virtual Machine (JVM).

jimage is used to list, extract, verify, or get information about modules in jimage format.

jinfo prints Java configuration information for a given Java process, core file, or a remote debug server.

jlink is used to assemble and optimize a set of modules and their dependencies into a custom runtime image.

jmap prints shared object memory maps or heap memory details of a given process, core file, or a remote debug server.

jmod creates JMOD files and lists the content of existing JMOD files.

jpackage generates java application packages and images.

jps lists the instrumented JVMs on the target system.

jrunscript is a command line script shell.

jshell is an interactive tool for learning the Java programming language and prototyping Java code.

jstack prints Java stack traces of Java threads for a given Java process, core file, or a remote debug server.

jstat displays performance statistics for an instrumented JVM.

jstatd is an RMI server application that monitors for the creation and termination of instrumented JVMs.

jwebserver provides a minimal HTTP server, designed to be used for prototyping, testing, and debugging.

keytool is a key and certificate management utility.

rmiregistry creates and starts a remote object registry on the specified port on the current host.

serialver returns the serialVersionUID for one or more classes in a form suitable for copying into an evolving class.

13.40 Configuring the JAVA environment


Setting up the environment

After the package installation is complete, the next step is to make sure that the system can properly find the files. If you set up your login scripts as recommended in The Bash Shell Startup Files, update the environment by creating the openjdk.sh script, as the root user:

cat > /etc/profile.d/openjdk.sh << "EOF"
# Begin /etc/profile.d/openjdk.sh

# Set JAVA_HOME directory
JAVA_HOME=/opt/jdk

# Adjust PATH
pathappend $JAVA_HOME/bin

# Add to MANPATH
pathappend $JAVA_HOME/man MANPATH

# Auto Java CLASSPATH: Copy jar files to, or create symlinks in, the
# /usr/share/java directory.

AUTO_CLASSPATH_DIR=/usr/share/java

pathprepend . CLASSPATH

for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2>/dev/null`; do
    pathappend $dir CLASSPATH
done

for jar in `find ${AUTO_CLASSPATH_DIR} -name "*.jar" 2>/dev/null`; do
    pathappend $jar CLASSPATH
done

export JAVA_HOME
unset AUTO_CLASSPATH_DIR dir jar

# End /etc/profile.d/openjdk.sh
EOF

If Sudo-1.9.13p1 is installed, the super user should have access to the above variables. Execute the following commands as the root user:

cat > /etc/sudoers.d/java << "EOF"
Defaults env_keep += JAVA_HOME
Defaults env_keep += CLASSPATH
EOF

To use mandb to include the OpenJDK man pages in its database, issue, as the root user:

cat >> /etc/man_db.conf << "EOF" &&
# Begin Java addition
MANDATORY_MANPATH     /opt/jdk/man
MANPATH_MAP           /opt/jdk/bin     /opt/jdk/man
MANDB_MAP             /opt/jdk/man     /var/cache/man/jdk
# End Java addition
EOF

mkdir -p /var/cache/man &&
mandb -c /opt/jdk/man

Setting up the Certificate Authority Certificates for Java

OpenJDK uses its own format for the CA certificates. The Java security modules use $JAVA_HOME/lib/security/cacerts by default. In order to keep all the certificates in one place, we use /etc/ssl/java/cacerts. The instructions on the make-ca-1.12 page previously created the file located in /etc/ssl/java. Set up a symlink in the default location as the root user:

ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

Use the following command to check if the cacerts file has been successfully installed:

/opt/jdk/bin/keytool -list -cacerts

At the prompt Enter keystore password:, enter changeit (the default) or just press the “Enter” key. If the cacerts file was installed correctly, you will see a list of the certificates with related information for each one. If not, you need to reinstall them.

If you later install a new JVM, you just have to create the symlink in the default location to be able to use the cacerts.

13.41 apache-ant-1.10.13


Introduction to Apache Ant

The Apache Ant package is a Java-based build tool. In theory, it is like the make command, but without make’s wrinkles. Ant is different. Instead of a model that is extended with shell-based commands, Ant is extended using Java classes. Instead of writing shell commands, the configuration files are XML-based, calling out a target tree that executes various tasks. Each task is run by an object that implements a particular task interface.

This package is known to build and work properly using an LFS 11.3 platform.

Package Information

Apache Ant Dependencies

Required

A JDK (Java Binary or OpenJDK-19.0.2) and GLib-2.74.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/apache-ant

Installation of Apache Ant

Build a limited bootstrap version of Apache Ant using the following command:

./bootstrap.sh

Now fix a problem when the next command tries to download a file from a problem site:

sed -e 's|ftp.software.ibm.com|anduin.linuxfromscratch.org|' \
    -e 's|software/awdtools/netrexx|BLFS/apache-ant|'        \
    -i fetch.xml 

Download the runtime dependencies using the fetch.xml ant build script:

bootstrap/bin/ant -f fetch.xml -Ddest=optional

Build Apache Ant by running the following command:

./build.sh -Ddist.dir=$PWD/ant-1.10.13 dist

Install, as the root user:

cp -rv ant-1.10.13 /opt/            &&
chown -R root:root /opt/ant-1.10.13 &&
ln -sfv ant-1.10.13 /opt/ant

Command Explanations

bootstrap/bin/ant -f fetch.xml -Ddest=optional: Downloads the missing dependencies to the user’s home directory, and copies them into the source tree (in the lib/optional directory, where ant picks them up at build time).

./build.sh -Ddist.dir=$PWD/ant-1.10.13 dist: This command builds, tests, then installs the package into a temporary directory.

Configuring Apache Ant

Config Files

/etc/ant/ant.conf, ~/.ant/ant.conf, and ~/.antrc

Configuration Information

Some packages will require ant to be in the search path and the ANT_HOME environment variable defined. Satisfy these requirements by issuing, as the root user:

cat > /etc/profile.d/ant.sh << EOF
# Begin /etc/profile.d/ant.sh

pathappend /opt/ant/bin
export ANT_HOME=/opt/ant

# End /etc/profile.d/ant.sh
EOF

The above instructions assume you have configured your system as described in The Bash Shell Startup Files.

Contents

Installed Programs: ant, antRun, antRun.pl, complete-ant-cmd.pl, runant.pl, and runant.py

Installed Libraries: Numerous ant*.jar and dependent libraries in $ANT_HOME/lib

Installed Directories: /opt/ant-1.10.13

Short Descriptions

ant is a Java based build tool used by many packages instead of the conventional make program.

antRun is a support script used to start ant build scripts in a given directory.

antRun.pl is a Perl script that provides similar functionality offered by the antRun script.

complete-ant-cmd.pl is a Perl script that allows Bash to complete an ant command-line.

runant.pl is a Perl wrapper script used to invoke ant.

runant.py is a Python wrapper script used to invoke ant.

ant*.jar files are the Apache Ant Java class libraries.