Copyright © 1999-2024 The BLFS Development Team
Copyright © 1999-2024, The BLFS Development Team
All rights reserved.
This book is licensed under a Creative Commons License.
Computer instructions may be extracted from the book under the MIT License.
Linux® is a registered trademark of Linus Torvalds.
Published 2024-03-01
Revision History | ||
---|---|---|
Revision 12.1 | 2024-03-01 | Twenty-ninth Release |
Revision 12.0 | 2023-09-01 | Twenty-eighth Release |
Revision 11.3 | 2023-03-01 | Twenty-seventh Release |
Revision 11.2 | 2022-09-01 | Twenty-sixth Release |
Revision 11.1 | 2022-03-01 | Twenty-fifth Release |
Revision 11.0 | 2021-09-01 | Twenty-fourth Release |
Revision 10.1 | 2021-03-01 | Twenty-third Release |
Revision 10.0 | 2020-09-01 | Twenty-second Release |
Revision 9.1 | 2020-03-01 | Twenty-first Release |
Revision 9.0 | 2019-09-01 | Twentieth release |
Revision 8.4 | 2019-03-01 | Nineteenth release |
Revision 8.3 | 2018-09-01 | Eighteenth release |
Revision 8.2 | 2018-03-02 | Seventeenth release |
Revision 8.1 | 2017-09-01 | Sixteenth release |
Revision 8.0 | 2017-02-25 | Fifteenth release |
Revision 7.10 | 2016-09-07 | Fourteenth release |
Revision 7.9 | 2016-03-08 | Thirteenth release |
Revision 7.8 | 2015-10-01 | Twelfth release |
Revision 7.7 | 2015-03-06 | Eleventh release |
Revision 7.6 | 2014-09-23 | Tenth release |
Revision 7.5 | 2014-03-05 | Ninth release |
Revision 7.4 | 2013-09-14 | Eighth release |
Revision 6.3 | 2008-08-24 | Seventh release |
Revision 6.2 | 2007-02-14 | Sixth release |
Revision 6.1 | 2005-08-14 | Fifth release |
Revision 6.0 | 2005-04-02 | Fourth release |
Revision 5.1 | 2004-06-05 | Third release |
Revision 5.0 | 2003-11-06 | Second release |
Revision 1.0 | 2003-04-25 | First release |
Abstract
This book follows on from the Linux From Scratch book. It introduces and guides the reader through additions to the system including networking, graphical interfaces, sound support, and printer and scanner support.
Having helped out with Linux From Scratch for a short time, I noticed that we were getting many queries as to how to do things beyond the base LFS system. At the time, the only assistance specifically offered relating to LFS were the LFS hints (https://www.linuxfromscratch.org/hints). Most of the LFS hints are extremely good and well written but I (and others) could still see a need for more comprehensive help to go Beyond LFS — hence BLFS.
BLFS aims to be more than the LFS-hints converted to XML although much of our work is based around the hints and indeed some authors write both hints and the relevant BLFS sections. We hope that we can provide you with enough information to not only manage to build your system up to what you want, whether it be a web server or a multimedia desktop system, but also that you will learn a lot about system configuration as you go.
Thanks as ever go to everyone in the LFS/BLFS community; especially those who have contributed instructions, written text, answered questions and generally shouted when things were wrong!
Finally, we encourage you to become involved in the community; ask questions on the mailing list or news gateway and join in the fun on #lfs and #lfs-support at Libera. You can find more details about all of these in the Introduction section of the book.
Enjoy using BLFS.
Mark Hymers
markh <at> linuxfromscratch.org
BLFS Editor (July 2001–March 2003)
I still remember how I found the BLFS project and started using the instructions that were completed at the time. I could not believe how wonderful it was to get an application up and running very quickly, with explanations as to why things were done a certain way. Unfortunately, for me, it wasn't long before I was opening applications that had nothing more than "To be done" on the page. I did what most would do, I waited for someone else to do it. It wasn't too long before I am looking through Bugzilla for something easy to do. As with any learning experience, the definition of what was easy kept changing.
We still encourage you to become involved as BLFS is never really finished. Contributing or just using, we hope you enjoy your BLFS experience.
Larry Lawrence
larry <at> linuxfromscratch.org
BLFS Editor (March 2003–June 2004)
The BLFS project is a natural progression of LFS. Together, these projects provide a unique resource for the Open Source Community. They take the mystery out of the process of building a complete, functional software system from the source code contributed by many talented individuals throughout the world. They truly allow users to implement the slogan “Your distro, your rules”.
Our goal is to continue to provide the best resource available that shows you how to integrate many significant Open Source applications. Since these applications are constantly updated and new applications are developed, this book will never be complete. Additionally, there is always room for improvement in explaining the nuances of how to install the different packages. To make these improvements, we need your feedback. I encourage you to participate on the different mailing lists, news groups, and IRC channels to help meet these goals.
Bruce Dubbs
bdubbs <at> linuxfromscratch.org
BLFS Editor (June 2004–December 2006 and February 2011–now)
My introduction to the [B]LFS project was actually by accident. I was trying to build a GNOME environment using some how-tos and other information I found on the web. A couple of times I ran into some build issues and Googling pulled up some old BLFS mailing list messages. Out for curiosity, I visited the Linux From Scratch web site and shortly thereafter was hooked. I've not used any other Linux distribution for personal use since.
I can't promise anyone will feel the sense of satisfaction I felt after building my first few systems using [B]LFS instructions, but I sincerely hope that your BLFS experience is as rewarding for you as it has been for me.
The BLFS project has grown significantly the last couple of years. There are more package instructions and related dependencies than ever before. The project requires your input for continued success. If you discover that you enjoy building BLFS, please consider helping out in any way you can. BLFS requires hundreds of hours of maintenance to keep it even semi-current. If you feel confident enough in your editing skills, please consider joining the BLFS team. Simply contributing to the mailing list discussions with sound advice and/or providing patches to the book's XML will probably result in you receiving an invitation to join the team.
Randy McMurchy
randy <at> linuxfromscratch.org
BLFS Editor (December 2006–January 2011)
This version of the book is intended to be used when building on top of a system built using the LFS book. Every effort has been made to ensure accuracy and reliability of the instructions. Many people find that using the instructions in this book after building the current stable or development version of LFS provides a stable and very modern Linux system.
Enjoy!
Randy McMurchy
August 24th, 2008
This book is mainly aimed at those who have built a system based on the LFS book. It will also be useful for those who are using other distributions, and for one reason or another want to manually build software and need some assistance. Note that the material in this book, in particular the dependency listings, assumes that you are using a basic LFS system with every package listed in the LFS book already installed and configured. BLFS can be used to create a range of diverse systems and so the target audience is probably as wide as that of the LFS book. If you found LFS useful, you should also like this!
Since Release 7.4, the BLFS book version has matched the LFS book version. This book may be incompatible with a previous or later release of the LFS book.
This book is divided into the following fourteen parts.
This part contains essential information which is needed to understand the rest of the book.
Here we introduce basic configuration and security issues. We also discuss a range of text editors, file systems, and shells which aren't covered in the main LFS book.
In this section we cover libraries which are often needed throughout the book, as well as system utilities. Information on programming (including recompiling GCC to support its full range of languages) concludes this part.
Here we explain how to connect to a network when you aren't using the simple static IP setup presented in the main LFS book. Networking libraries and command-line networking tools are also covered here.
Here we show you how to set up mail and other servers (such as FTP, Apache, etc.).
This part explains how to set up a basic X Window System, along with some generic X libraries and Window managers.
This part is for those who want to use the K Desktop Environment, or parts of it.
GNOME is the main alternative to KDE in the Desktop Environment arena.
Xfce is a lightweight alternative to GNOME and KDE.
LXDE is another lightweight alternative to GNOME and KDE.
Office programs and graphical web browsers are important to most people. They, and some generic X software, can be found in this part of the book.
Here we cover multimedia libraries and drivers, along with some audio, video, and CD-writing programs.
This part covers document handling, from applications like Ghostscript, CUPS, and DocBook, all the way to texlive.
The Appendices present information which doesn't belong in the body of book; they are included as reference material. The glossary of acronyms is a handy feature.
The Beyond Linux From Scratch book is designed to carry on from where the LFS book leaves off. But unlike the LFS book, it isn't designed to be followed straight through. Reading the Which sections of the book? part of this chapter should help guide you through the book.
Please read most of this part of the book carefully as it explains quite a few of the conventions used throughout the book.
Unlike the Linux From Scratch book, BLFS isn't designed to be followed in a linear manner. LFS provides instructions on how to create a base system which can become anything from a web server to a multimedia desktop system. BLFS attempts to guide you in the process of going from the base system to your intended destination. Choice is very much involved.
Everyone who reads this book will want to read certain sections. The Introduction, which you are currently reading, contains generic information. Take special note of the information in Chapter 2, Important Information, as this contains comments about how to unpack software, issues related to the use of different locales, and various other considerations which apply throughout the book.
The part on Post LFS Configuration and Extra Software is where most people will want to turn next. This deals not only with configuration, but also with Security (Chapter 4, Security), File Systems (Chapter 5, File Systems and Disk Management -- including GRUB for UEFI), Text Editors (Chapter 6, Text Editors), and Shells (Chapter 7, Shells). Indeed, you may wish to reference some parts of this chapter (especially the sections on Text Editors and File Systems) while building your LFS system.
Following these basic items, most people will want to at least browse through the General Libraries and Utilities part of the book. This contains information on many items which are prerequisites for other sections of the book, as well as some items (such as Chapter 13, Programming) which are useful in their own right. You don't have to install all of the libraries and packages found in this part; each BLFS installation procedure tells you which other packages this one depends upon. You can choose the program you want to install, and see what it needs. (Don't forget to check for nested dependencies!)
Likewise, most people will probably want to look at the Networking section. It deals with connecting to the Internet or your LAN (Chapter 14, Connecting to a Network) using a variety of methods such as DHCP and PPP, and with items such as Networking Libraries (Chapter 17, Networking Libraries), plus various basic networking programs and utilities.
Once you have dealt with these basics, you may wish to configure more advanced network services. These are dealt with in the Servers part of the book. Those wanting to build servers should find a good starting point there. Note that this section also contains information on several database packages.
The next twelve chapters deal with desktop systems. This portion of the book starts with a part talking about Graphical Components. This part also deals with some generic X-based libraries (Chapter 25, Graphical Environment Libraries). After that, KDE, GNOME, Xfce, and LXQt are given their own parts, followed by one on X Software.
The book then moves on to deal with Multimedia packages. Note that many people may want to use the ALSA instructions from this chapter when first starting their BLFS journey; the instructions are placed here because it is the most logical place for them.
The final part of the main BLFS book deals with Printing, Scanning and Typesetting. This is useful for most people with desktop systems, but even those who are creating dedicated server systems may find it useful.
We hope you enjoy using BLFS. May you realize your dream of building the perfectly personalized Linux system!
To make things easy to follow, a number of conventions are used throughout the book. Here are some examples:
./configure --prefix=/usr
This form of text should be typed exactly as shown unless otherwise noted in the surrounding text. It is also used to identify references to specific commands.
install-info: unknown option
`--dir-file=/mnt/lfs/usr/info/dir'
This form of text (fixed width font) shows screen output, probably the result of issuing a command. It is also used to show filenames such as
/boot/grub/grub.conf
Emphasis
This form of text is used for several purposes, but mainly to emphasize important points, or to give examples of what to type.
https://www.linuxfromscratch.org/
This form of text is used for hypertext links external to the book, such as HowTos, download locations, websites, etc.
This form of text is used for links internal to the book, such as another section describing a different package.
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF
This style is mainly used when creating configuration files. The first command (in bold) tells the system to create the file
$LFS/etc/group
from whatever is typed on the following lines, until the sequence EOF is encountered. Therefore, this whole section is usually typed exactly as shown. Remember, copy and paste is your friend!
<REPLACED
TEXT>
This form of text is used to encapsulate text that should be modified, and is not to be typed as shown, or copied and pasted. The angle brackets are not part of the literal text; they are part of the substitution.
root
This form of text is used to show a specific system user or group reference in the instructions.
When new packages are created, the software's authors depend on prior work. In order to build a package in BLFS, these dependencies must be built before the desired package can be compiled. For each package, prerequisites are listed in one or more separate sections: Required, Recommended, and Optional.
These dependencies are the bare minimum needed to build the package. Packages in LFS, and the required dependencies of these required packages, are omitted from this list. Always remember to check for nested dependencies. If a dependency is said to be “runtime”, then it is not needed for building the package, but only to use it after installation.
These are dependencies the BLFS editors have determined are important to give the package reasonable capabilities. If a recommended dependency is not said to be “runtime”, package installation instructions assume it is installed. If it is not installed, the instructions may require modification, to accommodate the missing package. A recommended “runtime” dependency does not need to be installed before building the package, but must be built afterwards for running the package with reasonable capabilities.
These are dependencies the package may use. Integration of optional dependencies may be automatic by the package, or additional steps not presented by BLFS may be necessary. Optional dependencies are sometimes listed without explicit BLFS instructions. In this case you must determine how to perform the installation yourself.
Some packages require specific kernel configuration options. The general layout for these looks like this:
Master section ---> Subsection ---> [*] Required parameter [REQU_PAR] <*> Required parameter (not as module) [REQU_PAR_NMOD] <*/M> Required parameter (could be a module) [REQU_PAR_MOD] <M> Required parameter (as a module) [REQU_PAR_MOD_ONLY] < /*/M> Optional parameter [OPT_PAR] < /M> Optional parameter (as a module if enabled) [OPT_PAR_MOD_ONLY] [ ] Incompatible parameter [INCOMP_PAR] < > Incompatible parameter (even as module) [INCOMP_PAR_MOD]
[...] on the right gives the symbolic name of the option, so
you can easily check whether it is set in your .config
file. Note that the .config
file contains a CONFIG_
prefix before all symbolic names.
The meaning of the various entries is:
Master section top level menu item Subsection submenu item Required parameter the option can either be built-in, or not selected: it must be selected Required parameter (not as module) the option can be built-in, a module, or not selected (tri-state): it must be selected as built-in Required parameter (could be a module) the option can be built-in, a module, or not selected: it must be selected, either as built-in or as a module Required parameter (as a module) the option can be built-in, a module, or not selected: it must be selected as a module; selecting it as built-in may cause unwanted effects Optional parameter the option can be built-in, a module, or not selected: it may be selected as a module or built-in if you need it for driving the hardware or optional kernel features Optional parameter (as a module if enabled) the option can be built-in, a module, or not selected: it may be selected as a module if you need it for driving the hardware or optional kernel features, but selecting it as built-in may cause unwanted effects Incompatible parameter the option can either be built-in or not selected: it must not be selected Incompatible parameter (even as module) the option can be built-in, a module, or not selected: it must not be selected
Note that, depending on other selections, the angle brackets (<>) in the configuration menu may appear as braces ({}) if the option cannot be unselected, or even as dashes (-*- or -M-), when the choice is imposed. The help text describing the option specifies the other selections on which this option relies, and how those other selections are set.
The letter in blue is the hotkey for this option. If you are running make menuconfig, you can press a key to quickly traverse all the options with this key as the hotkey on the screen.
As in LFS, each package in BLFS has a build time listed in Standard Build Units (SBUs). These times are relative to the time it took to build binutils in LFS, and are intended to provide some insight into how long it will take to build a package. Most times listed are for a single processor or core to build the package. In some cases, large, long running builds tested on multi-core systems have SBU times listed with comments such as '(parallelism=4)'. These values indicate testing was done using multiple cores. Note that while this speeds up the build on systems with the appropriate hardware, the speedup is not linear and to some extent depends on the individual package and the specific hardware used.
For packages which use ninja (i.e., anything using meson) or rust, by default all cores are used; similar comments will be seen on such packages even when the build time is minimal.
Where even a parallel build takes more than 15 SBU, on certain machines the time may be considerably greater even when the build does not use swap. In particular, different micro-architectures will build some files at different relative speeds, and this can introduce delays when certain make targets wait for another file to be created. Where a large build uses a lot of C++ files, processors with Simultaneous Multi Threading will share the Floating Point Unit and can take 45% longer than when using four 'prime' cores (measured on an intel i7 using taskset and keeping the other cores idle).
Some packages do not support parallel builds; for these, the make command must specify -j1. Packages that are known to impose such limits are so marked in the text.
This is BLFS-BOOK version 12.1 dated March 1st, 2024. This is the 12.1 branch of the BLFS book, currently targeting the LFS 12.1 book. For development versions, if this version is older than a month, it's likely that your mirror hasn't been synchronized recently and a newer version is probably available for download or viewing. Check one of the mirror sites at https://www.linuxfromscratch.org/mirrors.html for an updated version.
The BLFS project has a number of mirrors set up world-wide to make it easier and more convenient for you to access the website. Please visit the https://www.linuxfromscratch.org/mirrors.html website for the list of current mirrors.
Within the BLFS instructions, each package has two references for finding the source files for the package—an HTTP link and an FTP link (some packages may only list one of these links). Every effort has been made to ensure that these links are accurate. However, the World Wide Web is in continuous flux. Packages are sometimes moved or updated and the exact URL specified is not always available.
To overcome this problem, the BLFS Team, with the assistance of Oregon State University Open Source Lab, has made an HTTP/FTP site available through world wide mirrors. See https://www.linuxfromscratch.org/blfs/download.html#sources for a list. These sites have all the sources of the exact versions of the packages used in BLFS. If you can't find the BLFS package you need at the listed addresses, get it from these sites.
We would like to ask a favor, however. Although this is a public resource for you to use, please do not abuse it. We have already had one unthinking individual download over 3 GB of data, including multiple copies of the same files that are placed at different locations (via symlinks) to make finding the right package easier. This person clearly did not know what files he needed and downloaded everything. The best place to download files is the site or sites set up by the source code developer. Please try there first.
Current release: 12.1 – March 1st, 2024
Changelog Entries:
March 1st, 2024
[bdubbs] - Release of BLFS-12.1.
February 26th, 2024
February 25th, 2024
February 22nd, 2024
[bdubbs] - Update to git-2.44.0. Fixes #19355.
February 22nd, 2024
February 21st, 2024
February 20th, 2024
February 18th, 2024
[bdubbs] - Update to xterm-390. Fixes #19336.
February 18th, 2024
[bdubbs] - Update to btrfs-progs-v6.7.1. Fixes #19309.
[bdubbs] - Update to ed-1.20.1. Fixes #19325.
[bdubbs] - Update to php-8.3.3. Fixes #19322.
[renodr] - Update to wireshark-4.2.3. Fixes #19315.
[renodr] - Update to qt-6.6.2 (Security Update). Fixes #19316.
[bdubbs] - Update to kf5-apps-23.08.5. Fixes #19317.
[bdubbs] - Update to kf5-5.15.0. Fixes #19127.
February 17th, 2024
February 16th, 2024
[bdubbs] - Update to Net-DNS-1.44 (Perl module). Fixes #18521.
[bdubbs] - Update to x265-20240216. Addresses #18520.
[bdubbs] - Update to x264-20240216. Addresses #18520.
[renodr] - Update to NSS-3.98 (Security Update). Fixes #19323.
[renodr] - Patch Valgrind to work correctly with glibc-2.39 and binutils-2.42. Fixes #19324.
[bdubbs] - Update to libnvme-1.8. Fixes #19310.
February 15th, 2024
February 14th, 2024
February 13th, 2024
[renodr] - Update to mercurial-6.6.3. Fixes #19299.
[renodr] - Update the gstreamer stack to 1.22.10. Fixes #19305.
[renodr] - Update to gnome-control-center-45.3. Fixes #19301.
[renodr] - Update to gcr-4.2.0. Fixes #19300.
[renodr] - Update to exiv2-0.28.2 (Security Update). Fixes #19307.
[renodr] - Fix CVE-2023-52160 in wpa_supplicant. Fixes #19304.
[renodr] - Update to mutter-45.4. Fixes #19296.
[renodr] - Update to gnome-shell-45.4. Fixes #19295.
[renodr] - Update to pango-1.51.2. Fixes #19294.
[renodr] - Update to gnome-maps-45.4. Fixes #19287.
[renodr] - Update to libshumate-1.1.3. Fixes #19286.
[renodr] - Update to gjs-1.78.4. Fixes #19285.
[renodr] - Update to evolution-3.50.4. Fixes #19278.
[renodr] - Update to evolution-data-server-3.50.4. Fixes #19278.
[renodr] - Update to libadwaita-1.4.3. Fixes #19276.
[renodr] - Fix building vala with graphviz-10.x.
[rahul] - Update to Unbound-1.19.1 (Security Update). Fixes #19303.
[renodr] - Update to graphviz-10.0.1. Fixes #19283.
[rahul] - Update to BIND-9.18.24 (Security Update). Fixes #19302.
[renodr] - Update to rustc-1.76.0. Fixes #19268.
[bdubbs] - Update to gnumeric-1.12.57. Fixes #19297.
[bdubbs] - Update to goffice-0.10.57. Fixes #19293.
[bdubbs] - Update to gegl-0.4.48. Fixes #19290.
[bdubbs] - Update to babl-0.1.108. Fixes #19273.
[renodr] - Update to libuv-1.48.0 (Security Update). Fixes #19263.
February 12th, 2024
[bdubbs] - Update to xdg-utils-v1.2.1 (Security Update). Fixes #19288.
[bdubbs] - Update to pcmanfm-qt-1.4.1. Fixes #19279.
[bdubbs] - Update to obconf-qt-0.16.4. Fixes #19271.
[bdubbs] - Update to hexchat-2.16.2. Fixes #19282.
[bdubbs] - Update to pycairo3-1.26.0 (Python Module). Fixes #19292.
[bdubbs] - Update to URI-5.27 (Perl Module). Fixes #19274.
[bdubbs] - Update to Business-ISMN-1.204 (Perl Module). Fixes #19291.
[bdubbs] - Update to Business-ISBN-3.009 (Perl module). Fixes #19284.
[bdubbs] - Update to shadow-4.14.4. Fixes #19289.
[bdubbs] - Update to Python-3.12.2 (Security Update). Fixes #19258.
[thomas] - Update to xfce4-notifyd-0.9.4. Fixes #19280.
February 9th, 2024
[rahul] - Update to PostgreSQL-16.2 (Security Update). Fixes #19269.
[rahul] - Update to mariadb-10.11.7. Fixes #19272.
[rahul] - Update to libsecret-0.21.3. Fixes #19281.
[rahul] - Update to libhandy-1.8.3. Fixes #19275.
[rahul] - Update to git-2.43.1. Fixes #19275.
[rahul] - Update to libavif-1.0.4. Fixes #19267.
[rahul] - Update to enchant-2.6.7. Fixes #19266.
[rahul] - Add power-profiles-daemon. Fixes #19086.
February 8th, 2024
February 7th, 2024
[bdubbs] - Update to numpy-1.26.4 (Python Module). Fixes #19255.
[bdubbs] - Update to meson_python-0.15.0 (Python Module). Fixes #19261.
[bdubbs] - Update to pyproject-metadata-0.7.1 (Python Module). Fixes #19262.
[bdubbs] - Update to pytz-2024.1 (Python Module). Fixes #19260.
[bdubbs] - Update to libei-1.2.1. Fixes #19256.
[bdubbs] - Update to LWP-Protocol-https-6.13 (Perl module). Fixes #19254.
[bdubbs] - Update to xfsprogs-6.6.0. Fixes #19252.
[renodr] - Fix building WebKitGTK on 32-bit systems.
February 6th, 2024
[renodr] - Update to gnome-bluetooth-42.8. Fixes #19257.
[renodr] - Update to jasper-4.2.0. Fixes #19253.
[renodr] - Update to stunnel-5.72. Fixes #19251.
[thomas] - Upgrade to libxfce4ui-4.18.5. Fixes #19249.
[thomas] - Upgrade to libxfce4util-4.18.2. Fixes #19250.
[thomas] - Upgrade to garcon-4.18.2. Fixes #19248.
[thomas] - Upgrade to ristretto-0.13.2. Fixes #19244.
[thomas] - Upgrade to xfce4-terminal-1.1.2. Fixes #19247.
February 5th, 2024
[bdubbs] - Update to mousepad-0.6.2. Fixes #19243.
[bdubbs] - Update to libgsf-1.14.52. Fixes #19237.
[bdubbs] - Update to imlib2-1.12.2. Fixes #19230.
[renodr] - Update to WebKitGTK-2.42.5 (Security Update). Fixes #19242.
[renodr] - Change TigerVNC to use LXQt instead of LXDE for the default configuration. Fixes #19245.
[rahul] - Update to openldap-2.6.7 (Security Update). Fixes #19211.
[rahul] - Update to neon-0.33.0. Fixes #19210.
[rahul] - Update to cmake-3.28.3. Fixes #19209.
[rahul] - Update to talloc-2.4.2. Fixes #19208.
[renodr] - Change libxml2 to use ICU, and fix a build failure in QtWebEngine that occurs with libxml2-2.12.x configured like this. Fixes #19246.
[bdubbs] - Update to xkeyboard-config-2.41. Fixes #19241.
[bdubbs] - Update to xorg-libs libXvMC-1.0.14, libxkbfile-1.1.3, libXext-1.3.6, and libpciaccess-0.18. Fixes #19232, #19233, #19234, and #19235.
[bdubbs] - Update to xorg-apps xkbcomp-1.4.7, xkbutils-1.0.6, and xprop-1.2.7. Fixes #19229.
[renodr] - Update to libxml2-2.12.5 (Security Update). Fixes #19238.
[renodr] - Update to gc-8.2.6. Fixes #19240.
[renodr] - Update to glad-2.0.5. Fixes #19239.
[renodr] - Update to enchant-2.6.6. Fixes #19236.
February 4th, 2024
[pierre] - Update to LSB-Tools-0.12. Fixes #19231.
February 3rd, 2024
February 2nd, 2024
[renodr] - Promote libpsl to recommended in wget and NetworkManager to protect against the "global cookie" issue.
[renodr] - Update to libreoffice-24.2.0.3. Fixes #19221.
[renodr] - Fix crashes in tracker-miners that occur due to gstreamer-1.22.9.
[bdubbs] - Update to poppler-24.02.0. Fixes #19225.
[bdubbs] - Update to icu4c-74_2. Fixes #19226.
[renodr] - Update Vulkan-Headers and Vulkan-Loader to 1.3.277. Fixes #19226.
[renodr] - Update to sendmail-8.18.1 (Security Update). Fixes #19219.
[renodr] - Update to fetchmail-6.4.38. Fixes #19218.
February 1st, 2024
January 31st, 2024
January 29th, 2024
[bdubbs] - Update to pytest-8.0.0 (Python module). Fixes #19202.
[bdubbs] - Update to pluggy-1.4.0 (Python module). Fixes #19207.
[bdubbs] - Update to URI-5.25 (Perl Module). Fixes #19201.
[bdubbs] - Update to mc-4.8.31. Fixes #19200.
[bdubbs] - Update to pixman-0.43.2. Fixes #19092.
[renodr] - Update to libwpe-1.14.2. Fixes #19205.
[renodr] - Update to pangomm-2.46.4. Fixes #19204.
[renodr] - Update to atkmm-2.28.4. Fixes #19203.
[renodr] - Fix building Gwenview with kImageAnnotator-0.7.0. Fixes #19206.
January 27th, 2024
January 26th, 2024
[bdubbs] - Archive pth. Fixes #19198.
[bdubbs] - Update to libpng-1.6.41. Fixes #19189.
[bdubbs] - Update to btrfs-progs-v6.7. Fixes #18864.
[renodr] - Remove a workaround for Pango in Snapshot that is no longer required.
[renodr] - Update to pango-1.51.0. Fixes #19199.
[renodr] - Update to libidn2-2.3.7. Fixes #19197.
[renodr] - Update to c-ares-1.26.0. Fixes #19196.
[renodr] - Update to Net-DNS-1.43 (Perl Module). Fixes #19195.
[bdubbs] - Update to taglib-2.0. Fixes #19056.
[bdubbs] - Add utfcpp-4.0.5 in support of taglib.
January 26th, 2024
[bdubbs] - Update to URI-5.24 (Perl Module). Fixes #19191.
[bdubbs] - Update to libwww-perl-6.76 (Perl Module). Fixes #19192.
[renodr] - Update TigerVNC to use xorg-server-21.1.11 to fix all of the CVEs fixed since xorg-server-21.1.6 was released.
[renodr] - Update to colord-gtk-0.3.1. Fixes #19194.
[renodr] - Update Vulkan-Headers and Vulkan-Loader to 1.3.276. Fixes #19193.
[renodr] - Update to GnuPG-2.4.4 (Security Update). Fixes #19188.
[renodr] - Revert Mako to version 1.3.0. Mako 1.3.1 has been yanked upstream due to incompatible changes. Fixes #19190.
January 25th, 2024
[renodr] - Update to glm-1.0.0. Fixes #19185.
[renodr] - Update the gstreamer stack to 1.22.9 (Security Update). Fixes #19184.
[renodr] - Update to mesa-23.3.4. Fixes #19183.
[bdubbs] - Update to inih-r58. Fixes #19181.
[bdubbs] - Update to cryptsetup-2.7.0. Fixes #19180.
[bdubbs] - Update to webp-pixbuf-loader-0.2.6. Fixes #19182.
January 24th, 2024
[bdubbs] - Update to colord-1.4.7. Fixes #19169.
[bdubbs] - Update to libpaper-2.1.3. Fixes #19168.
[bdubbs] - Update to libplacebo-6.338.2. Fixes #19175.
[renodr] - Update to thunderbird-115.7.0 (Security Update). Fixes #19179.
[renodr] - Update to dos2unix-7.5.2. Fixes #19177.
[renodr] - Update to Mako-1.3.1 (Python Module). Fixes #19172.
[renodr] - Update to libwww-perl-6.75 (Perl Module). Fixes #19173.
[renodr] - Update to LWP-Protocol-https-6.11 (Perl Module). Fixes #19171.
[renodr] - Update to IO-Socket-SSL-2.085 (Perl Module). Fixes #19170.
[renodr] - Update to SpiderMonkey-115.7.0. Fixes #19167.
[rahul] - Update to webp-pixbuf-loader-0.2.5. Fixes #19176.
January 23rd, 2024
[ken] - Update to firefox-115.7.0 (Security Update). Fixes #19174.
[renodr] - Update to glib-2.78.4. Fixes #19165.
[renodr] - Update to nghttp2-1.59.0. Fixes #19163.
[renodr] - Update to ed-1.20. Fixes #19162.
[renodr] - Update to IPC::Run3-0.049 (Perl Module). Fixes #19160.
[renodr] - Update to keyutils-1.6.3. Fixes #19159.
[renodr] - Update to shadow-4.14.3. Fixes #19136.
[renodr] - Update to postfix-3.8.5. Fixes #19164.
[xry111] - Update to vim-9.1.0041. Addresses #12241.
January 20th, 2024
[renodr] - Update to OpenJDK-21.0.2 (Security Update). Fixes #19141.
[bdubbs] - Update to patchelf-0.18.0. Fixes #19157.
[bdubbs] - Archive alsa-oss. Fixes #19158.
[bdubbs] - Update to libaom-3.8.1. Fixes #19156.
[bdubbs] - Update to wayland-protocols-1.33. Fixes #19154.
[bdubbs] - Update to libblockdev-3.1.0. Fixes #19155.
January 19th, 2024
January 18th, 2024
January 17th, 2024
[renodr] - Update to xwayland-23.2.4 (Security Update). Fixes #19134.
[renodr] - Update to xorg-server-21.1.11 (Security Update). Fixes #19133.
[renodr] - Update to gnutls-3.8.3 (Security Update). Fixes #19135.
[renodr] - Update to gcr-3.41.2. Fixes #19130.
[renodr] - Update to dvisvgm-3.2. Fixes #19119.
[renodr] - Update to mercurial-6.6.2. Fixes #19117.
January 16th, 2024
January 14th, 2024
January 14th, 2024
[bdubbs] - Update to ncftp-3.2.7. Fixes #19125.
[bdubbs] - Update to libwww-perl-6.73. Fixes #19124.
[bdubbs] - Update to libidn-1.42. Fixes #19123.
[rahul] - Update to libdrm-2.4.120. Fixes #19122.
[rahul] - Update to bluez-5.72. Fixes #19121.
[rahul] - Update to pulseaudio-17.0. Fixes #19120.
[rahul] - Update to mupdf-1.23.9. Fixes #19109.
[rahul] - Update to samba-4.19.4. Fixes #19108.
[rahul] - Update to qpdf-11.8.0. Fixes #19107.
[rahul] - Update to enchant-2.6.5. Fixes #19106.
January 13th, 2024
[pierre] - Add xdg-desktop-portal-1.18.2, xdg-desktop-portal-gtk-1.15.1, xdg-desktop-portal-gnome-45.1, and xdg-desktop-portal-lxqt-0.5.0. Tweak instructions so that xdg-desktop-portal-kde is usable. Fixes #19087.
January 12th, 2024
January 10th, 2024
January 9th, 2024
[renodr] - Update to mutter-45.3. Fixes #19105.
[renodr] - Update to gnome-shell-45.3. Fixes #19104.
[renodr] - Update to gjs-1.78.2. Fixes #19103.
[renodr] - Update to gnome-maps-45.3. Fixes #19102.
[renodr] - Update to eog-45.2. Fixes #19101.
[renodr] - Update to pyatspi-2.46.1. Fixes #19100.
[renodr] - Update to epiphany-45.2. Fixes #19099.
[renodr] - Update to gvfs-1.52.2. Fixes #19098.
[renodr] - Update to evolution-3.50.3. Fixes #19097.
[renodr] - Update to evolution-data-server-3.50.3. Fixes #19097.
[renodr] - Update to at-spi2-core-2.50.1. Fixes #19096.
[renodr] - Update to Vulkan-Headers and Vulkan-Loader 1.3.275. Fixes #19095.
January 7th, 2024
[pierre] - Update to qt5-5.15.12 (including qt5-alternate and qt5-components). Fixes #19094.
January 5th, 2024
January 4th, 2024
[bdubbs] - Update to wireshark-4.2.1. Fixes #19085.
January 3rd, 2024
[rahul] - Update to intel-gmmlib-22.3.16 and intel-media-23.4.3. Fixes #18934.
[rahul] - Update to ffmpeg-6.1.1. Fixes #19074.
[rahul] - Update to icewm-3.4.5. Fixes #19069.
[renodr] - Move QtWebEngine to use the Python 3.11 version installed in /opt. Fixes #19016.
[bdubbs] - Update to numpy-1.26.3 (Python Module). Fixes #19083.
[bdubbs] - Update to poppler-24.01.0. Fixes #19082.
[bdubbs] - Update to libxmlb-0.3.15. Fixes #19081.
January 2nd, 2024
January 1st, 2024
December 31st, 2023
December 30th, 2023
[renodr] - Update to xarchiver-0.5.4.22. Fixes #19070.
December 29th, 2023
December 28th, 2023
[rahul] - Update to libdrm-2.4.119. Fixes #19045.
[rahul] - Update to fdk-aac-2.0.3. Fixes #19044.
[rahul] - Update to iw-6.7. Fixes #19043.
[rahul] - Update to php-8.3.1. Fixes #19042.
[rahul] - Update to libsass-3.6.6. Fixes #19041.
[renodr] - Update to snapshot-45.2. Fixes #19061.
[renodr] - Update to mesa-23.3.2. Fixes #19060.
[renodr] - Update to opencv-4.9.0. Fixes #19059.
[renodr] - Remove './mach configure' from the Mozilla packages since './mach build' does this step for us automatically now. Fixes #19028.
December 27th, 2023
[renodr] - Update to gnome-settings-daemon-45.1. Fixes #19051.
[renodr] - Update to vulkan-loader-1.3.274. Fixes #19029.
[renodr] - Update to vulkan-headers-1.3.274. Part of #19029.
[renodr] - Update the gstreamer stack to 1.22.8 (Security Update). Fixes #19027.
[renodr] - Update to Spidermonkey-115.6.0 (Security Update). Fixes #19024.
[bdubbs] - Update to paps-0.8.0. Fixes #19046.
[bdubbs] - Add fmt-10.1.1. Needed for paps-0.8.0.
[bdubbs] - Update to doxygen-1.10.0. Fixes #19058.
[bdubbs] - Update to ruby-3.3.0. Fixes #19057.
[bdubbs] - Update to Net-DNS-1.42 (Perl module). Fixes #19055.
[bdubbs] - Update to exempi-2.6.5. Fixes #19054.
December 26th, 2023
[renodr] - Update to Thunderbird-115.6.0 (Security Update). Fixes #19003.
[renodr] - Add a security patch to libssh2 to guard it against the Terrapin attack. Fixes #19023.
[renodr] - Update to openssh-9.6p1 (Security Update). Fixes #19023.
[renodr] - Remove Python 3.12 fixes from Seamonkey and adapt to the new Python 3.11 installation method. Addresses #19016.
[rahul,bdubbs] - Remove python-3.12 fixes from firefox. Addresses #19016.
[rahul,bdubbs] - Add Python-3.11.1 to allow building Mozilla packages and qtwebengine without fixes for python 3.12. Addresses #19016.
December 24th, 2023
[bdubbs] - Update to sysstat-12.7.5. Fixes #19048.
[bdubbs] - Update to fontconfig-2.15.0. Fixes #19047.
[bdubbs] - Update to glslang-14.0.0. Fixes #19050.
[bdubbs] - Update to python-dbusmock-0.30.1. Fixes #19053.
[bdubbs] - Update to bind-9.18.21. Fixes #19037.
[bdubbs] - Update to gtk+-3.24.39. Fixes #19036.
December 23rd, 2023
December 22nd, 2023
December 20th, 2023
[bdubbs] - Update to qemu-8.2.0. Fixes #19031.
[bdubbs] - Update to LibRaw-0.21.2. Fixes #19034.
[bdubbs] - Update to libnvme-1.7.1. Fixes #19033.
[bdubbs] - Update to aspell-0.60.8.1. Fixes #19032.
[bdubbs] - Update to nss-3.96.1. Fixes #19030.
[renodr] - Update to Seamonkey-2.53.18 (Security Update). Fixes #18992.
December 19th, 2023
[ken] - Update to firefox-115.6.0 (Security Update). Fixes #19026.
December 17th, 2023
December 16th, 2023
[rahul] - Update to cmake-3.28.1. Fixes #19013.
[rahul] - Update to v4l-utils-1.26.1. Fixes #19007.
[rahul] - Update to enchant-2.6.4. Fixes #19002.
[bdubbs] - Update to nss-3.96. Fixes #19017.
[bdubbs] - Update to librsvg-2.57.1. Fixes #19018.
[bdubbs] - Update to mesa-23.3.1. Fixes #18548.
[bdubbs] - Update to Python-3.12.1. Fixes #18987.
[bdubbs] - Update to boost-1.84.0. Fixes #19011.
[bdubbs] - Update to traceroute-2.1.5. Fixes #19010.
[bdubbs] - Update to bluez-5.71. Fixes #19009.
[bdubbs] - Update to sudo-1.9.15p4. Fixes #19008.
December 15th, 2023
[bdubbs] - Update to plasma5-5.27.10. Fixes #18545.
[bdubbs] - Update to kde gear-23.08.4 including kate, kwave and falkon. Fixes #18527.
[bdubbs] - Update to kf5-5.113.0. Fixes #18527.
[bdubbs] - Update to plasma-wayland-protocols-1.12.0. Fixes #18989.
[renodr] - Update to webkitgtk-2.42.4 (Security Update). Fixes #19015.
[renodr] - Update to vte-0.74.2. Fixes #19014.
[renodr] - Fix an issue in dhcpcd that occurs when using the '-b' switch. Fixes #19001.
[renodr] - Update Vulkan-Headers and Vulkan-Loader to 1.3.273. Fixes #18995.
[renodr] - Update to libxml2-2.12.3. Fixes #18994.
[renodr] - Update to transmission-4.0.5. Fixes #18993.
December 13th, 2023
December 11th, 2023
December 8th, 2023
[renodr] - Update to libreoffice-7.6.4.1 (Security Update). Fixes #18991.
[rahul] - Update to cmake-3.28.0. Fixes #18979.
[rahul] - Update to libaom-3.8.0. Fixes #18981.
[renodr] - Update to gnome-control-center-45.2. Fixes #18990.
[renodr] - Update to rustc-1.74.1. Fixes #18994.
[renodr] - Update to mercurial-6.6.1. Fixes #18986.
December 7th, 2023
December 6th, 2023
[bdubbs] - Update to libei-1.2.0. Fixes #18975.
[rahul] - Update to cURL-8.5.0 (Security Update). Fixes #18976.
[rahul] - Update to libnl-3.9.0. Fixes #18970.
[rahul] - Update to gdb-14.1. Fixes #18962.
[pierre] - Fix building libgsf against libxml-2.12.x.
[renodr] - Update to WebKitGTK-2.42.3 (Security Update). Fixes #18972.
December 5th, 2023
[renodr] - Update to enchant-2.6.3. Fixes #18957.
[rahul] - Update to wireplumber-0.4.17. Fixes #18966.
[rahul] - Update to libavif-1.0.3. Fixes #18968.
[rahul] - Update to pygments-2.17.2. Fixes #18969.
[rahul] - Update to feh-3.10.2. Fixes #18971.
[renodr] - Update to poppler-23.12.0. Fixes #18948.
[renodr] - Update to vulkan-loader-1.3.272. Fixes #18974.
[renodr] - Update to vulkan-headers-1.3.272. Fixes #18973.
[bdubbs] - Update to parole-4.18.1. Fixes #18941.
[bdubbs] - Update to xfce4-settings-4.18.4. Fixes #18940.
[bdubbs] - Update to xfce4-power-manager-4.18.3. Fixes #18939.
[bdubbs] - Update to tumbler-4.18.2. Fixes #18938.
December 4th, 2023
[renodr] - Update to gnome-maps-45.2. Fixes #18965.
[renodr] - Update to file-roller-43.1. Fixes #18964.
[renodr] - Update to nautilus-45.2. Fixes #18963.
[renodr] - Update to mutter-45.2. Fixes #18961.
[renodr] - Update to gnome-shell-extensions-45.2. Fixes #19860.
[renodr] - Update to gnome-shell-45.2. Fixes #18960.
[renodr] - Update to gjs-1.78.1. Fixes #18959.
[renodr] - Update to Text-CSV-2.04 (Perl Module). Fixes #18958.
[renodr] - Update to Text-CSV_XS-1.53 (Perl Module). Fixes #18958.
[renodr] - Update to evolution-3.50.2. Fixes #18950.
[renodr] - Update to evolution-data-server-3.50.2. Fixes #18950.
[renodr] - Update to libadwaita-1.4.2. Fixes #18949.
[renodr] - Update to libseccomp-2.5.5. Fixes #18947.
[pierre] - Update to kea-2.4.1. Fixes #18953.
December 3rd, 2023
[bdubbs] - Update to cryptsetup-2.6.1. Fixes #18955.
[bdubbs] - Update to shared-mime-info-2.4. Fixes #18954.
[renodr] - Add libplacebo to the book in support of mpv.
[renodr] - Add glad to the book in support of libplacebo.
[renodr] - Add support for Vulkan to the book. This is in support of libplacebo, but also since it is used in more packages. This involves the addition of SPIRV-Headers, SPIRV-Tools, glslang, Vulkan-Headers, and Vulkan-Loader.
[renodr] - Disable the usage of libplacebo in VLC. It's broken due to major API changes in libplacebo, and will not be fixed until VLC-4.
[renodr] - Enable support for Vulkan in Mesa. This includes the addition of Vulkan drivers.
[renodr] - Add support for Vulkan to ffmpeg, Qt5, Qt6, gst-plugins-bad, gtksourceview5, and pipewire.
[renodr] - Document support for Vulkan in GTK4.
[renodr] - Update to mpv-0.37.0. Fixes #18901.
[xry111] - Update to llvm-17.0.6. Fixes #18672.
December 1st, 2023
[bdubbs] - Update to cmake-3.27.9. Fixes #18932.
[bdubbs] - Update to mupdf-1.23.7. Fixes #18935.
[bdubbs] - Update to gpgme-1.23.2. Fixes #18930.
[renodr] - Update to gnome-disk-utility-45.1. Fixes #18946.
[renodr] - Update to c-ares-1.23.0. Fixes #18945.
[renodr] - Update to python-dbusmock-0.30.0 (Python Module). Fixes #18944.
[renodr] - Update to mlt-7.22.0. Fixes #18936.
[rahul] - Update to mariadb-10.11.6 (Security Update). Fixes #18937.
November 30th, 2023
November 29th, 2023
November 28th, 2023
[renodr] - Fix building sendmail now that Berkeley DB has been archived. Thanks goes to Joe Locash for the report and the solution. Fixes #18929.
[bdubbs] - Update to libqalculate-4.9.0. Fixes #18925.
[bdubbs] - Update to qt-everywhere-src-6.6.1. Fixes #18921.
[renodr] - Update to thunderbird-115.5.1. Fixes #18928.
[bdubbs] - Fix building obconf-qt with libxml2-2.12.x. Thanks to Joe Locash for the report and instructions. Fixes #18923.
[bdubbs] - Update to Net-DNS-1.41 (Perl module). Fixes #18926.
[bdubbs] - Update to pipewire-1.0.0. Fixes #18917.
[renodr] - Update to inkscape-1.3.2. Fixes #18927.
[renodr] - Update to samba-4.19.3. Fixes #18922.
[renodr] - Update to libwacom-2.9.0. Fixes #18920.
November 26th, 2023
November 25th, 2023
November 24th, 2023
[renodr] - Update to node.js-v20.10.0. Fixes #18904.
[bdubbs] - Update to php-8.3.0. Fixes #18912.
[rahul] - Update to intel-gmmlib-22.3.14. Fixes #18911.
[bdubbs] - Update to LVM2.2.03.23. Fixes #18903.
[renodr] - Update to wireplumber-0.4.16. Fixes #18905.
[renodr] - Update to libxml2-2.12.1. Fixes #18913.
November 23rd, 2023
November 22nd, 2023
[renodr] - Update to mercurial-6.3. Fixes #18899.
[renodr] - Update to Thunderbird-115.5.0 (Security Update). Fixes #18900.
[bdubbs] - Archive Berkeley DB. Fixes #18871.
[renodr] - Fix building libsoup2 with libxml2-2.12.0. Fixes #18902.
[bdubbs] - Update to libaom-3.7.1. Fixes #18897.
[bdubbs] - Update to libdrm-2.4.118. Fixes #18896.
[bdubbs] - Update to git-2.43.0. Fixes #18895.
November 21st, 2023
November 20th, 2023
[bdubbs] - Add instructions to create/install libuv man page. Fixes #18879.
[ken] - Update to dvisgm-3.1.2. Fixes #18707.
[renodr] - Update to rustc-1.74.0. Fixes #18876.
[renodr] - Update to inkscape-1.3.1. Fixes #18888.
[renodr] - Update to gtk-4.12.4. Fixes #18884.
[renodr] - Update to c-ares-1.22.1. Fixes #18890.
[renodr] - Update to SCons-4.6.0. Fixes #18889.
[renodr] - Update to Pygments-2.17.1 (Python Module). Fixes #18887.
[renodr] - Update to lsof-4.99.0. Fixes #18886.
[bdubbs] - Update to log4cplus-2.1.1. Fixes #18881.
[bdubbs] - Update to libxml2-2.12.0. Fixes #18880.
[bdubbs] - Update to pipewire-0.3.85. Fixes #18873.
[bdubbs] - Update to libksba-1.6.5. Fixes #18873.
November 19th, 2023
[timtas] - Update to nfs-utils-2.6.4. Fixes #18883.
November 17th, 2023
[bdubbs] - Add qt6. Fixes #14356.
[renodr] - Update to gnome-bluetooth-42.7. Fixes #18877.
[renodr] - Update to libavif-1.0.2. Fixes #18875.
[renodr] - Update to libxslt-1.1.39. Fixes #18874.
[renodr] - Fix a build failure in raptor2 when libxml2-2.11.x is installed. Thanks goes to Joe Locash for the report. Fixes #18872.
[timtas] - Update to exim-4.97. Fixes #18818.
[bdubbs] - Add File::FcntlLock-0.22 (Perl module) in support of exim #18818.
November 16th, 2023
[bdubbs] - Update to mupdf-1.23.6. Fixes #18870.
[bdubbs] - Update to wireshark-4.2.0. Fixes #18868.
[bdubbs] - Update to bind-9.18.20. Fixes #18867.
[bdubbs] - Update to cmake-3.27.8. Fixes #18866.
[renodr] - Update to Thunderbird-115.4.3. Fixes #18869.
[renodr] - Patch gnome-shell-extensions to fix a crash when using the Workspace Indicator extension.
[renodr] - Update to Encode-JIS2K-0.03 (Perl Module). Fixes #18865.
[renodr] - Update to p11-kit-0.25.3. Fixes #18863.
[renodr] - Update to gnutls-3.8.2 (Security Update). Fixes #18862.
[renodr] - Change cyrus-sasl to use LMDB instead of Berkeley DB. Addresses #18871.
November 15th, 2023
November 14th, 2023
November 13th, 2023
November 12th, 2023
[bdubbs] - Update to btrfs-progs-6.6. Fixes #18815.
[xry111] - Update to AppStream-1.0.0. Fixes #18843.
[rahul] - Update to dhcpcd-10.0.5. Fixes #18844.
[bdubbs] - Update to numpy-1.26.2 (Python module). Fixes #18851.
[renodr] - Update to WebKitGTK+-2.42.2 (Security Update). Fixes #18531.
[bdubbs] - Update to harfbuzz-8.3.0. Fixes #18849.
[pierre] - Update to sudo-1.9.15p2. Fixes #18848.
November 11th, 2023
November 10th, 2023
November 9th, 2023
[ken] - Simplify the 'Prefer chosen CJK fonts' example in 'tuning fontconfig' and ensure that DejaVu fonts are preferred for non-CJK.
[bdubbs] - Update to autofs-5.1.9. Fixes #18832.
[bdubbs] - Update to unbound-1.19.0. Fixes #18839.
[bdubbs] - Update to Mako-1.3.0. Fixes #18838.
[xry111] - Fix an issue with WebKitGTK-2.42.1 breaking various Web sites.
[renodr] - Update to libcloudproviders-0.3.5. Fixes #18837.
[pierre] - Fix wireshark for building with Python-3.12. Part of #18798.
November 8th, 2023
[bdubbs] - Update to lxqt-1.4.0 and associated packages. Fixes #18820.
[renodr] - Update to thunderbird-115.4.2. Fixes #18834.
[renodr] - Update to plasma-wayland-protocols-1.11.0. Fixes #18833.
[renodr] - Update to libgusb-0.4.8. Fixes #18831.
[renodr] - Update to mupdf-1.23.5. Fixes #18829.
[renodr] - Update to xapian-core-1.4.24. Fixes #18824.
[renodr] - Update to GIMP-2.10.36 (Security Update). Fixes #18836.
[renodr] - Update to faad2-2.11.0 (Security Update). Fixes #18835.
[pierre] - Update to mercurial-6.5.3. Fixes #18827.
November 7th, 2023
[pierre] - Fix libreoffice for ICU 74. Part of #18799.
[renodr] - Adapt itstool to changes in Python-3.12. Addresses #18798.
[renodr] - Update to epiphany-45.1. Fixes #18828.
[renodr] - Update to IO-Socket-SSL-2.084 (Perl Module). Fixes #18826.
[renodr] - Update to libuv-1.47.0. Fixes #18823.
[renodr] - Update to jasper-4.1.0. Fixes #18819.
[renodr] - Fix building ffmpeg-6.0 with Texinfo-7.1 installed. Fixes #18821.
[renodr] - Update to exiv2-0.28.1 (Security Update). Fixes #18825.
[xry111] - Fix SeaMonkey for Python 3.12 and ICU 74. Part of #18798 and #18799.
November 6th, 2023
November 5th, 2023
[bdubbs] - Update to jasper-4.0.1. Fixes #18817.
November 3rd, 2023
[rahul] - Update to git-2.42.1. Fixes #18809.
[rahul] - Update to pipewire-0.3.84. Fixes #18814.
[rahul] - Update to SDL2-2.28.5. Fixes #18813.
[rahul] - Update to icewm-3.4.4. Fixes #18811.
[bdubbs] - Update to node-v20.9.0. Fixes #18804.
[bdubbs] - Update to postfix-3.8.3. Fixes #18801.
[bdubbs] - Update to poppler-23.11.0. Fixes #18800.
[bdubbs] - Add sysmon-qt-1.0.
[renodr] - Update to gnumeric-1.12.56. Fixes #18812.
[renodr] - Update to goffice-0.10.56. Fixes #18810.
[renodr] - Update to libgsf-1.14.51. Fixes #18808.
[renodr] - Update to sqlite-3.44.0. Fixes #18802.
[timtas] - Update to ghostscript-10.02.1. Fixes #18803.
November 2nd, 2023
[rahul] - Update to c-ares-1.21.0. Fixes #18783.
[rahul] - Update to nghttp2-1.58.0. Fixes #18784.
[bdubbs] - Update to kuserfeedback-1.3.0. Fixes #18807.
[bdubbs] - Update to phonon-backend-vlc-0.12.0. Fixes #18806.
[bdubbs] - Archive phonon-backend-gstreamer.
[bdubbs] - Update to phonon-4.12.0. Fixes #18805.
[renodr] - Update to tracker-miners-3.6.2. Fixes #18796.
[renodr] - Update to mutter-45.1. Fixes #18795.
[renodr] - Update to gnome-shell-extensions-45.1. Fixes #18794.
[renodr] - Update to gnome-shell-45.1. Fixes #18793.
[renodr] - Update to libsoup-3.4.4. Fixes #18780.
[renodr] - Update to gnome-control-center-45.1. Fixes #18769.
[renodr] - Update to nautilus-45.1. Fixes #18765.
[renodr] - Update to gnome-maps-45.1. Fixes #18761.
[renodr] - Update to eog-45.1. Fixes #18760.
[renodr] - Update to libshumate-1.1.2. Fixes #18759.
[renodr] - Update to gnome-user-docs-45.1. Fixes #18758.
[renodr] - Update to evolution-3.50.1. Fixes #18753.
[renodr] - Update to evolution-data-server-3.50.1. Fixes #18753.
[renodr] - Update to thunderbird-115.4.1 (Security Update). Fixes #18774.
[renodr] - Update to OpenJDK-21.0.1 (Security Update). Fixes #18743.
November 1st, 2023
October 31st, 2023
October 30th, 2023
October 29th, 2023
October 27th, 2023
October 26th, 2023
October 25th, 2023
October 24th, 2023
October 23rd, 2023
[bdubbs] - Update to xterm-388. Fixes #18764.
[bdubbs] - Update to usbutils-016. Fixes #18763.
[bdubbs] - Update to pycairo3-1.25.1 (Python module). Fixes #18757.
[bdubbs] - Update to highlight-4.10. Fixes #18756.
[bdubbs] - Update to btrfs-progs-v6.5.3. Fixes #18755.
[bdubbs] - Update to libdrm-2.4.117. Fixes #18752.
October 20th, 2023
October 20th, 2023
[renodr] - Fix a regression in alsa-lib that causes segmentation faults whenever audio is played on i686. Fixes #18751.
[bdubbs] - Removed most references to the update-leap script in ntp. Fixes #18738.
[renodr] - Update to Thunderbird-115.3.3. Fixes #18742.
[renodr] - Update to intel-media-driver-23.3.5. Fixes #18749.
[renodr] - Update to intel-gmmlib-22.3.12. Fixes #18724.
[bdubbs] - Update to pipewire-0.3.83. Fixes #18750.
[bdubbs] - Update to gucharmap-15.1.2. Fixes #18748.
[bdubbs] - Update to gnome-terminal-3.50.1. Fixes #18747.
[bdubbs] - Update to vte-0.74.1. Fixes #18746.
[bdubbs] - Update to httpd-2.4.58 (Security Update). Fixes #18745.
October 19th, 2023
[bdubbs] - Update to xfce4-dev-tools-4.18.1. Fixes #18741.
[bdubbs] - Update to highlight-4.9. Fixes #18740.
[bdubbs] - Update to libbytesize-2.10. Fixes #18739.
[bdubbs] - Update to harfbuzz-8.2.2. Fixes #18737.
[bdubbs] - Update to libsigc++-2.12.1. Fixes #18736.
[bdubbs] - Update to xfconf-4.18.2. Fixes #18734.
[bdubbs] - Update to node.js-18.18.2 (Security Update). Fixes #18733.
[bdubbs] - Update to libxkbcommon-1.6.0. Fixes #18732.
[bdubbs] - Update to libqalculate-4.8.1. Fixes #18731.
[bdubbs] - Update to libpaper-2.1.2. Fixes #18730.
[bdubbs] - Update to libnvme-1.6. Fixes #18729.
[bdubbs] - Update to libical-3.0.17. Fixes #18728.
[bdubbs] - Update to libgusb-0.4.7. Fixes #18727.
October 18th, 2023
October 17th, 2023
[pierre] - Update to pipewire-0.3.82. Fixes #18709.
[pierre] - Update to wireplumber-0.4.15. Fixes #18706.
[pierre] - Update to thunderbird-115.3.2. Fixes #18653.
[pierre] - Update to exim-4.96.2 (security update). Fixes #18714.
[timtas] - Update to samba-4.19.2. Fixes #18722.
[timtas] - Update to qemu-8.1.2. Fixes #18719.
October 16th, 2023
[timtas] - Remove libxpresent dependency from xfwm4-4.18.0. It is now part of Xorg Libraries.
[renodr] - Apply a patch to Seamonkey to fix several security vulnerabilities in it's bundled libvpx.
[renodr] - Update to xterm-387. Fixes #18718.
[renodr] - Update to doxyqml-0.5.3 (Python Module). Fixes #18717.
[renodr] - Update to numpy-1.26.1 (Python Modules). Fixes #18710.
[renodr] - Update to libnsl-2.0.1. Fixes #18708.
[bdubbs] - Add libXpresent-1.0.1 to xorg libraries. Needed to support mpv.
October 15th, 2023
[bdubbs] - Update to vlc-3.0.19. Fixes #18692.
[bdubbs] - Update to shadow-4.14.1. Fixes #18679.
[ken] - fontconfig-2.14 changed the defaults from DejaVu to Noto fonts. Add a note in tuning-fontconfig, pending review of the details. Addresses #18716.
[pierre] - Update to cups-filters-2.0.0. Fixes #18656.
[pierre] - Add cups-browsed-2.0.0. This is needed for the new version of cups-filters and the upcoming CUPS v3.
[pierre] - Add libppd-2.0.0. This is needed for the new version of cups-filters and the upcoming CUPS v3.
[pierre] - Add libcupsfilters-2.0.0. This is needed for the new version of cups-filters and the upcoming CUPS v3.
[timtas] - Add mpv-0.36.0 to Video Utilities.
October 13th, 2023
[rahul] - Update to gtk4-4.12.3. Fixes #18627.
October 13th, 2023
October 12th, 2023
[bdubbs] - Update to xscreensaver-6.08. Fixes #18700.
[bdubbs] - Update to iptables-1.8.10. Fixes #18694.
[bdubbs] - Update to proftpd-1.3.8a. Fixes #18691.
[bdubbs] - Update to libva-2.20.0. Fixes #18687.
[bdubbs] - Update to btrfs-progs-v6.5.2. Fixes #18674.
[bdubbs] - Update to desktop-file-utils-0.27. Fixes #18680.
[bdubbs] - Update to mpg123-1.32.3. Fixes #18669.
[bdubbs] - Update to mlt-7.20.0. Fixes #18668.
[bdubbs] - Update to poppler-23.10.0. Fixes #18663.
[bdubbs] - Update to SDL2-2.28.4. Fixes #18660.
[bdubbs] - Update to xfce4-pulseaudio-plugin-0.4.8. Fixes #18659.
[renodr] - Update to mupdf-1.23.4. Fixes #18701.
[renodr] - Update to fuse-3.16.2. Fixes #18695.
[renodr] - Update to libtirpc-1.3.4. Fixes #18690.
[renodr] - Update to c-ares-1.20.1. Fixes #18689.
[renodr] - Update to qpdf-11.6.2. Fixes #18688.
[renodr] - Update to wireshark-4.0.10. Fixes #18676.
October 11th, 2023
[timtas] - Update to SQLite-3.43.2. Fixes #18698.
[bdubbs] - Update to xterm-386. Fixes #18693.
[renodr] - Update to curl-8.4.0 (Security Update). Fixes #18702.
[renodr] - Update to libnotify-0.8.3 (Security Update). Fixes #18699.
[renodr] - Update to nghttp2-1.57.0 (Security Update). Fixes #18697.
[xry111] - Fix a crash in vala-0.56.13 vapigen program which may be triggered building NetworkManager-1.44.2. Fixes #18703.
[timtas] - Update to samba-4.19.1. Fixes #18696.
[pierre] - Update to Qt-5.15.11. Fixes #18678.
October 10th, 2023
[bdubbs] - Update to pipewire-0.3.81. Fixes #18686.
[renodr] - Update to unrar-6.2.12. Fixes #18681.
[renodr] - Update to network-manager-applet-1.34.0. Fixes #18682.
[renodr] - Update to NetworkManager-1.44.2. Fixes #18673.
[renodr] - Update to tracker-miners-3.6.1. Fixes #18652.
[renodr] - Update to opencv-4.8.1. Fixes #18645.
October 9th, 2023
[renodr] - Update to xkeyboard-config-2.40. Fixes #18683.
[renodr] - Update to libXrandr-1.5.4 (Xorg Library). Fixes #18677.
[renodr] - Update to packaging-23.2 (Python Modules). Fixes #18657.
[renodr] - Update to libXpm-3.5.17 (Security Update). Fixes #18671.
[renodr] - Update to libX11-1.8.7 (Security Update). Fixes #18670.
October 8th, 2023
October 7th, 2023
October 4th, 2023
October 3rd, 2023
October 1st, 2023
September 30th, 2023
[pierre] - Update to libreoffice-7.6.2. Fixes #18639.
September 29th, 2023
[xry111] - Add libvpx security fix patch. Fixes #18651.
September 28th, 2023
[renodr] - Archive XSane. It has been replaced with Simple Scan. Fixes #18532.
[renodr] - Remove sane-frotends from the book. It has been replaced with Simple Scan. Part of #18532.
[renodr] - Update to mpg123-1.32.2. Fixes #18633.
[renodr] - Update to sdl12-compat-1.2.68. Fixes #18640.
[renodr] - Update to xfce4-panel-4.18.5. Fixes #18641.
[renodr] - Update to imlib2-1.12.1. Fixes #18628.
[renodr] - Update to cairo-1.18.0. Fixes #17618.
[renodr] - Update to WebKitGTK+-2.42.1 (Security Update). Fixes #18644.
[pierre] - Update to OpenJDK-21. Fixes #18611.
September 27th, 2023
[renodr] - Update to Thunderbird-115.3.0 (Security Update). Fixes #18624.
[renodr] - Prevent installing systemd units in xfce4-notifyd, tumbler, and Thunar.
[renodr] - Update to seamonkey-2.53.17.1 (Security Update). Fixes #18622.
[renodr] - Update to pycairo-1.25.0 (Python Module). Fixes #18638.
[renodr] - Update to epiphany-45.0. Fixes #18572.
[renodr] - Update to gucharmap-15.1.1. Fixes #18596.
[renodr] - Update to gnome-weather-45.0. Fixes #18610.
[renodr] - Update to gnome-terminal-3.50.0. Fixes #18595.
[renodr] - Update to gnome-system-monitor-45.0.2. Fixes #18591.
[renodr] - Update to gnome-maps-45.0. Fixes #18590.
[renodr] - Update to gnome-calculator-45.0.2. Fixes #18608.
[renodr] - Update to evince-45.0. Fixes #18609.
[renodr] - Update to eog-45.0. Fixes #18597.
[renodr] - Update to baobab-45.0. Fixes #18615.
[renodr] - Archive Cogl. It was only used by Clutter. Finishes #18643.
[renodr] - Archive clutter. It is no longer used. Addresses #18643.
[renodr] - Archive clutter-gst. It was only used by Cheese. Addresses #18643.
[renodr] - Archive clutter-gtk. It was only used by Cheese. Addresses #18643.
[renodr] - Archive Cheese. It has been replaced with Snapshot. Fixes #18620.
[renodr] - Add Snapshot to the book, replacing Cheese. Fixes #18620.
[renodr] - Add Wireplumber to the book in support of Snapshot. Fixes #18642.
[renodr] - Update to Xwayland-23.2.1. Fixes #18616.
[timtas] - Fix -Denable-printing=true in epdfview.
September 26th, 2023
[ken] - Use the gtk3 fork of epdfview. Addresses #18531.
[renodr] - Fix dependencies in adwaita-icon-theme.
[renodr] - Fix building GDM on SysV systems. Fixes #18634.
[renodr] - Remove systemd units in gnome-session that are not useful on SysV systems.
[ken] - Update to dvisvgm-3.1.1. Fixes #18477.
[ken] - Update to SpiderMonkey 115.3.0 Fixes #18636.
[pierre] - Update to make-ca-1.13. Fixes #18637.
[ken] - Update to firefox-115.3.0, Security Update. Fixes #18635.
[renodr] - Add simple-scan to the book. This will eventually replace XSane. Fixes #18532.
[thomas] - Upgrade to cmake-3.27.6. Fixes #18621.
September 25th, 2023
[renodr] - Remove an unnecessary systemd unit from libkscreen in LXQt.
[timtas] - Update to xfce4-notifyd-0.9.2. Fixes #18625.
[xry111] - Archive libchamplain as it's obsolete.
September 23rd, 2023
[timtas] - Update to qemu-8.1.1. Fixes #18626.
September 22nd, 2023
[renodr] - Update to gnome-user-docs-45.0. Fixes #18581.
[renodr] - Update to gnome-session-45.0. Fixes #18583.
[renodr] - Update to gnome-shell-extensions-45.0. Fixes #18579.
[renodr] - Update to gdm-45.0.1. Fixes #18584.
[renodr] - Update to gnome-shell-45.0. Fixes #18579.
[renodr] - Update to mutter-45.0. Fixes #18580.
[renodr] - Update to gnome-control-center-45.0. Fixes #18570.
[renodr] - Update to gnome-settings-daemon-45.0. Fixes #18588.
[renodr] - Update to nautilus-45.0. Fixes #18582.
[renodr] - Update to gvfs-1.52.0. Fixes #18571.
[renodr] - Update to gnome-backgrounds-45.0. Fixes #18598.
[renodr] - Update to dconf-editor-45.0.1. Fixes #18614.
[renodr] - Update to libsecret-0.21.1. Fixes #18629.
[renodr] - Add Tecla to the book in support of gnome-control-center. Fixes #18630.
[renodr] - Add libei to the book in support of Mutter. Fixes #18631.
September 21st, 2023
[renodr] - Update to BIND-9.18.19 (Security Update). Fixes #18619.
[renodr] - Update the gstreamer stack to 1.22.6 (Security Update). Fixes #18618.
[renodr] - Update to cups-2.4.7 (Security Update). Fixes #18623.
[renodr] - Update to stunnel-5.71. Fixes #18612.
[renodr] - Update to adwaita-icon-theme-45.0. Fixes #18607.
[renodr] - Update to unrar-6.2.11. Fixes #18606.
[renodr] - Update to harfbuzz-8.2.1. Fixes #18605.
[renodr] - Update to vte-0.74.0. Fixes #18594.
[renodr] - Update to libshumate-1.1.0. Fixes #18587.
[renodr] - Update to gsettings-desktop-schemas-45.0. Fixes #18585.
[renodr] - Update to libgweather-4.4.0. Fixes #18576.
[renodr] - Update to tracker-miners-3.6.0. Fixes #18575.
[renodr] - Update to tracker-3.6.0. Part of #18575.
[renodr] - Update to evolution-3.50.0. Fixes #18569.
[renodr] - Update to evolution-data-server-3.50.0. Part of #18569.
[rahul] - Update to icewm-3.4.2. Fixes #18539.
[rahul] - Update to mesa-23.1.8. Fixes #18617.
September 19th, 2023
September 18th, 2023
[renodr] - Update to gtksourceview-5.10.0. Fixes #18593.
[renodr] - Archive libdazzle. It was only used by sysprof. Fixes #18603.
[renodr] - Archive sysprof. Fixes #18592.
[renodr] - Update to json-glib-1.8.0. Fixes #18578.
[renodr] - Update to gobject-introspection-1.78.1. Fixes #18577.
[renodr] - Update to at-spi2-core-2.50.0. Fixes #18568.
[renodr] - Update to libsoup-3.4.3. Fixes #18567.
[renodr] - Update to numpy-1.26.0 (Python Module). Fixes #18565.
[renodr] - Update to gnome-calculator-45.0. Fixes #18429.
[renodr] - Update to libadwaita-1.4.0. Fixes #18573.
[renodr] - Add appstream to the book in support of libadwaita. Fixes #18599.
[renodr] - Add libxmlb to the book in support of appstream. Fixes #18600.
[renodr] - Archive pycryptodome. Nothing is using it anymore, and it only was previously used by Samba. Fixes #18566.
September 17th, 2023
[xry111] - Rename "JS" to "SpiderMonkey from Firefox". Update to SpiderMonkey from Firefox-115.2.1. Update to gjs-1.78.0. Allow building Polkit with SpiderMonkey from Firefox-115. Fixes #18221.
[renodr] - Update to libreoffice-7.6.1.2. Fixes #18561.
[pierre] - Update to blfs-bootscripts-20230917: move interface to the end of the dhcpcd command in the service file. In conjunction with the item below, fixes passing hostnames to DNS.
[timtas] - Fix DHCP_START option in dhcpcd ifconfig example
September 16th, 2023
[renodr] - Update to glib-networking-2.78.0. Fixes #18563.
[renodr] - Update to dovecot-2.3.21. Fixes #18564.
[renodr] - Update to postgresql-16.0. Fixes #18559.
[renodr] - Update to cmake-3.27.5. Fixes #18558.
[renodr] - Update to librsvg-2.57.0. Fixes #18557.
[renodr] - Update the APNG patch for libpng to 1.6.40. Fixes #18556.
[renodr] - Update to opus-1.4. Fixes #18555.
[renodr] - Update to pipewire-0.3.80. Fixes #18554.
[renodr] - Update to cbindgen-0.26.0. Fixes #18551.
[renodr] - Update to tiff-4.6.0. Note that this removes several utilities which suffered from lack of maintenance. Fixes #18550.
[renodr] - Update to sane-backends-1.2.1. Fixes #18533.
September 14th, 2023
[renodr] - Update to gucharmap-15.1.0. Fixes #18546.
[renodr] - Update to gnome-disk-utility-45.0. Fixes #18540.
[renodr] - Update to pygobject-3.46.0 (Python Module). Fixes #18536.
[renodr] - Update to libarchive-3.7.2 (Security Update). Fixes #18534.
[renodr] - Update to cURL-8.2.1 (Security Update). Fixes #18547.
[renodr] - Update to thunderbird-115.2.2 (Security Update). Fixes #18541.
[pierre] - Update to ghostscript-10.02.0. Fixes #18553.
[pierre] - Update to sphinx-7.2.6 (python module). Fixes #18552.
[pierre] - Update to libwebp-1.3.2 (security update). Fixes #18549.
[pierre] - Update to btrfs-progs-6.5.1. Fixes #18548.
[pierre] - Update to sqlite-3.43.1. Fixes #18538.
[pierre] - Update to graphviz-9.0.0. Fixes #18535.
September 13th, 2023
[rahul] - Update to geoclue-2.7.1. Fixes #18537.
[xry111] - Archive gdk-pixbuf-xlib. Use imlib2 for icewm instead.
[ken] - Update to firefox-115.2.1 - this is no longer a security update if you use system libwebp, and can be ignored. Fixes #18543.
[ken] - Updated the libwebp patch to version 2, this adds a second chromium commit which the Debian bug pointed to. Fixes #18544.
[ken] - Patch libwebp-1.3.1 for a critical vulnerability. This is not the official fix, which is not yet public, but was taken from firefox's fix for its shipped libwebp in the hope it will be adequate. Addresses #18544.
September 12th, 2023
[rahul] - Remove gtk2 dependency from colord-gtk. Addresses #18531.
September 11th, 2023
September 10th, 2023
[renodr] - Update to gobject-introspection-1.78.0. Fixes #18525.
[renodr] - Update to glib-2.78.0. Fixes #18529.
[rahul] - Update to intel-media-23.3.3. Fixes #18523.
[rahul] - Add dbus-glib as a dependency for Parole.
[ken] - Update to mutt-2.2.12 (Security Update). Fixes #18528.
[bdubbs] - Update to libportal-0.7.1. Fixes #18526.
September 9th, 2023
September 8th, 2023
[renodr] - Update to webkitgtk-2.41.92. Fixes #18517.
[bdubbs] - Update to obconf-qt-0.16.3. Fixes #18521.
[bdubbs] - Update to udisks-2.10.1. Fixes #18514.
[bdubbs] - Update to sysstat-12.7.4. Fixes #18516.
[renodr] - Update to font-util-1.4.1 (Xorg Font). Fixes #18518.
[renodr] - Update to pytest-7.4.2 (Python Module). Fixes #18515.
[renodr] - Update to libcloudproviders-0.3.4. Fixes #18513.
September 7th, 2023
[bdubbs] - Update to poppler-23.09.0. Fixes #18508.
[bdubbs] - Update to mupdf-1.23.3. Fixes #18509.
[bdubbs] - Update to gtk-4.12.1. Fixes #18464.
[renodr] - Update to libportal-0.7. Fixes #18510.
[renodr] - Update to mesa-23.1.7. Fixes #18512.
[renodr] - Update to mercurial-6.5.2. Fixes #18511.
[bdubbs] - Update to alsa-lib alsa-utils 1.2.10. Fixes #18499.
[bdubbs] - Update to dbus-1.14.10. Fixes #18492.
[renodr] - Update to Transmission-4.0.4. Fixes #18471.
September 6th, 2023
[thomas] - Archive lxde. Fixes #18380.
[thomas] - Update to php-8.2.10. Fixes #18493.
[rahul] - Update to SDL2-2.28.3. Fixes #18498.
[bdubbs] - Update to btrfs-progs-v6.5. Fixes #18488.
[bdubbs] - Update to vim-9.0.1837. Addresses #12241.
[bdubbs] - Update to unbound-1.18.0. Fixes #18482.
[renodr] - Update to qpdf-11.6.1. Fixes #18503.
[renodr] - Update to gnome-system-monitor-45.0.1. Fixes #18502.
[renodr] - Update to mutter-44.4. Fixes #18496.
[renodr] - Update to gnome-shell-44.4. Fixes #18495.
[bdubbs] - Update to doxygen-1.9.8. Fixes #18462.
[renodr] - Update to libwacom-2.8.0. Fixes #18491.
[renodr] - Update to libaom-3.7.0. Fixes #18486.
[renodr] - Update to mozjs-102.15.0. Fixes #18473.
[renodr] - Update to libavif-1.0.1. Fixes #18469.
[renodr] - Update to samba-4.19.0. Fixes #18506.
September 5th, 2023
September 4th, 2023
[bdubbs] - Update to at-spi2-core-2.48.4. Fixes #18505.
[bdubbs] - Archive volume_key. Fixes #18487.
[bdubbs] - Update to libblockdev-3.0.3. Fixes #18490.
[bdubbs] - Update to xscreensaver-6.07. Fixes #18483.
[bdubbs] - Update to highlight-4.8. Fixes #18470.
[bdubbs] - Update to xf86-input-libinput-1.4.0. Fixes #18463.
[bdubbs] - Update to freetype-2.13.2. Fixes #18461.
[xry111] - Update to cbindgen-0.25.0. Fixes #18467.
[xry111] - Update to rustc-1.72.0. Fixes #18456.
[rahul] - Update to libnl-3.8.0. Fixes #18476.
[rahul] - Update to libinput-1.24.0. Fixes #18458.
[rahul] - Update to bluez-5.69. Fixes #18454.
September 3rd, 2023
[bdubbs] - Archive sawfish and its dependencies rep-gtk and librep. Fixes #18453.
[pierre] - Update to glib-2.76.5. Fixes #18501.
[pierre] - Update to python-3.11.5 (security update). Fixes #18455.
[pierre] - Update to libdrm-2.4.116. Fixes #18449.
[pierre] - Update to wireshark-4.0.8. Fixes #18448.
[pierre] - Update to URI-5.21 (perl module). Fixes #18447.
[pierre] - Update to mupdf-1.23.2. Fixes #18446.
[pierre] - Update to pipewire-0.3.79. Fixes #18445.
[pierre] - Update to shadow-4.14.0. Fixes #18421.
[renodr] - Update to pytest-7.4.1 (Python Module). Fixes #18500.
[renodr] - Update to intel-gmmlib-22.3.11. Fixes #18489.
[renodr] - Update to Net-DNS-1.40 (Perl Module). Fixes #18481.
[renodr] - Update to dos2unix-7.5.1. Fixes #18474.
[renodr] - Update to gnome-maps-44.4. Fixes #18465.
[thomas] - Update to thunar-4.18.7. Fixes #18497.
September 2nd, 2023
[bdubbs] - Archive reiserfsprogs. Fixes #18354.
[thomas] - Update to sqlite-3.43.0. Fixes #18457.
[thomas] - Update to traceroute-2.1.3. Fixes #18475.
[pierre] - Update to sphinx_rtd_theme-1.3.0 (python module). Fixes #18440.
[pierre] - Update to git-2.42.0. Fixes #18439.
[pierre] - Update to libqalculate-4.8.0. Fixes #18438.
[pierre] - Update to brotli-1.1.0. Fixes #18437.
[pierre] - Update to gpgme-1.22.0. Fixes #18436.
[pierre] - Update to vala-0.56.13. Fixes #18434.
[pierre] - Update to sphinx-7.2.5 (python module). Fixes #18427.
[pierre] - Update to cmake-3.27.4. Fixes #18422.
[pierre] - Update to sphinxcontrib-serializinghtml-1.1.9 (python module dependency), now required by sphinx-7.2.
September 1st, 2023
[bdubbs] - Release of BLFS-12.0.
The linuxfromscratch.org server is hosting a number of mailing lists that are used for the development of the BLFS book. These lists include, among others, the main development and support lists.
For more information regarding which lists are available, how to subscribe to them, archive locations, etc., visit https://www.linuxfromscratch.org/mail.html.
The BLFS Project has created a Wiki for editors to comment on pages and instructions at https://wiki.linuxfromscratch.org/blfs/wiki.
When editor notes are
present, a link appears in the form https://wiki.linuxfromscratch.org/blfs/wiki/pkgname
right below the dependency list. The idea behind the editor
notes is to give additional information about the package
and/or its build instructions, common pitfalls or maybe even
more sophisticated configuration for special cases of use.
The vast majority of the packages do not have editor notes.
The editor notes might be outdated. Even though the pages should be reviewed when a package is updated, it might happen that there are notes referring to an obsolete version and therefore, the notes might be out of date. Always check the date of the notes and more importantly, the version of the package the notes refer to.
If you encounter a problem while using this book, and your problem is not listed in the FAQ (https://www.linuxfromscratch.org/faq), you will find that most of the people on Internet Relay Chat (IRC) and on the mailing lists are willing to help you. An overview of the LFS mailing lists can be found in Mailing lists. To assist us in diagnosing and solving your problem, include as much relevant information as possible in your request for help.
Before asking for help, you should review the following items:
Is the hardware support compiled into the kernel or
available as a module to the kernel? If it is a module,
is it configured properly in modprobe.conf
and has it been loaded?
You should use lsmod as the
root
user to see if
it's loaded. Check the sys.log
file or run modprobe <driver>
to review any error message. If it loads properly, you
may need to add the modprobe command to
your boot scripts.
Are your permissions properly set, especially for
devices? LFS uses groups to make these settings easier,
but it also adds the step of adding users to groups to
allow access. A simple usermod -G audio <user>
may be all that's necessary for that user to have
access to the sound system. Any question that starts
out with “It
works as root, but not as ...” requires a
thorough review of permissions prior to asking.
BLFS liberally uses /opt/
.
The main objection to this centers around the need to
expand your environment variables for each package
placed there (e.g., PATH=$PATH:/opt/kde/bin). In most
cases, the package instructions will walk you through
the changes, but some will not. The section called
“Going
Beyond BLFS” is available to help you
check.
<package>
Apart from a brief explanation of the problem you're having, the essential things to include in your request are:
the version of the book you are using (being 12.1),
the package or section giving you problems,
the exact error message or symptom you are receiving,
whether you have deviated from the book or LFS at all,
if you are installing a BLFS package on a non-LFS system.
(Note that saying that you've deviated from the book doesn't mean that we won't help you. It'll just help us to see other possible causes of your problem.)
Expect guidance instead of specific instructions. If you are instructed to read something, please do so. It generally implies that the answer was way too obvious and that the question would not have been asked if a little research was done prior to asking. The volunteers in the mailing list prefer not to be used as an alternative to doing reasonable research on your end. In addition, the quality of your experience with BLFS is also greatly enhanced by this research, and the quality of volunteers is enhanced because they don't feel that their time has been abused, so they are far more likely to participate.
An excellent article on asking for help on the Internet in general has been written by Eric S. Raymond. It is available online at http://www.catb.org/~esr/faqs/smart-questions.html. Read and follow the hints in that document and you are much more likely to get a response to start with and also to get the help you actually need.
Many people have contributed both directly and indirectly to BLFS. This page lists all of those we can think of. We may well have left people out and if you feel this is the case, drop us a line. Many thanks to all of the LFS community for their assistance with this project.
Rahul Chandra
Bruce Dubbs
Pierre Labastie
Ken Moffat
Douglas Reno
Xi Ruoyao
Thomas Trepl
The list of contributors is far too large to provide detailed information about the contributions for each contributor. Over the years, the following individuals have provided significant inputs to the book:
Timothy Bauscher
Daniel Bauman
Jeff Bauman
Andy Benton
Wayne Blaszczyk
Paul Campbell
Nathan Coulson
Jeroen Coumans
Guy Dalziel
Robert Daniels
Richard Downing
Manuel Canales Esparcia
Jim Gifford
Manfred Glombowski
Ag Hatzimanikas
Mark Hymers
James Iwanek
David Jensen
Jeremy Jones
Seth Klein
Alex Kloss
Eric Konopka
Larry Lawrence
D-J Lucas
Chris Lynn
Andrew McMurry
Randy McMurchy
Denis Mugnier
Billy O'Connor
Fernando de Oliveira
Alexander Patrakov
Olivier Peres
Andreas Pedersen
Henning Rohde
Matt Rogers
James Robertson
Henning Rohde
Chris Staub
Jesse Tie-Ten-Quee
Ragnar Thomsen
Tushar Teredesai
Jeremy Utley
Zack Winkles
Christian Wurst
Igor Živković
Fernando Arbeiza
Miguel Bazdresch
Gerard Beekmans
Oliver Brakmann
Jeremy Byron
Ian Chilton
David Ciecierski
Jim Harris
Lee Harris
Marc Heerdink
Steffen Knollmann
Eric Konopka
Scot McPherson
Ted Riley
Please direct your emails to one of the BLFS mailing lists. See Mailing lists for more information on the available mailing lists.
This chapter is used to explain some of the policies used throughout the book, to introduce important concepts and to explain some issues you may see with some of the included packages.
Those people who have built an LFS system may be aware of the general principles of downloading and unpacking software. Some of that information is repeated here for those new to building their own software.
Each set of installation instructions contains a URL from which you can download the package. The patches; however, are stored on the LFS servers and are available via HTTP. These are referenced as needed in the installation instructions.
While you can keep the source files anywhere you like, we assume that you have unpacked the package and changed into the directory created by the unpacking process (the source directory). We also assume you have uncompressed any required patches and they are in the directory immediately above the source directory.
We can not emphasize strongly enough that you should start from
a clean source tree each
time. This means that if you have had an error during
configuration or compilation, it's usually best to delete the
source tree and re-unpack it before trying again. This obviously
doesn't apply if you're an advanced user used to hacking
Makefile
s and C code, but if in
doubt, start from a clean tree.
The golden rule of Unix System Administration is to use your
superpowers only when necessary. Hence, BLFS recommends that
you build software as an unprivileged user and only become
the root
user when installing
the software. This philosophy is followed in all the packages
in this book. Unless otherwise specified, all instructions
should be executed as an unprivileged user. The book will
advise you on instructions that need root
privileges.
If a file is in .tar
format and
compressed, it is unpacked by running one of the following
commands:
tar -xvf filename.tar.gz tar -xvf filename.tgz tar -xvf filename.tar.Z tar -xvf filename.tar.bz2
You may omit using the v
parameter in the commands shown above and below if you wish
to suppress the verbose listing of all the files in the
archive as they are extracted. This can help speed up the
extraction as well as make any errors produced during the
extraction more obvious to you.
You can also use a slightly different method:
bzcat filename.tar.bz2 | tar -xv
Finally, sometimes we have a compressed patch file in
.patch.gz
or .patch.bz2
format. The best way to apply
the patch is piping the output of the decompressor to the
patch utility.
For example:
gzip -cd ../patchname.patch.gz | patch -p1
Or for a patch compressed with bzip2:
bzcat ../patchname.patch.bz2 | patch -p1
Generally, to verify that the downloaded file is complete,
many package maintainers also distribute md5sums of the
files. To verify the md5sum of the downloaded files, download
both the file and the corresponding md5sum file to the same
directory (preferably from different on-line locations), and
(assuming file.md5sum
is the
md5sum file downloaded) run the following command:
md5sum -c file.md5sum
If there are any errors, they will be reported. Note that the
BLFS book includes md5sums for all the source files also. To
use the BLFS supplied md5sums, you can create a file.md5sum
(place the md5sum data and the
exact name of the downloaded file on the same line of a file,
separated by white space) and run the command shown above.
Alternately, simply run the command shown below and compare
the output to the md5sum data shown in the BLFS book.
md5sum <name_of_downloaded_file>
MD5 is not cryptographically secure, so the md5sums are only provided for detecting unmalicious changes to the file content. For example, an error or truncation introduced during network transfer, or a “stealth” update to the package from the upstream (updating the content of a released tarball instead of making a new release properly).
There is no “100%” secure way to make sure the genuity of the source files. Assuming the upstream is managing their website correctly (the private key is not leaked and the domain is not hijacked), and the trust anchors have been set up correctly using make-ca-1.13 on the BLFS system, we can reasonably trust download URLs to the upstream official website with https protocol. Note that BLFS book itself is published on a website with https, so you should already have some confidence in https protocol or you wouldn't trust the book content.
If the package is downloaded from an unofficial location (for example a local mirror), checksums generated by cryptographically secure digest algorithms (for example SHA256) can be used to verify the genuity of the package. Download the checksum file from the upstream official website (or somewhere you can trust) and compare the checksum of the package from unofficial location with it. For example, SHA256 checksum can be checked with the command:
If the checksum and the package are downloaded from the same untrusted location, you won't gain security enhancement by verifying the package with the checksum. The attacker can fake the checksum as well as compromising the package itself.
sha256sum -c file
.sha256sum
If GnuPG-2.4.4 is installed, you can also verify the genuity of the package with a GPG signature. Import the upstream GPG public key with:
gpg --recv-key keyID
keyID
should be
replaced with the key ID from somewhere you can trust (for example,
copy it from the upstream official website using https). Now
you can verify the signature with:
gpg --recv-keyfile
.sigfile
The advantage of GnuPG signature is, once you imported a public key which can be trusted, you can download both the package and its signature from the same unofficial location and verify them with the public key. So you won't need to connect to the official upstream website to retrieve a checksum for each new release. You only need to update the public key if it's expired or revoked.
For larger packages, it is convenient to create log files
instead of staring at the screen hoping to catch a particular
error or warning. Log files are also useful for debugging and
keeping records. The following command allows you to create
an installation log. Replace <command>
with the
command you intend to execute.
( <command>
2>&1 | tee compile.log && exit $PIPESTATUS )
2>&1
redirects error
messages to the same location as standard output. The
tee command
allows viewing of the output while logging the results to a
file. The parentheses around the command run the entire
command in a subshell and finally the exit $PIPESTATUS command
ensures the result of the <command>
is returned
as the result and not the result of the tee command.
For many modern systems with multiple processors (or cores) the compilation time for a package can be reduced by performing a "parallel make" by either setting an environment variable or telling the make program to simultaneously execute multiple jobs.
For instance, an Intel Core i9-13900K CPU contains 8 performance (P) cores and 16 efficiency (E) cores, and the P cores support SMT (Simultaneous MultiThreading, also known as “Hyper-Threading”) so each P core can run two threads simultaneously and the Linux kernel will treat each P core as two logical cores. As the result, there are 32 logical cores in total. To utilize all these logical cores running make, we can set an environment variable to tell make to run 32 jobs simultaneously:
export MAKEFLAGS='-j32'
or just building with:
make -j32
If you have applied the optional sed when building ninja in LFS, you can use:
export NINJAJOBS=32
when a package uses ninja, or just:
ninja -j32
If you are not sure about the number of logical cores, run the nproc command.
For make, the default number of jobs is 1. But for ninja, the default number of jobs is N + 2 if the number of logical cores N is greater than 2; or N + 1 if N is 1 or 2. The reason to use a number of jobs slightly greater than the number of logical cores is keeping all logical processors busy even if some jobs are performing I/O operations.
Note that the -j
switches only
limits the parallel jobs started by make or ninja, but each job may
still spawn its own processes or threads. For example,
ld.gold will
use multiple threads for linking, and some tests of packages
can spawn multiple threads for testing thread safety
properties. There is no generic way for the building system
to know the number of processes or threads spawned by a job.
So generally we should not consider the value passed with
-j
a hard limit of the number of
logical cores to use. Read the
section called “Use Linux Control Group to Limit the Resource
Usage” if you want to set such a hard limit.
Generally the number of processes should not exceed the
number of cores supported by the CPU too much. To list the
processors on your system, issue: grep processor
/proc/cpuinfo
.
In some cases, using multiple processes may result in a race condition where the success of the build depends on the order of the commands run by the make program. For instance, if an executable needs File A and File B, attempting to link the program before one of the dependent components is available will result in a failure. This condition usually arises because the upstream developer has not properly designated all the prerequisites needed to accomplish a step in the Makefile.
If this occurs, the best way to proceed is to drop back to a
single processor build. Adding -j1
to a make command will override the
similar setting in the MAKEFLAGS
environment variable.
Another problem may occur with modern CPU's, which have a lot of cores. Each job started consumes memory, and if the sum of the needed memory for each job exceeds the available memory, you may encounter either an OOM (Out of Memory) kernel interrupt or intense swapping that will slow the build beyond reasonable limits.
Some compilations with g++ may consume up to 2.5 GB of memory, so to be safe, you should restrict the number of jobs to (Total Memory in GB)/2.5, at least for big packages such as LLVM, WebKitGtk, QtWebEngine, or libreoffice.
Sometimes we want to limit the resource usage when we build a package. For example, when we have 8 logical cores, we may want to use only 6 cores for building the package and reserve another 2 cores for playing a movie. The Linux kernel provides a feature called control groups (cgroup) for such a need.
Enable control group in the kernel configuration, then rebuild the kernel and reboot if necessary:
General setup ---> [*] Control Group support ---> [CGROUPS] [*] Memory controller [MEMCG] [*] Cpuset controller [CPUSETS]
Ensure Sudo-1.9.15p5 is installed. To run make -j5 with the first 4 logical cores and 8 GB of system memory, issue:
bash -e << \EOF sudo mkdir /sys/fs/cgroup/$$ sudo sh -c \ "echo +memory +cpuset > /sys/fs/cgroup/cgroup.subtree_control" sudo sh -c \ "echo 0-3 > /sys/fs/cgroup/$$/cpuset.cpus" sudo sh -c \ "echo $(bc -e '8*2^30') > /sys/fs/cgroup/$$/memory.high" ( sudo sh -c "echo $BASHPID > /sys/fs/cgroup/$$/cgroup.procs" exec make -j5 ) sudo rmdir /sys/fs/cgroup/$$ EOF
With 8589934592
(the output of bc -e '8*2^30'
, 2^30
represents 230, i.e. a Gigabyte) in the
memory.high
entry , a
soft limit of memory usage is set. If the processes in the
cgroup (make
and all the descendants of it) uses more than 8 GB of system
memory in total, the kernel will throttle down the processes
and try to reclaim the system memory from them. But they can
still use more than 8 GB of system memory. If you want to
make a hard limit instead, replace memory.high
with
memory.max
. But doing so
will cause the processes killed if 8 GB is not enough for
them.
0-3
in the
cpuset.cpus
entry makes
the kernel only run the processes in the cgroup on the
logical cores with numbers 0, 1, 2, or 3. You may need to
adjust this setting based the mapping between the logical
cores and the physical cores. For example, with an Intel Core
i9-13900K CPU, the logical cores 0, 2, 4, ..., 14 are mapped
to the first threads of the eight physical P cores, the
logical cores 1, 3, 5, ..., 15 are mapped to the second
threads of the physical P cores, and the logical cores 16,
17, ..., 31 are mapped to the 16 physical E cores. So if we
want to use four threads from four different P cores, we need
to specify 0,2,4,6
instead of
0-3
. Note that the other CPU
models may use a different mapping scheme. If you are not
sure about the mapping between the logical cores and the
physical cores, run grep -E
'^processor|^core' /proc/cpuinfo which will
output logical core IDs in the processor
lines, and physical core
IDs in the core id
lines.
When the nproc
or ninja
command runs in a cgroup, it will use the number of logical
cores assigned to the cgroup as the “system logical core
count”. For example, in a cgroup with logical
cores 0-3 assigned, nproc will print
4
, and ninja will run 6 (4 + 2)
jobs simultaneously if no -j
setting is explicitly given.
Read the Documentation/admin-guide/cgroup-v2.rst
file in the Linux kernel source tree for the detailed
explanation of cgroup2
pseudo
file system entries referred in the command.
There are times when automating the building of a package can
come in handy. Everyone has their own reasons for wanting to
automate building, and everyone goes about it in their own
way. Creating Makefile
s,
Bash scripts, Perl scripts or simply a list of
commands used to cut and paste are just some of the methods
you can use to automate building BLFS packages. Detailing how
and providing examples of the many ways you can automate the
building of packages is beyond the scope of this section.
This section will expose you to using file redirection and
the yes command
to help provide ideas on how to automate your builds.
You will find times throughout your BLFS journey when you will come across a package that has a command prompting you for information. This information might be configuration details, a directory path, or a response to a license agreement. This can present a challenge to automate the building of that package. Occasionally, you will be prompted for different information in a series of questions. One method to automate this type of scenario requires putting the desired responses in a file and using redirection so that the program uses the data in the file as the answers to the questions.
This effectively makes the test suite use the responses in the file as the input to the questions. Occasionally you may end up doing a bit of trial and error determining the exact format of your input file for some things, but once figured out and documented you can use this to automate building the package.
Sometimes you will only need to provide one response, or provide the same response to many prompts. For these instances, the yes command works really well. The yes command can be used to provide a response (the same one) to one or more instances of questions. It can be used to simulate pressing just the Enter key, entering the Y key or entering a string of text. Perhaps the easiest way to show its use is in an example.
First, create a short Bash script by entering the following commands:
cat > blfs-yes-test1 << "EOF"
#!/bin/bash
echo -n -e "\n\nPlease type something (or nothing) and press Enter ---> "
read A_STRING
if test "$A_STRING" = ""; then A_STRING="Just the Enter key was pressed"
else A_STRING="You entered '$A_STRING'"
fi
echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test1
Now run the script by issuing ./blfs-yes-test1 from the command line. It will wait for a response, which can be anything (or nothing) followed by the Enter key. After entering something, the result will be echoed to the screen. Now use the yes command to automate the entering of a response:
yes | ./blfs-yes-test1
Notice that piping yes by itself to the script results in y being passed to the script. Now try it with a string of text:
yes 'This is some text' | ./blfs-yes-test1
The exact string was used as the response to the script. Finally, try it using an empty (null) string:
yes '' | ./blfs-yes-test1
Notice this results in passing just the press of the Enter key to the script. This is useful for times when the default answer to the prompt is sufficient. This syntax is used in the Net-tools instructions to accept all the defaults to the many prompts during the configuration step. You may now remove the test script, if desired.
In order to automate the building of some packages, especially those that require you to read a license agreement one page at a time, requires using a method that avoids having to press a key to display each page. Redirecting the output to a file can be used in these instances to assist with the automation. The previous section on this page touched on creating log files of the build output. The redirection method shown there used the tee command to redirect output to a file while also displaying the output to the screen. Here, the output will only be sent to a file.
Again, the easiest way to demonstrate the technique is to show an example. First, issue the command:
ls -l /usr/bin | less
Of course, you'll be required to view the output one page at
a time because the less filter was used. Now
try the same command, but this time redirect the output to a
file. The special file /dev/null
can be used instead of the
filename shown, but you will have no log file to examine:
ls -l /usr/bin | less > redirect_test.log 2>&1
Notice that this time the command immediately returned to the shell prompt without having to page through the output. You may now remove the log file.
The last example will use the yes command in combination with output redirection to bypass having to page through the output and then provide a y to a prompt. This technique could be used in instances when otherwise you would have to page through the output of a file (such as a license agreement) and then answer the question of “do you accept the above?”. For this example, another short Bash script is required:
cat > blfs-yes-test2 << "EOF"
#!/bin/bash
ls -l /usr/bin | less
echo -n -e "\n\nDid you enjoy reading this? (y,n) "
read A_STRING
if test "$A_STRING" = "y"; then A_STRING="You entered the 'y' key"
else A_STRING="You did NOT enter the 'y' key"
fi
echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test2
This script can be used to simulate a program that requires you to read a license agreement, then respond appropriately to accept the agreement before the program will install anything. First, run the script without any automation techniques by issuing ./blfs-yes-test2.
Now issue the following command which uses two automation techniques, making it suitable for use in an automated build script:
yes | ./blfs-yes-test2 > blfs-yes-test2.log 2>&1
If desired, issue tail blfs-yes-test2.log to see the end of the paged output, and confirmation that y was passed through to the script. Once satisfied that it works as it should, you may remove the script and log file.
Finally, keep in mind that there are many ways to automate and/or script the build commands. There is not a single “correct” way to do it. Your imagination is the only limit.
For each package described, BLFS lists the known dependencies. These are listed under several headings, whose meaning is as follows:
Required means that the target package cannot be correctly built without the dependency having first been installed, except if the dependency is said to be “runtime”, which means the target package can be built but cannot function without it.
Note that a target package can start to “function” in many subtle ways: an installed configuration file can make the init system, cron daemon, or bus daemon to run a program automatically; another package using the target package as an dependency can run a program from the target package in the building system; and the configuration sections in the BLFS book may also run a program from a just installed package. So if you are installing the target package without a Required (runtime) dependency installed, You should install the dependency as soon as possible after the installation of the target package.
Recommended means that BLFS strongly suggests this package is installed first (except if said to be “runtime”, see below) for a clean and trouble-free build, that won't have issues either during the build process, or at run-time. The instructions in the book assume these packages are installed. Some changes or workarounds may be required if these packages are not installed. If a recommended dependency is said to be “runtime”, it means that BLFS strongly suggests that this dependency is installed before using the package, for getting full functionality.
Optional means that this package might be installed for added functionality. Often BLFS will describe the dependency to explain the added functionality that will result. An optional dependency may be automatically pick up by the target package if the dependency is installed, but another some optional dependency may also need additional configuration options to enable them when the target package is built. Such additional options are often documented in the BLFS book. If an optional dependency is said to be “runtime”, it means you may install the dependency after installing the target package to support some optional features of the target package if you need these features.
An optional dependency may be out of BLFS. If you need such an external optional dependency for some features you need, read Going Beyond BLFS for the general hint about installing an out-of-BLFS package.
On occasion you may run into a situation in the book when a package will not build or work properly. Though the Editors attempt to ensure that every package in the book builds and works properly, sometimes a package has been overlooked or was not tested with this particular version of BLFS.
If you discover that a package will not build or work properly, you should see if there is a more current version of the package. Typically this means you go to the maintainer's web site and download the most current tarball and attempt to build the package. If you cannot determine the maintainer's web site by looking at the download URLs, use Google and query the package's name. For example, in the Google search bar type: 'package_name download' (omit the quotes) or something similar. Sometimes typing: 'package_name home page' will result in you finding the maintainer's web site.
In LFS, stripping of debugging symbols and unneeded symbol table entries was discussed a couple of times. When building BLFS packages, there are generally no special instructions that discuss stripping again. Stripping can be done while installing a package, or afterwards.
There are several ways to strip executables installed by a package. They depend on the build system used (see below the section about build systems), so only some generalities can be listed here:
The following methods using the feature of a building system (autotools, meson, or cmake) will not strip static libraries if any is installed. Fortunately there are not too many static libraries in BLFS, and a static library can always be stripped safely by running strip --strip-unneeded on it manually.
The packages using autotools usually have an install-strip
target in
their generated Makefile
files. So installing stripped executables is just a
matter of using make
install-strip instead of make install.
The packages using the meson build system can accept
-Dstrip=true
when running meson. If you've
forgot to add this option running the meson, you can also
run meson install
--strip instead of ninja install.
cmake
generates install/strip
targets for
both the Unix
Makefiles
and Ninja
generators (the
default is Unix
Makefiles
on linux). So just run
make
install/strip or ninja install/strip
instead of the install counterparts.
Removing (or not generating) debug symbols can also be
achieved by removing the -g<something>
options in C/C++ calls. How to do that is very specific
for each package. And, it does not remove unneeded
symbol table entries. So it will not be explained in
detail here. See also below the paragraphs about
optimization.
The strip
utility changes files in place, which may break anything
using it if it is loaded in memory. Note that if a file is in
use but just removed from the disk (i.e. not overwritten nor
modified), this is not a problem since the kernel can use
“deleted” files. Look at /proc/*/maps
and it is likely that you'll
see some (deleted)
entries. The mv
just removes the destination file from the directory but does
not touch its content, so that it satisfies the condition for
the kernel to use the old (deleted) file. But this approach
can detach hard links into duplicated copies, causing a bloat
which is obviously unwanted as we are stripping to reduce
system size. If two files in a same file system share the
same inode number, they are hard links to each other and we
should reconstruct the link. The script below is just an
example. It should be run as the root
user:
cat > /usr/sbin/strip-all.sh << "EOF"
#!/usr/bin/bash
if [ $EUID -ne 0 ]; then
echo "Need to be root"
exit 1
fi
last_fs_inode=
last_file=
{ find /usr/lib -type f -name '*.so*' ! -name '*dbg'
find /usr/lib -type f -name '*.a'
find /usr/{bin,sbin,libexec} -type f
} | xargs stat -c '%m %i %n' | sort | while read fs inode file; do
if ! readelf -h $file >/dev/null 2>&1; then continue; fi
if file $file | grep --quiet --invert-match 'not stripped'; then continue; fi
if [ "$fs $inode" = "$last_fs_inode" ]; then
ln -f $last_file $file;
continue;
fi
cp --preserve $file ${file}.tmp
strip --strip-unneeded ${file}.tmp
mv ${file}.tmp $file
last_fs_inode="$fs $inode"
last_file=$file
done
EOF
chmod 744 /usr/sbin/strip-all.sh
If you install programs in other directories such as
/opt
or /usr/local
, you may want to strip the files
there too. Just add other directories to scan in the compound
list of find
commands between the braces.
For more information on stripping, see https://www.technovelty.org/linux/stripping-shared-libraries.html.
There are now three different build systems in common use for
converting C or C++ source code into compiled programs or
libraries and their details (particularly, finding out about
available options and their default values) differ. It may be
easiest to understand the issues caused by some choices
(typically slow execution or unexpected use of, or omission
of, optimizations) by starting with the CFLAGS
, CXXFLAGS
,
and LDFLAGS
environment variables.
There are also some programs which use Rust.
Most LFS and BLFS builders are probably aware of the basics
of CFLAGS
and CXXFLAGS
for altering how a program is
compiled. Typically, some form of optimization is used by
upstream developers (-O2
or
-O3
), sometimes with the creation
of debug symbols (-g
), as
defaults.
If there are contradictory flags (e.g. multiple different
-O
values), the last value will be used. Sometimes
this means that flags specified in environment variables will
be picked up before values hardcoded in the Makefile, and
therefore ignored. For example, where a user specifies
-O2
and that is followed by
-O3
the build will use
-O3
.
There are various other things which can be passed in CFLAGS
or CXXFLAGS, such as allowing using the instruction set
extensions available with a specific microarchitecture (e.g.
-march=amdfam10
or -march=native
), tune the generated code for a
specific microarchitecture (e. g. -mtune=tigerlake
or -mtune=native
, if -mtune=
is not used, the microarchitecture
from -march=
setting will be
used), or specifying a specific standard for C or C++
(-std=c++17
for example). But one
thing which has now come to light is that programmers might
include debug assertions in their code, expecting them to be
disabled in releases by using -DNDEBUG
. Specifically, if Mesa-24.0.1 is built
with these assertions enabled, some activities such as
loading levels of games can take extremely long times, even
on high-class video cards.
This combination is often described as “CMMI” (configure, make, make install) and is used here to also cover the few packages which have a configure script that is not generated by autotools.
Sometimes running ./configure --help will produce useful options about switches which might be used. At other times, after looking at the output from configure you may need to look at the details of the script to find out what it was actually searching for.
Many configure scripts will pick up any CFLAGS or CXXFLAGS from the environment, but CMMI packages vary about how these will be mixed with any flags which would otherwise be used (variously: ignored, used to replace the programmer's suggestion, used before the programmer's suggestion, or used after the programmer's suggestion).
In most CMMI packages, running make will list each command
and run it, interspersed with any warnings. But some packages
try to be “silent” and only show which file they
are compiling or linking instead of showing the command line.
If you need to inspect the command, either because of an
error, or just to see what options and flags are being used,
adding V=1
to the make invocation
may help.
CMake works in a very different way, and it has two backends
which can be used on BLFS: make and ninja. The default backend
is make, but ninja can be faster on large packages with
multiple processors. To use ninja, specify -G Ninja
in the cmake command. However, there
are some packages which create fatal errors in their ninja
files but build successfully using the default of Unix
Makefiles.
The hardest part of using CMake is knowing what options you might wish to specify. The only way to get a list of what the package knows about is to run cmake -LAH and look at the output for that default configuration.
Perhaps the most-important thing about CMake is that it has a
variety of CMAKE_BUILD_TYPE values, and these affect the
flags. The default is that this is not set and no flags are
generated. Any CFLAGS
or
CXXFLAGS
in the environment will
be used. If the programmer has coded any debug assertions,
those will be enabled unless -DNDEBUG is used. The following
CMAKE_BUILD_TYPE values will generate the flags shown, and
these will come after
any flags in the environment and therefore take precedence.
Value | Flags |
---|---|
Debug |
-g
|
Release |
-O3 -DNDEBUG
|
RelWithDebInfo |
-O2 -g -DNDEBUG
|
MinSizeRel |
-Os -DNDEBUG
|
CMake tries to produce quiet builds. To see the details of the commands which are being run, use make VERBOSE=1 or ninja -v.
By default, CMake treats file installation differently from
the other build systems: if a file already exists and is not
newer than a file that would overwrite it, then the file is
not installed. This may be a problem if a user wants to
record which file belongs to a package, either using
LD_PRELOAD
, or by listing files
newer than a timestamp. The default can be changed by setting
the variable CMAKE_INSTALL_ALWAYS
to 1 in the environment, for example by
export'ing it.
Meson has some similarities to CMake, but many differences.
To get details of the defines that you may wish to change you
can look at meson_options.txt
which is usually in the top-level directory.
If you have already configured the package by running meson and now wish to change one or more settings, you can either remove the build directory, recreate it, and use the altered options, or within the build directory run meson configure, e.g. to set an option:
meson configure -D<some_option>=true
If you do that, the file meson-private/cmd_line.txt
will show the
last commands which
were used.
Meson provides the following buildtype values, and the flags they enable come after any flags supplied in the environment and therefore take precedence.
plain : no added flags. This is for distributors to
supply their own CFLAGS
,
CXXFLAGS
and LDFLAGS
. There is no obvious reason to
use this in BLFS.
debug : -g
- this is the
default if nothing is specified in either meson.build
or the command line.
However it results large and slow binaries, so we
should override it in BLFS.
debugoptimized : -O2 -g
-
this is the default specified in meson.build
of some packages.
release : -O3
(occasionally
a package will force -O2
here) - this is the buildtype we use for most packages
with Meson build system in BLFS.
The -DNDEBUG
flag is implied by
the release buildtype for some packages (for example
Mesa-24.0.1). It can also be provided
explicitly by passing -Db_ndebug=true
.
To see the details of the commands which are being run in a package using meson, use ninja -v.
Most released rustc programs are provided as crates (source
tarballs) which will query a server to check current versions
of dependencies and then download them as necessary. These
packages are built using cargo
--release. In theory, you can manipulate the
RUSTFLAGS to change the optimize-level (default for
--release
is 3, i. e.
-Copt-level=3
, like -O3
) or to force it to build for the machine
it is being compiled on, using -Ctarget-cpu=native
but in practice this
seems to make no significant difference.
If you are compiling a standalone Rust program (as an
unpackaged .rs
file) by running
rustc directly,
you should specify -O
(the
abbreviation of -Copt-level=2
) or
-Copt-level=3
otherwise it will
do an unoptimized compile and run much slower. If are compiling the
program for debugging it, replace the -O
or -Copt-level=
options with -g
to produce an unoptimized program with
debug info.
Like ninja, by
default cargo
uses all logical cores. This can often be worked around,
either by exporting CARGO_BUILD_JOBS=
or passing
<N>
--jobs
to
cargo. For
compiling rustc itself, specifying <N>
--jobs
for
invocations of x.py (together with the
<N>
CARGO_BUILD_JOBS
environment
variable, which looks like a “belt and braces”
approach but seems to be necessary) mostly works. The
exception is running the tests when building rustc, some of
them will nevertheless use all online CPUs, at least as of
rustc-1.42.0.
Many people will prefer to optimize compiles as they see fit,
by providing CFLAGS
or
CXXFLAGS
. For an introduction to
the options available with gcc and g++ see
https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Optimize-Options.html.
The same content can be also found in info gcc.
Some packages default to -O2 -g
,
others to -O3 -g
, and if
CFLAGS
or CXXFLAGS
are supplied they might be added to
the package's defaults, replace the package's defaults, or
even be ignored. There are details on some desktop packages
which were mostly current in April 2019 at https://www.linuxfromscratch.org/~ken/tuning/
- in particular, README.txt
,
tuning-1-packages-and-notes.txt
, and
tuning-notes-2B.txt
. The
particular thing to remember is that if you want to try some
of the more interesting flags you may need to force verbose
builds to confirm what is being used.
Clearly, if you are optimizing your own program you can spend
time to profile it and perhaps recode some of it if it is too
slow. But for building a whole system that approach is
impractical. In general, -O3
usually produces faster programs than -O2
. Specifying -march=native
is also beneficial, but means
that you cannot move the binaries to an incompatible machine
- this can also apply to newer machines, not just to older
machines. For example programs compiled for amdfam10
run on old Phenoms, Kaveris, and
Ryzens : but programs compiled for a Kaveri will not run on a
Ryzen because certain op-codes are not present. Similarly, if
you build for a Haswell not everything will run on a
SandyBridge.
Be careful that the name of a -march
setting does not always match the
baseline of the microarchitecture with the same name. For
example, the Skylake-based Intel Celeron processors do not
support AVX at all, but -march=skylake
assumes AVX and even AVX2.
When a shared library is built by GCC, a feature named
“semantic
interposition” is enabled by default. When the
shared library refers to a symbol name with external linkage
and default visibility, if the symbol exists in both the
shared library and the main executable, semantic
interposition guarantees the symbol in the main executable is
always used. This feature was invented in an attempt to make
the behavior of linking a shared library and linking a static
library as similar as possible. Today only a small number of
packages still depend on semantic interposition, but the
feature is still on by the default of GCC, causing many
optimizations disabled for shared libraries because they
conflict with semantic interposition. The -fno-semantic-interposition
option can be
passed to gcc
or g++ to
disable semantic interposition and enable more optimizations
for shared libraries. This option is used as the default of
some packages (for example Python-3.12.2), and it's also the
default of Clang.
There are also various other options which some people claim are beneficial. At worst, you get to recompile and test, and then discover that in your usage the options do not provide a benefit.
If building Perl or Python modules, in general the
CFLAGS
and CXXFLAGS
used are those which were used by
those “parent” packages.
For LDFLAGS
, there are three
options can be used for optimization. They are quite safe to
use and the building system of some packages use some of
these options as the default.
With -Wl,-O1
, the linker will
optimize the hash table to speed up the dynamic linking. Note
that -Wl,-O1
is completely
unrelated to the compiler optimization flag -O1
.
With -Wl,--as-needed
, the linker
will disregard unnecessary -l
options from the
command line, i. e. the shared library foo
lib
will only be
linked if a symbol in foo
lib
is really referred
from the executable or shared library being linked. This can
sometimes mitigate the “excessive dependencies to shared
libraries” issues caused by libtool.
foo
With -Wl,-z,pack-relative-relocs
,
the linker generates a more compacted form of the relative
relocation entries for PIEs and shared libraries. It reduces
the size of the linked PIE or shared library, and speeds up
the loading of the PIE or shared library.
The -Wl,
prefix is necessary
because despite the variable is named LDFLAGS
, its content is actually passed to
gcc (or
g++,
clang, etc.)
during the link stage, not directly passed to ld.
Even on desktop systems, there are still a lot of exploitable vulnerabilities. For many of these, the attack comes via javascript in a browser. Often, a series of vulnerabilities are used to gain access to data (or sometimes to pwn, i.e. own, the machine and install rootkits). Most commercial distros will apply various hardening measures.
In the past, there was Hardened LFS where gcc (a much older
version) was forced to use hardening (with options to turn
some of it off on a per-package basis). The current LFS and
BLFS books are carrying forward a part of its spirit by
enabling PIE (-fPIE -pie
) and SSP
(-fstack-protector-strong
) as the
defaults for GCC and clang. What is being covered here is
different - first you have to make sure that the package is
indeed using your added flags and not over-riding them.
For hardening options which are reasonably cheap, there is
some discussion in the 'tuning' link above (occasionally, one
or more of these options might be inappropriate for a
package). These options are -D_FORTIFY_SOURCE=2
(or -D_FORTIFY_SOURCE=3
which is more secure but
with a larger performance overhead) and (for C++)
-D_GLIBCXX_ASSERTIONS
. On modern
machines these should only have a little impact on how fast
things run, and often they will not be noticeable.
The main distros use much more, such as RELRO (Relocation
Read Only) and perhaps -fstack-clash-protection
. You may also
encounter the so-called “userspace retpoline” (-mindirect-branch=thunk
etc.) which is the
equivalent of the spectre mitigations applied to the linux
kernel in late 2018. The kernel mitigations caused a lot of
complaints about lost performance, if you have a production
server you might wish to consider testing that, along with
the other available options, to see if performance is still
sufficient.
Whilst gcc has many hardening options, clang/LLVM's strengths lie elsewhere. Some options which gcc provides are said to be less effective in clang/LLVM.
Should I install XXX in /usr
or /usr/local
?
This is a question without an obvious answer for an LFS based system.
In traditional Unix systems, /usr
usually contains files that come with the system distribution,
and the /usr/local
tree is free
for the local administrator to manage. The only really hard and
fast rule is that Unix distributions should not touch
/usr/local
, except perhaps to
create the basic directories within it.
With Linux distributions like Red Hat, Debian, etc., a possible
rule is that /usr
is managed by
the distribution's package system and /usr/local
is not. This way the package
manager's database knows about every file within /usr
.
LFS users build their own system and so deciding where the
system ends and local files begin is not straightforward. So
the choice should be made in order to make things easier to
administer. There are several reasons for dividing files
between /usr
and /usr/local
.
On a network of several machines all running LFS, or
mixed LFS and other Linux distributions, /usr/local
could be used to hold
packages that are common between all the computers in the
network. It can be NFS mounted or mirrored from a single
server. Here local indicates local to the site.
On a network of several computers all running an
identical LFS system, /usr/local
could hold packages that are
different between the machines. In this case local refers
to the individual computers.
Even on a single computer, /usr/local
can be useful if you have
several distributions installed simultaneously, and want
a place to put packages that will be the same on all of
them.
Or you might regularly rebuild your LFS, but want a place to put files that you don't want to rebuild each time. This way you can wipe the LFS file system and start from a clean partition every time without losing everything.
Some people ask why not use your own directory tree, e.g.,
/usr/site
, rather than
/usr/local
?
There is nothing stopping you, many sites do make their own
trees, however it makes installing new software more difficult.
Automatic installers often look for dependencies in
/usr
and /usr/local
, and if the file it is looking for
is in /usr/site
instead, the
installer will probably fail unless you specifically tell it
where to look.
What is the BLFS position on this?
All of the BLFS instructions install programs in /usr
with optional instructions to install
into /opt
for some specific
packages.
As you follow the various sections in the book, you will observe that the book occasionally includes patches that are required for a successful and secure installation of the packages. The general policy of the book is to include patches that fall in one of the following criteria:
Fixes a compilation problem.
Fixes a security problem.
Fixes a broken functionality.
In short, the book only includes patches that are either required or recommended. There is a Patches subproject which hosts various patches (including the patches referenced in the books) to enable you to configure your LFS the way you like it.
The BLFS Bootscripts package contains the init scripts that are used throughout the book. It is assumed that you will be using the BLFS Bootscripts package in conjunction with a compatible LFS-Bootscripts package. Refer to ../../../../lfs/view/12.1/chapter09/bootscripts.html for more information on the LFS-Bootscripts package.
Package Information
The BLFS Bootscripts package will be used throughout the BLFS
book for startup scripts. Unlike LFS, each init script has a
separate install target in the BLFS Bootscripts package. It is
recommended you keep the package source directory around until
completion of your BLFS system. When a script is requested from
BLFS Bootscripts, simply change to the directory and as the
root
user, execute the given
make install-<init-script>
command. This command installs the init script to its proper
location (along with any auxiliary configuration scripts) and
also creates the appropriate symlinks to start and stop the
service at the appropriate run-level.
You should review each bootscript before installation to ascertain that it satisfies your need. Also verify that the start and stop symlinks it creates match your preferences.
From time to time the bootscripts are updated to accommodate new packages or to make minor corrections. All versions of the bootscripts are located at https://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/.
In LFS and BLFS, many packages use a internally shipped libtool copy to build on a variety of Unix platforms. This includes platforms such as AIX, Solaris, IRIX, HP-UX, and Cygwin as well as Linux. The origins of this tool are quite dated. It was intended to manage libraries on systems with less advanced capabilities than a modern Linux system.
On a Linux system, libtool specific files are generally unneeded. Normally libraries are specified in the build process during the link phase. Since a linux system uses the Executable and Linkable Format (ELF) for executables and dynamic libraries, information needed to complete the task is embedded in the files. Both the linker and the program loader can query the appropriate files and properly link or execute the program.
Static libraries are rarely used in LFS and BLFS. And, nowadays most packages store the information needed for linking against a static library into a .pc file, instead of relying on libtool. A pkg-config --static --libs command will output the sufficient flags for the linker to link against a static library without any libtool magic.
The problem is that libtool usually creates one or more text files for package libraries called libtool archives. These small files have a ".la" extension and contain information that is similar to that embedded in the libraries or pkg-config files. When building a package that uses libtool, the process automatically looks for these files. Sometimes a .la file can contains the name or path of a static library used during build but not installed, then the build process will break because the .la file refers to something nonexistent on the system. Similarly, if a package is updated and no longer uses the .la file, then the build process can break with the old .la files.
The solution is to remove the .la files. However there is a catch. Some packages, such as ImageMagick-7.1.1-28, use a libtool function, lt_dlopen, to load libraries as needed during execution and resolve their dependencies at run time. In this case, the .la files should remain.
The script below, removes all unneeded .la files and saves them in a directory, /var/local/la-files by default, not in the normal library path. It also searches all pkg-config files (.pc) for embedded references to .la files and fixes them to be conventional library references needed when an application or library is built. It can be run as needed to clean up the directories that may be causing problems.
cat > /usr/sbin/remove-la-files.sh << "EOF"
#!/bin/bash
# /usr/sbin/remove-la-files.sh
# Written for Beyond Linux From Scratch
# by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# Make sure we are running with root privs
if test "${EUID}" -ne 0; then
echo "Error: $(basename ${0}) must be run as the root user! Exiting..."
exit 1
fi
# Make sure PKG_CONFIG_PATH is set if discarded by sudo
source /etc/profile
OLD_LA_DIR=/var/local/la-files
mkdir -p $OLD_LA_DIR
# Only search directories in /opt, but not symlinks to directories
OPTDIRS=$(find /opt -mindepth 1 -maxdepth 1 -type d)
# Move any found .la files to a directory out of the way
find /usr/lib $OPTDIRS -name "*.la" ! -path "/usr/lib/ImageMagick*" \
-exec mv -fv {} $OLD_LA_DIR \;
###############
# Fix any .pc files that may have .la references
STD_PC_PATH='/usr/lib/pkgconfig
/usr/share/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig'
# For each directory that can have .pc files
for d in $(echo $PKG_CONFIG_PATH | tr : ' ') $STD_PC_PATH; do
# For each pc file
for pc in $d/*.pc ; do
if [ $pc == "$d/*.pc" ]; then continue; fi
# Check each word in a line with a .la reference
for word in $(grep '\.la' $pc); do
if $(echo $word | grep -q '.la$' ); then
mkdir -p $d/la-backup
cp -fv $pc $d/la-backup
basename=$(basename $word )
libref=$(echo $basename|sed -e 's/^lib/-l/' -e 's/\.la$//')
# Fix the .pc file
sed -i "s:$word:$libref:" $pc
fi
done
done
done
EOF
chmod +x /usr/sbin/remove-la-files.sh
The original libraries were simply an archive of routines
from which the required routines were extracted and linked
into the executable program. These are described as static
libraries, with names of the form libfoo.a
on UNIX-like operating systems. On
some old operating systems they are the only type available.
On almost all Linux platforms there are also “shared” (or
equivalently “dynamic”) libraries (with names of the
form libfoo.so
) – one copy of
the library is loaded into virtual memory, and shared by all
the programs which call any of its functions. This is space
efficient.
In the past, essential programs such as a shell were often
linked statically so that some form of minimal recovery
system would exist even if shared libraries, such as
libc.so
, became damaged (e.g.
moved to lost+found
after
fsck following
an unclean shutdown). Nowadays, most people use an
alternative system install or a USB stick if they have to
recover. Journaling filesystems also reduce the likelihood of
this sort of problem.
Within the book, there are various places where configure
switches such as --disable-static
are employed,
and other places where the possibility of using system
versions of libraries instead of the versions included within
another package is discussed. The main reason for this is to
simplify updates of libraries.
If a package is linked to a dynamic library, updating to a
newer library version is automatic once the newer library is
installed and the program is (re)started (provided the
library major version is unchanged, e.g. going from
libfoo.so.2.0
to libfoo.so.2.1
. Going to libfoo.so.3
will require recompilation –
ldd can be used
to find which programs use the old version). If a program is
linked to a static library, the program always has to be
recompiled. If you know which programs are linked to a
particular static library, this is merely an annoyance. But
usually you will not
know which programs to recompile.
One way to identify when a static library is used, is to deal
with it at the end of the installation of every package.
Write a script to find all the static libraries in
/usr/lib
or wherever you are
installing to, and either move them to another directory so
that they are no longer found by the linker, or rename them
so that libfoo.a
becomes e.g.
libfoo.a.hidden
. The static
library can then be temporarily restored if it is ever
needed, and the package needing it can be identified. This
shouldn't be done blindly since many libraries only exist in
a static version. For example, some libraries from the
glibc and gcc packages should always be present on
the system (libc_nonshared.a, libg.a,
libpthread_nonshared.a, libssp_nonshared.a,
libsupc++.a
as of glibc-2.36 and gcc-12.2).
If you use this approach, you may discover that more packages than you were expecting use a static library. That was the case with nettle-2.4 in its default static-only configuration: It was required by GnuTLS-3.0.19, but also linked into package(s) which used GnuTLS, such as glib-networking-2.32.3.
Many packages put some of their common functions into a static library which is only used by the programs within the package and, crucially, the library is not installed as a standalone library. These internal libraries are not a problem – if the package has to be rebuilt to fix a bug or vulnerability, nothing else is linked to them.
When BLFS mentions system libraries, it means shared versions of libraries. Some packages such as Firefox-115.8.0 and ghostscript-10.02.1 bundle many other libraries in their build tree. The version they ship is often older than the version used in the system, so it may contain bugs – sometimes developers go to the trouble of fixing bugs in their included libraries, other times they do not.
Sometimes, deciding to use system libraries is an easy decision. Other times it may require you to alter the system version (e.g. for libpng-1.6.42 if used for Firefox-115.8.0). Occasionally, a package ships an old library and can no longer link to the current version, but can link to an older version. In this case, BLFS will usually just use the shipped version. Sometimes the included library is no longer developed separately, or its upstream is now the same as the package's upstream and you have no other packages which will use it. In those cases, you'll be lead to use the included library even if you usually prefer to use system libraries.
This page contains information about locale related problems and issues. In the following paragraphs you'll find a generic overview of things that can come up when configuring your system for various locales. Many (but not all) existing locale related problems can be classified and fall under one of the headings below. The severity ratings below use the following criteria:
Critical: The program doesn't perform its main function. The fix would be very intrusive, it's better to search for a replacement.
High: Part of the functionality that the program provides is not usable. If that functionality is required, it's better to search for a replacement.
Low: The program works in all typical use cases, but lacks some functionality normally provided by its equivalents.
If there is a known workaround for a specific package, it will appear on that package's page.
Severity: Critical
Some programs require the user to specify the character
encoding for their input or output data and present only a
limited choice of encodings. This is the case for the
-X
option in Enscript-1.6.6,
the -input-charset
option in
unpatched Cdrtools-3.02a09, and the character
sets offered for display in the menu of Links-2.29. If the required
encoding is not in the list, the program usually becomes
completely unusable. For non-interactive programs, it may be
possible to work around this by converting the document to a
supported input character set before submitting to the
program.
A solution to this type of problem is to implement the necessary support for the missing encoding as a patch to the original program or to find a replacement.
Severity: High for non-text documents, low for text documents
Some programs, nano-7.2 or JOE-4.6 for example, assume that documents are always in the encoding implied by the current locale. While this assumption may be valid for the user-created documents, it is not safe for external ones. When this assumption fails, non-ASCII characters are displayed incorrectly, and the document may become unreadable.
If the external document is entirely text based, it can be converted to the current locale encoding using the iconv program.
For documents that are not text-based, this is not possible. In fact, the assumption made in the program may be completely invalid for documents where the Microsoft Windows operating system has set de facto standards. An example of this problem is ID3v1 tags in MP3 files. For these cases, the only solution is to find a replacement program that doesn't have the issue (e.g., one that will allow you to specify the assumed document encoding).
Among BLFS packages, this problem applies to nano-7.2, JOE-4.6, and all media players except Audacious-4.3.1.
Another problem in this category is when someone cannot read the documents you've sent them because their operating system is set up to handle character encodings differently. This can happen often when the other person is using Microsoft Windows, which only provides one character encoding for a given country. For example, this causes problems with UTF-8 encoded TeX documents created in Linux. On Windows, most applications will assume that these documents have been created using the default Windows 8-bit encoding.
In extreme cases, Windows encoding compatibility issues may be solved only by running Windows programs under Wine.
Severity: Critical
The POSIX standard mandates that the filename encoding is the
encoding implied by the current LC_CTYPE locale category.
This information is well-hidden on the page which specifies
the behavior of Tar and
Cpio programs. Some programs
get it wrong by default (or simply don't have enough
information to get it right). The result is that they create
filenames which are not subsequently shown correctly by
ls, or they
refuse to accept filenames that ls shows properly. For the
GLib-2.78.4 library, the problem can be
corrected by setting the G_FILENAME_ENCODING
environment variable to
the special "@locale" value. Glib2 based programs that don't respect
that environment variable are buggy.
The Zip-3.0 and UnZip-6.0 have this problem because they hard-code the expected filename encoding. UnZip contains a hard-coded conversion table between the CP850 (DOS) and ISO-8859-1 (UNIX) encodings and uses this table when extracting archives created under DOS or Microsoft Windows. However, this assumption only works for those in the US and not for anyone using a UTF-8 locale. Non-ASCII characters will be mangled in the extracted filenames.
The general rule for avoiding this class of problems is to avoid installing broken programs. If this is impossible, the convmv command-line tool can be used to fix filenames created by these broken programs, or intentionally mangle the existing filenames to meet the broken expectations of such programs.
In other cases, a similar problem is caused by importing filenames from a system using a different locale with a tool that is not locale-aware (e.g., OpenSSH-9.6p1). In order to avoid mangling non-ASCII characters when transferring files to a system with a different locale, any of the following methods can be used:
Transfer anyway, fix the damage with convmv.
On the sending side, create a tar archive with the
--format=posix
switch passed to tar (this will be the
default in a future version of tar).
Mail the files as attachments. Mail clients specify the encoding of attached filenames.
Write the files to a removable disk formatted with a FAT or FAT32 filesystem.
Transfer the files using Samba.
Transfer the files via FTP using RFC2640-aware server (this currently means only wu-ftpd, which has bad security history) and client (e.g., lftp).
The last four methods work because the filenames are automatically converted from the sender's locale to UNICODE and stored or sent in this form. They are then transparently converted from UNICODE to the recipient's locale encoding.
Severity: High or critical
Many programs were written in an older era where multibyte locales were not common. Such programs assume that C "char" data type, which is one byte, can be used to store single characters. Further, they assume that any sequence of characters is a valid string and that every character occupies a single character cell. Such assumptions completely break in UTF-8 locales. The visible manifestation is that the program truncates strings prematurely (i.e., at 80 bytes instead of 80 characters). Terminal-based programs don't place the cursor correctly on the screen, don't react to the "Backspace" key by erasing one character, and leave junk characters around when updating the screen, usually turning the screen into a complete mess.
Fixing this kind of problems is a tedious task from a programmer's point of view, like all other cases of retrofitting new concepts into the old flawed design. In this case, one has to redesign all data structures in order to accommodate to the fact that a complete character may span a variable number of "char"s (or switch to wchar_t and convert as needed). Also, for every call to the "strlen" and similar functions, find out whether a number of bytes, a number of characters, or the width of the string was really meant. Sometimes it is faster to write a program with the same functionality from scratch.
Among BLFS packages, this problem applies to xine-ui-0.99.14 and all the shells.
Severity: Low
LFS expects that manual pages are in the language-specific (usually 8-bit) encoding, as specified on the LFS Man DB page. However, some packages install translated manual pages in UTF-8 encoding (e.g., Shadow, already dealt with), or manual pages in languages not in the table. Not all BLFS packages have been audited for conformance with the requirements put in LFS (the large majority have been checked, and fixes placed in the book for packages known to install non-conforming manual pages). If you find a manual page installed by any of BLFS packages that is obviously in the wrong encoding, please remove or convert it as needed, and report this to BLFS team as a bug.
You can easily check your system for any non-conforming manual pages by copying the following short shell script to some accessible location,
#!/bin/sh
# Begin checkman.sh
# Usage: find /usr/share/man -type f | xargs checkman.sh
for a in "$@"
do
# echo "Checking $a..."
# Pure-ASCII manual page (possibly except comments) is OK
grep -v '.\\"' "$a" | iconv -f US-ASCII -t US-ASCII >/dev/null 2>&1 \
&& continue
# Non-UTF-8 manual page is OK
iconv -f UTF-8 -t UTF-8 "$a" >/dev/null 2>&1 || continue
# Found a UTF-8 manual page, bad.
echo "UTF-8 manual page: $a" >&2
done
# End checkman.sh
and then issuing the following command (modify the command
below if the checkman.sh script is not
in your PATH
environment
variable):
find /usr/share/man -type f | xargs checkman.sh
Note that if you have manual pages installed in any location
other than /usr/share/man
(e.g., /usr/local/share/man
),
you must modify the above command to include this additional
location.
The packages that are installed in this book are only the tip of the iceberg. We hope that the experience you gained with the LFS book and the BLFS book will give you the background needed to compile, install and configure packages that are not included in this book.
When you want to install a package to a location other than
/
, or /usr
, you are installing outside the default
environment settings on most machines. The following examples
should assist you in determining how to correct this situation.
The examples cover the complete range of settings that may need
updating, but they are not all needed in every situation.
Expand the PATH
to include
$PREFIX/bin
.
Expand the PATH
for
root
to include
$PREFIX/sbin
.
Add $PREFIX/lib
to
/etc/ld.so.conf
or expand
LD_LIBRARY_PATH
to include it.
Before using the latter option, check out http://xahlee.info/UnixResource_dir/_/ldpath.html.
If you modify /etc/ld.so.conf
, remember to update
/etc/ld.so.cache
by
executing ldconfig as the
root
user.
Add $PREFIX/man
to
/etc/man_db.conf
or expand
MANPATH
.
Add $PREFIX/info
to
INFOPATH
.
Add $PREFIX/lib/pkgconfig
to PKG_CONFIG_PATH
. Some
packages are now installing .pc
files in $PREFIX/share/pkgconfig
, so you may
have to include this directory also.
Add $PREFIX/include
to
CPPFLAGS
when compiling
packages that depend on the package you installed.
Add $PREFIX/lib
to
LDFLAGS
when compiling
packages that depend on a library installed by the
package.
If you are in search of a package that is not in the book, the following are different ways you can search for the desired package.
If you know the name of the package, then search
SourceForge for it at https://sourceforge.net/directory/,
and search GitHub for it at https://github.com/. Also
search Google at https://google.com/. Sometimes
a search for the rpm
at
https://rpmfind.net/ or the
deb
at
https://www.debian.org/distrib/packages#search_packages
can also lead to a link to the package.
If you know the name of the executable, but not the package that the executable belongs to, first try a Google search with the name of the executable. If the results are overwhelming, try searching for the given executable in the Debian repository at https://www.debian.org/distrib/packages#search_contents.
Some general hints on handling new packages:
Many of the newer packages follow the ./configure && make && make install process. Help on the options accepted by configure can be obtained via the command ./configure --help.
Most of the packages contain documentation on compiling and installing the package. Some of the documents are excellent, some not so excellent. Check out the homepage of the package for any additional and updated hints for compiling and configuring the package.
If you are having a problem compiling the package, try searching the LFS archives at https://www.linuxfromscratch.org/search.html for the error or if that fails, try searching Google. Often, a distribution will have already solved the problem (many of them use development versions of packages, so they see the changes sooner than those of us who normally use stable released versions). But be cautious - all builders tend to carry patches which are no longer necessary, and to have fixes which are only required because of their particular choices in how they build a package. You may have to search deeply to find a fix for the package version you are trying to use, or even to find the package (names are sometimes not what you might expect, e.g. ghostscript often has a prefix or a suffix in its name), but the following notes might help, particularly for those who, like the editors, are trying to build the latest versions and encountering problems:
Arch https://www.archlinux.org/packages/
- enter the package name in the 'Keywords' box,
select the package name, select the 'Source Files'
field, and then select the PKGBUILD
entry to see how they
build this package.
Debian http://ftp.debian.org/debian/pool
(use your country's version if there is one) - the
source will be in .tar.gz tarballs (either the
original upstream .orig
source, or else a
dfsg
containing those
parts which comply with Debian's free software
guidelines) accompanied by versioned .diff.gz or
.tar.gz additions. These additions often show how
the package is built, and may contain patches. In
the .diff.gz versions, any patches create files in
debian/patches
.
Fedora package source gets reorganized from time to time. At the moment the package source for rpms is at https://src.fedoraproject.org/projects/rpms/%2A and from there you can try putting a package name in the search box. If the package is found you can look at the files (specfile to control the build, various patches) or the commits. If that fails, you can download an srpm (source rpm) and using rpm2cpio (see the Tip at the bottom of the page). For rpms go to https://dl.fedoraproject.org/pub/fedora/linux/ and then choose which repo you wish to look at - development/rawhide is the latest development, or choose releases for what was shipped in a release, updates for updates to a release, or updates/testing for the latest updates which might work or might have problems.
Gentoo - First use a search engine to find an
ebuild which looks as if it will fix the problem,
or search at https://packages.gentoo.org/
- use the search field. Note where the package
lives in the portage hierarchy, e.g. app-something/
. In general you
can treat the ebuild as a sort of pseudo-code /
shell combination with some functions you can
hazard a guess at, such as dodoc. If the fix
is just a sed, try it.
However, in most cases the fix will use a patch. To
find the patch, use a gentoo-portage mirror: Two
links to mirrors in the U.S.A. which seem to
usually be up to date are https://mirror.rackspace.com/gentoo-portage/
and https://mirror.steadfast.net/gentoo-portage/.
Navigate down the tree to the package, then to the
files/
directory to
look for the patch. Sometimes a portage mirror has
not yet been updated, particularly for a recent new
patch. In a few cases, gentoo batch the patches
into a tarball and the ebuild will have a link in
the form
https://dev.gentoo.org/~${PATCH_DEV}/distfiles/${P}-patches-${PATCH_VER}.tar.xz
: here, look for PATCH_DEV and PATCH_VER in the
build and format the full URL in your browser or
for wget : remember the '~' before the developer's
ID and note that trying to search the earlier
levels of the URL in a browser may drop you at
www.gentoo.org or return 403 (forbidden).
openSUSE provide a rolling release, some package versions are in https://download.opensuse.org/source/tumbleweed/repo/oss/src/ but others are in ../update/openSUSE-current/src - the source only seems to be available in source rpms.
Slackware - the official package browser is
currently broken. The site at https://slackbuilds.org/
has current and previous versions in their
unofficial repository with links to homepages,
downloads, and some individual files, particularly
the .SlackBuild
files.
Ubuntu http://ftp.ubuntu.com/ubuntu/pool/ - see the Debian notes above.
If everything else fails, try the blfs-support mailing-list.
If you have found a package that is only available in
.deb
or .rpm
format, there are two small scripts,
rpm2targz and
deb2targz that
are available at
https://anduin.linuxfromscratch.org/BLFS/extras/deb2targz.tar.bz2
and
https://anduin.linuxfromscratch.org/BLFS/extras/rpm2targz.tar.bz2
to convert the archives into a simple tar.gz
format.
You may also find an rpm2cpio script useful. The Perl version in the linux kernel archives at https://lore.kernel.org/all/20021016121842.GA2292@ncsu.edu/2-rpm2cpio works for most source rpms. The rpm2targz script will use an rpm2cpio script or binary if one is on your path. Note that rpm2cpio will unpack a source rpm in the current directory, giving a tarball, a spec file, and perhaps patches or other files.
The intention of LFS is to provide a basic system which you can build upon. There are several things about tidying up the system which many people wonder about once they have done the base install. We hope to cover these issues in this chapter.
Most people coming from non-Unix like backgrounds to Linux find
the concept of text-only configuration files slightly strange. In
Linux, just about all configuration is done via the manipulation
of text files. The majority of these files can be found in the
/etc
hierarchy. There are often
graphical configuration programs available for different
subsystems but most are simply pretty front ends to the process
of editing a text file. The advantage of text-only configuration
is that you can edit parameters using your favorite text editor,
whether that be vim, emacs, or any other editor.
The first task is making a recovery boot device in Creating a Custom Boot Device because it's the most critical need. Hardware issues relevant to firmware and other devices is addressed next. The system is then configured to ease addition of new users, because this can affect the choices you make in the two subsequent topics—The Bash Shell Startup Files and The vimrc Files.
The remaining topics, Customizing your Logon with /etc/issue and Random number generation are then addressed, in that order. They don't have much interaction with the other topics in this chapter.
This section is really about creating a rescue device. As the name rescue implies, the host system has a problem, often lost partition information or corrupted file systems, that prevents it from booting and/or operating normally. For this reason, you must not depend on resources from the host being "rescued". To presume that any given partition or hard drive will be available is a risky presumption.
In a modern system, there are many devices that can be used as a rescue device: floppy, cdrom, usb drive, or even a network card. Which one you use depends on your hardware and your BIOS. In the past, a rescue device was thought to be a floppy disk. Today, many systems do not even have a floppy drive.
Building a complete rescue device is a challenging task. In many ways, it is equivalent to building an entire LFS system. In addition, it would be a repetition of information already available. For these reasons, the procedures for a rescue device image are not presented here.
The software of today's systems has grown large. Linux 2.6 no longer supports booting directly from a floppy. In spite of this, there are solutions available using older versions of Linux. One of the best is Tom's Root/Boot Disk available at http://www.toms.net/rb/. This will provide a minimal Linux system on a single floppy disk and provides the ability to customize the contents of your disk if necessary.
There are several sources that can be used for a rescue CD-ROM. Just about any commercial distribution's installation CD-ROMs or DVDs will work. These include RedHat, Ubuntu, and SuSE. One very popular option is Knoppix.
Also, the LFS Community has developed its own LiveCD available at https://www.linuxfromscratch.org/livecd/. This LiveCD, is no longer capable of building an entire LFS/BLFS system, but is still a good rescue CD-ROM. If you download the ISO image, use xorriso to copy the image to a CD-ROM.
The instructions for using GRUB2 to make a custom rescue CD-ROM are also available in LFS Chapter 10.
A USB Pen drive, sometimes called a Thumb drive, is recognized by Linux as a SCSI device. Using one of these devices as a rescue device has the advantage that it is usually large enough to hold more than a minimal boot image. You can save critical data to the drive as well as use it to diagnose and recover a damaged system. Booting such a drive requires BIOS support, but building the system consists of formatting the drive, adding GRUB as well as the Linux kernel and supporting files.
An LFS system can be used without a graphical desktop, and unless or until you install a graphical environment you will have to work in the console. Most, if not all, PCs boot with an 8x16 font - whatever the actual screen size. There are a few things you can do to alter the display on the console. Most of them involve changing the font, but the first alters the commandline used by grub.
Modern screens often have a lot more pixels then the screens used in the past. If your screen is 1600 pixels wide, an 8x16 font will give you 200 columns of text - unless your monitor is enormous, the text will be tiny. One of the ways to work around this is to tell grub to use a smaller size, such as 1024x768 or 800x600 or even 640x480. Even if your screen does not have a 4:3 aspect ratio, this should work.
To try this, you can reboot and edit grub's command-line to
insert a 'video=' parameter between the 'root=/dev/sdXn' and
'ro', for example root=/dev/sda2
video=1024x768 ro
based on the example in LFS section
10.4.4 : ../../../../lfs/view/12.1/chapter10/grub.html.
If you decide that you wish to do this, you can then (as the
root
user) edit /boot/grub/grub.cfg
.
In LFS the kbd package is
used. The fonts it provides are PC Screen Fonts, usually
called PSF, and they were installed into /usr/share/consolefonts
. Where these
include a unicode mapping table, the file suffix is often
changed to .psfu
although
packages such as terminus-font (see below) do not add the
'u'. These fonts are usually compressed with gzip to save
space, but that is not essential.
The initial PC text screens had 8 colours, or 16 colours if the bright versions of the original 8 colours were used. A PSF font can include up to 256 characters (technically, glyphs) while allowing 16 colours, or up to 512 characters (in which case, the bright colours will not be available). Clearly, these console fonts cannot be used to display CJK text - that would need thousands of available glyphs.
Some fonts in kbd can cover more than 512 codepoints ('characters'), with varying degrees of fidelity: unicode contains several whitespace codepoints which can all be mapped to a space, varieties of dashes can be mapped to a minus sign, smart quotes can map to the regular ASCII quotes rather than to whatever is used for "codepoint not present or invalid", and those cyrillic or greek letters which look like latin letters can be mapped onto them, so 'A' can also do duty for cyrillic A and greek Alpha, and 'P' can also do duty for cyrillic ER and greek RHO. Unfortunately, where a font has been created from a BDF file (the method in terminus and Debian's console-setup ) such mapping of additional codepoints onto an existing glyph is not always done, although the terminus ter-vXXn fonts do this well.
There are over 120 combinations of font and size in
kbd: often a font is
provided at several character sizes, and sometimes varieties
cover different subsets of unicode. Most are 8 pixels wide,
in heights from 8 to 16 pixels, but there are a few which are
9 pixels wide, some others which are 12x22, and even one
(latarcyrheb-sun32.psfu
) which
has been scaled up to 16x32. Using a bigger font is another
way of making text on a large screen easier to read.
You can test fonts as a normal user. If you have a font which has not been installed, you can load it with :
setfont /path/to/yourfont.ext
For the fonts already installed you only need the name, so
using gr737a-9x16.psfu.gz
as an
example:
setfont gr737a-9x16
To see the glyphs in the font, use:
showconsolefont
If the font looks as if it might be useful, you can then go on to test it more thoroughly.
When you find a font which you wish to use, as the
root
user) edit /etc/sysconfig/console
as described in LFS section 9.6.5 ../../../../lfs/view/12.1/chapter09/usage.html.
.
For fonts not supplied with the kbd package you will need to optionally
compress it / them with gzip and then install it /
them as the root
user.
Although some console fonts are created from BDF files, which is a text format with hex values for the pixels in each row of the character, there are more-modern tools available for editing psf fonts. The psftools package allows you to dump a font to a text representation with a dash for a pixel which is off (black) and a hash for a pixel which is on (white). You can then edit the text file to add more characters, or reshape them, or map extra codepoints onto them, and then create a new psf font with your changes.
The Terminus Font
package provides fixed-width bitmap fonts designed for long
(8 hours and more per day) work with computers. Under
'Character variants' on that page is a list of patches (in
the alt/
directory). If you are
using a graphical browser to look at that page, you can see
what the patches do, e.g. 'll2' makes 'l' more visibly
different from 'i' and '1'.
By default terminus-fonts will try to create several types of font, and it will fail if bdftopcf from Xorg Applications has not been installed. The configure script is only really useful if you go on to install all the fonts (console and X11 bitmap) to the correct directories, as in a distro. To build only the PSF fonts and their dependencies, run:
make psf
This will create more than 240 ter-*.psf fonts. The 'b' suffix indicates bright, 'n' indicates normal. You can then test them to see if any fit your requirements. Unless you are creating a distro, there seems little point in installing them all.
As an example, to install the last of these fonts, you can
gzip it and then as the root
user:
install -v -m644 ter-v32n.psf.gz /usr/share/consolefonts
On some recent PCs it can be necessary, or desirable, to load
firmware to make them work at their best. There is a directory,
/lib/firmware
, where the kernel
or kernel drivers look for firmware images.
Currently, most firmware can be found at a git
repository which can be
viewed in the browser with the URL
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain.
For convenience, the LFS Project has created a mirror, updated
daily, where these firmware files can be accessed via
wget
or a web
browser at https://anduin.linuxfromscratch.org/BLFS/linux-firmware/.
To get the firmware, either point a browser to one of the above
repositories and then download the item(s) which you need. If
you want all these firmware files (for example you are
distributing the system onto multiple hardware systems),
install git-2.44.0 and clone
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git,
or open this URL in a browser and download the latest snapshot
listed in the Tag
table.
For some other firmware, particularly for Intel microcode and certain wifi devices, the needed firmware is not available in the above repository. Some of this will be addressed below, but a search of the Internet for needed firmware is sometimes necessary.
Firmware files are conventionally referred to as blobs because you cannot determine what they will do. Note that firmware is distributed under various different licenses which do not permit disassembly or reverse-engineering.
Firmware for PCs falls into four categories:
Updates to the CPU to work around errata, usually referred to as microcode.
Firmware for video controllers. On x86 machines this is required for ATI devices (Radeon and AMDGPU chips) and may be useful for Intel (Skylake and later) and Nvidia (Kepler and later) GPUs.
ATI Radeon and AMDGPU devices all require firmware to be able to use KMS (kernel modesetting - the preferred option) as well as for Xorg. For old radeon chips (before the R600), the firmware is still in the kernel source.
Intel integrated GPUs from Skylake onwards can use firmware for GuC (the Graphics microcontroller), and also for the HuC (HEVC/H265 microcontroller which offloads to the GPU) and the DMC (Display Microcontroller) to provide additional low-power states. The GuC and HuC have had a chequered history in the kernel and updated firmware may be disabled by default, depending on your kernel version. Further details may be found at 01.org and Arch linux.
Nvidia GPUs from Kepler onwards require signed firmware, otherwise the nouveau driver is unable to provide hardware acceleration. Nvidia has now released firmware up to Ampere (GeForce30 series) to linux-firmware. Note that faster clocks than the default are not enabled by the released firmware.
Firmware updates for wired network ports. Most of them work even without the updates, but they will probably work better with the updated firmware. For some modern laptops, firmware for both wired ethernet (e.g. rtl_nic) and also for bluetooth devices (e.g. qca) is required before the wired network can be used.
Firmware for other devices, such as wireless NICs. These devices are not required for the PC to boot, but need the firmware before these devices can be used.
Although not needed to load a firmware blob, the following tools may be useful for determining, obtaining, or preparing the needed firmware in order to load it into the system: cpio-2.15, git-2.44.0, pciutils-3.10.0, and Wget-1.21.4
In general, microcode can be loaded by the BIOS or UEFI, and it might be updated by upgrading to a newer version of those. On linux, you can also load the microcode from the kernel if you are using an AMD family 10h or later processor (first introduced late 2007), or an Intel processor from 1998 and later (Pentium4, Core, etc), if updated microcode has been released. These updates only last until the machine is powered off, so they need to be applied on every boot.
Intel provide updates of their microcode for Skylake and later processors as new vulnerabilities come to light, and have in the past provided updates for processors from SandyBridge onwards, although those are no-longer supported for new fixes. New versions of AMD firmware are rare and usually only apply to a few models, although motherboard manufacturers get AGESA (AMD Generic Encapsulated Software Architecture) updates to change BIOS values, e.g. to support more memory variants, new vulnerability fixes or newer CPUs.
There were two ways of loading the microcode, described as 'early' and 'late'. Early loading happens before userspace has been started, late loading happens after userspace has started. However, late loading is known to be problematic and not supported anymore (see the kernel commit x86/microcode: Taint and warn on late loading.) Indeed, early loading is needed to work around one particular erratum in early Intel Haswell processors which had TSX enabled. (See Intel Disables TSX Instructions: Erratum Found in Haswell, Haswell-E/EP, Broadwell-Y.) Without this update glibc can do the wrong thing in uncommon situations.
In previous versions of this book, late loading of microcode to see if it gets applied was recommended, followed by using an initrd to force early loading. But now that the contents of the Intel microcode tarball is documented, and AMD microcode can be read by a Python script to determine which machines it covers, there is no real reason to use late loading.
It might be still possible to manually force late loading of microcode. But it may cause kernel malfunction and you should take the risk yourself. You will need to reconfigure your kernel for late loading, but early loading is always supported by Linux kernel version 6.6 or later on a x86 (no matter 32-bit or 64-bit) system. The instructions here will show you how to create an initrd for early loading. It is also possible to build the same microcode bin file into the kernel, which allows early loading but requires the kernel to be recompiled to update the microcode.
To confirm what processor(s) you have (if more than one, they will be identical) look in /proc/cpuinfo. Determine the decimal values of the cpu family, model and stepping by running the following command (it will also report the current microcode version):
head -n7 /proc/cpuinfo
Convert the cpu family, model and stepping to pairs of hexadecimal digits, and remember the value of the “microcode” field. You can now check if there is any microcode available.
If you are creating an initrd to update firmware for different machines, as a distro would do, go down to 'Early loading of microcode' and cat all the Intel blobs to GenuineIntel.bin or cat all the AMD blobs to AuthenticAMD.bin. This creates a larger initrd - for all Intel machines in the 20200609 update the size was 3.0 MB compared to typically 24 KB for one machine.
The first step is to get the most recent version of the
Intel microcode. This must be done by navigating to
https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/
and downloading the latest file there. As of this writing
the most secure version of the microcode is
microcode-20231114. Extract this file in the normal way,
the microcode is in the intel-ucode
directory, containing various
blobs with names in the form XX-YY-ZZ. There are also
various other files, and a releasenote.
In the past, intel did not provide any details of which
blobs had changed versions, but now the releasenote details
this. You can compare the microcode version in /proc/cpuinfo
with the version for your
CPU model in the releasenote to know if there is an update.
The recent firmware for older processors is provided to deal with vulnerabilities which have now been made public, and for some of these such as Microarchitectural Data Sampling (MDS) you might wish to increase the protection by disabling hyperthreading, or alternatively to disable the kernel's default mitigation because of its impact on compile times. Please read the online documentation at https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/index.html.
For an Tigerlake mobile (described as Intel(R) Core(TM)
i5-11300H CPU) the relevant values are cpu family 6, model
140, stepping 1 so in this case the required identification
is 06-8c-01. The releasenote says the latest microcode for
it is versioned 0xb4. If the value of the “microcode” field
in /proc/cpuinfo
is 0xb4 or
greater, it indicates the microcode update is already
applied by the BIOS. Otherwise, proceed to the section called “Early
loading of microcode”.
Begin by downloading a container of firmware for your CPU family from https://anduin.linuxfromscratch.org/BLFS/linux-firmware/amd-ucode/. The family is always specified in hex. Families 10h to 14h (16 to 20) are in microcode_amd.bin. Families 15h, 16h, 17h (Zen, Zen+, Zen2) and 19h (Zen3) have their own containers, but very few machines are likely to get updated microcode. Instead, AMD provide an updated AGESA to the motherboard makers, who may provide an updated BIOS using this. There is a Python3 script at https://github.com/AMDESE/amd_ucode_info/blob/master/amd_ucode_info.py. Download that script and run it against the bin file to check which processors have updates.
For the very old Athlon(tm) II X2 in these examples the values were cpu family 16, model 5, stepping 3 giving an identification of Family=0x10 Model=0x05 Stepping=0x03. One line of the amd_ucode_info.py script output describes the microcode version for it:
Family=0x10 Model=0x05 Stepping=0x03: Patch=0x010000c8 Length=960 bytes
If the value of the “microcode” field in /proc/cpuinfo
is 0x10000c8 or greater, it
indicates the BIOS has already applied the microcode
update. Otherwise, proceed to the
section called “Early loading of microcode”.
If you have established that updated microcode is available for your system, it is time to prepare it for early loading. This requires an additional package, cpio-2.15 and the creation of an initrd which will need to be added to grub.cfg.
It does not matter where you prepare the initrd, and once it is working you can apply the same initrd to later LFS systems or newer kernels on this same machine, at least until any newer microcode is released. Use the following commands:
mkdir -p initrd/kernel/x86/microcode cd initrd
For an AMD machine, use the following command (replace <MYCONTAINER> with the name of the container for your CPU's family):
cp -v ../<MYCONTAINER> kernel/x86/microcode/AuthenticAMD.bin
Or for an Intel machine copy the appropriate blob using this command:
cp -v ../intel-ucode/<XX-YY-ZZ> kernel/x86/microcode/GenuineIntel.bin
Now prepare the initrd:
find . | cpio -o -H newc > /boot/microcode.img
You now need to add a new entry to /boot/grub/grub.cfg and here you should add a new line after the linux line within the stanza. If /boot is a separate mountpoint:
initrd /microcode.img
or this if it is not:
initrd /boot/microcode.img
If you are already booting with an initrd (see the
section called “About initramfs”), you should run
mkinitramfs
again after putting the appropriate blob or container into
/lib/firmware
. More
precisely, put an intel blob in a /lib/firmware/intel-ucode
directory or an
AMD container in a /lib/firmware/amd-ucode
directory before
running mkinitramfs.
Alternatively, you can have both initrd on the same line,
such as initrd
/microcode.img /other-initrd.img
(adapt
that as above if /boot is not a separate mountpoint).
You can now reboot with the added initrd, and then use the following command to check that the early load worked:
dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'
If you updated to address vulnerabilities, you can look at the output of the lscpu command to see what is now reported.
The places and times where early loading happens are very different in AMD and Intel machines. First, an example of an Intel (Tigerlake mobile) with early loading:
[ 0.000000] microcode: microcode updated early: 0x86 -> 0xb4, date = 2023-09-07
[ 0.000000] Linux version 6.6.1 (xry111@stargazer) (gcc (GCC) 13.2.0, GNU ld (GNU Binutils) 2.41) #36 SMP PREEMPT_DYNAMIC Tue Nov 14 01:56:04 CST 2023
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.6.1 root=PARTUUID=<CLASSIFIED>
ro
[ 0.424002] microcode: Microcode Update Driver: v2.2.
A historic AMD example:
[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
#2 SMP Sun Feb 18 02:32:03 GMT 2018
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
[ 0.307619] microcode: microcode updated early to new patch_level=0x010000c8
[ 0.307678] microcode: CPU0: patch_level=0x010000c8
[ 0.307723] microcode: CPU1: patch_level=0x010000c8
[ 0.307795] microcode: Microcode Update Driver: v2.2.
These instructions do NOT apply to old radeons before the
R600 family. For those, the firmware is in the kernel's
/lib/firmware/
directory. Nor
do they apply if you intend to avoid a graphical setup such
as Xorg and are content to use the default 80x25 display
rather than a framebuffer.
Early radeon devices only needed a single 2K blob of firmware. Recent devices need several different blobs, and some of them are much bigger. The total size of the radeon firmware directory is over 500K — on a large modern system you can probably spare the space, but it is still redundant to install all the unused files each time you build a system.
A better approach is to install pciutils-3.10.0 and
then use lspci
to identify which
VGA controller is installed.
With that information, check the RadeonFeature page of the Xorg wiki for Decoder ring for engineering vs marketing names to identify the family (you may need to know this for the Xorg driver in BLFS — Southern Islands and Sea Islands use the radeonsi driver) and the specific model.
Now that you know which controller you are using, consult the Radeon page of the Gentoo wiki which has a table listing the required firmware blobs for the various chipsets. Note that Southern Islands and Sea Islands chips use different firmware for kernel 3.17 and later compared to earlier kernels. Identify and download the required blobs then install them:
mkdir -pv /lib/firmware/radeon cp -v <YOUR_BLOBS> /lib/firmware/radeon
Building the kernel amdgpu driver as a module is recommended because the firmware files need to be accessible at the time it is loaded. If you are building it as a part of the kernel image for any reason, you need to either include the firmware files in the initramfs (read the section called “About initramfs” for details), or include them in the kernel image itself (read the section called “Include Firmware Blobs in the Kernel Image” for details).
All video controllers using the amdgpu kernel driver require firmware, whether you will be using the xorg amdgpu driver, the xserver's modesetting driver, or just kernel modesetting to get a console framebuffer larger than 80x25.
Install pciutils-3.10.0 and use that to check the model name (look for 'VGA compatible controller:'). If you have an APU (Accelerated Processing Unit, i.e. CPU and video on the same chip) that will probably tell you the name. If you have a separate amdgpu video card you will need to search to determine which name it uses (e.g. a card described as Advanced Micro Devices, Inc. [AMD/ATI] Baffin [Radeon RX 550 640SP / RX 560/560X] needs Polaris11 firmware. There is a table of "Family, Chipset name, Product name and Firmware" at the end of the Kernel sections in AMDGPU page of the Gentoo wiki.
Once you have identified the firmware name, install all the relevant files for it. For example, the Baffin card mentioned above has 21 different polaris11* files, APUs such as renoir and picasso have at least 12 files and might gain more in future updates (e.g. the raven APU now has a 13th file, raven_ta.bin).
mkdir -pv /lib/firmware/amdgpu cp -v <YOUR_BLOBS> /lib/firmware/amdgpu
If disk space is not a problem, you could install all the current amdgpu firmware files and not worry about exactly which chipset is installed.
Building the kernel amdgpu driver as a module is recommended because the firmware files need to be accessible at the time it is loaded. If you are building it as a part of the kernel image for any reason, you need to either include the firmware files in the initramfs (read the section called “About initramfs” for details), or include them in the kernel image itself (read the section called “Include Firmware Blobs in the Kernel Image” for details).
Nvidia has released basic signed firmware for recent graphics chips, but significantly after the chips and its own binary drivers were first available. For other chips it has been necessary to extract the firmware from the binary driver.
For more exact information about which chips need extracted firmware, see https://nouveau.freedesktop.org/VideoAcceleration.html.
If the necessary firmware is available in the nvidia/
directory of linux-firmware, copy
it to /lib/firmware/nouveau
.
If the firmware has not been made available in linux-firmware, for the old chips mentioned in the nouveau wiki link above run the following commands:
wget https://anduin.linuxfromscratch.org/BLFS/nvidia-firmware/extract_firmware.py wget https://us.download.nvidia.com/XFree86/Linux-x86/340.32/NVIDIA-Linux-x86-340.32.run sh NVIDIA-Linux-x86-340.32.run --extract-only python3 extract_firmware.py mkdir -p /lib/firmware/nouveau cp -d nv* vuc-* /lib/firmware/nouveau/
The kernel likes to load firmware for some network drivers,
particularly those from Realtek (the
/lib/linux-firmware/rtl_nic/) directory, but they generally
appear to work without it. Therefore, you can boot the
kernel, check dmesg for messages about this missing firmware,
and if necessary download the firmware and put it in the
specified directory in /lib/firmware
so that it will be found on
subsequent boots. Note that with current kernels this works
whether or not the driver is compiled in or built as a
module, there is no need to build this firmware into the
kernel. Here is an example where the R8169 driver has been
compiled in but the firmware was not made available. Once the
firmware had been provided, there was no mention of it on
later boots.
dmesg | grep firmware | grep r8169
[ 7.018028] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168g-2.fw failed with error -2
[ 7.018036] r8169 0000:01:00.0 eth0: unable to load firmware patch rtl_nic/rtl8168g-2.fw (-2)
Different countries have different regulations on the radio
spectrum usage of wireless devices. You can install a
firmware to make the wireless devices obey local spectrum
regulations, so you won't be inquired by local authority or
find your wireless NIC jamming the frequencies of other
devices (for example, remote controllers). The regulatory
database firmware can be downloaded from https://kernel.org/pub/software/network/wireless-regdb/.
To install it, simply extract regulatory.db
and regulatory.db.p7s
from the tarball into
/lib/firmware
. Note that either
the cfg80211
driver needs to be
selected as a module for the regulatory.*
files to be loaded, or those
files need to be included as firmware into the kernel, as
explained above in the section called “Firmware
for Video Cards”.
The access point (AP) would send a country code to your
wireless NIC, and wpa_supplicant-2.10 would
tell the kernel to load the regulation of this country from
regulatory.db
, and enforce it.
Note that several AP don't send this country code, so you may
be locked to a rather restricted usage (specially if you want
to use your interface as an AP).
Some systems (especially budget laptops) utilize a DSP
shipped with the CPU for connection with the audio codec. The
Sound Open Firmware must be loaded onto the DSP to make it
functional. These firmware files can be downloaded from
https://github.com/thesofproject/sof-bin/releases.
Extract the tarball and changing into the extracted
directory, then as the root
user install the firmware:
install -vdm755 /usr/lib/firmware/intel && cp -av -T --no-preserve=ownership sof \ /usr/lib/firmware/intel/sof && cp -av -T --no-preserve=ownership sof-tplg \ /usr/lib/firmware/intel/sof-tplg
alsa-lib-1.2.11 needs Use Case Manager
configuration files for the systems using Sound Open Firmware
as well. The ALSA UCM configuration files can be downloaded
from
https://www.alsa-project.org/files/pub/lib/alsa-ucm-conf-1.2.11.tar.bz2.
Extract the tarball and changing into the extracted
directory, then as the root
user install the configuration files:
install -vdm755 /usr/share/alsa && cp -av -T --no-preserve=ownership ucm2 /usr/share/alsa/ucm2
Once the firmware is loaded (you may need a reboot so the kernel will load them) and the UCM configuration files are installed, following the section called “Configuring ALSA Utilities” to set up your sound card for ALSA properly.
Identifying the correct firmware will typically require you
to install pciutils-3.10.0, and then use
lspci
to
identify the device. You should then search online to check
which module it uses, which firmware, and where to obtain the
firmware — not all of it is in linux-firmware.
If possible, you should begin by using a wired connection when you first boot your LFS system. To use a wireless connection you will need to use a network tools such as iw-6.7, Wireless Tools-29, or wpa_supplicant-2.10.
Firmware may also be needed for other devices such as some SCSI controllers, bluetooth adaptors, or TV recorders. The same principles apply.
Some drivers, notably the drivers for ATI or AMD GPU,
requires the firmware files accessible at the time it is
loaded. The easiest method to handle these drivers is
building them as a kernel module. An alternative method is
creating an initramfs (read the section called “About
initramfs” for details) including the firmware files. If
you don't want to use either methods, you may include the
firmware files in the kernel image itself. Install the needed
firmware files into /lib/firmware
first, then set the following
kernel configuration and rebuild the kernel:
Device Drivers ---> Generic Driver Options ---> Firmware loader ---> <*> Firmware loading facility [FW_LOADER] (xx/aa.bin xx/bb.bin) Build named firmware blobs into the kernel binary ... [EXTRA_FIRMWARE] (/lib/firmware) Firmware blobs root directory ... [EXTRA_FIRMWARE_DIR]
Replace xx/aa.bin
xx/bb.bin
with a whitespace-separated list of
paths to the needed firmware files, relative to /lib/firmware
. A method easier than
manually typing the list (it may be long) is running the
following command:
echo CONFIG_EXTRA_FIRMWARE='"'$({ cd /lib/firmware; echo amdgpu/*
})'"' >> .config
make oldconfig
Replace amdgpu/*
with a shell pattern matching the needed firmware files.
Do not distribute a kernel image containing the firmware to others or you may violate the GPL.
Although most devices needed by packages in BLFS and beyond are
set up properly by udev using
the default rules installed by LFS in /etc/udev/rules.d
, there are cases where the
rules must be modified or augmented.
If there are multiple sound cards in a system, the "default"
sound card becomes random. The method to establish sound card
order depends on whether the drivers are modules or not. If
the sound card drivers are compiled into the kernel, control
is via kernel command line parameters in /boot/grub/grub.cfg
. For example, if a
system has both an FM801 card and a SoundBlaster PCI card,
the following can be appended to the command line:
snd-fm801.index=0 snd-ens1371.index=1
If the sound card drivers are built as modules, the order can
be established in the /etc/modprobe.conf
file with:
options snd-fm801 index=0
options snd-ens1371 index=1
USB devices usually have two kinds of device nodes associated with them.
The first kind is created by device-specific drivers (e.g., usb_storage/sd_mod or usblp) in the kernel. For example, a USB mass storage device would be /dev/sdb, and a USB printer would be /dev/usb/lp0. These device nodes exist only when the device-specific driver is loaded.
The second kind of device nodes (/dev/bus/usb/BBB/DDD, where BBB is the bus number and DDD is the device number) are created even if the device doesn't have a kernel driver. By using these "raw" USB device nodes, an application can exchange arbitrary USB packets with the device, i.e., bypass the possibly-existing kernel driver.
Access to raw USB device nodes is needed when a userspace program is acting as a device driver. However, for the program to open the device successfully, the permissions have to be set correctly. By default, due to security concerns, all raw USB devices are owned by user root and group root, and have 0664 permissions (the read access is needed, e.g., for lsusb to work and for programs to access USB hubs). Packages (such as SANE and libgphoto2) containing userspace USB device drivers also ship udev rules that change the permissions of the controlled raw USB devices. That is, rules installed by SANE change permissions for known scanners, but not printers. If a package maintainer forgot to write a rule for your device, report a bug to both BLFS (if the package is there) and upstream, and you will need to write your own rule.
Before Linux-2.6.15, raw USB device access was performed not with /dev/bus/usb/BBB/DDD device nodes, but with /proc/bus/usb/BBB/DDD pseudofiles. Some applications still use only this deprecated technique and can't use the new device nodes. They cannot work with Linux kernel version 3.5 or newer. If you need to run such an application, contact the developer of it for a fix.
Fine-tuning of device attributes such as group name and
permissions is possible by creating extra udev rules, matching on something like
this. The vendor and product can be found by searching the
/sys/devices
directory entries
or using udevadm
info after the device has been attached. See
the documentation in the current udev directory of /usr/share/doc
for details.
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
GROUP:="scanner", MODE:="0660"
The above line is used for descriptive purposes only. The scanner udev rules are put into place when installing SANE-1.2.1.
In some cases, it makes sense to disable udev completely and create static devices. Servers are one example of this situation. Does a server need the capability of handling dynamic devices? Only the system administrator can answer that question, but in many cases the answer will be no.
If dynamic devices are not desired, then static devices must
be created on the system. In the default configuration, the
/etc/rc.d/rcS.d/S10udev
boot
script mounts a tmpfs
partition over the /dev
directory. This problem can be overcome by mounting the root
partition temporarily:
If the instructions below are not followed carefully, your system could become unbootable.
mount --bind / /mnt cp -a /dev/* /mnt/dev rm /etc/rc.d/rcS.d/{S10udev,S50udev_retry} umount /mnt
At this point, the system will use static devices upon the next reboot. Create any desired additional devices using mknod.
If you want to restore the dynamic devices, recreate the
/etc/rc.d/rcS.d/{S10udev,S50udev_retry}
symbolic links and reboot again. Static devices do not need
to be removed (console and null are always needed) because
they are covered by the tmpfs
partition. Disk usage for devices is negligible (about 20–30
bytes per entry.)
If the initial boot process does not set up the /dev/dvd
device properly, it can be
installed using the following modification to the default
udev rules. As the root
user,
run:
sed '1d;/SYMLINK.*cdrom/ a\ KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"' \ /lib/udev/rules.d/60-cdrom_id.rules > /etc/udev/rules.d/60-cdrom_id.rules
Together, the /usr/sbin/useradd command and
/etc/skel
directory (both are
easy to set up and use) provide a way to assure new users are
added to your LFS system with the same beginning settings for
things such as the PATH
, keyboard
processing and other environmental variables. Using these two
facilities makes it easier to assure this initial state for
each new user added to the system.
The /etc/skel
directory holds
copies of various initialization and other files that may be
copied to the new user's home directory when the /usr/sbin/useradd program
adds the new user.
The useradd
program uses a collection of default values kept in
/etc/default/useradd
. This file
is created in a base LFS installation by the Shadow package. If it has been removed or
renamed, the useradd program uses some
internal defaults. You can see the default values by running
/usr/sbin/useradd
-D.
To change these values, simply modify the /etc/default/useradd
file as the root
user. An alternative to directly
modifying the file is to run useradd as the root
user while supplying the desired
modifications on the command line. Information on how to do
this can be found in the useradd man page.
To get started, create an /etc/skel
directory and make sure it is
writable only by the system administrator, usually root
. Creating the directory as
root
is the best way to go.
The mode of any files from this part of the book that you put
in /etc/skel
should be writable
only by the owner. Also, since there is no telling what kind of
sensitive information a user may eventually place in their copy
of these files, you should make them unreadable by "group" and
"other".
You can also put other files in /etc/skel
and different permissions may be
needed for them.
Decide which initialization files should be provided in every
(or most) new user's home directory. The decisions you make
will affect what you do in the next two sections, The Bash Shell Startup Files
and The vimrc Files. Some
or all of those files will be useful for root
, any already-existing users, and new
users.
The files from those sections that you might want to place in
/etc/skel
include .inputrc
, .bash_profile
, .bashrc
, .bash_logout
, .dircolors
, and .vimrc
. If you are unsure which of these
should be placed there, just continue to the following
sections, read each section and any references provided, and
then make your decision.
You will run a slightly modified set of commands for files
which are placed in /etc/skel
.
Each section will remind you of this. In brief, the book's
commands have been written for files not added to /etc/skel
and instead just sends the results
to the user's home directory. If the file is going to be in
/etc/skel
, change the book's
command(s) to send output there instead and then just copy the
file from /etc/skel
to the
appropriate directories, like /etc
, ~
or the
home directory of any other user already in the system.
When adding a new user with useradd, use the -m
parameter, which tells useradd to create the user's
home directory and copy files from /etc/skel
(can be overridden) to the new
user's home directory. For example (perform as the root
user):
useradd -m <newuser>
If you are sharing a /home
or
/usr/src
with another Linux
distro (for example, the host distro used for building LFS),
you can create a user with the same UID (and, same primary
group GID) to keep the file ownership consistent across the
systems. First, on the other
distro, get the UID of the user and the GID of the
user's primary group:
getent passwd <username>
| cut -d ':' -f 3,4
The command should output the UID and GID, separated by a colon. Now on the BLFS system, create the primary group and the user:
groupadd -g<GID>
<username>
&& useradd -u<UID>
-g<username>
<username>
Throughout BLFS, many packages install programs that run as
daemons or in some way should have a user or group name
assigned. Generally these names are used to map a user ID (uid)
or group ID (gid) for system use. Generally the specific uid or
gid numbers used by these applications are not significant. The
exception of course, is that root
has a uid and gid of 0 (zero) that is
indeed special. The uid values are stored in /etc/passwd
and the gid values are found in
/etc/group
.
Customarily, Unix systems classify users and groups into two
categories: system users and regular users. The system users
and groups are given low numbers and regular users and groups
have numeric values greater than all the system values. The
cutoff for these numbers is found in two parameters in the
/etc/login.defs
configuration
file. The default UID_MIN value is 1000 and the default GID_MIN
value is 1000. If a specific uid or gid value is not specified
when creating a user with useradd or a group with
groupadd the
values assigned will always be above these cutoff values.
Additionally, the Linux Standard Base recommends that system uid and gid values should be below 100.
Below is a table of suggested uid/gid values used in BLFS beyond those defined in a base LFS installation. These can be changed as desired, but provide a suggested set of consistent values.
Table 3.1. UID/GID Suggested Values
Name | uid | gid |
---|---|---|
bin | 1 | |
lp | 9 | |
adm | 16 | |
atd | 17 | 17 |
messagebus | 18 | 18 |
lpadmin | 19 | |
named | 20 | 20 |
gdm | 21 | 21 |
fcron | 22 | 22 |
systemd-journal | 23 | 23 |
apache | 25 | 25 |
smmsp | 26 | 26 |
polkitd | 27 | 27 |
rpc | 28 | 28 |
exim | 31 | 31 |
postfix | 32 | 32 |
postdrop | 33 | |
sendmail | 34 | |
34 | ||
vmailman | 35 | 35 |
news | 36 | 36 |
kdm | 37 | 37 |
fetchmail | 38 | |
mysql | 40 | 40 |
postgres | 41 | 41 |
dovecot | 42 | 42 |
dovenull | 43 | 43 |
ftp | 45 | 45 |
proftpd | 46 | 46 |
vsftpd | 47 | 47 |
rsyncd | 48 | 48 |
sshd | 50 | 50 |
stunnel | 51 | 51 |
dhcpcd | 52 | 52 |
svn | 56 | 56 |
svntest | 57 | |
git | 58 | 58 |
games | 60 | 60 |
kvm | 61 | |
wireshark | 62 | |
lightdm | 63 | 63 |
sddm | 64 | 64 |
lightdm | 65 | 65 |
scanner | 70 | |
colord | 71 | 71 |
systemd-journal-gateway | 73 | 73 |
systemd-journal-remote | 74 | 74 |
systemd-journal-upload | 75 | 75 |
systemd-network | 76 | 76 |
systemd-resolve | 77 | 77 |
systemd-timesync | 78 | 78 |
systemd-coredump | 79 | 79 |
uuidd | 80 | 80 |
systemd-oom | 81 | 81 |
ldap | 83 | 83 |
avahi | 84 | 84 |
avahi-autoipd | 85 | 85 |
netdev | 86 | |
ntp | 87 | 87 |
unbound | 88 | 88 |
plugdev | 90 | |
wheel | 97 | |
anonymous | 98 | |
nobody | 65534 | |
nogroup | 65534 |
The shell program /bin/bash
(hereafter referred to as just "the shell") uses a collection
of startup files to help create an environment. Each file has a
specific use and may affect login and interactive environments
differently. The files in the /etc
directory generally provide global
settings. If an equivalent file exists in your home directory
it may override the global settings.
An interactive login shell is started after a successful login,
using /bin/login
, by reading the
/etc/passwd
file. This shell
invocation normally reads /etc/profile
and its private equivalent
~/.bash_profile
(or ~/.profile
if called as /bin/sh) upon startup.
An interactive non-login shell is normally started at the
command-line using a shell program (e.g., [prompt]$
/bin/bash) or by the
/bin/su command.
An interactive non-login shell is also started with a terminal
program such as xterm or konsole from within a
graphical environment. This type of shell invocation normally
copies the parent environment and then reads the user's
~/.bashrc
file for additional
startup configuration instructions.
A non-interactive shell is usually present when a shell script is running. It is non-interactive because it is processing a script and not waiting for user input between commands. For these shell invocations, only the environment inherited from the parent shell is used.
The file ~/.bash_logout
is not
used for an invocation of the shell. It is read and executed
when a user exits from an interactive login shell.
Many distributions use /etc/bashrc
for system wide initialization of
non-login shells. This file is usually called from the user's
~/.bashrc
file and is not built
directly into bash itself. This convention
is followed in this section.
For more information see info bash -- Nodes: Bash Startup Files and Interactive Shells.
Most of the instructions below are used to create files
located in the /etc
directory
structure which requires you to execute the commands as the
root
user. If you elect to
create the files in user's home directories instead, you
should run the commands as an unprivileged user.
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bash-shell-startup-files
Here is a base /etc/profile
.
This file starts by setting up some helper functions and some
basic parameters. It specifies some bash history parameters
and, for security purposes, disables keeping a permanent
history file for the root
user. It also sets a default user prompt. It then calls
small, single purpose scripts in the /etc/profile.d
directory to provide most of
the initialization.
For more information on the escape sequences you can use for
your prompt (i.e., the PS1
environment variable) see info
bash -- Node:
Printing a Prompt.
cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
# System wide environment variables and startup programs.
# System wide aliases and functions should go in /etc/bashrc. Personal
# environment variables and startup programs should go into
# ~/.bash_profile. Personal aliases and functions should go into
# ~/.bashrc.
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
export -f pathremove pathprepend pathappend
# Set the initial path
export PATH=/usr/bin
# Attempt to provide backward compatibility with LFS earlier than 11
if [ ! -L /bin ]; then
pathappend /bin
fi
if [ $EUID -eq 0 ] ; then
pathappend /usr/sbin
if [ ! -L /sbin ]; then
pathappend /sbin
fi
unset HISTFILE
fi
# Set up some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"
# Set some defaults for graphical systems
export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share/}
export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg/}
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER}
# Set up a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
unset script RED GREEN NORMAL
# End /etc/profile
EOF
Now create the /etc/profile.d
directory, where the individual initialization scripts are
placed:
install --directory --mode=0755 --owner=root --group=root /etc/profile.d
Using the bash completion script below is controversial. Not all users like it. It adds many (usually over 1000) lines to the bash environment and makes it difficult to use the 'set' command to examine simple environment variables. Omitting this script does not interfere with the ability of bash to use the tab key for file name completion.
This script imports bash completion scripts, installed by many other BLFS packages, to allow TAB command line completion.
cat > /etc/profile.d/bash_completion.sh << "EOF"
# Begin /etc/profile.d/bash_completion.sh
# Import bash completion scripts
# If the bash-completion package is installed, use its configuration instead
if [ -f /usr/share/bash-completion/bash_completion ]; then
# Check for interactive bash and that we haven't already been sourced.
if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then
# Check for recent enough version of bash.
if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
[ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
# Source completion code.
. /usr/share/bash-completion/bash_completion
fi
fi
fi
else
# bash-completions are not installed, use only bash completion directory
if shopt -q progcomp; then
for script in /etc/bash_completion.d/* ; do
if [ -r $script ] ; then
. $script
fi
done
fi
fi
# End /etc/profile.d/bash_completion.sh
EOF
Make sure that the directory exists:
install --directory --mode=0755 --owner=root --group=root /etc/bash_completion.d
For a more complete installation, see https://wiki.linuxfromscratch.org/blfs/wiki/bash-shell-startup-files#bash-completions.
This script uses the ~/.dircolors
and /etc/dircolors
files to control the
colors of file names in a directory listing. They control
colorized output of things like ls --color. The
explanation of how to initialize these files is at the end
of this section.
cat > /etc/profile.d/dircolors.sh << "EOF"
# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
eval $(dircolors -b /etc/dircolors)
fi
if [ -f "$HOME/.dircolors" ] ; then
eval $(dircolors -b $HOME/.dircolors)
fi
alias ls='ls --color=auto'
alias grep='grep --color=auto'
EOF
This script adds some useful paths to the PATH
and can be used to customize other PATH
related environment variables (e.g. LD_LIBRARY_PATH, etc)
that may be needed for all users.
cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
pathprepend /usr/local/sbin
fi
if [ -d /usr/local/share ]; then
pathprepend /usr/local/share XDG_DATA_DIRS
fi
# Set some defaults before other applications add to these paths.
pathappend /usr/share/man MANPATH
pathappend /usr/share/info INFOPATH
EOF
This script sets up the default inputrc
configuration file. If the user
does not have individual settings, it uses the global file.
cat > /etc/profile.d/readline.sh << "EOF"
# Set up the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF
Setting the umask value is important for security. Here the default group write permissions are turned off for system users and when the user name and group name are not the same.
cat > /etc/profile.d/umask.sh << "EOF"
# By default, the umask should be set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
umask 002
else
umask 022
fi
EOF
This script sets an environment variable necessary for native language support. A full discussion on determining this variable can be found on the LFS Bash Shell Startup Files page.
cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
for i in $(locale); do
unset ${i%=*}
done
if [[ "$TERM" = linux ]]; then
export LANG=C.UTF-8
else
export LANG=<ll>
_<CC>
.<charmap>
<@modifiers>
fi
EOF
Here is a base /etc/bashrc
.
Comments in the file should explain everything you need.
cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# System wide aliases and functions.
# System wide environment variables and startup programs should go into
# /etc/profile. Personal environment variables and startup programs
# should go into ~/.bash_profile. Personal aliases and functions should
# go into ~/.bashrc
# Provides colored /bin/ls and /bin/grep commands. Used in conjunction
# with code in /etc/profile.
alias ls='ls --color=auto'
alias grep='grep --color=auto'
# Provides prompt for non-login shells, specifically shells started
# in the X environment. [Review the LFS archive thread titled
# PS1 Environment Variable for a great case study behind this script
# addendum.]
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
unset RED GREEN NORMAL
# End /etc/bashrc
EOF
Here is a base ~/.bash_profile
.
If you want each new user to have this file automatically,
just change the output of the command to /etc/skel/.bash_profile
and check the
permissions after the command is run. You can then copy
/etc/skel/.bash_profile
to the
home directories of already existing users, including
root
, and set the owner and
group appropriately.
cat > ~/.bash_profile << "EOF"
# Begin ~/.bash_profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# Personal environment variables and startup programs.
# Personal aliases and functions should go in ~/.bashrc. System wide
# environment variables and startup programs are in /etc/profile.
# System wide aliases and functions are in /etc/bashrc.
if [ -f "$HOME/.bashrc" ] ; then
source $HOME/.bashrc
fi
if [ -d "$HOME/bin" ] ; then
pathprepend $HOME/bin
fi
# Having . in the PATH is dangerous
#if [ $EUID -gt 99 ]; then
# pathappend .
#fi
# End ~/.bash_profile
EOF
Here is a base ~/.profile
. The
comments and instructions for using /etc/skel
for .bash_profile
above also apply here. Only
the target file names are different.
cat > ~/.profile << "EOF"
# Begin ~/.profile
# Personal environment variables and startup programs.
if [ -d "$HOME/bin" ] ; then
pathprepend $HOME/bin
fi
# Set up user specific i18n variables
#export LANG=<ll>
_<CC>
.<charmap>
<@modifiers>
# End ~/.profile
EOF
Here is a base ~/.bashrc
.
cat > ~/.bashrc << "EOF"
# Begin ~/.bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# Personal aliases and functions.
# Personal environment variables and startup programs should go in
# ~/.bash_profile. System wide environment variables and startup
# programs are in /etc/profile. System wide aliases and functions are
# in /etc/bashrc.
if [ -f "/etc/bashrc" ] ; then
source /etc/bashrc
fi
# Set up user specific i18n variables
#export LANG=<ll>
_<CC>
.<charmap>
<@modifiers>
# End ~/.bashrc
EOF
This is an empty ~/.bash_logout
that can be used as a template. You will notice that the base
~/.bash_logout
does not include
a clear
command. This is because the clear is handled in the
/etc/issue
file.
cat > ~/.bash_logout << "EOF"
# Begin ~/.bash_logout
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# Personal items to perform on logout.
# End ~/.bash_logout
EOF
If you want to use the dircolors
capability, then run the
following command. The /etc/skel
setup steps shown above also can
be used here to provide a ~/.dircolors
file when a new user is set
up. As before, just change the output file name on the
following command and assure the permissions, owner, and
group are correct on the files created and/or copied.
dircolors -p > /etc/dircolors
If you wish to customize the colors used for different file
types, you can edit the /etc/dircolors
file. The instructions for
setting the colors are embedded in the file.
Finally, Ian Macdonald has written an excellent collection of tips and tricks to enhance your shell environment. You can read it online at https://www.caliban.org/bash/index.shtml.
The LFS book installs Vim as its text editor. At this point it should be noted that there are a lot of different editing applications out there including Emacs, nano, Joe and many more. Anyone who has been around the Internet (especially usenet) for a short time will certainly have observed at least one flame war, usually involving Vim and Emacs users!
The LFS book creates a basic vimrc
file. In this section you'll find an
attempt to enhance this file. At startup, vim reads the global
configuration file (/etc/vimrc
)
as well as a user-specific file (~/.vimrc
). Either or both can be tailored to
suit the needs of your particular system.
Here is a slightly expanded .vimrc
that you can put in ~/.vimrc
to provide user specific effects. Of
course, if you put it into /etc/skel/.vimrc
instead, it will be made
available to users you add to the system later. You can also
copy the file from /etc/skel/.vimrc
to the home directory of
users already on the system, such as root
. Be sure to set permissions, owner,
and group if you do copy anything directly from /etc/skel
.
" Begin .vimrc
set columns=80
set wrapmargin=8
set ruler
" End .vimrc
Note that the comment tags are " instead of the more usual # or
//. This is correct, the syntax for vimrc
is slightly unusual.
Below you'll find a quick explanation of what each of the options in this example file means here:
set columns=80
: This simply
sets the number of columns used on the screen.
set wrapmargin=8
: This is the
number of characters from the right window border where
wrapping starts.
set ruler
: This makes
vim show
the current row and column at the bottom right of the
screen.
More information on the many vim options can be found by
reading the help inside vim itself. Do this by typing
:help
in vim to get the general help,
or by typing :help
usr_toc.txt
to view the User Manual Table of Contents.
When you first boot up your new LFS system, the logon screen
will be nice and plain (as it should be in a bare-bones
system). Many people however, will want their system to display
some information in the logon message. This can be accomplished
using the file /etc/issue
.
The /etc/issue
file is a plain
text file which will also accept certain escape sequences (see
below) in order to insert information about the system. There
is also the file issue.net
which
can be used when logging on remotely. ssh however, will only use it
if you set the option in the configuration file and will
not interpret the escape
sequences shown below.
One of the most common things which people want to do is clear
the screen at each logon. The easiest way of doing that is to
put a "clear" escape sequence into /etc/issue
. A simple way of doing this is to
issue the command clear >
/etc/issue. This will insert the relevant
escape code into the start of the /etc/issue
file. Note that if you do this,
when you edit the file, you should leave the characters
(normally '^[[H^[[2J') on the first line alone.
Terminal escape sequences are special codes recognized by the terminal. The ^[ represents an ASCII ESC character. The sequence ESC [ H puts the cursor in the upper left hand corner of the screen and ESC 2 J erases the screen. For more information on terminal escape sequences see http://rtfm.etla.org/xterm/ctlseq.html
The following sequences are recognized by agetty (the program which
usually parses /etc/issue
). This
information is from man
agetty where you can find extra information
about the logon process.
The issue
file can contain
certain character sequences to display various information. All
issue
sequences consist of a
backslash (\) immediately followed by one of the letters
explained below (so \d
in
/etc/issue
would insert the
current date).
b Insert the baudrate of the current line.
d Insert the current date.
s Insert the system name, the name of the operating system.
l Insert the name of the current tty line.
m Insert the architecture identifier of the machine, e.g., i686.
n Insert the nodename of the machine, also known as the hostname.
o Insert the domainname of the machine.
r Insert the release number of the kernel, e.g., 2.6.11.12.
t Insert the current time.
u Insert the number of current users logged in.
U Insert the string "1 user" or "<n> users" where <n> is the
number of current users logged in.
v Insert the version of the OS, e.g., the build-date etc.
The Linux kernel supplies a random number generator which is
accessed through /dev/random
and
/dev/urandom
. Programs that
utilize the random and urandom devices, such as OpenSSH, will benefit from these
instructions.
When a Linux system starts up without much operator interaction, the entropy pool (data used to compute a random number) may be in a fairly predictable state. This creates the real possibility that the number generated at startup may always be the same. In order to counteract this effect, you should carry the entropy pool information across your shut-downs and start-ups.
Install the /etc/rc.d/init.d/random
init script included
with the blfs-bootscripts-20240209 package.
make install-random
Security takes many forms in a computing environment. After some initial discussion, this chapter gives examples of three different types of security: access, prevention and detection.
Access for users is usually handled by login or an application designed to handle the login function. In this chapter, we show how to enhance login by setting policies with PAM modules. Access via networks can also be secured by policies set by iptables, commonly referred to as a firewall. The Network Security Services (NSS) and Netscape Portable Runtime (NSPR) libraries can be installed and shared among the many applications requiring them. For applications that don't offer the best security, you can use the Stunnel package to wrap an application daemon inside an SSL tunnel.
Prevention of breaches, like a trojan, are assisted by applications like GnuPG, specifically the ability to confirm signed packages, which recognizes modifications of the tarball after the packager creates it.
Finally, we touch on detection with a package that stores "signatures" of critical files (defined by the administrator) and then regenerates those "signatures" and compares for files that have been changed.
All software has bugs. Sometimes, a bug can be exploited, for example to allow users to gain enhanced privileges (perhaps gaining a root shell, or simply accessing or deleting other user's files), or to allow a remote site to crash an application (denial of service), or for theft of data. These bugs are labelled as vulnerabilities.
The main place where vulnerabilities get logged is cve.mitre.org. Unfortunately, many vulnerability numbers (CVE-yyyy-nnnn) are initially only labelled as "reserved" when distributions start issuing fixes. Also, some vulnerabilities apply to particular combinations of configure options, or only apply to old versions of packages which have long since been updated in BLFS.
BLFS differs from distributions—there is no BLFS security team, and the editors only become aware of vulnerabilities after they are public knowledge. Sometimes, a package with a vulnerability will not be updated in the book for a long time. Issues can be logged in the Trac system, which might speed up resolution.
The normal way for BLFS to fix a vulnerability is, ideally, to update the book to a new fixed release of the package. Sometimes that happens even before the vulnerability is public knowledge, so there is no guarantee that it will be shown as a vulnerability fix in the Changelog. Alternatively, a sed command, or a patch taken from a distribution, may be appropriate.
The bottom line is that you are responsible for your own security, and for assessing the potential impact of any problems.
The editors now issue Security Advisories for packages in BLFS (and LFS), which can be found at BLFS Security Advisories, and grade the severity according to what upstream reports, or to what is shown at nvd.nist.gov if that has details.
To keep track of what is being discovered, you may wish to follow the security announcements of one or more distributions. For example, Debian has Debian security. Fedora's links on security are at the Fedora wiki. Details of Gentoo linux security announcements are discussed at Gentoo security. Finally, the Slackware archives of security announcements are at Slackware security.
The most general English source is perhaps the Full Disclosure Mailing List, but please read the comment on that page. If you use other languages you may prefer other sites such as heise.de (German) or cert.hr (Croatian). These are not linux-specific. There is also a daily update at lwn.net for subscribers (free access to the data after 2 weeks, but their vulnerabilities database at lwn.net/Alerts is unrestricted).
For some packages, subscribing to their 'announce' lists will provide prompt news of newer versions.
Public Key Infrastructure (PKI) is a method to validate the authenticity of an otherwise unknown entity across untrusted networks. PKI works by establishing a chain of trust, rather than trusting each individual host or entity explicitly. In order for a certificate presented by a remote entity to be trusted, that certificate must present a complete chain of certificates that can be validated using the root certificate of a Certificate Authority (CA) that is trusted by the local machine.
Establishing trust with a CA involves validating things like company address, ownership, contact information, etc., and ensuring that the CA has followed best practices, such as undergoing periodic security audits by independent investigators and maintaining an always available certificate revocation list. This is well outside the scope of BLFS (as it is for most Linux distributions). The certificate store provided here is taken from the Mozilla Foundation, who have established very strict inclusion policies described here.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lfs-book/make-ca/releases/download/v1.13/make-ca-1.13.tar.xz
Download size: 32 KB
Download MD5 Sum: 04bd86fe2eb299788439c3466782ce45
Estimated disk space required: 6.9 MB (with all runtime deps)
Estimated build time: 0.1 SBU (with all runtime deps)
This package ships a CA certificate for validating the
identity of https://hg.mozilla.org/. If
the trust chain of this website has been changed after the
release of make-ca-1.13, it may fail to get the revision of
certdata.txt
from server. Use
an updated make-ca release at the release
page if this issue happens.
p11-kit-0.25.3 (runtime, built after libtasn1-4.19.0, required in the following instructions to generate certificate stores from trust anchors, and each time make-ca is run)
nss-3.98 (to generate a shared NSSDB)
The make-ca script will
download and process the certificates included in the
certdata.txt
file for use as
trust anchors for the p11-kit-0.25.3 trust module.
Additionally, it will generate system certificate stores used
by BLFS applications (if the recommended and optional
applications are present on the system). Any local
certificates stored in /etc/ssl/local
will be imported to both the
trust anchors and the generated certificate stores
(overriding Mozilla's trust). Additionally, any modified
trust values will be copied from the trust anchors to
/etc/ssl/local
prior to any
updates, preserving custom trust values that differ from
Mozilla when using the trust utility from
p11-kit to operate on the
trust store.
To install the various certificate stores, first install the
make-ca script into the
correct location. As the root
user:
make install && install -vdm755 /etc/ssl/local
Technically, this package is already installed at this point. But most packages listing make-ca as a dependency actually require the system certificate store set up by this package, rather than the make-ca program itself. So the instructions for using make-ca for setting up the system certificate store are included in this section. You should make sure the required runtime dependency for make-ca is satisfied now, and continue to follow the instructions.
As the root
user, download
the certificate source and prepare for system use with the
following command:
If running the script a second time with the same version
of certdata.txt
, for
instance, to update the stores when make-ca is upgraded, or to add
additional stores as the requisite software is installed,
replace the -g
switch with the -r
switch in the command line. If packaging, run make-ca --help to see all
available command line options.
/usr/sbin/make-ca -g
You should periodically update the store with the above
command, either manually, or via a cron
job. If you've installed
Fcron-3.2.1 and completed the section on
periodic jobs, execute the following commands, as the
root
user, to create a weekly cron job:
cat > /etc/cron.weekly/update-pki.sh << "EOF" &&
#!/bin/bash
/usr/sbin/make-ca -g
EOF
chmod 754 /etc/cron.weekly/update-pki.sh
For most users, no additional configuration is necessary,
however, the default certdata.txt
file provided by make-ca is
obtained from the mozilla-release branch, and is modified to
provide a Mercurial revision. This will be the correct
version for most systems. There are several other variants of
the file available for use that might be preferred for one
reason or another, including the files shipped with Mozilla
products in this book. RedHat and OpenSUSE, for instance, use
the version included in nss-3.98. Additional upstream downloads are
available at the links included in /etc/make-ca/make-ca.conf.dist
. Simply copy
the file to /etc/make-ca.conf
and edit as appropriate.
There are three trust types that are recognized by the
make-ca script, SSL/TLS,
S/Mime, and code signing. For OpenSSL, these are serverAuth
, emailProtection
, and codeSigning
respectively. If
one of the three trust arguments is omitted, the certificate
is neither trusted, nor rejected for that role. Clients that
use OpenSSL or NSS encountering this certificate will
present a warning to the user. Clients using GnuTLS without p11-kit support are not aware of trusted
certificates. To include this CA into the ca-bundle.crt
, email-ca-bundle.crt
, or objsign-ca-bundle.crt
files (the
GnuTLS legacy bundles), it
must have the appropriate trust arguments.
The /etc/ssl/local
directory is
available to add additional CA certificates to the system
trust store. This directory is also used to store
certificates that were added to or modified in the system
trust store by p11-kit-0.25.3 so that trust values are
maintained across upgrades. Files in this directory must be
in the OpenSSL trusted
certificate format. Certificates imported using the
trust utility
from p11-kit-0.25.3 will utilize the x509
Extended Key Usage values to assign default trust values for
the system anchors.
If you need to override trust values, or otherwise need to
create an OpenSSL trusted
certificate manually from a regular PEM encoded file, you
need to add trust arguments to the openssl command, and create
a new certificate. For example, using the CAcert roots, if you want
to trust both for all three roles, the following commands
will create appropriate OpenSSL trusted certificates (run as
the root
user after Wget-1.21.4 is
installed):
wget http://www.cacert.org/certs/root.crt && wget http://www.cacert.org/certs/class3.crt && openssl x509 -in root.crt -text -fingerprint -setalias "CAcert Class 1 root" \ -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \ > /etc/ssl/local/CAcert_Class_1_root.pem && openssl x509 -in class3.crt -text -fingerprint -setalias "CAcert Class 3 root" \ -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \ > /etc/ssl/local/CAcert_Class_3_root.pem && /usr/sbin/make-ca -r
Occasionally, there may be instances where you don't agree
with Mozilla's inclusion of a particular certificate
authority. If you'd like to override the default trust of a
particular CA, simply create a copy of the existing
certificate in /etc/ssl/local
with different trust arguments. For example, if you'd like to
distrust the "Makebelieve_CA_Root" file, run the following
commands:
openssl x509 -in /etc/ssl/certs/Makebelieve_CA_Root.pem \ -text \ -fingerprint \ -setalias "Disabled Makebelieve CA Root" \ -addreject serverAuth \ -addreject emailProtection \ -addreject codeSigning \ > /etc/ssl/local/Disabled_Makebelieve_CA_Root.pem && /usr/sbin/make-ca -r
When Python3 was installed in LFS it included the pip3 module with vendored certificates from the Certifi module. That was necessary, but it means that whenever pip3 is used it can reference those certificates, primarily when creating a virtual environment or when installing a module with all its wheel dependencies in one go.
It is generally considered that the System Administrator should be in charge of which certificates are available. Now that make-ca-1.13 and p11-kit-0.25.3 have been installed and make-ca has been configured, it is possible to make pip3 use the system certificates.
The vendored certificates installed in LFS are a snapshot from when the pulled-in version of Certifi was created. If you regularly update the system certificates, the vendored version will become out of date.
To use the system certificates in Python3 you should set _PIP_STANDALONE_CERT
to point to them, e.g for
the bash shell:
export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
If you have created virtual environments, for example when
testing modules, and those include the Requests and Certifi modules in ~/.local/lib/python3.11/
then those local
modules will be used instead of the system certificates
unless you remove the local modules.
To use the system certificates in Python3 with the BLFS profiles add the following variable to your system or personal profiles:
mkdir -pv /etc/profile.d &&
cat > /etc/profile.d/pythoncerts.sh << "EOF"
# Begin /etc/profile.d/pythoncerts.sh
export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
# End /etc/profile.d/pythoncerts.sh
EOF
The CrackLib package contains a library used to enforce strong passwords by comparing user selected passwords to words in chosen word lists.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/cracklib/cracklib/releases/download/v2.9.11/cracklib-2.9.11.tar.xz
Download MD5 sum: a6dfb1766aab43a54e1cbd78abf0a20a
Download size: 452 KB
Estimated disk space required: 6.8 MB
Estimated build time: 0.1 SBU
Recommended word list for English-speaking countries:
Download (HTTP): https://github.com/cracklib/cracklib/releases/download/v2.9.11/cracklib-words-2.9.11.xz
Download MD5 sum: f27804022dbf2682a7f7c353317f9a53
Download size: 4.0 MB
There are additional word lists available for download, e.g., from https://wiki.skullsecurity.org/index.php/Passwords. CrackLib can utilize as many, or as few word lists you choose to install.
Users tend to base their passwords on regular words of the spoken language, and crackers know that. CrackLib is intended to filter out such bad passwords at the source using a dictionary created from word lists. To accomplish this, the word list(s) for use with CrackLib must be an exhaustive list of words and word-based keystroke combinations likely to be chosen by users of the system as (guessable) passwords.
The default word list recommended above for downloading mostly satisfies this role in English-speaking countries. In other situations, it may be necessary to download (or even create) additional word lists.
Note that word lists suitable for spell-checking are not usable as CrackLib word lists in countries with non-Latin based alphabets, because of “word-based keystroke combinations” that make bad passwords.
Install CrackLib by running the following commands:
autoreconf -fiv && PYTHON=python3 \ ./configure --prefix=/usr \ --disable-static \ --with-default-dict=/usr/lib/cracklib/pw_dict && make
Now, as the root
user:
make install
Issue the following commands as the root
user to install the recommended word
list and create the CrackLib
dictionary. Other word lists (text based, one word per line)
can also be used by simply installing them into /usr/share/dict
and adding them to the
create-cracklib-dict
command.
install -v -m644 -D ../cracklib-words-2.9.11.xz \ /usr/share/dict/cracklib-words.xz && unxz -v /usr/share/dict/cracklib-words.xz && ln -v -sf cracklib-words /usr/share/dict/words && echo $(hostname) >> /usr/share/dict/cracklib-extra-words && install -v -m755 -d /usr/lib/cracklib && create-cracklib-dict /usr/share/dict/cracklib-words \ /usr/share/dict/cracklib-extra-words
If desired, check the proper operation of the library as an unprivileged user by issuing the following command:
make test
If you are installing CrackLib after your LFS system has been completed and you have the Shadow package installed, you must reinstall Shadow-4.14.5 if you wish to provide strong password support on your system. If you are now going to install the Linux-PAM-1.6.0 package, you may disregard this note as Shadow will be reinstalled after the Linux-PAM installation.
autoreconf -fiv: The configure script shipped with the package is too old to get the right version string of Python 3.10 or later. This command regenerates it with a more recent version of autotools, which fixes the issue.
PYTHON=python3
: This forces the
installation of python bindings for Python 3, even if Python
2 is installed.
--with-default-dict=/usr/lib/cracklib/pw_dict
:
This parameter forces the installation of the CrackLib dictionary to the /lib
hierarchy.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
install -v -m644 -D
...: This command creates the /usr/share/dict
directory (if it doesn't
already exist) and installs the compressed word list there.
ln -v -s cracklib-words
/usr/share/dict/words: The word list is
linked to /usr/share/dict/words
as historically, words
is the
primary word list in the /usr/share/dict
directory. Omit this
command if you already have a /usr/share/dict/words
file installed on
your system.
echo $(hostname)
>>...: The value of hostname is echoed to a
file called cracklib-extra-words
. This extra file is
intended to be a site specific list which includes easy to
guess passwords such as company or department names, user
names, product names, computer names, domain names, etc.
create-cracklib-dict ...: This command creates the CrackLib dictionary from the word lists. Modify the command to add any additional word lists you have installed.
is used to determine if a password is strong |
|
is used to format text files (lowercases all words, removes control characters and sorts the lists) |
|
creates a database with words read from standard input |
|
displays on standard output the database specified |
|
is used to create the CrackLib dictionary from the given word list(s) |
|
provides a fast dictionary lookup method for strong password enforcement |
cryptsetup is used to set up transparent encryption of block devices using the kernel crypto API.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/utils/cryptsetup/v2.7/cryptsetup-2.7.0.tar.xz
Download MD5 sum: 7210d45a19703bca547e8ba190278cb0
Download size: 11 MB
Estimated disk space required: 33 MB (add 5 MB for tests)
Estimated build time: 0.2 SBU (add 8.9 SBU for tests)
JSON-C-0.17, LVM2-2.03.23, and popt-1.19
asciidoctor-2.0.20, libpwquality-1.4.5, argon2, libssh, and passwdqc
Encrypted block devices require kernel support. To use it, the appropriate kernel configuration parameters need to be set:
Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) ---> [MD] <*/M> Device mapper support [BLK_DEV_DM] <*/M> Crypt target support [DM_CRYPT] -*- Cryptographic API ---> [CRYPTO] Block ciphers ---> <*/M> AES (Advanced Encryption Standard) [CRYPTO_AES] # For tests: <*/M> Twofish [CRYPTO_TWOFISH] Length-preserving ciphers and modes ---> <*/M> XTS (XOR Encrypt XOR with ciphertext stealing) [CRYPTO_XTS] Hashes, digests, and MACs ---> <*/M> SHA-224 and SHA-256 [CRYPTO_SHA256] Userspace interface ---> <*/M> Symmetric key cipher algorithms [CRYPTO_USER_API_SKCIPHER]
Install cryptsetup by running the following commands:
./configure --prefix=/usr \ --disable-ssh-token \ --disable-asciidoc && make
To test the result, issue as the root
user: make check. Some tests will
fail if appropriate kernel configuration options are not set.
Some additional options that may be needed for tests are:
CONFIG_SCSI_LOWLEVEL,
CONFIG_SCSI_DEBUG,
CONFIG_BLK_DEV_DM_BUILTIN,
CONFIG_CRYPTO_USER,
CONFIG_CRYPTO_CRYPTD,
CONFIG_CRYPTO_LRW,
CONFIG_CRYPTO_XTS,
CONFIG_CRYPTO_ESSIV,
CONFIG_CRYPTO_CRCT10DIF,
CONFIG_CRYPTO_AES_TI,
CONFIG_CRYPTO_AES_NI_INTEL,
CONFIG_CRYPTO_BLOWFISH,
CONFIG_CRYPTO_CAST5,
CONFIG_CRYPTO_SERPENT,
CONFIG_CRYPTO_SERPENT_SSE2_X86_64,
CONFIG_CRYPTO_SERPENT_AVX_X86_64,
CONFIG_CRYPTO_SERPENT_AVX2_X86_64, and
CONFIG_CRYPTO_TWOFISH_X86_64
Now, as the root
user:
make install
--disable-ssh-token
:
This switch is required if the optional libssh dependency is
not installed.
--disable-asciidoc
:
This switch disables regeneration of the man pages. Remove
this switch if you have asciidoctor-2.0.20 installed
and wish to regenerate the man pages. Note that even if this
switch is used, the pre-generated man pages are shipped in
the tarball and they'll still be installed.
Because of the number of possible configurations, setup of encrypted volumes is beyond the scope of the BLFS book. Please see the configuration guide in the cryptsetup FAQ.
is used to setup dm-crypt managed device-mapper mappings |
|
is a tool for offline LUKS device re-encryption |
|
is a tool to manage dm-integrity (block level integrity) volumes |
|
is used to configure dm-verity managed device-mapper mappings. The Device-mapper verity target provides read-only transparent integrity checking of block devices using the kernel crypto API |
The Cyrus SASL package contains a Simple Authentication and Security Layer implementation, a method for adding authentication support to connection-based protocols. To use SASL, a protocol includes a command for identifying and authenticating a user to a server and for optionally negotiating protection of subsequent protocol interactions. If its use is negotiated, a security layer is inserted between the protocol and the connection.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.28/cyrus-sasl-2.1.28.tar.gz
Download MD5 sum: 6f228a692516f5318a64505b46966cfa
Download size: 3.9 MB
Estimated disk space required: 28 MB
Estimated build time: 0.2 SBU
Linux-PAM-1.6.0, MIT Kerberos V5-1.21.2, MariaDB-10.11.7 or MySQL, OpenLDAP-2.6.7, PostgreSQL-16.2, sphinx-7.2.6, SQLite-3.45.1, Berkeley DB (deprecated), krb4, Dmalloc, and Pod::POM::View::Restructured
This package does not support parallel build.
Install Cyrus SASL by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --enable-auth-sasldb \ --with-dblib=lmdb \ --with-dbpath=/var/lib/sasl/sasldb2 \ --with-sphinx-build=no \ --with-saslauthd=/var/run/saslauthd && make -j1
This package does not come with a test suite. If you are planning on using the GSSAPI authentication mechanism, test it after installing the package using the sample server and client programs which were built in the preceding step. Instructions for performing the tests can be found at https://www.linuxfromscratch.org/hints/downloads/files/cyrus-sasl.txt.
Now, as the root
user:
make install && install -v -dm755 /usr/share/doc/cyrus-sasl-2.1.28/html && install -v -m644 saslauthd/LDAP_SASLAUTHD /usr/share/doc/cyrus-sasl-2.1.28 && install -v -m644 doc/legacy/*.html /usr/share/doc/cyrus-sasl-2.1.28/html && install -v -dm700 /var/lib/sasl
--with-dbpath=/var/lib/sasl/sasldb2
:
This switch forces the sasldb database to be
created in /var/lib/sasl
instead of /etc
.
--with-saslauthd=/var/run/saslauthd
:
This switch forces saslauthd to use the FHS
compliant directory /var/run/saslauthd
for variable run-time
data.
--enable-auth-sasldb
:
This switch enables SASLDB authentication backend.
--with-dblib=gdbm
: This switch
forces GDBM to be used
instead of LMDB.
--with-ldap
: This switch enables
the OpenLDAP support.
--enable-ldapdb
: This switch
enables the LDAPDB authentication backend.
--enable-login
: This option
enables unsupported LOGIN authentication.
--enable-ntlm
: This option
enables unsupported NTLM authentication.
install -v -m644 ...: These commands install documentation which is not installed by the make install command.
install -v -m700 -d /var/lib/sasl: This directory must exist when starting saslauthd or using the sasldb plugin. If you're not going to be running the daemon or using the plugins, you may omit the creation of this directory.
/etc/saslauthd.conf
(for
saslauthd
LDAP configuration) and /etc/sasl2/Appname.conf
(where "Appname"
is the application defined name of the application)
See https://www.cyrusimap.org/sasl/sasl/sysadmin.html for information on what to include in the application configuration files.
See file:///usr/share/doc/cyrus-sasl-2.1.28/LDAP_SASLAUTHD for configuring saslauthd with OpenLDAP.
See https://www.cyrusimap.org/sasl/sasl/gssapi.html#gssapi for configuring saslauthd with Kerberos.
If you need to run the saslauthd daemon at
system startup, install the /etc/rc.d/init.d/saslauthd
init script
included in the blfs-bootscripts-20240209 package
using the following command:
make install-saslauthd
You'll need to modify /etc/sysconfig/saslauthd
and modify the
AUTHMECH
parameter with your
desired authentication mechanism.
is used to list loadable SASL plugins and their properties |
|
is the SASL authentication server |
|
is used to list the users in the SASL password
database |
|
is used to set and delete a user's SASL password
and mechanism specific secrets in the SASL password
database |
|
is a test utility for the SASL authentication server |
|
is a general purpose authentication library for server and client applications |
The GnuPG package is GNU's tool for secure communication and data storage. It can be used to encrypt data and to create digital signatures. It includes an advanced key management facility and is compliant with the proposed OpenPGP Internet standard as described in RFC2440 and the S/MIME standard as described by several RFCs. GnuPG 2 is the stable version of GnuPG integrating support for OpenPGP and S/MIME.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.4.4.tar.bz2
Download MD5 sum: 114ac6367668a330ffae1ade6d79133a
Download size: 7.5 MB
Estimated disk space required: 168 MB (with tests)
Estimated build time: 1.2 SBU (with tests; using parallelism=4)
libassuan-2.5.6, libgcrypt-1.10.3, libksba-1.6.5, npth-1.6, and OpenLDAP-2.6.7
GnuTLS-3.8.3 (required to communicate with keyservers using https or hkps protocol) and pinentry-1.2.1 (Run-time requirement for most of the package's functionality)
cURL-8.6.0, Fuse-3.16.2, ImageMagick-7.1.1-28 (for the convert utility, used for generating the documentation), libusb-1.0.27, an MTA, SQLite-3.45.1, texlive-20230313 (or install-tl-unx), fig2dev (for generating documentation), and GNU adns
Install GnuPG by running the following commands:
mkdir build && cd build && ../configure --prefix=/usr \ --localstatedir=/var \ --sysconfdir=/etc \ --docdir=/usr/share/doc/gnupg-2.4.4 && make && makeinfo --html --no-split -I doc -o doc/gnupg_nochunks.html ../doc/gnupg.texi && makeinfo --plaintext -I doc -o doc/gnupg.txt ../doc/gnupg.texi && make -C doc html
If you have texlive-20230313 installed and you wish to create documentation in alternate formats, issue the following command (fig2dev is needed for the ps format), but note that this process fails due to missing files:
make -C doc pdf ps
To test the results, issue: make check.
Now, as the root
user:
make install && install -v -m755 -d /usr/share/doc/gnupg-2.4.4/html && install -v -m644 doc/gnupg_nochunks.html \ /usr/share/doc/gnupg-2.4.4/html/gnupg.html && install -v -m644 ../doc/*.texi doc/gnupg.txt \ /usr/share/doc/gnupg-2.4.4 && install -v -m644 doc/gnupg.html/* \ /usr/share/doc/gnupg-2.4.4/html
If you created alternate formats of the documentation,
install them using the following command as the root
user:
install -v -m644 doc/gnupg.{pdf,dvi,ps} \ /usr/share/doc/gnupg-2.4.4
mkdir build && cd build: the Gnupg2 developers recommend to build the package in a dedicated directory.
--docdir=/usr/share/doc/gnupg-2.4.4
:
This switch changes the default docdir to /usr/share/doc/gnupg-2.4.4
.
--enable-all-tests
: This switch
allows more tests to be run with make check.
--enable-g13
: This switch enables
building the g13 program.
is used to create and populate a user's
|
|
is a wrapper script used to run gpgconf with the
|
|
is a tool that takes care of accessing the OpenPGP keyservers |
|
is a tool to contact a running dirmngr and test whether a certificate has been revoked |
|
is a tool to create, mount or unmount an encrypted file system container (optional) |
|
is a daemon used to manage secret (private) keys independently from any protocol. It is used as a backend for gpg and gpgsm as well as for a couple of other utilities |
|
is a tool to manage smart cards and tokens |
|
is a utility used to communicate with a running gpg-agent |
|
is the OpenPGP part of the GNU Privacy Guard (GnuPG). It is a tool used to provide digital encryption and signing services using the OpenPGP standard |
|
is a utility used to automatically and reasonably
safely query and modify configuration files in the
|
|
is a utility currently only useful for debugging.
Run it with |
|
executes the given scheme program or spawns an interactive shell |
|
is a tool similar to gpg used to provide digital encryption and signing services on X.509 certificates and the CMS protocol. It is mainly used as a backend for S/MIME mail processing |
|
splits an OpenPGP message into packets |
|
is a tool to encrypt or sign files into an archive |
|
is a verify only version of gpg |
|
is a client for the Web Key Service protocol |
|
provides a server for the Web Key Service protocol |
|
is used to list, export and import Keybox data |
|
is used to listen to a Unix Domain socket created by any of the GnuPG tools |
The GnuTLS package contains libraries and userspace tools which provide a secure layer over a reliable transport layer. Currently the GnuTLS library implements the proposed standards by the IETF's TLS working group. Quoting from the TLS 1.3 protocol specification :
“ TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery. ”
GnuTLS provides support for TLS 1.3, TLS 1.2, TLS 1.1, TLS 1.0, and (optionally) SSL 3.0 protocols. It also supports TLS extensions, including server name and max record size. Additionally, the library supports authentication using the SRP protocol, X.509 certificates, and OpenPGP keys, along with support for the TLS Pre-Shared-Keys (PSK) extension, the Inner Application (TLS/IA) extension, and X.509 and OpenPGP certificate handling.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.3.tar.xz
Download MD5 sum: 269966167fa5bf8bae5f7534bcc3c454
Download size: 6.2 MB
Estimated disk space required: 168 MB (add 114 MB for tests)
Estimated build time: 0.7 SBU (add 1.4 SBU for tests; both using parallelism=8)
make-ca-1.13, libunistring-1.1, libtasn1-4.19.0, and p11-kit-0.25.3
Brotli-1.1.0, Doxygen-1.10.0, GTK-Doc-1.33.2, libidn-1.42 or libidn2-2.3.7, libseccomp-2.5.5, Net-tools-2.10 (used during the test suite), texlive-20230313 or install-tl-unx, Unbound-1.19.1 (to build the DANE library), Valgrind-3.22.0 (used during the test suite), autogen, cmocka and datefudge (used during the test suite if the DANE library is built), and Trousers (Trusted Platform Module support)
Note that if you do not install libtasn1-4.19.0, a version shipped in the GnuTLS tarball will be used instead.
Install GnuTLS by running the following commands:
./configure --prefix=/usr \ --docdir=/usr/share/doc/gnutls-3.8.3 \ --with-default-trust-store-pkcs11="pkcs11:" && make
To test the results, issue: make check.
Now, as the root
user:
make install
--with-default-trust-store-pkcs11="pkcs11:"
:
This switch tells gnutls to use the PKCS #11 trust store as
the default trust. Omit this switch if p11-kit-0.25.3 is not
installed.
--with-default-trust-store-file=/etc/pki/tls/certs/ca-bundle.crt
:
This switch tells configure where to find the
legacy CA certificate bundle and to use it instead of PKCS
#11 module by default. Use this if p11-kit-0.25.3 is not
installed.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
--enable-openssl-compatibility
:
Use this switch if you wish to build the OpenSSL
compatibility library.
--without-p11-kit
: use this
switch if you have not installed p11-kit.
--with-included-unistring
: uses
the bundled version of libunistring, instead of the system
one. Use this switch if you have not installed libunistring-1.1.
is used to generate X.509 certificates, certificate requests, and private keys |
|
is a tool used to generate and check DNS resource records for the DANE protocol |
|
is a simple client program to set up a TLS connection to some other computer |
|
is a simple client program to set up a TLS connection to some other computer and produces very verbose progress results |
|
is a simple server program that listens to incoming TLS connections |
|
is a program that can parse and print information about OCSP requests/responses, generate requests and verify responses |
|
is a program that allows handling data from PKCS #11 smart cards and security modules |
|
is a simple program that generates random keys for use with TLS-PSK |
|
is a simple program that emulates the programs in the Stanford SRP (Secure Remote Password) libraries using GnuTLS |
|
contains the core API functions and X.509 certificate API functions |
The GPGME package is a C library that allows cryptography support to be added to a program. It is designed to make access to public key crypto engines like GnuPG or GpgSM easier for applications. GPGME provides a high-level crypto API for encryption, decryption, signing, signature verification and key management.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.23.2.tar.bz2
Download MD5 sum: 01a8c05b409847e87daf0543e91f8c37
Download size: 1.8 MB
Estimated disk space required: 260 MB (with tests)
Estimated build time: 1.0 SBU (with all bindings and tests; with parallelism=4)
Doxygen-1.10.0 and Graphviz-10.0.1 (for API documentation), GnuPG-2.4.4 (required if Qt or SWIG are installed; used during the test suite), Clisp-2.49, (Qt-5.15.12 or qt-alternate-5.15.12), and SWIG-4.2.0 (for language bindings)
Install GPGME by running the following commands:
mkdir build && cd build && ../configure --prefix=/usr --disable-gpg-test && make PYTHONS=
If SWIG-4.2.0 is installed, build the Python 3 binding as a wheel:
if swig -version > /dev/null; then srcdir=$PWD/../lang/python \ top_builddir=$PWD \ pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD/lang/python fi
To test the results, you should have GnuPG-2.4.4 installed and
remove the --disable-gpg-test
above. If SWIG-4.2.0 is installed, it's necessary to
adapt the test suite to use the Python 3 binding just built
as a wheel as well. Issue:
if swig -version > /dev/null; then python3 -m venv testenv && testenv/bin/pip3 install --no-index --find-links=dist --no-cache-dir \ gpg && sed '/PYTHON/s#run-tests.py#& --python-libdir=/dev/null#' \ -i lang/python/tests/Makefile fi && make -k check PYTHONS= PYTHON=$PWD/testenv/bin/python3
Now, as the root
user:
make install PYTHONS=
If SWIG-4.2.0 is installed, still as the
root
user, install the Python
3 binding:
if swig -version > /dev/null; then pip3 install --no-index --find-links=dist --no-cache-dir --no-user gpg fi
--disable-gpg-test
:
if this parameter is not passed to configure, the test
programs are built during make stage, which requires
GnuPG-2.4.4. This parameter is not needed
if GnuPG-2.4.4 is installed.
PYTHONS=
: Disable
building Python binding using the deprecated python3 setup.py build
command. The explicit instruction to build the Python 3
binding with the pip3
wheel command is provided.
outputs GPGME commands in JSON format |
|
is an assuan server exposing GPGME operations, such as printing fingerprints and keyids with keyservers |
|
contains the GPGME API functions |
|
contains the C++ GPGME API functions |
|
contains API functions for handling GPG operations in Qt applications |
iptables is a userspace command line program used to configure the Linux 2.4 and later kernel packet filtering ruleset.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.netfilter.org/projects/iptables/files/iptables-1.8.10.tar.xz
Download MD5 sum: 5eaa3bb424dd3a13c98c0cb026314029
Download size: 628 KB
Estimated disk space required: 16 MB
Estimated build time: 0.1 SBU
libpcap-1.10.4 (required for BPF compiler or nfsynproxy support), bpf-utils (required for Berkeley Packet Filter support), libnfnetlink (required for connlabel support), libnetfilter_conntrack (required for connlabel support), and nftables
A firewall in Linux is accomplished through the netfilter interface. To use iptables to configure netfilter, the following kernel configuration parameters are required:
[*] Networking support ---> [NET] Networking options ---> [*] Network packet filtering framework (Netfilter) ---> [NETFILTER] [*] Advanced netfilter configuration [NETFILTER_ADVANCED] Core Netfilter Configuration ---> <*/M> Netfilter connection tracking support [NF_CONNTRACK] <*/M> Netfilter Xtables support (required for ip_tables) ... [NETFILTER_XTABLES] <*/M> LOG target support [NETFILTER_XT_TARGET_LOG] IP: Netfilter Configuration ---> <*/M> IP tables support (required for filtering/masq/NAT) ... [IP_NF_IPTABLES]
Include any connection tracking protocols that will be used, as well as any protocols that you wish to use for match support under the "Core Netfilter Configuration" section. The above options are enough for running Creating a Personal Firewall With iptables below.
The installation below does not include building some
specialized extension libraries which require the raw
headers in the Linux
source code. If you wish to build the additional extensions
(if you aren't sure, then you probably don't), you can look
at the INSTALL
file to see an
example of how to change the KERNEL_DIR=
parameter to
point at the Linux source
code. Note that if you upgrade the kernel version, you may
also need to recompile iptables and that the BLFS team has
not tested using the raw kernel headers.
Install iptables by running the following commands:
./configure --prefix=/usr \ --disable-nftables \ --enable-libipq && make
This package does not come with a test suite.
Now, as the root
user:
make install
--disable-nftables
:
This switch disables building nftables compatibility.
--enable-libipq
: This
switch enables building of libipq.so
which can be used by some
packages outside of BLFS.
--enable-nfsynproxy
: This switch
enables installation of nfsynproxy SYNPROXY configuration tool.
In the following example configurations, LAN1 is used for the internal LAN interface, and WAN1 is used for the external interface connected to the Internet. You will need to replace these values with appropriate interface names for your system.
A Personal Firewall is designed to let you access all the services offered on the Internet while keeping your computer secure and your data private.
Below is a slightly modified version of Rusty Russell's recommendation from the Linux 2.4 Packet Filtering HOWTO. It is still applicable to the Linux 6.x kernels.
cat > /etc/rc.d/rc.iptables << "EOF"
#!/bin/sh
# Begin rc.iptables
# Insert connection-tracking modules
# (not needed if built into the kernel)
modprobe nf_conntrack
modprobe xt_LOG
# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable Source Routed Packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
# Do not send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Drop Spoofed Packets coming in on an interface, where responses
# would result in the reply going out a different interface.
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Log packets with impossible addresses.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
# be verbose on dynamic ip-addresses (not needed in case of static IP)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# disable Explicit Congestion Notification
# too many routers are still ignorant
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Set a known state
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# These lines are here in case rules are already in place and the
# script is ever rerun on the fly. We want to remove all rules and
# pre-existing user defined chains before we implement new rules.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Allow local-only connections
iptables -A INPUT -i lo -j ACCEPT
# Free output on any interface to any ip for any service
# (equal to -P ACCEPT)
iptables -A OUTPUT -j ACCEPT
# Permit answers on already established connections
# and permit new connections related to established ones
# (e.g. port mode ftp)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Drop any incoming MULTICAST or BROADCAST packet before logging:
# The box outputs several of them when using netbios or mDNS, and those
# appear immediately as incoming, which clutters the log.
iptables -A INPUT -m addrtype --dst-type BROADCAST,MULTICAST -j DROP
# Log everything else.
iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
# End $rc_base/rc.iptables
EOF
chmod 700 /etc/rc.d/rc.iptables
This script is quite simple, it drops all traffic coming into your computer that wasn't initiated from your computer, but as long as you are simply surfing the Internet you are unlikely to exceed its limits.
If you frequently encounter certain delays at accessing FTP servers, take a look at BusyBox with iptables example number 4.
Even if you have daemons or services running on your system, these will be inaccessible everywhere but from your computer itself. If you want to allow access to services on your machine, such as ssh or ping, take a look at Creating a BusyBox With iptables.
A Network Firewall has two interfaces, one connected to an intranet, in this example LAN1, and one connected to the Internet, here WAN1. To provide the maximum security for the firewall itself, make sure that there are no unnecessary servers running on it such as X11. As a general principle, the firewall itself should not access any untrusted service (think of a remote server giving answers that makes a daemon on your system crash, or even worse, that implements a worm via a buffer-overflow).
cat > /etc/rc.d/rc.iptables << "EOF"
#!/bin/sh
# Begin rc.iptables
echo
echo "You're using the example configuration for a setup of a firewall"
echo "from Beyond Linux From Scratch."
echo "This example is far from being complete, it is only meant"
echo "to be a reference."
echo "Firewall security is a complex issue, that exceeds the scope"
echo "of the configuration rules below."
echo "You can find additional information"
echo "about firewalls in Chapter 4 of the BLFS book."
echo "https://www.linuxfromscratch.org/blfs"
echo
# Insert iptables modules (not needed if built into the kernel).
modprobe nf_conntrack
modprobe nf_conntrack_ftp
modprobe xt_conntrack
modprobe xt_LOG
modprobe xt_state
# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable Source Routed Packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Don't send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Drop Spoofed Packets coming in on an interface where responses
# would result in the reply going out a different interface.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Log packets with impossible addresses.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Be verbose on dynamic ip-addresses (not needed in case of static IP)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# Disable Explicit Congestion Notification
# Too many routers are still ignorant
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Set a known state
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# These lines are here in case rules are already in place and the
# script is ever rerun on the fly. We want to remove all rules and
# pre-existing user defined chains before we implement new rules.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Allow local connections
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow forwarding if the initiated on the intranet
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD ! -i WAN1 -m conntrack --ctstate NEW -j ACCEPT
# Do masquerading
# (not needed if intranet is not using private ip-addresses)
iptables -t nat -A POSTROUTING -o WAN1 -j MASQUERADE
# Log everything for debugging
# (last of all rules, but before policy rules)
iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
iptables -A FORWARD -j LOG --log-prefix "FIREWALL:FORWARD "
iptables -A OUTPUT -j LOG --log-prefix "FIREWALL:OUTPUT "
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
EOF
chmod 700 /etc/rc.d/rc.iptables
With this script your intranet should be reasonably secure against external attacks. No one should be able to setup a new connection to any internal service and, if it's masqueraded, makes your intranet invisible to the Internet. Furthermore, your firewall should be relatively safe because there are no services running that a cracker could attack.
This scenario isn't too different from the Creating a Masquerading Router With iptables, but additionally offers some services to your intranet. Examples of this can be when you want to administer your firewall from another host on your intranet or use it as a proxy or a name server.
Outlining specifically how to protect a server that offers services on the Internet goes far beyond the scope of this document. See the references in the section called “Extra Information” for more information.
Be cautious. Every service you have enabled makes your setup more complex and your firewall less secure. You are exposed to the risks of misconfigured services or running a service with an exploitable bug. A firewall should generally not run any extra services. See the introduction to the Creating a Masquerading Router With iptables for some more details.
If you want to add services such as internal Samba or name servers that do not need to access the Internet themselves, the additional statements are quite simple and should still be acceptable from a security standpoint. Just add the following lines into the script before the logging rules.
iptables -A INPUT -i ! WAN1 -j ACCEPT
iptables -A OUTPUT -o ! WAN1 -j ACCEPT
If daemons, such as squid, have to access the Internet themselves, you could open OUTPUT generally and restrict INPUT.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
However, it is generally not advisable to leave OUTPUT unrestricted. You lose any control over trojans who would like to "call home", and a bit of redundancy in case you've (mis-)configured a service so that it broadcasts its existence to the world.
To accomplish this, you should restrict INPUT and OUTPUT on all ports except those that it's absolutely necessary to have open. Which ports you have to open depends on your needs: mostly you will find them by looking for failed accesses in your log files.
Have a Look at the Following Examples:
Squid is caching the web:
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED \
-j ACCEPT
Your caching name server (e.g., named) does its lookups via UDP:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
You want to be able to ping your computer to ensure it's still alive:
iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
If you are frequently accessing FTP servers or enjoy chatting, you might notice delays because some implementations of these daemons query an identd daemon on your system to obtain usernames. Although there's really little harm in this, having an identd running is not recommended because many security experts feel the service gives out too much additional information.
To avoid these delays you could reject the requests with a 'tcp-reset' response:
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
To log and drop invalid packets (packets that came in after netfilter's timeout or some types of network scans) insert these rules at the top of the chain:
iptables -I INPUT 0 -p tcp -m conntrack --ctstate INVALID \
-j LOG --log-prefix "FIREWALL:INVALID "
iptables -I INPUT 1 -p tcp -m conntrack --ctstate INVALID -j DROP
Anything coming from the outside should not have a private address, this is a common attack called IP-spoofing:
iptables -A INPUT -i WAN1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i WAN1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i WAN1 -s 192.168.0.0/16 -j DROP
There are other addresses that you may also want to drop: 0.0.0.0/8, 127.0.0.0/8, 224.0.0.0/3 (multicast and experimental), 169.254.0.0/16 (Link Local Networks), and 192.0.2.0/24 (IANA defined test network).
If your firewall is a DHCP client, you need to allow those packets:
iptables -A INPUT -i WAN1 -p udp -s 0.0.0.0 --sport 67 \
-d 255.255.255.255 --dport 68 -j ACCEPT
To simplify debugging and be fair to anyone who'd like to access a service you have disabled, purposely or by mistake, you could REJECT those packets that are dropped.
Obviously this must be done directly after logging as the very last lines before the packets are dropped by policy:
iptables -A INPUT -j REJECT
These are only examples to show you some of the
capabilities of the firewall code in Linux. Have a look at
the man page of iptables. There you will find much more
information. The port numbers needed for this can be found
in /etc/services
, in case you
didn't find them by trial and error in your log file.
To set up the iptables firewall at boot, install the
/etc/rc.d/init.d/iptables
init script included in the blfs-bootscripts-20240209 package.
make install-iptables
is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel |
|
is a safer way to update iptables remotely |
|
is used to interact with iptables using the legacy command set |
|
is used to restore a set of legacy iptables rules |
|
is used to save a set of legacy iptables rules |
|
is used to restore IP Tables from data specified on STDIN. Use I/O redirection provided by your shell to read from a file |
|
is used to dump the contents of an IP Table in easily parseable format to STDOUT. Use I/O-redirection provided by your shell to write to a file |
|
is used to convert the output of iptables-save to
an XML format. Using the |
|
are a set of commands for IPV6 that parallel the iptables commands above |
|
(optional) configuration tool. SYNPROXY target makes handling of large SYN floods possible without the large performance penalties imposed by the connection tracking in such cases |
|
is a binary that behaves according to the name it is called by |
The purpose of a firewall is to protect a computer or a network against malicious access. In a perfect world every daemon or service, on every machine, is perfectly configured and immune to security flaws, and all users are trusted implicitly to use the equipment as intended. However, this is rarely, if ever, the case. Daemons may be misconfigured, or updates may not have been applied for known exploits against essential services. Additionally, you may wish to choose which services are accessible by certain machines or users, or you may wish to limit which machines or applications are allowed external access. Alternatively, you simply may not trust some of your applications or users. For these reasons, a carefully designed firewall should be an essential part of system security.
While a firewall can greatly limit the scope of the above issues, do not assume that having a firewall makes careful configuration redundant, or that any negligent misconfiguration is harmless. A firewall does not prevent the exploitation of any service you offer outside of it. Despite having a firewall, you need to keep applications and daemons properly configured and up to date.
The word firewall can have several different meanings.
This is a hardware device or software program, intended to secure a home or desktop computer connected to the Internet. This type of firewall is highly relevant for users who do not know how their computers might be accessed via the Internet or how to disable that access, especially if they are always online and connected via broadband links.
An example configuration for a personal firewall is provided at Creating a Personal Firewall With iptables.
This is a system placed between the Internet and an intranet. To minimize the risk of compromising the firewall itself, it should generally have only one role—that of protecting the intranet. Although not completely risk-free, the tasks of doing the routing and IP masquerading (rewriting IP headers of the packets it routes from clients with private IP addresses onto the Internet so that they seem to come from the firewall itself) are commonly considered relatively secure.
An example configuration for a masquerading firewall is provided at Creating a Masquerading Router With iptables.
This is often an old computer you may have retired and nearly forgotten, performing masquerading or routing functions, but offering non-firewall services such as a web-cache or mail. This may be used for home networks, but is not to be considered as secure as a firewall only machine because the combination of server and router/firewall on one machine raises the complexity of the setup.
An example configuration for a BusyBox is provided at Creating a BusyBox With iptables.
This type of firewall performs masquerading or routing, but grants public access to some branch of your network that is physically separated from your regular intranet and is essentially a separate network with direct Internet access. The servers on this network are those which must be easily accessible from both the Internet and intranet. The firewall protects both networks. This type of firewall has a minimum of three network interfaces.
The example configurations provided for iptables-1.8.10 are not intended to be a complete guide to securing systems. Firewalling is a complex issue that requires careful configuration. The configurations provided by BLFS are intended only to give examples of how a firewall works. They are not intended to fit any particular configuration and may not provide complete protection from an attack.
BLFS provides an utility to manage the kernel Netfilter interface, iptables-1.8.10. It has been around since early 2.4 kernels, and has been the standard since. This is likely the set of tools that will be most familiar to existing admins. Other tools have been developed more recently, see the list of further readings below for more details. Here you will find a list of URLs that contain comprehensive information about building firewalls and further securing your system.
www.netfilter.org - Homepage of the netfilter/iptables/nftables projects
Netfilter related FAQ
Netfilter related HOWTO's
nftables HOWTO
tldp.org/LDP/nag2/x-087-2-firewall.html
tldp.org/HOWTO/Security-HOWTO.html
tldp.org/HOWTO/Firewall-HOWTO.html
linuxsecurity.com/howtos
www.e-infomax.com/ipmasq
www.circlemud.org/jelson/writings/security/index.htm
insecure.org/reading.html
The libcap package was installed in LFS, but if Linux-PAM support is desired, the PAM module must be built (after installation of Linux-PAM).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.69.tar.xz
Download MD5 sum: 4667bacb837f9ac4adb4a1a0266f4b65
Download size: 188 KB
Estimated disk space required: 2.2 MB
Estimated build time: less than 0.1 SBU
If you are upgrading libcap from a previous version, use the instructions in LFS libcap page to upgrade libcap. If Linux-PAM-1.6.0 has been built, the PAM module will automatically be built too.
Install libcap by running the following commands:
make -C pam_cap
This package does not come with a test suite.
Now, as the root
user:
install -v -m755 pam_cap/pam_cap.so /usr/lib/security && install -v -m644 pam_cap/capability.conf /etc/security
In order to allow Linux-PAM
to grant privileges based on POSIX capabilities, you need to
add the libcap module to the beginning of the /etc/pam.d/system-auth
file. Make the
required edits with the following commands:
mv -v /etc/pam.d/system-auth{,.bak} &&
cat > /etc/pam.d/system-auth << "EOF" &&
# Begin /etc/pam.d/system-auth
auth optional pam_cap.so
EOF
tail -n +3 /etc/pam.d/system-auth.bak >> /etc/pam.d/system-auth
Additionally, you'll need to modify the /etc/security/capability.conf
file to grant
necessary privileges to users, and utilize the setcap utility to set
capabilities on specific utilities as needed. See
man 8 setcap
and man 3
cap_from_text for additional information.
The Linux PAM package contains Pluggable Authentication Modules used by the local system administrator to control how application programs authenticate users.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.6.0/Linux-PAM-1.6.0.tar.xz
Download MD5 sum: 41a10af5fc35a7be472ae9864338e64a
Download size: 1.0 MB
Estimated disk space required: 39 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
Optional Documentation
Download (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.6.0/Linux-PAM-1.6.0-docs.tar.xz
Download MD5 sum: db41b71435df078658b3db1f57bb2a49
Download size: 456 KB
libnsl-2.0.1, libtirpc-1.3.4, rpcsvc-proto-1.4.4, Berkeley DB (deprecated), libaudit, libeconf, and Prelude
Shadow-4.14.5 must be reinstalled and reconfigured after installing and configuring Linux PAM.
With Linux-PAM-1.4.0 and higher, the pam_cracklib module is not installed by default. Use libpwquality-1.4.5 to enforce strong passwords.
First, prevent the installation of an unneeded systemd file:
sed -e /service_DATA/d \ -i modules/pam_namespace/Makefile.am && autoreconf
If you downloaded the documentation, unpack the tarball by issuing the following command.
tar -xf ../Linux-PAM-1.6.0-docs.tar.xz --strip-components=1
Compile and link Linux PAM by running the following commands:
./configure --prefix=/usr \ --sbindir=/usr/sbin \ --sysconfdir=/etc \ --libdir=/usr/lib \ --enable-securedir=/usr/lib/security \ --docdir=/usr/share/doc/Linux-PAM-1.6.0 && make
To test the results, a suitable /etc/pam.d/other
configuration file must
exist.
If you have a system with Linux PAM installed and working,
be careful when modifying the files in /etc/pam.d
, since your system may become
totally unusable. If you want to run the tests, you do not
need to create another /etc/pam.d/other
file. The existing file
can be used for the tests.
You should also be aware that make install overwrites
the configuration files in /etc/security
as well as /etc/environment
. If you have modified
those files, be sure to back them up.
For a first-time installation, create a configuration file by
issuing the following commands as the root
user:
install -v -m755 -d /etc/pam.d &&
cat > /etc/pam.d/other << "EOF"
auth required pam_deny.so
account required pam_deny.so
password required pam_deny.so
session required pam_deny.so
EOF
Now run the tests by issuing make check. Be sure the tests produced no errors before continuing the installation. Note that the tests are very long. Redirect the output to a log file, so you can inspect it thoroughly.
For a first-time installation, remove the configuration file
created earlier by issuing the following command as the
root
user:
rm -fv /etc/pam.d/other
Now, as the root
user:
make install && chmod -v 4755 /usr/sbin/unix_chkpwd
--enable-securedir=/usr/lib/security
:
This switch sets the installation location for the
PAM modules.
chmod -v 4755
/usr/sbin/unix_chkpwd: The setuid bit for the
unix_chkpwd
helper program must be turned on, so that non-root
processes can access the shadow
file.
Configuration information is placed in /etc/pam.d/
. Here is a sample file:
# Begin /etc/pam.d/other
auth required pam_unix.so nullok
account required pam_unix.so
session required pam_unix.so
password required pam_unix.so nullok
# End /etc/pam.d/other
Now create some generic configuration files. As the
root
user:
install -vdm755 /etc/pam.d && cat > /etc/pam.d/system-account << "EOF" &&# Begin /etc/pam.d/system-account account required pam_unix.so # End /etc/pam.d/system-account
EOF cat > /etc/pam.d/system-auth << "EOF" &&# Begin /etc/pam.d/system-auth auth required pam_unix.so # End /etc/pam.d/system-auth
EOF cat > /etc/pam.d/system-session << "EOF" &&# Begin /etc/pam.d/system-session session required pam_unix.so # End /etc/pam.d/system-session
EOF cat > /etc/pam.d/system-password << "EOF"# Begin /etc/pam.d/system-password # use yescrypt hash for encryption, use shadow, and try to use any # previously defined authentication token (chosen password) set by any # prior module. password required pam_unix.so yescrypt shadow try_first_pass # End /etc/pam.d/system-password
EOF
If you wish to enable strong password support, install libpwquality-1.4.5, and follow the instructions on that page to configure the pam_pwquality PAM module with strong password support.
Next, add a restrictive /etc/pam.d/other
configuration file. With
this file, programs that are PAM aware will not run unless
a configuration file specifically for that application
exists.
cat > /etc/pam.d/other << "EOF"
# Begin /etc/pam.d/other
auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so
# End /etc/pam.d/other
EOF
The PAM man page (man pam) provides a good starting point to learn about the several fields, and allowable entries. The Linux-PAM System Administrators' Guide is recommended for additional information.
You should now reinstall the Shadow-4.14.5 package .
displays and modifies the authentication failure record files |
|
is a helper binary that creates home directories |
|
is a helper program used to configure a private namespace for a user session |
|
is a helper program that transfers password hashes from passwd or shadow to opasswd |
|
is used to check if the default timestamp is valid |
|
is a helper binary that verifies the password of the current user |
|
is a helper binary that updates the password of a given user |
|
provides the interfaces between applications and the PAM modules |
liboauth is a collection of POSIX-C functions implementing the OAuth Core RFC 5849 standard. Liboauth provides functions to escape and encode parameters according to OAuth specification and offers high-level functionality to sign requests or verify OAuth signatures as well as perform HTTP requests.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/liboauth/liboauth-1.0.3.tar.gz
Download MD5 sum: 689b46c2b3ab1a39735ac33f714c4f7f
Download size: 496 KB
Estimated disk space required: 3.5 MB
Estimated build time: less than 0.1 SBU
Required patch for use with openssl: https://www.linuxfromscratch.org/patches/blfs/12.1/liboauth-1.0.3-openssl-1.1.0-3.patch
nss-3.98 and Doxygen-1.10.0 (to build documentation)
Apply a patch for the current version of openssl:
patch -Np1 -i ../liboauth-1.0.3-openssl-1.1.0-3.patch
Install liboauth by running the following commands:
./configure --prefix=/usr --disable-static && make
If you wish to build the documentation (needs Doxygen-1.10.0), issue:
make dox
To test the results, issue: make check.
Now, as the root
user:
make install
If you have previously built the documentation, install it by
running the following commands as the root
user:
install -v -dm755 /usr/share/doc/liboauth-1.0.3 && cp -rv doc/html/* /usr/share/doc/liboauth-1.0.3
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-nss
: Use this switch if
you want to use Mozilla NSS instead of OpenSSL.
The libpwquality package provides common functions for password quality checking and also scoring them based on their apparent randomness. The library also provides a function for generating random passwords with good pronounceability.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libpwquality/libpwquality/releases/download/libpwquality-1.4.5/libpwquality-1.4.5.tar.bz2
Download MD5 sum: 6b70e355269aef0b9ddb2b9d17936f21
Download size: 424 KB
Estimated disk space required: 5.4 MB
Estimated build time: 0.1 SBU
Install libpwquality by running the following commands:
./configure --prefix=/usr \ --disable-static \ --with-securedir=/usr/lib/security \ --disable-python-bindings && make && pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD/python
This package does not come with a test suite.
Now, as the root
user:
make install && pip3 install --no-index --find-links=dist --no-cache-dir --no-user pwquality
--disable-python-bindings
: This
parameter disables building Python bindings with the
deprecated python3 setup.py
build command. The explicit instruction to
build the Python 3 binding with the pip3 wheel command is
provided.
libpwquality is intended to
be a functional replacement for the now-obsolete pam_cracklib.so
PAM module. To configure
the system to use the pam_pwquality
module, execute the following
commands as the root
user:
mv /etc/pam.d/system-password{,.orig} &&
cat > /etc/pam.d/system-password << "EOF"
# Begin /etc/pam.d/system-password
# check new passwords for strength (man pam_pwquality)
password required pam_pwquality.so authtok_type=UNIX retry=1 difok=1 \
minlen=8 dcredit=0 ucredit=0 \
lcredit=0 ocredit=0 minclass=1 \
maxrepeat=0 maxsequence=0 \
maxclassrepeat=0 gecoscheck=0 \
dictcheck=1 usercheck=1 \
enforcing=1 badwords="" \
dictpath=/usr/lib/cracklib/pw_dict
# use yescrypt hash for encryption, use shadow, and try to use any
# previously defined authentication token (chosen password) set by any
# prior module.
password required pam_unix.so yescrypt shadow try_first_pass
# End /etc/pam.d/system-password
EOF
MIT Kerberos V5 is a free implementation of Kerberos 5. Kerberos is a network authentication protocol. It centralizes the authentication database and uses kerberized applications to work with servers or services that support Kerberos allowing single logins and encrypted communication over internal networks or the Internet.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://kerberos.org/dist/krb5/1.21/krb5-1.21.2.tar.gz
Download MD5 sum: 97d5f3a48235c53f6d537c877290d2af
Download size: 8.2 MB
Estimated disk space required: 130 MB (add 10 MB for tests)
Estimated build time: 0.3 SBU (Using parallelism=4; add 1.0 SBU for tests)
BIND Utilities-9.18.24, GnuPG-2.4.4 (to authenticate the package), keyutils-1.6.3, OpenLDAP-2.6.7, Valgrind-3.22.0 (used during the test suite), yasm-1.3.0, libedit, cmocka, kdcproxy, pyrad, and resolv_wrapper
Some sort of time synchronization facility on your system (like ntp-4.2.8p17) is required since Kerberos won't authenticate if there is a time difference between a kerberized client and the KDC server.
Build MIT Kerberos V5 by running the following commands:
cd src && sed -i -e '/eq 0/{N;s/12 //}' plugins/kdb/db2/libdb2/test/run.test && ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var/lib \ --runstatedir=/run \ --with-system-et \ --with-system-ss \ --with-system-verto=no \ --enable-dns-for-realm && make
To test the build, issue: make
-j1 -k check. Some tests may fail with the
latest version of dejagnu and glibc. Some tests may hang for
a long time and fail if the system is not connected to a
network. One test, t_kadm5srv
,
is known to fail.
Now, as the root
user:
make install && cp -vfr ../doc -T /usr/share/doc/krb5-1.21.2
Still as the root
user,
remove linker flags setting RPATH from the krb5-config script. These
flags are unneeded for an installation in the standard prefix
(/usr
) and they may cause some
packages fail to build:
sed '/PROG_RPATH_FLAGS/d' -i /usr/bin/krb5-config
The sed command removes a test that is known to fail.
--localstatedir=/var/lib
: This
option is used so that the Kerberos variable runtime data is
located in /var/lib
instead of
/usr/var
.
--runstatedir=/run
:
This option is used so that the Kerberos runtime state
information is located in /run
instead of the deprecated /var/run
.
--with-system-et
:
This switch causes the build to use the system-installed
versions of the error-table support software.
--with-system-ss
:
This switch causes the build to use the system-installed
versions of the subsystem command-line interface software.
--with-system-verto=no
: This
switch fixes a bug in the package: it does not recognize its
own verto library installed previously. This is not a
problem, if reinstalling the same version, but if you are
updating, the old library is used as system's one, instead of
installing the new version.
--enable-dns-for-realm
: This
switch allows realms to be resolved using the DNS server.
--with-ldap
: Use this switch if
you want to compile the OpenLDAP database backend module.
You should consider installing some sort of password
checking dictionary so that you can configure the
installation to only accept strong passwords. A
suitable dictionary to use is shown in the CrackLib-2.9.11 instructions.
Note that only one file can be used, but you can
concatenate many files into one. The configuration file
shown below assumes you have installed a dictionary to
/usr/share/dict/words
.
Create the Kerberos configuration file with the following
commands issued by the root
user:
cat > /etc/krb5.conf << "EOF"
# Begin /etc/krb5.conf
[libdefaults]
default_realm = <EXAMPLE.ORG>
encrypt = true
[realms]
<EXAMPLE.ORG>
= {
kdc = <belgarath.example.org>
admin_server = <belgarath.example.org>
dict_file = /usr/share/dict/words
}
[domain_realm]
.<example.org>
= <EXAMPLE.ORG>
[logging]
kdc = SYSLOG:INFO:AUTH
admin_server = SYSLOG:INFO:AUTH
default = SYSLOG:DEBUG:DAEMON
# End /etc/krb5.conf
EOF
You will need to substitute your domain and proper
hostname for the occurrences of the <belgarath>
and
<example.org>
names.
default_realm
should be the
name of your domain changed to ALL CAPS. This isn't
required, but both Heimdal and MIT recommend it.
encrypt = true
provides
encryption of all traffic between kerberized clients and
servers. It's not necessary and can be left off. If you
leave it off, you can encrypt all traffic from the client
to the server using a switch on the client program
instead.
The [realms]
parameters tell
the client programs where to look for the KDC
authentication services.
The [domain_realm]
section
maps a domain to a realm.
Create the KDC database:
kdb5_util create -r <EXAMPLE.ORG>
-s
Now you should populate the database with principals
(users). For now, just use your regular login name or
root
.
kadmin.localkadmin.local:
add_policy dict-onlykadmin.local:
addprinc -policy dict-only<loginname>
The KDC server and any machine running kerberized server daemons must have a host key installed:
kadmin.local:
addprinc -randkey host/<belgarath.example.org>
After choosing the defaults when prompted, you will have to export the data to a keytab file:
kadmin.local:
ktadd host/<belgarath.example.org>
This should have created a file in /etc
named krb5.keytab
(Kerberos 5). This file
should have 600 (root
rw
only) permissions. Keeping the keytab files from public
access is crucial to the overall security of the Kerberos
installation.
Exit the kadmin program (use quit or exit) and return back to the shell prompt. Start the KDC daemon manually, just to test out the installation:
/usr/sbin/krb5kdc
Attempt to get a ticket with the following command:
kinit <loginname>
You will be prompted for the password you created. After you get your ticket, you can list it with the following command:
klist
Information about the ticket should be displayed on the screen.
To test the functionality of the keytab file, issue the
following command as the root
user:
ktutilktutil:
rkt /etc/krb5.keytabktutil:
l
This should dump a list of the host principal, along with the encryption methods used to access the principal.
Create an empty ACL file that can be modified later:
touch /var/lib/krb5kdc/kadm5.acl
At this point, if everything has been successful so far, you can feel fairly confident in the installation and configuration of the package.
For additional information consult the documentation for krb5-1.21.2 on which the above instructions are based.
If you want to start Kerberos services at boot, install the
/etc/rc.d/init.d/krb5
init
script included in the blfs-bootscripts-20240209
package using the following command:
make install-krb5
is a GSSAPI test client |
|
is a GSSAPI test server |
|
is a host keytable manipulation utility |
|
is an utility used to make modifications to the Kerberos database |
|
is an utility similar to kadmin, but if the database is db2, the local client kadmin.local, is intended to run directly on the master KDC without Kerberos authentication |
|
is a server for administrative access to a Kerberos database |
|
allows an administrator to manage realms, Kerberos services and ticket policies |
|
is the KDC database utility |
|
removes the current set of tickets |
|
is used to authenticate to the Kerberos server as a principal and acquire a ticket granting ticket that can later be used to obtain tickets for other services |
|
reads and displays the current tickets in the credential cache |
|
is a program for changing Kerberos 5 passwords |
|
takes a principal database in a specified format and converts it into a stream of database records |
|
receives a database sent by kprop and writes it as a local database |
|
displays the contents of the KDC database update log to standard output |
|
gives information on how to link programs against libraries |
|
is the Kerberos 5 server |
|
sends a problem report (PR) to a central support site |
|
is the super user program using Kerberos protocol.
Requires a properly configured |
|
makes the specified credential cache the primary cache for the collection, if a cache collection is available |
|
is a program for managing Kerberos keytabs |
|
prints keyversion numbers of Kerberos principals |
|
is used to contact a sample server and authenticate to it using Kerberos 5 tickets, then display the server's response |
|
is a simple UDP-based sample client program, for demonstration |
|
is a simple UDP-based server application, for demonstration |
|
is the sample Kerberos 5 server |
|
is another sample client |
|
is another sample server |
|
contains the Generic Security Service Application Programming Interface (GSSAPI) functions which provides security services to callers in a generic fashion, supportable with a range of underlying mechanisms and technologies and hence allowing source-level portability of applications to different environments |
|
contains the administrative authentication and password checking functions required by Kerberos 5 client-side programs |
|
contains the administrative authentication and password checking functions required by Kerberos 5 servers |
|
is a Kerberos 5 authentication/authorization database access library |
|
contains the internal support library for RADIUS functionality |
|
is an all-purpose Kerberos 5 library |
The Nettle package contains a low-level cryptographic library that is designed to fit easily in many contexts.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/nettle/nettle-3.9.1.tar.gz
Download MD5 sum: 29fcd2dec6bf5b48e5e3ffb3cbc4779e
Download size: 2.3 MB
Estimated disk space required: 95 MB (with tests)
Estimated build time: 0.2 SBU (with tests; both using parallelism=4)
Valgrind-3.22.0 (optional for the tests)
Install Nettle by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install && chmod -v 755 /usr/lib/lib{hogweed,nettle}.so && install -v -m755 -d /usr/share/doc/nettle-3.9.1 && install -v -m644 nettle.{html,pdf} /usr/share/doc/nettle-3.9.1
--disable-static
:
This switch prevents installation of static versions of the
libraries.
calculates a hash value using a specified algorithm |
|
outputs a sequence of pseudorandom (non-cryptographic) bytes, using Knuth's lagged fibonacci generator. The stream is useful for testing, but should not be used to generate cryptographic keys or anything else that needs real randomness |
|
is a password-based key derivation function that takes a password or a passphrase as input and returns a strengthened password, which is protected against pre-computation attacks by using salting and other expensive computations. |
|
converts private and public RSA keys from PKCS #1 format to sexp format |
|
converts an s-expression to a different encoding |
The Network Security Services (NSS) package is a set of libraries designed to support cross-platform development of security-enabled client and server applications. Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security standards. This is useful for implementing SSL and S/MIME or other Internet security standards into an application.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.mozilla.org/pub/security/nss/releases/NSS_3_98_RTM/src/nss-3.98.tar.gz
Download MD5 sum: 4502fcae1b32da310fffdfb3c67f6985
Download size: 73 MB
Estimated disk space required: 312 MB (add 268 MB for tests)
Estimated build time: 0.9 SBU (with parallelism=4, add 16 SBU for tests on AMD Ryzens or at least 30 SBU on Intel machines)
SQLite-3.45.1 and p11-kit-0.25.3 (runtime)
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nss
Install NSS by running the following commands:
patch -Np1 -i ../nss-3.98-standalone-1.patch && cd nss && make BUILD_OPT=1 \ NSPR_INCLUDE_DIR=/usr/include/nspr \ USE_SYSTEM_ZLIB=1 \ ZLIB_LIBS=-lz \ NSS_ENABLE_WERROR=0 \ $([ $(uname -m) = x86_64 ] && echo USE_64=1) \ $([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)
To run the tests, execute the following commands:
cd tests && HOST=localhost DOMSUF=localdomain ./all.sh cd ../
Some information about the tests:
HOST=localhost and DOMSUF=localdomain are required.
Without these variables, a FQDN is required to be
specified and this generic way should work for
everyone, provided localhost.localdomain
is defined
in /etc/hosts
, as done in
the LFS book.
The tests take a long time to run. If desired there is information in the all.sh script about running subsets of the total test suite.
When interrupting the tests, the test suite fails to spin down test servers that are run. This leads to an infinite loop in the tests where the test suite tries to kill a server that doesn't exist anymore because it pulls the wrong PID.
Test suite results (in HTML format!) can be found at ../../test_results/security/localhost.1/results.html
A few tests might fail on some Intel machines for unknown reasons.
Now, as the root
user:
cd ../dist && install -v -m755 Linux*/lib/*.so /usr/lib && install -v -m644 Linux*/lib/{*.chk,libcrmf.a} /usr/lib && install -v -m755 -d /usr/include/nss && cp -v -RL {public,private}/nss/* /usr/include/nss && install -v -m755 Linux*/bin/{certutil,nss-config,pk12util} /usr/bin && install -v -m644 Linux*/lib/pkgconfig/nss.pc /usr/lib/pkgconfig
BUILD_OPT=1
: This
option is passed to make so that the build is
performed with no debugging symbols built into the binaries
and the default compiler optimizations are used.
NSPR_INCLUDE_DIR=/usr/include/nspr
:
This option sets the location of the nspr headers.
USE_SYSTEM_ZLIB=1
:
This option is passed to make to ensure that the
libssl3.so
library is linked to
the system installed zlib
instead of the in-tree version.
ZLIB_LIBS=-lz
: This
option provides the linker flags needed to link to the system
zlib.
$([ $(uname -m) = x86_64 ]
&& echo USE_64=1): The USE_64=1
option is required on x86_64, otherwise
make will try
(and fail) to create 32-bit objects. The [ $(uname -m) =
x86_64 ] test ensures it has no effect on a 32 bit system.
([ -f /usr/include/sqlite3.h ]
&& echo NSS_USE_SYSTEM_SQLITE=1):
This tests if sqlite is
installed and if so it echos the option
NSS_USE_SYSTEM_SQLITE=1 to make so that libsoftokn3.so
will link against the system
version of sqlite.
NSS_DISABLE_GTESTS=1
: If you
don't need to run NSS test suite, append this option to
make command,
to prevent the compilation of tests and save some build time.
If p11-kit-0.25.3 is installed, the
p11-kit trust module
(/usr/lib/pkcs11/p11-kit-trust.so
) can be
used as a drop-in replacement for /usr/lib/libnssckbi.so
to transparently
make the system CAs available to NSS aware applications, rather than the
static library provided by /usr/lib/libnssckbi.so
. As the root
user, execute the following command:
ln -sfv ./pkcs11/p11-kit-trust.so /usr/lib/libnssckbi.so
Additionally, for dependent applications that do not use the
internal database (/usr/lib/libnssckbi.so
), the /usr/sbin/make-ca
script included on the
make-ca-1.13 page can generate a system
wide NSS DB with the -n
switch, or by modifying the
/etc/make-ca/make-ca.conf
file.
is the Mozilla Certificate Database Tool. It is a command-line utility that can create and modify the Netscape Communicator cert8.db and key3.db database files. It can also list, generate, modify, or delete certificates within the cert8.db file and create or change the password, generate new public and private key pairs, display the contents of the key database, or delete key pairs within the key3.db file |
|
is used to determine the NSS library settings of the installed NSS libraries |
|
is a tool for importing certificates and keys from pkcs #12 files into NSS or exporting them. It can also list certificates and keys in such files |
The OpenSSH package contains ssh clients and the sshd daemon. This is useful for encrypting authentication and subsequent traffic over a network. The ssh and scp commands are secure implementations of telnet and rcp respectively.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
Download MD5 sum: 5e90def5af3ffb27e149ca6fff12bef3
Download size: 1.8 MB
Estimated disk space required: 45 MB (add 22 MB for tests)
Estimated build time: 0.2 SBU (Using parallelism=4; running the tests takes about 20 minutes, irrespective of processor speed)
GDB-14.1 (for tests), Linux-PAM-1.6.0 (PAM configuration files from Shadow-4.14.5 are used to create openssh ones), Xorg Applications (or Xorg build environment, see Command Explanations), MIT Kerberos V5-1.21.2, Which-2.21 (for tests), libedit, LibreSSL Portable, OpenSC, and libsectok
OpenSSH runs as two
processes when connecting to other computers. The first
process is a privileged process and controls the issuance of
privileges as necessary. The second process communicates with
the network. Additional installation steps are necessary to
set up the proper environment, which are performed by issuing
the following commands as the root
user:
install -v -g sys -m700 -d /var/lib/sshd && groupadd -g 50 sshd && useradd -c 'sshd PrivSep' \ -d /var/lib/sshd \ -g sshd \ -s /bin/false \ -u 50 sshd
Install OpenSSH by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-privsep-path=/var/lib/sshd \ --with-default-path=/usr/bin \ --with-superuser-path=/usr/sbin:/usr/bin \ --with-pid-dir=/run && make
To test the results, issue: make -j1 tests.
Now, as the root
user:
make install && install -v -m755 contrib/ssh-copy-id /usr/bin && install -v -m644 contrib/ssh-copy-id.1 \ /usr/share/man/man1 && install -v -m755 -d /usr/share/doc/openssh-9.6p1 && install -v -m644 INSTALL LICENCE OVERVIEW README* \ /usr/share/doc/openssh-9.6p1
--sysconfdir=/etc/ssh
: This
prevents the configuration files from being installed in
/usr/etc
.
--with-default-path=/usr/bin
and --with-superuser-path=/usr/sbin:/usr/bin
:
These set PATH
consistent with LFS
and BLFS Shadow package.
--with-pid-dir=/run
:
This prevents OpenSSH from
referring to deprecated /var/run
.
--with-pam
: This parameter
enables Linux-PAM support in
the build.
--with-xauth=$XORG_PREFIX/bin/xauth
: Set the
default location for the xauth binary for X
authentication. The environment variable XORG_PREFIX
should be set following Xorg build
environment. This can also be controlled from
sshd_config
with the
XAuthLocation keyword. You can omit this switch if
Xorg is already installed.
--with-kerberos5=/usr
: This
option is used to include Kerberos 5 support in the build.
--with-libedit
: This option
enables line editing and history features for sftp.
~/.ssh/*
, /etc/ssh/ssh_config
, and /etc/ssh/sshd_config
There are no required changes to any of these files.
However, you may wish to view the /etc/ssh/
files and make any changes
appropriate for the security of your system. One
recommended change is that you disable root
login via ssh. Execute the
following command as the root
user to disable root
login via ssh:
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
If you want to be able to log in without typing in your password, first create ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub with ssh-keygen and then copy ~/.ssh/id_rsa.pub to ~/.ssh/authorized_keys on the remote computer that you want to log into. You'll need to change REMOTE_USERNAME and REMOTE_HOSTNAME for the username and hostname of the remote computer and you'll also need to enter your password for the ssh-copy-id command to succeed:
ssh-keygen && ssh-copy-id -i ~/.ssh/id_ed25519.pubREMOTE_USERNAME
@REMOTE_HOSTNAME
Once you've got passwordless logins working it's actually
more secure than logging in with a password (as the private
key is much longer than most people's passwords). If you
would like to now disable password logins, as the
root
user:
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config && echo "KbdInteractiveAuthentication no" >> /etc/ssh/sshd_config
If you added Linux-PAM
support and you want ssh to use it then you will need to
add a configuration file for sshd and enable use of LinuxPAM. Note, ssh only uses PAM to
check passwords, if you've disabled password logins these
commands are not needed. If you want to use PAM, issue the
following commands as the root
user:
sed 's@d/login@d/sshd@g' /etc/pam.d/login > /etc/pam.d/sshd && chmod 644 /etc/pam.d/sshd && echo "UsePAM yes" >> /etc/ssh/sshd_config
Additional configuration information can be found in the man pages for sshd, ssh and ssh-agent.
To start the SSH server at system boot, install the
/etc/rc.d/init.d/sshd
init
script included in the blfs-bootscripts-20240209
package.
make install-sshd
is a file copy program that acts like rcp except it uses an encrypted protocol |
|
is an FTP-like program that works over the SSH1 and SSH2 protocols |
|
is an rlogin/rsh-like client program except it uses an encrypted protocol |
|
is a daemon that listens for ssh login requests |
|
is a tool which adds keys to the ssh-agent |
|
is an authentication agent that can store private keys |
|
is a script that enables logins on remote machines using local keys |
|
is a key generation tool |
|
is a utility for gathering public host keys from a number of hosts |
The p11-kit package provides a way to load and enumerate PKCS #11 (a Cryptographic Token Interface Standard) modules.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/p11-glue/p11-kit/releases/download/0.25.3/p11-kit-0.25.3.tar.xz
Download MD5 sum: 2610cef2951d83d7037577eaae1acb54
Download size: 972 KB
Estimated disk space required: 95 MB (with tests)
Estimated build time: 0.8 SBU (with tests)
GTK-Doc-1.33.2, libxslt-1.1.39, and nss-3.98 (runtime)
Prepare the distribution specific anchor hook:
sed '20,$ d' -i trust/trust-extract-compat &&
cat >> trust/trust-extract-compat << "EOF"
# Copy existing anchor modifications to /etc/ssl/local
/usr/libexec/make-ca/copy-trust-modifications
# Update trust stores
/usr/sbin/make-ca -r
EOF
Install p11-kit by running the following commands:
mkdir p11-build && cd p11-build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dtrust_paths=/etc/pki/anchors && ninja
To test the results, issue: LC_ALL=C ninja test.
Now, as the root
user:
ninja install && ln -sfv /usr/libexec/p11-kit/trust-extract-compat \ /usr/bin/update-ca-certificates
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dtrust_paths=/etc/pki/anchors
:
this switch sets the location of trusted certificates used by
libp11-kit.so.
-Dhash_impl=freebl
: Use this
switch if you want to use the Freebl library from
NSS for SHA1 and MD5
hashing.
-Dgtk_doc=true
: Use this switch
if you have installed GTK-Doc-1.33.2 and libxslt-1.1.39 and wish
to rebuild the documentation and generate manual pages.
The p11-kit trust module
(/usr/lib/pkcs11/p11-kit-trust.so
) can be
used as a drop-in replacement for /usr/lib/libnssckbi.so
to transparently
make the system CAs available to NSS aware applications, rather than the
static list provided by /usr/lib/libnssckbi.so
. As the root
user, execute the following
commands:
ln -sfv ./pkcs11/p11-kit-trust.so /usr/lib/libnssckbi.so
is a command line tool that can be used to perform operations on PKCS#11 modules configured on the system |
|
is a command line tool to examine and modify the shared trust policy store |
|
is a command line tool to both extract local
certificates from an updated anchor store, and
regenerate all anchors and certificate stores on
the system. This is done unconditionally on BLFS
using the |
|
contains functions used to coordinate initialization and finalization of any PKCS#11 module |
|
is the PKCS#11 proxy module |
Polkit is a toolkit for defining and handling authorizations. It is used for allowing unprivileged processes to communicate with privileged processes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/polkit/polkit/-/archive/124/polkit-124.tar.gz
Download MD5 sum: 97db655618e1483706fbc764787c7d6e
Download size: 744 KB
Estimated disk space required: 7.2 MB (with tests)
Estimated build time: 0.3 SBU (with tests; using parallelism=4)
duktape-2.7.0, gobject-introspection-1.78.1, libxslt-1.1.39, Linux-PAM-1.6.0, and elogind-252.9
Since elogind uses PAM to register user sessions, it is a good idea to build Polkit with PAM support so elogind can track Polkit sessions.
GTK-Doc-1.33.2, dbusmock-0.30.2, and SpiderMonkey from Firefox-115.7.0 (can be used in place of duktape)
One polkit authentication agent for using polkit in the graphical environment: polkit-kde-agent in Plasma-5.27.10 for KDE, the agent built in gnome-shell-45.4 for GNOME3, polkit-gnome-0.105 for XFCE, and lxqt-policykit-1.4.0 for LXQt
If libxslt-1.1.39 is installed, then
docbook-xml-4.5 and docbook-xsl-nons-1.79.2 are
required. If you have installed libxslt-1.1.39, but
you do not want to install any of the DocBook packages
mentioned, you will need to use -Dman=false
in the instructions below.
There should be a dedicated user and group to take control of
the polkitd
daemon after it is started. Issue the following commands as
the root
user:
groupadd -fg 27 polkitd && useradd -c "PolicyKit Daemon Owner" -d /etc/polkit-1 -u 27 \ -g polkitd -s /bin/false polkitd
First fix a build problem for sysV based systems:
sed -i '/systemd_sysusers_dir/s/^/#/' meson.build
Install Polkit by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dman=true \ -Dsession_tracking=libelogind \ -Dtests=true && ninja
To test the results, first ensure that the system D-Bus daemon is running, and both D-Bus Python-1.3.2 and dbusmock-0.30.2 are installed. Then run ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dtests=true
: This
switch allows to run the test suite of this package. As
Polkit is used for
authorizations, its integrity can affect system security. So
it's recommended to run the test suite building this package.
-Djs_engine=mozjs
: This switch
allows using the SpiderMonkey from
Firefox-115.7.0 JavaScript engine instead of the
duktape-2.7.0 JavaScript engine.
-Dos_type=lfs
: Use this switch if
you did not create the /etc/lfs-release
file or distribution auto
detection will fail and you will be unable to use
Polkit.
-Dauthfw=shadow
: This switch
enables the package to use the Shadow rather than the Linux PAM Authentication framework. Use
it if you have not installed Linux
PAM.
-Dintrospection=false
: Use this
option if you are certain that you do not need
gobject-introspection files for polkit, or do not have
gobject-introspection installed.
-Dman=false
: Use this option to
disable generating and installing manual pages. This is
useful if libxslt is not installed.
-Dexamples=true
: Use this option
to build the example programs.
-Dgtk_doc=true
: Use this option
to enable building and installing the API documentation.
is used to obtain information about registered PolicyKit actions |
|
is used to check whether a process is authorized for action |
|
allows an authorized user to execute a command as another user |
|
is used to start a textual authentication agent for the subject |
|
provides the org.freedesktop.PolicyKit1 D-Bus service on the system message bus |
|
contains the Polkit authentication agent API functions |
|
contains the Polkit authorization API functions |
The Polkit GNOME package provides an Authentication Agent for Polkit that integrates well with the GNOME Desktop environment.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/polkit-gnome/0.105/polkit-gnome-0.105.tar.xz
Download MD5 sum: 50ecad37c8342fb4a52f590db7530621
Download size: 305 KB
Estimated disk space required: 5.0 MB
Estimated build time: 0.1 SBU
First, apply some fixes that allow for the proper user icon to be used, as well as some security fixes:
patch -Np1 -i ../polkit-gnome-0.105-consolidated_fixes-1.patch
Install Polkit GNOME 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
For the authentication framework to work, polkit-gnome-authentication-agent-1 needs to be started. However, make install did not install a startup file for the Polkit GNOME so you have to create it by yourself.
Issue the following commands as the root
user to create a startup file for
Polkit GNOME:
mkdir -p /etc/xdg/autostart &&
cat > /etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop << "EOF"
[Desktop Entry]
Name=PolicyKit Authentication Agent
Comment=PolicyKit Authentication Agent
Exec=/usr/libexec/polkit-gnome-authentication-agent-1
Terminal=false
Type=Application
Categories=
NoDisplay=true
OnlyShowIn=GNOME;XFCE;Unity;
AutostartCondition=GNOME3 unless-session gnome
EOF
Shadow was indeed installed in LFS and there is no reason to reinstall it unless you installed CrackLib or Linux-PAM after your LFS system was completed. If you have installed CrackLib after LFS, then reinstalling Shadow will enable strong password support. If you have installed Linux-PAM, reinstalling Shadow will allow programs such as login and su to utilize PAM.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/shadow-maint/shadow/releases/download/4.14.5/shadow-4.14.5.tar.xz
Download MD5 sum: 452b0e59f08bf618482228ba3732d0ae
Download size: 1.7 MB
Estimated disk space required: 38 MB
Estimated build time: 0.2 SBU
Linux-PAM-1.6.0 or CrackLib-2.9.11
The installation commands shown below are for installations where Linux-PAM has been installed and Shadow is being reinstalled to support the Linux-PAM installation.
If you are reinstalling Shadow to provide strong password
support using the CrackLib
library without using Linux-PAM, ensure you add the
--with-libcrack
parameter to the configure script below
and also issue the following command:
sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs
If reinstalling shadow for a version update, be sure to
reaccomplish the Linux-PAM configuration below. The
installation of shadow overwrites many of the files in
/etc/pam.d/
.
Reinstall Shadow by running the following commands:
sed -i 's/groups$(EXEEXT) //' src/Makefile.in && find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; && find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; && find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \; && sed -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD YESCRYPT@' \ -e 's@/var/spool/mail@/var/mail@' \ -e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \ -i etc/login.defs && ./configure --sysconfdir=/etc \ --disable-static \ --without-libbsd \ --with-{b,yes}crypt && make
This package does not come with a test suite.
Now, as the root
user:
make exec_prefix=/usr pamddir= install
The man pages were installed in LFS, but if reinstallation is
desired, run (as the root
user):
make -C man install-man
sed -i 's/groups$(EXEEXT) //' src/Makefile.in: This sed is used to suppress the installation of the groups program as the version from the Coreutils package installed during LFS is preferred.
find man -name Makefile.in -exec ... {} \;: The first command is used to suppress the installation of the groups man pages so the existing ones installed from the Coreutils package are not replaced. The two other commands prevent installation of manual pages that are already installed by Man-pages in LFS.
sed -e 's@#ENCRYPT_METHOD
DES@ENCRYPT_METHOD YESCRYPT@' -e
's@/var/spool/mail@/var/mail@' -e
'/PATH=/{s@/sbin:@@;s@/bin:@@}' -i
etc/login.defs: Instead of using the default
'DES' method, this command modifies the installation to use
the much more secure 'YESCRYPT' method of hashing passwords,
which also allows passwords longer than eight characters. The
command also changes the obsolete /var/spool/mail
location for user mailboxes
that Shadow uses by default
to the /var/mail
location. It
also changes the default path to be consistent with that set
in LFS.
--without-libbsd
:
Prevents looking for the readpassphrase function,
which can be found only in libbsd
, which we do not have in BLFS. An
internal implementation of readpassphrase is used
instead.
pamddir=
: Prevents
installation of the shipped PAM configuration files into
/etc/pam.d
. The shipped
configuration does not work with the BLFS PAM configuration
and we will create these configuration files explicitly.
The rest of this page is devoted to configuring Shadow to work properly with Linux-PAM. If you do not have Linux-PAM installed, and you reinstalled Shadow to support strong passwords via the CrackLib library, no further configuration is required.
Configuring your system to use Linux-PAM can be a complex task. The information below will provide a basic setup so that Shadow's login and password functionality will work effectively with Linux-PAM. Review the information and links on the Linux-PAM-1.6.0 page for further configuration information. For information specific to integrating Shadow, Linux-PAM and libpwquality, you can visit the following link:
The login
program currently performs many functions which
Linux-PAM modules should
now handle. The following sed command will
comment out the appropriate lines in /etc/login.defs
, and stop login from performing
these functions (a backup file named /etc/login.defs.orig
is also created to
preserve the original file's contents). Issue the
following commands as the root
user:
install -v -m644 /etc/login.defs /etc/login.defs.orig && for FUNCTION in FAIL_DELAY \ FAILLOG_ENAB \ LASTLOG_ENAB \ MAIL_CHECK_ENAB \ OBSCURE_CHECKS_ENAB \ PORTTIME_CHECKS_ENAB \ QUOTAS_ENAB \ CONSOLE MOTD_FILE \ FTMP_FILE NOLOGINS_FILE \ ENV_HZ PASS_MIN_LEN \ SU_WHEEL_ONLY \ CRACKLIB_DICTPATH \ PASS_CHANGE_TRIES \ PASS_ALWAYS_WARN \ CHFN_AUTH ENCRYPT_METHOD \ ENVIRON_FILE do sed -i "s/^${FUNCTION}/# &/" /etc/login.defs done
As mentioned previously in the Linux-PAM instructions, Linux-PAM has two supported methods
for configuration. The commands below assume that you've
chosen to use a directory based configuration, where each
program has its own configuration file. You can
optionally use a single /etc/pam.conf
configuration file by
using the text from the files below, and supplying the
program name as an additional first field for each line.
As the root
user, create
the following Linux-PAM
configuration files in the /etc/pam.d/
directory (or add the
contents to the /etc/pam.conf
file) using the following
commands:
cat > /etc/pam.d/login << "EOF"
# Begin /etc/pam.d/login
# Set failure delay before next prompt to 3 seconds
auth optional pam_faildelay.so delay=3000000
# Check to make sure that the user is allowed to login
auth requisite pam_nologin.so
# Check to make sure that root is allowed to login
# Disabled by default. You will need to create /etc/securetty
# file for this module to function. See man 5 securetty.
#auth required pam_securetty.so
# Additional group memberships - disabled by default
#auth optional pam_group.so
# include system auth settings
auth include system-auth
# check access for the user
account required pam_access.so
# include system account settings
account include system-account
# Set default environment variables for the user
session required pam_env.so
# Set resource limits for the user
session required pam_limits.so
# Display the message of the day - Disabled by default
#session optional pam_motd.so
# Check user's mail - Disabled by default
#session optional pam_mail.so standard quiet
# include system session and password settings
session include system-session
password include system-password
# End /etc/pam.d/login
EOF
cat > /etc/pam.d/passwd << "EOF"
# Begin /etc/pam.d/passwd
password include system-password
# End /etc/pam.d/passwd
EOF
cat > /etc/pam.d/su << "EOF"
# Begin /etc/pam.d/su
# always allow root
auth sufficient pam_rootok.so
# Allow users in the wheel group to execute su without a password
# disabled by default
#auth sufficient pam_wheel.so trust use_uid
# include system auth settings
auth include system-auth
# limit su to users in the wheel group
# disabled by default
#auth required pam_wheel.so use_uid
# include system account settings
account include system-account
# Set default environment variables for the service user
session required pam_env.so
# include system session settings
session include system-session
# End /etc/pam.d/su
EOF
cat > /etc/pam.d/chpasswd << "EOF"
# Begin /etc/pam.d/chpasswd
# always allow root
auth sufficient pam_rootok.so
# include system auth and account settings
auth include system-auth
account include system-account
password include system-password
# End /etc/pam.d/chpasswd
EOF
sed -e s/chpasswd/newusers/ /etc/pam.d/chpasswd >/etc/pam.d/newusers
cat > /etc/pam.d/chage << "EOF"
# Begin /etc/pam.d/chage
# always allow root
auth sufficient pam_rootok.so
# include system auth and account settings
auth include system-auth
account include system-account
# End /etc/pam.d/chage
EOF
for PROGRAM in chfn chgpasswd chsh groupadd groupdel \ groupmems groupmod useradd userdel usermod do install -v -m644 /etc/pam.d/chage /etc/pam.d/${PROGRAM} sed -i "s/chage/$PROGRAM/" /etc/pam.d/${PROGRAM} done
At this point, you should do a simple test to see if
Shadow is working as
expected. Open another terminal and log in as
root
, and then run
login and
login as another user. If you do not see any errors,
then all is well and you should proceed with the rest
of the configuration. If you did receive errors, stop
now and double check the above configuration files
manually. Any error is the sign of an error in the
above procedure. You can also run the test suite from
the Linux-PAM package
to assist you in determining the problem. If you cannot
find and fix the error, you should recompile
Shadow adding the
--without-libpam
switch to
the configure command in
the above instructions (also move the /etc/login.defs.orig
backup file to
/etc/login.defs
). If you
fail to do this and the errors remain, you will be
unable to log into your system.
Instead of using the /etc/login.access
file for controlling
access to the system, Linux-PAM uses the pam_access.so
module along with the
/etc/security/access.conf
file. Rename the /etc/login.access
file using the
following command:
if [ -f /etc/login.access ]; then mv -v /etc/login.access{,.NOUSE}; fi
Instead of using the /etc/limits
file for limiting usage of
system resources, Linux-PAM uses the pam_limits.so
module along with the
/etc/security/limits.conf
file. Rename the /etc/limits
file using the following
command:
if [ -f /etc/limits ]; then mv -v /etc/limits{,.NOUSE}; fi
Be sure to test the login capabilities of the system before logging out. Errors in the configuration can cause a permanent lockout requiring a boot from an external source to correct the problem.
A list of the installed files, along with their short descriptions can be found at ../../../../lfs/view/12.1/chapter08/shadow.html#contents-shadow.
The ssh-askpass is a generic executable name for many packages, with similar names, that provide a interactive X service to grab password for packages requiring administrative privileges to be run. It prompts the user with a window box where the necessary password can be inserted. Here, we choose Damien Miller's package distributed in the OpenSSH tarball.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
Download MD5 sum: 5e90def5af3ffb27e149ca6fff12bef3
Download size: 1.8 MB
Estimated disk space required: 10 MB
Estimated build time: less than 0.1 SBU
GTK+-3.24.41, Sudo-1.9.15p5 (runtime), Xorg Libraries, and a graphical environment (runtime)
Install ssh-askpass by running the following commands:
cd contrib && make gnome-ssh-askpass3
Now, as the root
user:
install -v -d -m755 /usr/libexec/openssh/contrib && install -v -m755 gnome-ssh-askpass3 /usr/libexec/openssh/contrib && ln -sv -f contrib/gnome-ssh-askpass3 /usr/libexec/openssh/ssh-askpass
The use of /usr/libexec/openssh/contrib and a symlink is justified by the eventual necessity of a different program for that service.
As the root
user, configure
Sudo-1.9.15p5 to use ssh-askpass:
cat >> /etc/sudo.conf << "EOF" &&
# Path to askpass helper program
Path askpass /usr/libexec/openssh/ssh-askpass
EOF
chmod -v 0644 /etc/sudo.conf
If a given graphical <application> requires administrative privileges, use sudo -A <application> from an x-terminal, from a Window Manager menu and/or replace "Exec=<application> ..." by "Exec=sudo -A <application> ..." in the <application>.desktop file.
gnome-ssh-askpass3
)
The stunnel package contains a program that allows you to encrypt arbitrary TCP connections inside SSL (Secure Sockets Layer) so you can easily communicate with clients over secure channels. stunnel can also be used to tunnel PPP over network sockets without changes to the server package source code.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.stunnel.org/downloads/archive/5.x/stunnel-5.72.tar.gz
Download MD5 sum: 61d35d2df1b96b23ed6fb20cf5ddb613
Download size: 880 KB
Estimated disk space required: 7.5 MB
Estimated build time: less than 0.1 SBU
libnsl-2.0.1, netcat (required for tests), tcpwrappers, and TOR
The stunnel
daemon will be run in a chroot jail by an
unprivileged user. Create the new user and group using the
following commands as the root
user:
groupadd -g 51 stunnel && useradd -c "stunnel Daemon" -d /var/lib/stunnel \ -g stunnel -s /bin/false -u 51 stunnel
A signed SSL Certificate and a Private Key is necessary to
run the stunnel daemon. After the
package is installed, there are instructions to generate
them. However, if you own or have already created a signed
SSL Certificate you wish to use, copy it to /etc/stunnel/stunnel.pem
before starting
the build (ensure only root
has read and write access). The .pem
file must be formatted as shown
below:
-----BEGIN PRIVATE KEY-----
<many encrypted lines of private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<many encrypted lines of certificate>
-----END CERTIFICATE-----
-----BEGIN DH PARAMETERS-----
<encrypted lines of dh parms>
-----END DH PARAMETERS-----
Install stunnel by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-systemd && make
If you have installed the optional netcat application, the regression tests can be run with make check.
Now, as the root
user:
make docdir=/usr/share/doc/stunnel-5.72 install
If you do not already have a signed SSL Certificate and
Private Key, create the stunnel.pem
file in the /etc/stunnel
directory using the command
below. You will be prompted to enter the necessary
information. Ensure you reply to the
Common Name (FQDN of your server) [localhost]:
prompt with the name or IP address you will be using to access the service(s).
To generate a certificate, as the root
user, issue:
make cert
--disable-systemd
:
This switch disables systemd socket activation support which
is not available in BLFS.
make docdir=... install: This command installs the package and changes the documentation installation directory to standard naming conventions.
As the root
user, create
the directory used for the .pid
file created when the stunnel daemon starts:
install -v -m750 -o stunnel -g stunnel -d /var/lib/stunnel/run && chown stunnel:stunnel /var/lib/stunnel
Next, create a basic /etc/stunnel/stunnel.conf
configuration
file using the following commands as the root
user:
cat > /etc/stunnel/stunnel.conf << "EOF"
; File: /etc/stunnel/stunnel.conf
; Note: The pid and output locations are relative to the chroot location.
pid = /run/stunnel.pid
chroot = /var/lib/stunnel
client = no
setuid = stunnel
setgid = stunnel
cert = /etc/stunnel/stunnel.pem
;debug = 7
;output = stunnel.log
;[https]
;accept = 443
;connect = 80
;; "TIMEOUTclose = 0" is a workaround for a design flaw in Microsoft SSL
;; Microsoft implementations do not use SSL close-notify alert and thus
;; they are vulnerable to truncation attacks
;TIMEOUTclose = 0
EOF
Finally, add the service(s) you wish to encrypt to the configuration file. The format is as follows:
[<service>
]
accept = <hostname:portnumber>
connect = <hostname:portnumber>
For a full explanation of the commands and syntax used in the configuration file, issue man stunnel.
To automatically start the stunnel daemon when the
system is booted, install the /etc/rc.d/init.d/stunnel
bootscript from
the blfs-bootscripts-20240209 package.
make install-stunnel
The Sudo package allows a
system administrator to give certain users (or groups of
users) the ability to run some (or all) commands as
root
or another user while
logging the commands and arguments.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.sudo.ws/dist/sudo-1.9.15p5.tar.gz
Download MD5 sum: 4166279cb188ecb6641c7a2ba5f68270
Download size: 5.1 MB
Estimated disk space required: 53 MB (add 18 MB for tests)
Estimated build time: 0.2 SBU (with parallelism=4; add 0.1 SBU for tests)
Linux-PAM-1.6.0, MIT Kerberos V5-1.21.2, OpenLDAP-2.6.7, MTA (that provides a sendmail command), AFS, libaudit, Opie, and Sssd
Install Sudo by running the following commands:
./configure --prefix=/usr \ --libexecdir=/usr/lib \ --with-secure-path \ --with-env-editor \ --docdir=/usr/share/doc/sudo-1.9.15p5 \ --with-passprompt="[sudo] password for %p: " && make
To test the results, issue: env LC_ALL=C make check |& tee make-check.log. Check the results with grep failed make-check.log.
Now, as the root
user:
make install
--libexecdir=/usr/lib
: This
switch controls where private programs are installed.
Everything in that directory is a library, so they belong
under /usr/lib
instead of
/usr/libexec
.
--with-secure-path
:
This switch transparently adds /sbin
and /usr/sbin
directories to the PATH
environment variable.
--with-env-editor
:
This switch enables use of the environment variable EDITOR
for visudo.
--with-passprompt
:
This switch sets the password prompt. The %p
will be expanded to the name
of the user whose password is being requested.
--without-pam
: This switch avoids
building Linux-PAM support
when Linux-PAM is installed
on the system.
--with-all-insults
: This switch
includes all the sudo insult sets. Insults are printed if the
user types a bad password, and if enabled in /etc/sudoers
. Use --with-insults
to have them enabled by
default. Various sets of insults can be selected with some
other switches.
There are many options to sudo's configure command. Check the configure --help output for a complete list.
The sudoers
file can be quite
complicated. It is composed of two types of entries:
aliases (basically variables) and user specifications
(which specify who may run what). The installation installs
a default configuration that has no privileges installed
for any user.
A couple of common configuration changes are to set the
path for the super user and to allow members of the wheel
group to execute all commands after providing their own
credentials. Use the following commands to create the
/etc/sudoers.d/00-sudo
configuration file as the root
user:
cat > /etc/sudoers.d/00-sudo << "EOF"
Defaults secure_path="/usr/sbin:/usr/bin"
%wheel ALL=(ALL) ALL
EOF
In very simple installations where there is only one
user, it may be easier to just edit the /etc/sudoers
file directly. In that
case, the secure_path
entry
may not be needed and using sudo -E ... can import
the non-privileged user's full environment into the
privileged session.
The files in the /etc/sudoers.d
directory are parsed in
sorted lexical order. Be careful that entries in an added
file do not overwrite previous entries.
For details, see man sudoers.
The Sudo developers
highly recommend using the visudo program to edit
the sudoers
file. This will
provide basic sanity checking like syntax parsing and
file permission to avoid some possible mistakes that
could lead to a vulnerable configuration.
If PAM is installed on the
system, Sudo is built with
PAM support. In that case,
issue the following command as the root
user to create the PAM configuration file:
cat > /etc/pam.d/sudo << "EOF"
# Begin /etc/pam.d/sudo
# include the default auth settings
auth include system-auth
# include the default account settings
account include system-account
# Set default environment variables for the service user
session required pam_env.so
# include system session defaults
session include system-session
# End /etc/pam.d/sudo
EOF
chmod 644 /etc/pam.d/sudo
converts between sudoers file formats |
|
executes a command as another user as permitted by
the |
|
is a sudo event and I/O log server |
|
sends sudo I/O logs to the log server |
|
is a symlink to sudo that implies
the |
|
is used to play back or list the output logs created by sudo |
|
allows for safer editing of the |
The Tripwire package contains programs used to verify the integrity of the files on a given system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/Tripwire/tripwire-open-source/releases/download/2.4.3.7/tripwire-open-source-2.4.3.7.tar.gz
Download MD5 sum: a5cf1bc2f235f5d8ca458f00548db6ee
Download size: 980 KB
Estimated disk space required: 29 MB
Estimated build time: 1.6 SBU (scripting install)
An MTA
Compile Tripwire by running the following commands:
sed -e '/^CLOBBER/s/false/true/' \ -e 's|TWDB="${prefix}|TWDB="/var|' \ -e '/TWMAN/ s|${prefix}|/usr/share|' \ -e '/TWDOCS/s|${prefix}/doc/tripwire|/usr/share/doc/tripwire-2.4.3.7|' \ -i installer/install.cfg && find . -name Makefile.am | xargs \ sed -i 's/^[[:alpha:]_]*_HEADERS.*=/noinst_HEADERS =/' && sed '/dist/d' -i man/man?/Makefile.am && autoreconf -fi && ./configure --prefix=/usr --sysconfdir=/etc/tripwire && make CPPFLAGS=-std=c++11
The default configuration is to use a local MTA. If you
don't have an MTA installed and have no wish to install
one, modify install/install.cfg
to use an SMTP server
instead. Otherwise the install will fail.
This package does not come with a test suite.
Now, as the root
user:
make install && cp -v policy/*.txt /usr/share/doc/tripwire-2.4.3.7
During make install, several questions are asked, including passwords. If you want to make a script, you have to apply a sed before running make install:
sed -i -e 's@installer/install.sh@& -n -s<site-password>
-l<local-password>
@' Makefile
Of course, you should do this with dummy passwords and change them later.
Another issue when scripting is that the installer exits when the standard input is not a terminal. You may disable this behavior with the following sed:
sed '/-t 0/,+3d' -i installer/install.sh
sed ...
installer/install.cfg: This command tells the
package to install the program database and reports in
/var/lib/tripwire
and sets the
proper location for man pages and documentation.
find ..., sed ..., and autoreconf -fi: The build system is unusable as is, and has to be modified for the build to succeed.
CPPFLAGS=-std=c++11
:
Setting the C++ preprocessor flags to version 11 is necessary
to prevent a conflict with the default version which is c++17
in recent version of gcc.
make install:
This command creates the Tripwire security keys as well as
installing the binaries. There are two keys: a site key and a
local key which are stored in /etc/tripwire/
.
cp -v policy/*.txt /usr/doc/tripwire-2.4.3.7: This command installs the tripwire sample policy files with the other tripwire documentation.i
Tripwire uses a policy
file to determine which files are integrity checked. The
default policy file (/etc/tripwire/twpol.txt
) is for a default
installation and will need to be updated for your system.
Policy files should be tailored to each individual
distribution and/or installation. Some example policy files
can be found in /usr/share/doc/tripwire/
.
If desired, copy the policy file you'd like to try into
/etc/tripwire/
instead of
using the default policy file, twpol.txt
. It is, however, recommended
that you edit your policy file. Get ideas from the examples
above and read /usr/share/doc/tripwire/policyguide.txt
for additional information. twpol.txt
is a good policy file for
learning about Tripwire as
it will note any changes to the file system and can even be
used as an annoying way of keeping track of changes for
uninstallation of software.
After your policy file has been edited to your satisfaction
you may begin the configuration steps (perform as the
root
) user:
twadmin --create-polfile --site-keyfile /etc/tripwire/site.key \ /etc/tripwire/twpol.txt && tripwire --init
Depending on your system and the contents of the policy file, the initialization phase above can take a relatively long time.
Tripwire will identify file changes in the critical system files specified in the policy file. Using Tripwire while making frequent changes to these directories will flag all these changes. It is most useful after a system has reached a configuration that the user considers stable.
To use Tripwire after creating a policy file to run a report, use the following command:
tripwire --check > /etc/tripwire/report.txt
View the output to check the integrity of your files. An automatic integrity report can be produced by using a cron facility to schedule the runs.
Reports are stored in binary and, if desired, encrypted.
View reports, as the root
user, with:
twprint --print-report -r /var/lib/tripwire/report/<report-name.twr>
After you run an integrity check, you should examine the
report (or email) and then modify the Tripwire database to reflect the
changed files on your system. This is so that Tripwire will not continually notify
you hat files you intentionally changed are a security
violation. To do this you must first ls -l
/var/lib/tripwire/report/ and note the name
of the newest file which starts with your system name as
presented by the command uname -n
and ends in
.twr
. These files were
created during report creation and the most current one is
needed to update the Tripwire database of your system. As
the root
user, type in the
following command making the appropriate report name:
tripwire --update --twrfile /var/lib/tripwire/report/<report-name.twr>
You will be placed into Vim with a copy of the report in front of you. If all the changes were good, then just type :wq and after entering your local key, the database will be updated. If there are files which you still want to be warned about, remove the 'x' before the filename in the report and type :wq.
is a signature gathering utility that displays the hash function values for the specified files |
|
is the main file integrity checking program |
|
administrative and utility tool used to perform certain administrative functions related to Tripwire files and configuration options |
|
prints Tripwire database and report files in clear text format |
Journaling file systems reduce the time needed to recover a file system that was not unmounted properly. While this can be extremely important in reducing downtime for servers, it has also become popular for desktop environments. This chapter contains other journaling file systems you can use instead of the default LFS extended file system (ext2/3/4). It also provides introductory material on managing disk arrays.
The only purpose of an initramfs is to mount the root filesystem. The initramfs is a complete set of directories that you would find on a normal root filesystem. It is bundled into a single cpio archive and compressed with one of several compression algorithms.
At boot time, the boot loader loads the kernel and the initramfs image into memory and starts the kernel. The kernel checks for the presence of the initramfs and, if found, mounts it as / and runs /init. The init program is typically a shell script. Note that the boot process takes longer, possibly significantly longer, if an initramfs is used.
For most distributions, kernel modules are the biggest reason to have an initramfs. In a general distribution, there are many unknowns such as file system types and disk layouts. In a way, this is the opposite of LFS where the system capabilities and layout are known and a custom kernel is normally built. In this situation, an initramfs is rarely needed.
There are only four primary reasons to have an initramfs in the LFS environment: loading the rootfs from a network, loading it from an LVM logical volume, having an encrypted rootfs where a password is required, or for the convenience of specifying the rootfs as a LABEL or UUID. Anything else usually means that the kernel was not configured properly.
If you do decide to build an initramfs, the following scripts will provide a basis to do it. The scripts will allow specifying a rootfs via partition UUID or partition LABEL or a rootfs on an LVM logical volume. They do not support an encrypted root file system or mounting the rootfs over a network card. For a more complete capability see the LFS Hints or dracut.
To install these scripts, run the following commands as the
root
user:
cat > /usr/sbin/mkinitramfs << "EOF"
#!/bin/bash
# This file based in part on the mkinitramfs script for the LFS LiveCD
# written by Alexander E. Patrakov and Jeremy Huntwork.
copy()
{
local file
if [ "$2" = "lib" ]; then
file=$(PATH=/usr/lib type -p $1)
else
file=$(type -p $1)
fi
if [ -n "$file" ] ; then
cp $file $WDIR/usr/$2
else
echo "Missing required file: $1 for directory $2"
rm -rf $WDIR
exit 1
fi
}
if [ -z $1 ] ; then
INITRAMFS_FILE=initrd.img-no-kmods
else
KERNEL_VERSION=$1
INITRAMFS_FILE=initrd.img-$KERNEL_VERSION
fi
if [ -n "$KERNEL_VERSION" ] && [ ! -d "/usr/lib/modules/$1" ] ; then
echo "No modules directory named $1"
exit 1
fi
printf "Creating $INITRAMFS_FILE... "
binfiles="sh cat cp dd killall ls mkdir mknod mount "
binfiles="$binfiles umount sed sleep ln rm uname"
binfiles="$binfiles readlink basename"
# Systemd installs udevadm in /bin. Other udev implementations have it in /sbin
if [ -x /usr/bin/udevadm ] ; then binfiles="$binfiles udevadm"; fi
sbinfiles="modprobe blkid switch_root"
# Optional files and locations
for f in mdadm mdmon udevd udevadm; do
if [ -x /usr/sbin/$f ] ; then sbinfiles="$sbinfiles $f"; fi
done
# Add lvm if present (cannot be done with the others because it
# also needs dmsetup
if [ -x /usr/sbin/lvm ] ; then sbinfiles="$sbinfiles lvm dmsetup"; fi
unsorted=$(mktemp /tmp/unsorted.XXXXXXXXXX)
DATADIR=/usr/share/mkinitramfs
INITIN=init.in
# Create a temporary working directory
WDIR=$(mktemp -d /tmp/initrd-work.XXXXXXXXXX)
# Create base directory structure
mkdir -p $WDIR/{dev,run,sys,proc,usr/{bin,lib/{firmware,modules},sbin}}
mkdir -p $WDIR/etc/{modprobe.d,udev/rules.d}
touch $WDIR/etc/modprobe.d/modprobe.conf
ln -s usr/bin $WDIR/bin
ln -s usr/lib $WDIR/lib
ln -s usr/sbin $WDIR/sbin
ln -s lib $WDIR/lib64
# Create necessary device nodes
mknod -m 640 $WDIR/dev/console c 5 1
mknod -m 664 $WDIR/dev/null c 1 3
# Install the udev configuration files
if [ -f /etc/udev/udev.conf ]; then
cp /etc/udev/udev.conf $WDIR/etc/udev/udev.conf
fi
for file in $(find /etc/udev/rules.d/ -type f) ; do
cp $file $WDIR/etc/udev/rules.d
done
# Install any firmware present
cp -a /usr/lib/firmware $WDIR/usr/lib
# Copy the RAID configuration file if present
if [ -f /etc/mdadm.conf ] ; then
cp /etc/mdadm.conf $WDIR/etc
fi
# Install the init file
install -m0755 $DATADIR/$INITIN $WDIR/init
if [ -n "$KERNEL_VERSION" ] ; then
if [ -x /usr/bin/kmod ] ; then
binfiles="$binfiles kmod"
else
binfiles="$binfiles lsmod"
sbinfiles="$sbinfiles insmod"
fi
fi
# Install basic binaries
for f in $binfiles ; do
ldd /usr/bin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
copy /usr/bin/$f bin
done
for f in $sbinfiles ; do
ldd /usr/sbin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
copy $f sbin
done
# Add udevd libraries if not in /usr/sbin
if [ -x /usr/lib/udev/udevd ] ; then
ldd /usr/lib/udev/udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
elif [ -x /usr/lib/systemd/systemd-udevd ] ; then
ldd /usr/lib/systemd/systemd-udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
fi
# Add module symlinks if appropriate
if [ -n "$KERNEL_VERSION" ] && [ -x /usr/bin/kmod ] ; then
ln -s kmod $WDIR/usr/bin/lsmod
ln -s kmod $WDIR/usr/bin/insmod
fi
# Add lvm symlinks if appropriate
# Also copy the lvm.conf file
if [ -x /usr/sbin/lvm ] ; then
ln -s lvm $WDIR/usr/sbin/lvchange
ln -s lvm $WDIR/usr/sbin/lvrename
ln -s lvm $WDIR/usr/sbin/lvextend
ln -s lvm $WDIR/usr/sbin/lvcreate
ln -s lvm $WDIR/usr/sbin/lvdisplay
ln -s lvm $WDIR/usr/sbin/lvscan
ln -s lvm $WDIR/usr/sbin/pvchange
ln -s lvm $WDIR/usr/sbin/pvck
ln -s lvm $WDIR/usr/sbin/pvcreate
ln -s lvm $WDIR/usr/sbin/pvdisplay
ln -s lvm $WDIR/usr/sbin/pvscan
ln -s lvm $WDIR/usr/sbin/vgchange
ln -s lvm $WDIR/usr/sbin/vgcreate
ln -s lvm $WDIR/usr/sbin/vgscan
ln -s lvm $WDIR/usr/sbin/vgrename
ln -s lvm $WDIR/usr/sbin/vgck
# Conf file(s)
cp -a /etc/lvm $WDIR/etc
fi
# Install libraries
sort $unsorted | uniq | while read library ; do
# linux-vdso and linux-gate are pseudo libraries and do not correspond to a file
# libsystemd-shared is in /lib/systemd, so it is not found by copy, and
# it is copied below anyway
if [[ "$library" == linux-vdso.so.1 ]] ||
[[ "$library" == linux-gate.so.1 ]] ||
[[ "$library" == libsystemd-shared* ]]; then
continue
fi
copy $library lib
done
if [ -d /usr/lib/udev ]; then
cp -a /usr/lib/udev $WDIR/usr/lib
fi
if [ -d /usr/lib/systemd ]; then
cp -a /usr/lib/systemd $WDIR/usr/lib
fi
if [ -d /usr/lib/elogind ]; then
cp -a /usr/lib/elogind $WDIR/usr/lib
fi
# Install the kernel modules if requested
if [ -n "$KERNEL_VERSION" ]; then
find \
/usr/lib/modules/$KERNEL_VERSION/kernel/{crypto,fs,lib} \
/usr/lib/modules/$KERNEL_VERSION/kernel/drivers/{block,ata,nvme,md,firewire} \
/usr/lib/modules/$KERNEL_VERSION/kernel/drivers/{scsi,message,pcmcia,virtio} \
/usr/lib/modules/$KERNEL_VERSION/kernel/drivers/usb/{host,storage} \
-type f 2> /dev/null | cpio --make-directories -p --quiet $WDIR
cp /usr/lib/modules/$KERNEL_VERSION/modules.{builtin,order} \
$WDIR/usr/lib/modules/$KERNEL_VERSION
if [ -f /usr/lib/modules/$KERNEL_VERSION/modules.builtin.modinfo ]; then
cp /usr/lib/modules/$KERNEL_VERSION/modules.builtin.modinfo \
$WDIR/usr/lib/modules/$KERNEL_VERSION
fi
depmod -b $WDIR $KERNEL_VERSION
fi
( cd $WDIR ; find . | cpio -o -H newc --quiet | gzip -9 ) > $INITRAMFS_FILE
# Prepare early loading of microcode if available
if ls /usr/lib/firmware/intel-ucode/* >/dev/null 2>&1 ||
ls /usr/lib/firmware/amd-ucode/* >/dev/null 2>&1; then
# first empty WDIR to reuse it
rm -r $WDIR/*
DSTDIR=$WDIR/kernel/x86/microcode
mkdir -p $DSTDIR
if [ -d /usr/lib/firmware/amd-ucode ]; then
cat /usr/lib/firmware/amd-ucode/microcode_amd*.bin > $DSTDIR/AuthenticAMD.bin
fi
if [ -d /usr/lib/firmware/intel-ucode ]; then
cat /usr/lib/firmware/intel-ucode/* > $DSTDIR/GenuineIntel.bin
fi
( cd $WDIR; find . | cpio -o -H newc --quiet ) > microcode.img
cat microcode.img $INITRAMFS_FILE > tmpfile
mv tmpfile $INITRAMFS_FILE
rm microcode.img
fi
# Remove the temporary directories and files
rm -rf $WDIR $unsorted
printf "done.\n"
EOF
chmod 0755 /usr/sbin/mkinitramfs
mkdir -p /usr/share/mkinitramfs &&
cat > /usr/share/mkinitramfs/init.in << "EOF"
#!/bin/sh
PATH=/usr/bin:/usr/sbin
export PATH
problem()
{
printf "Encountered a problem!\n\nDropping you to a shell.\n\n"
sh
}
no_device()
{
printf "The device %s, which is supposed to contain the\n" $1
printf "root file system, does not exist.\n"
printf "Please fix this problem and exit this shell.\n\n"
}
no_mount()
{
printf "Could not mount device %s\n" $1
printf "Sleeping forever. Please reboot and fix the kernel command line.\n\n"
printf "Maybe the device is formatted with an unsupported file system?\n\n"
printf "Or maybe filesystem type autodetection went wrong, in which case\n"
printf "you should add the rootfstype=... parameter to the kernel command line.\n\n"
printf "Available partitions:\n"
}
do_mount_root()
{
mkdir /.root
[ -n "$rootflags" ] && rootflags="$rootflags,"
rootflags="$rootflags$ro"
case "$root" in
/dev/* ) device=$root ;;
UUID=* ) eval $root; device="/dev/disk/by-uuid/$UUID" ;;
PARTUUID=*) eval $root; device="/dev/disk/by-partuuid/$PARTUUID" ;;
LABEL=* ) eval $root; device="/dev/disk/by-label/$LABEL" ;;
"" ) echo "No root device specified." ; problem ;;
esac
while [ ! -b "$device" ] ; do
no_device $device
problem
done
if ! mount -n -t "$rootfstype" -o "$rootflags" "$device" /.root ; then
no_mount $device
cat /proc/partitions
while true ; do sleep 10000 ; done
else
echo "Successfully mounted device $root"
fi
}
do_try_resume()
{
case "$resume" in
UUID=* ) eval $resume; resume="/dev/disk/by-uuid/$UUID" ;;
LABEL=*) eval $resume; resume="/dev/disk/by-label/$LABEL" ;;
esac
if $noresume || ! [ -b "$resume" ]; then return; fi
ls -lH "$resume" | ( read x x x x maj min x
echo -n ${maj%,}:$min > /sys/power/resume )
}
init=/sbin/init
root=
rootdelay=
rootfstype=auto
ro="ro"
rootflags=
device=
resume=
noresume=false
mount -n -t devtmpfs devtmpfs /dev
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
mount -n -t tmpfs tmpfs /run
read -r cmdline < /proc/cmdline
for param in $cmdline ; do
case $param in
init=* ) init=${param#init=} ;;
root=* ) root=${param#root=} ;;
rootdelay=* ) rootdelay=${param#rootdelay=} ;;
rootfstype=*) rootfstype=${param#rootfstype=} ;;
rootflags=* ) rootflags=${param#rootflags=} ;;
resume=* ) resume=${param#resume=} ;;
noresume ) noresume=true ;;
ro ) ro="ro" ;;
rw ) ro="rw" ;;
esac
done
# udevd location depends on version
if [ -x /sbin/udevd ]; then
UDEVD=/sbin/udevd
elif [ -x /lib/udev/udevd ]; then
UDEVD=/lib/udev/udevd
elif [ -x /lib/systemd/systemd-udevd ]; then
UDEVD=/lib/systemd/systemd-udevd
else
echo "Cannot find udevd nor systemd-udevd"
problem
fi
${UDEVD} --daemon --resolve-names=never
udevadm trigger
udevadm settle
if [ -f /etc/mdadm.conf ] ; then mdadm -As ; fi
if [ -x /sbin/vgchange ] ; then /sbin/vgchange -a y > /dev/null ; fi
if [ -n "$rootdelay" ] ; then sleep "$rootdelay" ; fi
do_try_resume # This function will not return if resuming from disk
do_mount_root
killall -w ${UDEVD##*/}
exec switch_root /.root "$init" "$@"
EOF
LVM2-2.03.23 and/or mdadm-4.2 must be installed before generating the initramfs, if the system partition uses them.
To build an initramfs, run the following as the root
user:
mkinitramfs [KERNEL VERSION]
The optional argument is the directory where the appropriate
kernel modules are located. This must be a subdirectory of
/lib/modules
. If no modules are
specified, then the initramfs is named initrd.img-no-kmods. If a kernel
version is specified, the initrd is named initrd.img-$KERNEL_VERSION and is
only appropriate for the specific kernel specified. The
output file will be placed in the current directory.
If early loading of microcode is needed (see the
section called “Microcode updates for CPUs”), you can
install the appropriate blob or container in /lib/firmware
. It will be automatically
added to the initrd when running mkinitramfs.
After generating the initrd, copy it to the /boot
directory.
Now edit /boot/grub/grub.cfg
and add a new menuentry. Below are several examples.
# Generic initramfs and root fs identified by UUID menuentry "LFS Dev (LFS-7.0-Feb14) initrd, Linux 3.0.4" { linux /vmlinuz-3.0.4-lfs-20120214 root=UUID=54b934a9-302d-415e-ac11-4988408eb0a8 ro initrd /initrd.img-no-kmods }
# Generic initramfs and root fs on LVM partition menuentry "LFS Dev (LFS-7.0-Feb18) initrd lvm, Linux 3.0.4" { linux /vmlinuz-3.0.4-lfs-20120218 root=/dev/mapper/myroot ro initrd /initrd.img-no-kmods }
# Specific initramfs and root fs identified by LABEL menuentry "LFS Dev (LFS-7.1-Feb20) initrd label, Linux 3.2.6" { linux /vmlinuz-3.2.6-lfs71-120220 root=LABEL=lfs71 ro initrd /initrd.img-3.2.6-lfs71-120220 }
Finally, reboot the system and select the desired system.
The btrfs-progs package contains administration and debugging tools for the B-tree file system (btrfs).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v6.7.1.tar.xz
Download MD5 sum: 3898c68efdc0fe4e3a6a1bd90b3b4fa4
Download size: 2.4 MB
Estimated disk space required: 62 MB (transient files created during tests need up to 10 GB)
Estimated build time: 0.3 SBU (with parallelism=4; add 4.6 SBU for tests, up to 14 SBU on slow disks)
LVM2-2.03.23 (dmsetup is used in tests), sphinx-7.2.6 and sphinx_rtd_theme-2.0.0 (required to build documentation), and reiserfsprogs (for tests).
Enable the following option in the kernel configuration and recompile the kernel:
File systems ---> <*/M> Btrfs filesystem support [BTRFS_FS]
In addition to the above and to the options required for LVM2-2.03.23, the following options must be enabled for running tests:
File systems ---> <*/M> Btrfs filesystem support [BTRFS_FS] [*] Btrfs POSIX Access Control Lists [BTRFS_FS_POSIX_ACL]
Install btrfs-progs by running the following commands:
./configure --prefix=/usr \ --disable-static \ --disable-documentation && make
Some tests require grep built with perl regular expressions. To obtain this, rebuild grep with the LFS Chapter 8 instructions after installing pcre2-10.42.
Before running tests, build a support program:
make fssum
To test the results, issue (as the root
user):
pushd tests ./fsck-tests.sh ./mkfs-tests.sh ./cli-tests.sh ./convert-tests.sh ./misc-tests.sh ./fuzz-tests.sh popd
If the above mentioned kernel options are not enabled, some tests fail, and prevent all the remaining tests from running because the test disk image is not cleanly unmounted.
Install the package as the root
user:
make install
If you have passed --disable-documentation
to
configure and
you need the manual pages, install them by running, as the
root
user:
for i in 5 8; do install Documentation/*.$i /usr/share/man/man$i done
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--disable-documentation
: This
switch disables rebuilding the manual pages, because it
requires sphinx-7.2.6.
is the main interface into btrfs filesystem operations |
|
converts from an ext2/3/4 or reiserfs filesystem to btrfs |
|
is a filter to find btrfs root |
|
maps btrfs logical extent to physical extent |
|
overwrites the primary superblock with a backup copy |
|
tunes various filesystem parameters |
|
does nothing, but is present for consistency with fstab |
|
creates a btrfs file system |
The dosfstools package contains various utilities for use with the FAT family of file systems.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/dosfstools/dosfstools/releases/download/v4.2/dosfstools-4.2.tar.gz
Download MD5 sum: 49c8e457327dc61efab5b115a27b087a
Download size: 314 KB
Estimated disk space required: 4.5 MB (with tests)
Estimated build time: less than 0.1 SBU
Enable the following option in the kernel configuration and recompile the kernel if you need to mount a FAT-family filesystem:
File systems ---> DOS/FAT/EXFAT/NT Filesystems ---> < /*/M> MSDOS fs support [MSDOS_FS] <*/M> VFAT (Windows-95) fs support [VFAT_FS]
Note that CONFIG_MSDOS_FS
deliberately unsupport long file names. CONFIG_VFAT_FS
should be used instead unless
you really want to enforce the DOS-style “8.3” file names.
You can mount a FAT-family filesystem once the kernel supports it. If you don't need to create, check, or relabel a FAT-family system, you may skip this package.
Install dosfstools by running the following commands:
./configure --prefix=/usr \ --enable-compat-symlinks \ --mandir=/usr/share/man \ --docdir=/usr/share/doc/dosfstools-4.2 && make
To test the results, issue: make check.
Now, as the root
user:
make install
--enable-compat-symlinks
: This
switch creates the dosfsck,
dosfslabel, fsck.msdos, fsck.vfat, mkdosfs, mkfs.msdos, and mkfs.vfat symlinks required by some
programs.
FUSE (Filesystem in Userspace) is a simple interface for userspace programs to export a virtual filesystem to the Linux kernel. Fuse also aims to provide a secure method for non privileged users to create and mount their own filesystem implementations.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libfuse/libfuse/releases/download/fuse-3.16.2/fuse-3.16.2.tar.gz
Download MD5 sum: b00bf08b27ead4a9411578777e94a1cc
Download size: 14 MB
Estimated disk space required: 222 MB (with tests and documentation)
Estimated build time: 0.2 SBU (add 0.3 SBU for tests)
Doxygen-1.10.0 (to rebuild the API documentation), pytest-8.0.0 (required for tests), and looseversion (for tests)
Enable the following options in the kernel configuration and recompile the kernel if necessary:
File systems ---> <*/M> FUSE (Filesystem in Userspace) support [FUSE_FS]
Character devices in userspace should be enabled too for running the tests:
File systems ---> <*/M> FUSE (Filesystem in Userspace) support [FUSE_FS] <*/M> Character device in Userspace support [CUSE]
Install Fuse by running the following commands:
sed -i '/^udev/,$ s/^/#/' util/meson.build && mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
The API documentation is included in the package, but if you have Doxygen-1.10.0 installed and wish to rebuild it, issue:
pushd .. && doxygen doc/Doxyfile && popd
To test the results, issue the following commands (as the
root
user):
python3 -m venv --system-site-packages testenv && source testenv/bin/activate && pip3 install looseversion && python3 -m pytest deactivate
The pytest-8.0.0 Python module is required for
the tests. One test named test_cuse
will fail if the CONFIG_CUSE
configuration item
was not enabled when the kernel was built. One test,
test/util.py
, will output a
warning due to the usage of an unknown mark in pytest. One
test named test_notify_inval_entry[True-expire_entries]
may fail under certain circumstances.
Now, as the root
user:
ninja install && chmod u+s /usr/bin/fusermount3 && cd .. && cp -Rv doc/html -T /usr/share/doc/fuse-3.16.2 && install -v -m644 doc/{README.NFS,kernel.txt} \ /usr/share/doc/fuse-3.16.2
sed ... util/meson.build: This command disables the installation of a boot script and udev rule that are not needed.
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
Some options regarding mount policy can be set in the file
/etc/fuse.conf
. To install
the file run the following command as the root
user:
cat > /etc/fuse.conf << "EOF"
# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#
#mount_max = 1000
# Allow non-root users to specify the 'allow_other' or 'allow_root'
# mount options.
#
#user_allow_other
EOF
Additional information about the meaning of the configuration options are found in the man page.
The jfsutils package contains administration and debugging tools for the jfs file system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://jfs.sourceforge.net/project/pub/jfsutils-1.1.15.tar.gz
Download MD5 sum: 8809465cd48a202895bc2a12e1923b5d
Download size: 532 KB
Estimated disk space required: 8.9 MB
Estimated build time: 0.1 SBU
Required patch to fix issues exposed by GCC 10 and later: https://www.linuxfromscratch.org/patches/blfs/12.1/jfsutils-1.1.15-gcc10_fix-1.patch
Enable the following option in the kernel configuration and recompile the kernel:
File systems ---> <*/M> JFS filesystem support [JFS_FS]
First, fix some issues exposed by GCC 10 and later:
patch -Np1 -i ../jfsutils-1.1.15-gcc10_fix-1.patch
Install jfsutils by running the following commands:
sed -i "/unistd.h/a#include <sys/types.h>" fscklog/extract.c && sed -i "/ioctl.h/a#include <sys/sysmacros.h>" libfs/devices.c && ./configure && make
This package does not come with a test suite.
Now, as the root
user:
make install
sed ...: Fixes building with glibc 2.28.
is used to replay the JFS transaction log, check a JFS formatted device for errors, and fix any errors found |
|
is a hard link to fsck.jfs |
|
constructs an JFS file system |
|
is a hard link to mkfs.jfs |
|
is a program which can be used to perform various low-level actions on a JFS formatted device |
|
extracts a JFS fsck service log into a file and/or formats and displays the extracted file |
|
dumps the contents of the journal log from the specified JFS formatted device into output file ./jfslog.dmp |
|
adjusts tunable file system parameters on JFS file systems |
The LVM2 package is a set of tools that manage logical partitions. It allows spanning of file systems across multiple physical disks and disk partitions and provides for dynamic growing or shrinking of logical partitions, mirroring and low storage footprint snapshots.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://sourceware.org/ftp/lvm2/LVM2.2.03.23.tgz
Download MD5 sum: 0535b5e638b6f0b48f7b259e0ec0ba65
Download size: 2.7 MB
Estimated disk space required: 39 MB (add 20 MB for tests; transient files can grow up to around 300 MB in the /tmp directory during tests)
Estimated build time: 0.1 SBU (using parallelism=4; add 9 to 48 SBU for tests, depending on disk speed and whether ram block device is enabled in the kernel)
mdadm-4.2, Valgrind-3.22.0, Which-2.21, xfsprogs-6.6.0 (all four may be used, but are not required, for tests), reiserfsprogs, thin-provisioning-tools, and vdo
Enable the following options in the kernel configuration and recompile the kernel:
There are several other Device Mapper options in the kernel beyond those listed below. In order to get reasonable results if running the regression tests, all must be enabled either internally or as a module. The tests will all time out if Magic SysRq key is not enabled.
Device Drivers ---> [*] Block devices ---> [BLK_DEV] <*/M> RAM block device support [BLK_DEV_RAM] [*] Multiple devices driver support (RAID and LVM) ---> [MD] <*/M> Device mapper support [BLK_DEV_DM] <*/M> Crypt target support [DM_CRYPT] <*/M> Snapshot target [DM_SNAPSHOT] <*/M> Thin provisioning target [DM_THIN_PROVISIONING] <*/M> Cache target (EXPERIMENTAL) [DM_CACHE] <*/M> Mirror target [DM_MIRROR] <*/M> Zero target [DM_ZERO] <*/M> I/O delaying target [DM_DELAY] Kernel hacking ---> Generic Kernel Debugging Instruments ---> [*] Magic SysRq key [MAGIC_SYSRQ]
Install LVM2 by running the following commands:
PATH+=:/usr/sbin \ ./configure --prefix=/usr \ --enable-cmdlib \ --enable-pkgconfig \ --enable-udev_sync && make
The tests use udev for
logical volume synchronization, so the LVM udev rules and
some utilities need to be installed before running the tests.
If you are installing LVM2
for the first time, and do not want to install the full
package before running the tests, the minimal set of
utilities can be installed by running the following
instructions as the root
user:
make -C tools install_tools_dynamic && make -C udev install && make -C libdm install
To test the results, issue, as the root
user:
LC_ALL=en_US.UTF-8 make check_local
Some tests may hang. In this case they can be skipped by adding S=<testname> to the make command. Other targets are available and can be listed with make -C test help. The test timings are very dependent on the speed of the disk(s), and on the number of enabled kernel options.
The tests do not implement the “expected fail” possibility, and a small number of test failures is expected by upstream. More failures may happen because some kernel options are missing. For example, the lack of the dm-delay device mapper target explains some failures. Some tests may fail if there is insufficient free space available in the partition with the /tmp directory. At least one test fails if 16 TB is not available. Some tests are flagged “warned” if thin-provisioning-tools are not installed. A workaround is to add the following flags to configure:
--with-thin-check= \ --with-thin-dump= \ --with-thin-repair= \ --with-thin-restore= \ --with-cache-check= \ --with-cache-dump= \ --with-cache-repair= \ --with-cache-restore= \
Some tests may hang. They can be removed if necessary, for example: rm test/shell/lvconvert-raid-reshape.sh. The tests generate a lot of kernel messages, which may clutter your terminal. You can disable them by issuing dmesg -D before running the tests (do not forget to issue dmesg -E when tests are done).
The checks create device nodes in the /tmp directory. The tests will fail if /tmp is mounted with the nodev option.
Now, as the root
user:
make install rm -fv /usr/lib/udev/rules.d/69-dm-lvm.rules
PATH+=:/usr/sbin: The path
must contain /usr/sbin
for
proper system tool detection by the configure script. This
instruction ensures that PATH is properly set even if you
build as an unprivileged user.
--enable-cmdlib
: This
switch enables building of the shared command library. It is
required when building the event daemon.
--enable-pkgconfig
:
This switch enables installation of pkg-config support files.
--enable-udev_sync
:
This switch enables synchronisation with Udev processing.
--enable-dmeventd
: This switch
enables building of the Device
Mapper event daemon.
rm .../69-dm-lvm.rules: Under certain circumstances, this udev rule calls systemd-run, which is not available on sysv. It performs actions that are done by another boot script anyway, so it is not needed.
is a utility to deactivate block devices |
|
(optional) is the Device Mapper event daemon |
|
is a low level logical volume management tool |
|
is a utility used to resize or check filesystem on a device |
|
provides the command-line tools for LVM2. Commands are implemented via symbolic links to this program to manage physical devices (pv*), volume groups (vg*) and logical volumes (lv*) |
|
is a tool used to dump various information concerning LVM2 |
|
is used to import a duplicated VG (e.g. hardware snapshot) |
|
contains the Device Mapper API functions |
LVM manages disk drives. It allows multiple drives and partitions to be combined into larger volume groups, assists in making backups through a snapshot, and allows for dynamic volume resizing. It can also provide mirroring similar to a RAID 1 array.
A complete discussion of LVM is beyond the scope of this introduction, but basic concepts are presented below.
To run any of the commands presented here, the LVM2-2.03.23 package must
be installed. All commands must be run as the root
user.
Management of disks with lvm is accomplished using the following concepts:
These are physical disks or partitions such as /dev/sda3 or /dev/sdb.
These are named groups of physical volumes that can be manipulated by the administrator. The number of physical volumes that make up a volume group is arbitrary. Physical volumes can be dynamically added or removed from a volume group.
Volume groups may be subdivided into logical volumes. Each logical volume can then be individually formatted as if it were a regular Linux partition. Logical volumes may be dynamically resized by the administrator according to need.
To give a concrete example, suppose that you have two 2 TB
disks. Also suppose a really large amount of space is required
for a very large database, mounted on /srv/mysql
. This is what the initial set of
partitions would look like:
Partition Use Size Partition Type
/dev/sda1 /boot 100MB 83 (Linux)
/dev/sda2 / 10GB 83 (Linux)
/dev/sda3 swap 2GB 82 (Swap)
/dev/sda4 LVM remainder 8e (LVM)
/dev/sdb1 swap 2GB 82 (Swap)
/dev/sdb2 LVM remainder 8e (LVM)
First initialize the physical volumes:
pvcreate /dev/sda4 /dev/sdb2
A full disk can be used as part of a physical volume, but beware that the pvcreate command will destroy any partition information on that disk.
Next create a volume group named lfs-lvm:
vgcreate lfs-lvm /dev/sda4 /dev/sdb2
The status of the volume group can be checked by running the command vgscan. Now create the logical volumes. Since there is about 3900 GB available, leave about 900 GB free for expansion. Note that the logical volume named mysql is larger than any physical disk.
lvcreate --name mysql --size 2500G lfs-lvm lvcreate --name home --size 500G lfs-lvm
Finally the logical volumes can be formatted and mounted. In this example, the jfs file system (jfsutils-1.1.15) is used for demonstration purposes.
mkfs -t ext4 /dev/lfs-lvm/home mkfs -t jfs /dev/lfs-lvm/mysql mount /dev/lfs-lvm/home /home mkdir -p /srv/mysql mount /dev/lfs-lvm/mysql /srv/mysql
It may be needed to activate those logical volumes, for them to
appear in /dev
. They can all be
activated at the same time by issuing, as the root
user:
vgchange -a y
The LFS boot scripts automatically make these logical volumes
available to the system in the udev script. Edit the
/etc/fstab
file as required to
automatically mount them.
A LVM logical volume can host a root filesystem, but requires
the use of an initramfs (initial RAM file system). The
initramfs proposed in the section called “About initramfs”
allows to pass the lvm volume in the root=
switch of the kernel
command line.
For more information about LVM, see the LVM HOWTO and the lvm man pages. A good in-depth guide is available from RedHat®, although it makes sometimes reference to proprietary tools.
The storage technology known as RAID (Redundant Array of Independent Disks) combines multiple physical disks into a logical unit. The drives can generally be combined to provide data redundancy or to extend the size of logical units beyond the capability of the physical disks or both. The technology also allows for providing hardware maintenance without powering down the system.
The types of RAID organization are described in the RAID Wiki.
Note that while RAID provides protection against disk failures, it is not a substitute for backups. A file deleted is still deleted on all the disks of a RAID array. Modern backups are generally done via rsync-3.2.7.
There are three major types of RAID implementation: Hardware RAID, BIOS-based RAID, and Software RAID.
Hardware based RAID provides capability through proprietary hardware and data layouts. The control and configuration is generally done via firmware in conjunction with executable programs made available by the device manufacturer. The capabilities are generally supplied via a PCI card, although there are some instances of RAID components integrated in to the motherboard. Hardware RAID may also be available in a stand-alone enclosure.
One advantage of hardware-based RAID is that the drives are offered to the operating system as a logical drive and no operating system dependent configuration is needed.
Disadvantages include difficulties in transferring drives from one system to another, updating firmware, or replacing failed RAID hardware.
Some computers offer a hardware-like RAID implementation in the system BIOS. Sometime this is referred to as 'fake' RAID as the capabilities are generally incorporated into firmware without any hardware acceleration.
The advantages and disadvantages of BIOS-based RAID are generally the same as hardware RAID with the additional disadvantage that there is no hardware acceleration.
In some cases, BIOS-based RAID firmware is enabled by default (e.g. some DELL systems). If software RAID is desired, this option must be explicitly disabled in the BIOS.
Software based RAID is the most flexible form of RAID. It is easy to install and update and provides full capability on all or part of any drives available to the system. In BLFS, the RAID software is found in mdadm-4.2.
Configuring a RAID device is straightforward using
mdadm. Generally devices are
created in the /dev
directory
as /dev/mdx
where x is an integer.
The first step in creating a RAID array is to use
partitioning software such as fdisk
or parted-3.6 to define
the partitions needed for the array. Usually, there will be
one partition on each drive participating in the RAID array,
but that is not strictly necessary. For this example, there
will be four disk drives: /dev/sda
, /dev/sdb
, /dev/sdc
, and /dev/sdd
. They will be partitioned as
follows:
Partition Size Type Use
sda1: 100 MB fd Linux raid auto /boot (RAID 1) /dev/md0
sda2: 10 GB fd Linux raid auto / (RAID 1) /dev/md1
sda3: 2 GB 83 Linux swap swap
sda4 300 GB fd Linux raid auto /home (RAID 5) /dev/md2
sdb1: 100 MB fd Linux raid auto /boot (RAID 1) /dev/md0
sdb2: 10 GB fd Linux raid auto / (RAID 1) /dev/md1
sdb3: 2 GB 83 Linux swap swap
sdb4 300 GB fd Linux raid auto /home (RAID 5) /dev/md2
sdc1: 12 GB fd Linux raid auto /usr/src (RAID 0) /dev/md3
sdc2: 300 GB fd Linux raid auto /home (RAID 5) /dev/md2
sdd1: 12 GB fd Linux raid auto /usr/src (RAID 0) /dev/md3
sdd2: 300 GB fd Linux raid auto /home (RAID 5) /dev/md2
In this arrangement, a separate boot partition is created as
the first small RAID array and a root filesystem as the
secong RAID array, both mirrored. The third partition is a
large (about 1TB) array for the /home
directory. This provides an ability
to stripe data across multiple devices, improving speed for
both reading and writing large files. Finally, a fourth array
is created that concatenates two partitions into a larger
device.
All mdadm commands must be
run as the root
user.
To create these RAID arrays the commands are:
/sbin/mdadm -Cv /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 /sbin/mdadm -Cv /dev/md1 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2 /sbin/mdadm -Cv /dev/md3 --level=0 --raid-devices=2 /dev/sdc1 /dev/sdd1 /sbin/mdadm -Cv /dev/md2 --level=5 --raid-devices=4 \ /dev/sda4 /dev/sdb4 /dev/sdc2 /dev/sdd2
The devices created can be examined by device. For example,
to see the details of /dev/md1
,
use /sbin/mdadm --detail
/dev/md1
:
Version : 1.2
Creation Time : Tue Feb 7 17:08:45 2012
Raid Level : raid1
Array Size : 10484664 (10.00 GiB 10.74 GB)
Used Dev Size : 10484664 (10.00 GiB 10.74 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Feb 7 23:11:53 2012
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : core2-blfs:0 (local to host core2-blfs)
UUID : fcb944a4:9054aeb2:d987d8fe:a89121f8
Events : 17
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
From this point, the partitions can be formatted with the
filesystem of choice (e.g. ext3, ext4, xfsprogs-6.6.0, etc).
The formatted partitions can then be mounted. The
/etc/fstab
file can use the
devices created for mounting at boot time and the linux
command line in /boot/grub/grub.cfg
can specify
root=/dev/md1
.
The swap devices should be specified in the /etc/fstab
file as normal. The kernel
normally stripes swap data across multiple swap files and
should not be made part of a RAID array.
For further options and management details of RAID devices,
refer to man
mdadm
.
Additional details for monitoring RAID arrays and dealing with problems can be found at the Linux RAID Wiki.
The mdadm package contains administration tools for software RAID.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-4.2.tar.xz
Download MD5 sum: a304eb0a978ca81045620d06547050a6
Download size: 444 KB
Estimated disk space required: 5.0 MB
Estimated build time: 0.1 SBU
A MTA
Kernel versions in series 4.1 through 4.4.1 have a broken RAID implementation. Use a kernel with version at or above 4.4.2.
Enable the following options in the kernel configuration and recompile the kernel, if necessary. Only the RAID types desired are required.
Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) ---> [MD] <*/M> RAID support [BLK_DEV_MD] [*] Autodetect RAID arrays during kernel boot [MD_AUTODETECT] # Only the RAID types desired are required: < /*/M> RAID-0 (striping) mode [MD_RAID0] < /*/M> RAID-1 (mirroring) mode [MD_RAID1] < /*/M> RAID-10 (mirrored striping) mode [MD_RAID10] < /*/M> RAID-4/RAID-5/RAID-6 mode [MD_RAID456]
Build mdadm by running the following command:
make
This package does not come with a working test suite.
Now, as the root
user:
make BINDIR=/usr/sbin install
make everything: This optional target creates extra programs, particularly a statically-linked version of mdadm. This needs to be manually installed.
A new read-write driver for NTFS, called NTFS3, has been added into the Linux kernel since the 5.15 release. The performance of NTFS3 is much better than ntfs-3g. To enable NTFS3, enable the following options in the kernel configuration and recompile the kernel if necessary:
File systems ---> DOS/FAT/EXFAT/NT Filesystems ---> <*/M> NTFS Read-Write file system support [NTFS3_FS]
To ensure the mount command uses NTFS3 for ntfs partitions, create a wrapper script:
cat > /usr/sbin/mount.ntfs << "EOF" &&
#!/bin/sh
exec mount -t ntfs3 "$@"
EOF
chmod -v 755 /usr/sbin/mount.ntfs
With the kernel support available, ntfs-3g is only needed if you need the utilities from it (for example, to create NTFS filesystems).
The Ntfs-3g package contains a stable, read-write open source driver for NTFS partitions. NTFS partitions are used by most Microsoft operating systems. Ntfs-3g allows you to mount NTFS partitions in read-write mode from your Linux system. It uses the FUSE kernel module to be able to implement NTFS support in userspace. The package also contains various utilities useful for manipulating NTFS partitions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2022.10.3.tgz
Download MD5 sum: a038af61be7584b79f8922ff11244090
Download size: 1.3 MB
Estimated disk space required: 22 MB
Estimated build time: 0.2 SBU
fuse 2.x (this disables user mounts)
Enable the following options in the kernel configuration and recompile the kernel if necessary:
File systems ---> <*/M> FUSE (Filesystem in Userspace) support [FUSE_FS]
Note that it is only needed for mounting NTFS partitions with ntfs-3g. If you will use the in-kernel NTFS3 driver for mounting NTFS partitions (as the BLFS editors recommend) instead, you can skip this configuration item.
Install Ntfs-3g by running the following commands:
./configure --prefix=/usr \ --disable-static \ --with-fuse=internal \ --docdir=/usr/share/doc/ntfs-3g-2022.10.3 && make
This package does not come with a test suite.
Now, as the root
user:
make install &&
It's recommended to use the in-kernel NTFS3 driver for mounting NTFS filesystems, instead of ntfs-3g (see the note at the start of this page). However, if you want to use ntfs-3g to mount the NTFS filesystems anyway, create a symlink for the mount command:
ln -sv ../bin/ntfs-3g /usr/sbin/mount.ntfs && ln -sv ntfs-3g.8 /usr/share/man/man8/mount.ntfs.8
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-fuse=internal
:
This switch dynamically forces ntfs-3g to use an internal copy of the
fuse-2.x library. This is
required if you wish to allow users to mount NTFS partitions.
--disable-ntfsprogs
: Disables
installation of various utilities used to manipulate NTFS
partitions.
chmod -v 4755 /usr/bin/ntfs-3g: Making mount.ntfs setuid root allows non root users to mount NTFS partitions.
To mount a Windows partition at boot time, put a line like this in /etc/fstab:
/dev/sda1 /mnt/windows auto defaults 0 0
To allow users to mount a usb stick with an NTFS filesystem on it, put a line similar to this (change sdc1 to whatever a usb stick would be on your system) in /etc/fstab:
/dev/sdc1 /mnt/usb auto user,noauto,umask=0,utf8 0 0
In order for a user to be able to mount the usb stick, they
will need to be able to write to /mnt/usb
, so as the root
user:
chmod -v 777 /mnt/usb
is similar to ntfs-3g but uses the Fuse low-level interface |
|
is a symlink to mkntfs |
|
creates an NTFS file system |
|
is a symlink to lowntfs-3g |
|
mounts an NTFS filesystem |
|
is a symbolic link to ntfs-3g |
|
is an NTFS driver, which can create, remove, rename, move files, directories, hard links, and streams. It can also read and write files, including streams, sparse files and transparently compressed files. It can also handle special files like symbolic links, devices, and FIFOs; moreover it provides standard management of file ownership and permissions, including POSIX ACLs |
|
tests if an NTFS volume is mountable read only or read-write, and exits with a status value accordingly. The volume can be a block device or image file |
|
identifies files in a specified region of an NTFS volume |
|
copies a file to an NTFS volume |
|
fixes common errors and forces Windows to check an NTFS partition |
|
lists directory contents on an NTFS filesystem |
|
prints NTFS files and streams on the standard output |
|
clones an NTFS filesystem |
|
compares two NTFS filesystems and shows the differences |
|
dumps a file's attributes |
|
displays or changes the label on an ntfs file system |
|
resizes an NTFS filesystem without data loss |
|
recovers a deleted file from an NTFS volume |
|
contains the Ntfs-3g API functions |
The gptfdisk package is a set of programs for creation and maintenance of GUID Partition Table (GPT) disk drives. A GPT partitioned disk is required for drives greater than 2 TB and is a modern replacement for legacy PC-BIOS partitioned disk drives that use a Master Boot Record (MBR). The main program, gdisk, has an interface similar to the classic fdisk program.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/gptfdisk/gptfdisk-1.0.10.tar.gz
Download MD5 sum: 1970269eb7a97560e238611524b7797a
Download size: 216 KB
Estimated disk space required: 2.4 MB
Estimated build time: less than 0.1 SBU (add 0.2 SBU for tests)
The gptfdisk package comes
with a rudimentary Makefile
.
First we update it to provide a simple build and install
interface and fix the location of a header file and fix some
minor location issues. Install gptfdisk by running the following
commands:
patch -Np1 -i ../gptfdisk-1.0.10-convenience-1.patch && sed -i 's|ncursesw/||' gptcurses.cc && sed -i 's|sbin|usr/sbin|' Makefile && make
To test the results, issue: make test.
Now, as the root
user:
make install
patch -Np1 ...:
This patch modifies the Makefile
file so that it provides an
“install” target.
The Parted package is a disk partitioning and partition resizing tool.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/parted/parted-3.6.tar.xz
Download MD5 sum: 93d2d8f22baebc5eb65b85da05a79e4e
Download size: 1.8 MB
Estimated disk space required: 29 MB (additional 3 MB for the tests and additional 2 MB for optional PDF and Postscript documentation)
Estimated build time: 0.3 SBU (additional 3.6 SBU for the tests)
LVM2-2.03.23 (device-mapper, required if building udisks)
dosfstools-4.2, texlive-20230313 (or install-tl-unx), and Digest::CRC (for tests)
About 20 % more tests are run if the following kernel module is built:
Device Drivers ---> SCSI device support ---> [*] SCSI low-level drivers ---> [SCSI_LOWLEVEL] <M> SCSI debugging host and device simulator [SCSI_DEBUG]
Install Parted by running the following commands:
./configure --prefix=/usr --disable-static && make && make -C doc html && makeinfo --html -o doc/html doc/parted.texi && makeinfo --plaintext -o doc/parted.txt doc/parted.texi
If you have texlive-20230313 installed and wish to create PDF and Postscript documentation issue the following commands:
cp build-aux/texinfo.tex doc && texi2pdf -o doc/parted.pdf doc/parted.texi && texi2dvi -o doc/parted.dvi doc/parted.texi && dvips -o doc/parted.ps doc/parted.dvi
To test the results, issue, as the root
user:
make check
Many tests are skipped if not run as the root
user.
Now, as the root
user:
make install && install -v -m755 -d /usr/share/doc/parted-3.6/html && install -v -m644 doc/html/* \ /usr/share/doc/parted-3.6/html && install -v -m644 doc/{FAT,API,parted.{txt,html}} \ /usr/share/doc/parted-3.6
Install the optional PDF and Postscript documentation by
issuing the following command as the root
user:
install -v -m644 doc/FAT doc/API doc/parted.{pdf,ps,dvi} \ /usr/share/doc/parted-3.6
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--disable-device-mapper
: This
option disables device mapper support. Add this parameter if
you have not installed LVM2.
The smartmontools package contains utility programs (smartctl, smartd) to control/monitor storage systems using the Self-Monitoring, Analysis and Reporting Technology System (S.M.A.R.T.) built into most modern ATA and SCSI disks.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/smartmontools/smartmontools-7.4.tar.gz
Download MD5 sum: 178d31a6ff5256c093227ab45a3f52aa
Download size: 1 MB
Estimated disk space required: 27 MB
Estimated build time: 0.2 SBU
cURL-8.6.0 or Lynx-2.8.9rel.1 or Wget-1.21.4 (download tools), and GnuPG-2.4.4 (encrypted hard disks)
Install smartmontools by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --with-initscriptdir=no \ --with-libsystemd=no \ --docdir=/usr/share/doc/smartmontools-7.4 && make
This package does not come with a test suite.
Now, as the root
user:
make install
--with-initscriptdir=no
: This
switch suppresses the default initialization script. See
below for the BLFS script.
--with-libsystemd=no
:
This switch disables support for the sd-notify notification
system provided by systemd.
See the embedded comments in /etc/smartd.conf
for detailed
instructions on customizing the smartd daemon.
If you want the smartd
daemon to start automatically when the system is booted,
install the /etc/rc.d/init.d/smartd
init script
included in the blfs-bootscripts-20240209 package.
make install-smartd
The Sshfs package contains a filesystem client based on the SSH File Transfer Protocol. This is useful for mounting a remote computer that you have ssh access to as a local filesystem. This allows you to drag and drop files or run shell commands on the remote files as if they were on your local computer.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libfuse/sshfs/releases/download/sshfs-3.7.3/sshfs-3.7.3.tar.xz
Download MD5 sum: f704f0d1800bdb5214030a1603e8c6d6
Download size: 56 KB
Estimated disk space required: 0.9 MB
Estimated build time: less than 0.1 SBU
Fuse-3.16.2, GLib-2.78.4, and OpenSSH-9.6p1.
docutils-0.20.1 (required to build the man page)
Install Sshfs by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
To mount an ssh server you need to be able to log into the server. For example, to mount your remote home folder to the local ~/examplepath (the directory must exist and you must have permissions to write to it):
sshfs example.com:/home/userid ~/examplepath
When you've finished work and want to unmount it again:
fusermount3 -u ~/example
You can also mount an sshfs
filesystem at boot by adding an entry similar to the
following in the /etc/fstab
file:
userid@example.com:/path /media/path fuse.sshfs _netdev,IdentityFile=/home/userid/.ssh/id_rsa 0 0
See man 1 sshfs and man 8 mount.fuse3 for all available mount options.
The xfsprogs package contains administration and debugging tools for the XFS file system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-6.6.0.tar.xz
Download MD5 sum: c008a752fae65aaf761096eb4698df86
Download size: 1.3 MB
Estimated disk space required: 56 MB
Estimated build time: 0.3 SBU (Using parallelism=4)
ICU-74.2 (for unicode name scanning in xfs_scrub)
Enable the following options in the kernel configuration and recompile the kernel:
File systems ---> <*/M> XFS filesystem support [XFS_FS]
Install xfsprogs by running the following commands:
make DEBUG=-DNDEBUG \ INSTALL_USER=root \ INSTALL_GROUP=root
This package does not come with a test suite.
Now, as the root
user:
make PKG_DOC_DIR=/usr/share/doc/xfsprogs-6.6.0 install && make PKG_DOC_DIR=/usr/share/doc/xfsprogs-6.6.0 install-dev && rm -rfv /usr/lib/libhandle.{a,la}
DEBUG=-DNDEBUG
: Turns
off debugging symbols.
INSTALL_USER=root
INSTALL_GROUP=root
:
This sets the owner and group of the installed files.
OPTIMIZER="..."
: Adding this
parameter to the end of the make command overrides the
default optimization settings.
simply exits with a zero status, since XFS partitions are checked at mount time |
|
constructs an XFS file system |
|
changes the parameters of an XFS file system |
|
prints block mapping for an XFS file |
|
copies the contents of an XFS file system to one or more targets in parallel |
|
for each directory argument, estimates the space that directory would take if it were copied to an XFS filesystem (does not cross mount points) |
|
is used to debug an XFS file system |
|
suspends access to an XFS file system |
|
applicable only to XFS filesystems, improves the organization of mounted filesystems, the reorganization algorithm operates on one file at a time, compacting or otherwise improving the layout of the file extents (contiguous blocks of file data) |
|
expands an XFS file system |
|
is equivalent to invoking xfs_growfs, but specifying that no change to the file system is to be made |
|
is a debugging tool like xfs_db, but is aimed at examining the regular file I/O path rather than the raw XFS volume itself |
|
prints the log of an XFS file system |
|
restores an XFS metadump image to a filesystem image |
|
copies XFS filesystem metadata to a file |
|
creates an XFS file, padded with zeroes by default |
|
generates pathnames from inode numbers for an XFS file system |
|
is a utility for reporting and editing various aspects of filesystem quotas |
|
repairs corrupt or damaged XFS file systems |
|
copies a file to the real-time partition on an XFS file system |
|
checks and repairs the contents of a mounted XFS file system |
|
scrubs all mounted XFS file systems |
|
reports and controls free space usage in an XFS file system |
|
contains XFS-specific functions that provide a way to perform certain filesystem operations without using a file descriptor to access filesystem objects |
The efivar package provides tools and libraries to manipulate EFI variables.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/rhboot/efivar/archive/39/efivar-39.tar.gz
Download MD5 sum: a8fc3e79336cd6e738ab44f9bc96a5aa
Download size: 456 KB
Estimated disk space required: 21 MB
Estimated build time: less than 0.1 SBU
This package cannot function properly on a 32-bit system with a 64-bit UEFI implementation. Don't install this package (or efibootmgr) on 32-bit system unless you are absolutely sure you have a 32-bit UEFI implementation, which is very rare in practice.
Build efivar with the following commands:
make
The test suite of this package is dangerous. Running it may trigger firmware bugs and make your system unusable without using some special hardware to reprogram the firmware.
Now, as the root
user:
make install LIBDIR=/usr/lib
LIBDIR=/usr/lib
: This
option overrides the default library directory of the package
(/usr/lib64
, which is not used
by LFS).
ENABLE_DOCS=0
: Disable the
generation of man pages. Append this option after the
make and
make install
commands if you don't need the man pages to allow building
this package without mandoc-1.14.6 installed.
The efibootmgr package provides tools and libraries to manipulate EFI variables.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/rhboot/efibootmgr/archive/18/efibootmgr-18.tar.gz
Download MD5 sum: e170147da25e1d5f72721ffc46fe4e06
Download size: 48 KB
Estimated disk space required: 1.1 MB
Estimated build time: less than 0.1 SBU
Build efibootmgr with the following commands:
make EFIDIR=LFS EFI_LOADER=grubx64.efi
This package does not have a test suite.
Now, as the root
user:
make install EFIDIR=LFS
EFIDIR=LFS
: This
option specifies the distro's subdirectory name under
/boot/efi/EFI
. The building
system of this package needs it to be set explicitly.
EFI_LOADER=grubx64.efi
: This
option specifies the name of the default EFI boot loader. It
is set to match the EFI boot loader provided by GRUB .
The GRUB package provides GRand Unified Bootloader. In this page it will be built with UEFI support, which is not enabled for GRUB built in LFS.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/grub/grub-2.12.tar.xz
Download MD5 sum: 60c564b1bdc39d8e43b3aab4bc0fb140
Download size: 6.4 MB
Estimated disk space required: 183 MB
Estimated build time: 0.4 SBU (on 64-bit LFS, using parallelism=4)
Unicode font data used to display GRUB menu
Download (HTTP): https://unifoundry.com/pub/unifont/unifont-15.1.04/font-builds/unifont-15.1.04.pcf.gz
Download MD5 sum: 72f95e7ecb47a4c7ed610babe6959ead
Download size: 1.3 MB
GCC (only needed if building on 32-bit LFS)
Refer to GCC-13.2.0 page for download info.
efibootmgr-18 (runtime) and FreeType-2.13.2
First, install font data as the root
user:
mkdir -pv /usr/share/fonts/unifont && gunzip -c ../unifont-15.1.04.pcf.gz > /usr/share/fonts/unifont/unifont.pcf
Unset any environment variables which may affect the build:
unset {C,CPP,CXX,LD}FLAGS
Don't try “tuning” this package with custom compilation flags: this package is a bootloader, with low-level operations in the source code which is likely to be broken by some aggressive optimizations.
Add a file missing from the release tarball:
echo depends bli part_gpt
> grub-core/extra_deps.lst
If you are running a 32-bit LFS, prepare a 64-bit compiler:
case $(uname -m) in i?86 )
tar xf ../gcc-13.2.0.tar.xz
mkdir gcc-13.2.0/build
pushd gcc-13.2.0/build
../configure --prefix=$PWD/../../x86_64-gcc \
--target=x86_64-linux-gnu \
--with-system-zlib \
--enable-languages=c,c++ \
--with-ld=/usr/bin/ld
make all-gcc
make install-gcc
popd
export TARGET_CC=$PWD/x86_64-gcc/bin/x86_64-linux-gnu-gcc
esac
Build GRUB with the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-efiemu \ --enable-grub-mkfont \ --with-platform=efi \ --target=x86_64 \ --disable-werror && unset TARGET_CC && make
This package does not have a test suite providing meaningful results.
Now, as the root
user:
make install && mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
--enable-grub-mkfont
:
Build the tool named grub-mkfont to generate the
font file for the boot loader from the font data we've
installed.
If the recommended dependency FreeType-2.13.2 is not installed, it is possible to omit this option and build GRUB. However, if grub-mkfont is not built, or the unicode font data is not available at the time GRUB is built, GRUB won't install any font for the boot loader. The GRUB boot menu will be displayed using a coarse font or in a smaller region on the screen.
--with-platform=efi
:
Ensures building GRUB with EFI enabled.
--target=x86_64
:
Ensures building GRUB for x86_64 even if building on a 32-bit
LFS system. Most EFI firmware on x86_64 does not support
32-bit bootloaders.
--target=i386
: A few 32-bit x86
platforms have EFI support. And, some x86_64 platforms have a
32-bit EFI implementation, but they are very old and rare.
Use this instead of --target=x86_64
if you are
absolutely sure
that LFS is running on such a system.
Using GRUB to make the LFS system bootable on UEFI platform will be discussed in Using GRUB to Set Up the Boot Process with UEFI.
See the page for GRUB in LFS book.
BLFS does not have the essential packages to support Secure Boot. To set up the boot process with GRUB and UEFI in BLFS, Secure Boot must be turned off from the configuration interface of the firmware. Read the documentation provided by the manufacturer of your system to find out how.
Enable the following options in the kernel configuration and recompile the kernel if necessary:
Processor type and features ---> [*] EFI runtime service support [EFI] [*] EFI stub support [EFI_STUB] -*- Enable the block layer ---> [BLOCK] Partition Types ---> [ /*] Advanced partition selection [PARTITION_ADVANCED] [*] EFI GUID Partition support [EFI_PARTITION] Device Drivers ---> Firmware Drivers ---> [*] Mark VGA/VBE/EFI FB as generic system framebuffer [SYSFB_SIMPLEFB] Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> ... [DRM] [*] Enable legacy fbdev support for your modesetting driver ... [DRM_FBDEV_EMULATION] <*> Simple framebuffer driver [DRM_SIMPLEDRM] Console display driver support ---> [*] Framebuffer Console support [FRAMEBUFFER_CONSOLE] File systems ---> DOS/FAT/EXFAT/NT Filesystems ---> <*/M> VFAT (Windows-95) fs support [VFAT_FS] Pseudo filesystems ---> <*/M> EFI Variable filesystem [EFIVAR_FS] -*- Native language support ---> [NLS] <*/M> Codepage 437 (United States, Canada) [NLS_CODEPAGE_437] <*/M> NLS ISO 8859-1 (Latin 1; Western European Languages) [NLS_ISO8859_1]
The meaning of the configuration options:
CONFIG_PARTITION_ADVANCED
If it's not enabled, CONFIG_EFI_PARTITION
will
be enabled automatically. But when it's enabled, you
must set CONFIG_EFI_PARTITION
to
enabled as well.
CONFIG_SYSFB_SIMPLEFB
,
CONFIG_DRM
,
CONFIG_DRM_FBDEV_EMULATION
,
CONFIG_DRM_SIMPLEDRM
,
CONFIG_FB
, and
CONFIG_FRAMEBUFFER_CONSOLE
The combination of these options provides the Linux console support on top of the UEFI framebuffer. To allow the kernel to print debug messages at an early boot stage, they shouldn't be built as kernel modules unless an initramfs will be used.
Ensure that an emergency boot disk is ready to “rescue” the system
in case the system becomes un-bootable. To make an emergency
boot disk with GRUB for an EFI based system, find a spare USB
flash drive and create a vfat
file system on it. Install dosfstools-4.2 first, then as the
root
user:
The following command will erase all directories and files
in the partition. Make sure your USB flash drive contains
no data which will be needed, and change sdx1
to the device node
corresponding to the first partition of the USB flash
drive. Be careful not to overwrite your hard drive with a
typo!
mkfs.vfat /dev/sdx1
Still as the root
user, use
the fdisk
utility to set the first partition of the USB flash drive to
be an “EFI
system” partition (change sdx
to the device node
corresponding to your USB flash drive):
fdisk /dev/sdxWelcome to fdisk (util-linux 2.39.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
tPartition number (1-9, default 9):
1Partition type or alias (type L to list all):
uefiChanged type of partition 'Linux filesystem' to 'EFI System'. Command (m for help):
wThe partition table has been altered. Syncing disks.
Still as the root
user,
create a mount point for the EFI partition on the USB flash
drive and mount it:
mount --mkdir -v -t vfat /dev/sdx1 -o codepage=437,iocharset=iso8859-1 \ /mnt/rescue
Install GRUB for EFI on the partition:
grub-install --target=x86_64-efi --removable \ --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue
Unmount the partition:
umount /mnt/rescue
Now the USB flash drive can be used as an emergency boot disk on any x86-64 UEFI platform. It will boot the system and show the GRUB shell. Then you can type commands to boot your operating system from the hard drive. To learn how to select the boot device, read the manual of your motherboard or laptop.
On EFI based systems, the bootloaders are installed in a
special FAT32 partition called an EFI System Partition (ESP). If
your system supports EFI, and a recent version of some Linux
distribution or Windows is pre-installed, it's likely that
the ESP has already been created. As the root
user, list all the partitions on
your hard drive (replace sda
with the device
corresponding to the appropriate hard drive):
fdisk -l /dev/sda
The “Type” column of the ESP should be
EFI System
.
If the system or the hard drive is new, or it's the first
installation of a UEFI-booted OS on the system, the ESP may
not exist. In that case, install dosfstools-4.2
first. Then create a new partition, make a vfat
file system on it, and set the
partition type to “EFI system”. See the instructions for
the emergency boot device above as a reference.
Some (old) UEFI implementations may require the ESP to be the first partition on the disk.
Now, as the root
user, create
the mount point for the ESP, and mount it (replace
sda1
with the
device node corresponding to the ESP):
mount --mkdir -v -t vfat /dev/sda1 -o codepage=437,iocharset=iso8859-1 \ /boot/efi
If you want to mount the ESP automatically during system
boot, as the root
user, add
an entry for the ESP into /etc/fstab
:
cat >> /etc/fstab << EOF
/dev/sda1 /boot/efi vfat codepage=437,iocharset=iso8859-1 0 1
EOF
On UEFI based systems, GRUB works by installing an EFI
application (a special kind of executable) into the ESP. The
EFI firmware will search boot loaders in EFI applications
from boot entries recorded in EFI variables, and additionally
a hardcoded path EFI/BOOT/BOOTX64.EFI
. Normally, a boot
loader should be installed into a custom path and the path
should be recorded in the EFI variables. The use of the
hardcoded path should be avoided if possible. However, in
some cases we have to use the hardcoded path:
The system is not booted with EFI yet, making EFI variables inaccessible.
The EFI firmware is 64-bit but the LFS system is 32-bit, making EFI variables inaccessible because the kernel cannot invoke EFI runtime services with a different virtual address length.
LFS is built for a Live USB, so we cannot rely on EFI variables, which are stored in NVRAM or EEPROM on the local machine.
You are unable or unwilling to install the efibootmgr for manipulating boot entries in EFI variables.
In these cases, follow these instructions to install the GRUB EFI application into the hardcoded path and make a minimal boot configuration. Otherwise it's better to skip ahead and set up the boot configuration normally.
To install GRUB with the EFI application in the hardcoded
path EFI/BOOT/BOOTX64.EFI
,
first ensure the boot partition is mounted at /boot
and the ESP is mounted at
/boot/efi
. Then, as the
root
user, run the command:
This command will overwrite /boot/efi/EFI/BOOT/BOOTX64.EFI
. It may
break a bootloader already installed there. Back it up if
you are not sure.
grub-install --target=x86_64-efi --removable
This command will install the GRUB EFI application into the
hardcoded path /boot/efi/EFI/BOOT/BOOTX64.EFI
, so the EFI
firmware can find and load it. The remaining GRUB files are
installed in the /boot/grub
directory and will be loaded by BOOTX64.EFI
during system boot.
The EFI firmware usually prefers the EFI applications with a path stored in EFI variables to the EFI application at the hardcoded path. So you may need to invoke the boot selection menu or firmware setting interface to select the newly installed GRUB manually on the next boot. Read the manual of your motherboard or laptop to learn how.
If you've followed the instructions in this section and set up a minimal boot configuration, now skip ahead to “Creating the GRUB Configuration File”.
The installation of GRUB on a UEFI platform requires that the
EFI Variable file system, efivarfs
, is mounted. As the root
user, mount it if it's not already
mounted:
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
Now add an entry for the efivarfs
in /etc/fstab
so it will be mounted
automatically during system boot:
cat >> /etc/fstab << EOF
efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0
EOF
If the system is not booted with UEFI, the directory
/sys/firmware/efi
will be
missing. In this case you should boot the system in UEFI
mode with the emergency boot disk or using a minimal boot
configuration created as above, then mount efivarfs
and continue.
On UEFI based systems, GRUB works by installing an EFI
application (a special kind of executable) into /boot/efi/EFI/[id]/grubx64.efi
, where
/boot/efi
is the mount point of
the ESP, and [id]
is replaced
with an identifier specified in the grub-install command line.
GRUB will create an entry in the EFI variables containing the
path EFI/[id]/grubx64.efi
so the
EFI firmware can find grubx64.efi
and load it.
grubx64.efi
is very lightweight
(136 KB with GRUB-2.06) so it will not use much space in the
ESP. A typical ESP size is 100 MB (for Windows boot manager,
which uses about 50 MB in the ESP). Once grubx64.efi
has been loaded by the
firmware, it will load GRUB modules from the boot partition.
The default location is /boot/grub
.
As the root
user, install the
GRUB files into /boot/efi/EFI/LFS/grubx64.efi
and
/boot/grub
. Then set up the
boot entry in the EFI variables:
grub-install --bootloader-id=LFS --recheck
If the installation is successful, the output should be:
Installing for x86_64-efi platform.
Installation finished. No error reported.
Issue the efibootmgr | cut -f 1 command to recheck the EFI boot configuration. An example of the output is:
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0005,0000,0002,0001,0003,0004
Boot0000* ARCH
Boot0001* UEFI:CD/DVD Drive
Boot0002* Windows Boot Manager
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device
Boot0005* LFS
Note that 0005
is the first in
the BootOrder
, and Boot0005
is LFS
. This means that on the next boot, the
version of GRUB installed by LFS will be used to boot the
system.
Generate /boot/grub/grub.cfg
to
configure the boot menu of GRUB:
cat > /boot/grub/grub.cfg << EOF
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod part_gpt
insmod ext2
set root=(hd0,2)
insmod all_video
if loadfont /boot/grub/fonts/unicode.pf2; then
terminal_output gfxterm
fi
menuentry "GNU/Linux, Linux 6.7.4-lfs-12.1" {
linux /boot/vmlinuz-6.7.4-lfs-12.1 root=/dev/sda2 ro
}
menuentry "Firmware Setup" {
fwsetup
}
EOF
Refer to the LFS
book for the basic knowledge about the grub.cfg
file. (hd0,2)
, sda2
,
and 6.4.10-lfs-12.0
must match
your configuration.
The insmod all_video directive loads various modules for video support. It's needed to initialize the EFI framebuffer for the kernel to print messages correctly before the kernel GPU driver initialization.
The terminal_output
gfxterm directive changes the display
resolution of the GRUB menu to match your display device. It
will break the rendering if the unicode.pf2
font data file is not loaded,
so it's guarded by a if directive.
From GRUB's perspective, the files are relative to the
partitions used. If you used a separate /boot partition,
remove /boot from the above paths (to kernel and to
unicode.pf2
). You will also
need to change the "set root" line to point to the boot
partition.
The Firmware Setup
entry can be
used to enter the configuration interface provided by the
firmware (sometimes called “BIOS configuration”).
Add a menu entry for Windows into grub.cfg
:
cat >> /boot/grub/grub.cfg << EOF
# Begin Windows addition
menuentry "Windows 11" {
insmod fat
insmod chain
set root=(hd0,1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
EOF
(hd0,1)
should be replaced with
the GRUB designated name for the ESP. The chainloader
directive can be used to tell
GRUB to run another EFI executable, in this case the Windows
Boot Manager. You may put more usable tools in EFI executable
format (for example, an EFI shell) into the ESP and create
GRUB entries for them, as well.
This chapter is referenced in the LFS book for those wishing to use other editors on their LFS system. You're also shown how some LFS installed programs benefit from being recompiled after GUI libraries have been installed.
Bluefish is a GTK+ text editor targeted towards programmers and web designers, with many options to write websites, scripts and programming code. Bluefish supports many programming and markup languages, and it focuses on editing dynamic and interactive websites.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.bennewitz.com/bluefish/stable/source/bluefish-2.2.14.tar.bz2
Download MD5 sum: c99b6b1ba3e3e70b032936182bb0b387
Download size: 4.5 MB
Estimated disk space required: 53 MB
Estimated build time: 0.3 SBU
desktop-file-utils-0.27 (for updating the desktop database)
enchant-2.6.7 (for spell checking), Gucharmap-15.1.2, PCRE-8.45 and Jing
Install Bluefish by running the following commands:
./configure --prefix=/usr --docdir=/usr/share/doc/bluefish-2.2.14 && make
This package does not come with a test suite.
Now, as the root
user:
make install
This package installs icon files into the /usr/share/icons/hicolor
hierarchy and
desktop files into the /usr/share/applications
hierarchy. You
can improve system performance and memory usage by updating
/usr/share/icons/hicolor/icon-theme.cache
and /usr/share/applications/mimeinfo.cache
.
To perform the update you must have desktop-file-utils-0.27 (for
the desktop cache) and issue the following commands as the
root
user:
gtk-update-icon-cache -t -f --include-image-data /usr/share/icons/hicolor && update-desktop-database
Ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts. Ed isn't something which many people use. It's described here because it can be used by the patch program if you encounter an ed-based patch file. This happens rarely because diff-based patches are preferred these days.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/ed/ed-1.20.1.tar.lz
Download MD5 sum: f9e7c445acebf6c49ccb7f86a5b17f5d
Download size: 68 KB
Estimated disk space required: 1.0 MB
Estimated build time: less than 0.1 SBU
libarchive-3.7.2 (for bsdtar)
Install Ed by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
The Emacs package contains an extensible, customizable, self-documenting real-time display editor.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/emacs/emacs-29.2.tar.xz
Download MD5 sum: 0690e2fb9b9f271652f19ddccf1dd3f3
Download size: 50 MB
Estimated disk space required: 526 MB
Estimated build time: 0.7 SBU (Using parallelism=4)
HarfBuzz-8.3.0, giflib-5.2.1, GnuTLS-3.8.3, jansson-2.14, and libtiff-4.6.0
a graphical environment, alsa-lib-1.2.11, Cairo-1.18.0, dbus-1.14.10, gobject-introspection-1.78.1, gsettings-desktop-schemas-45.0, GPM-1.20.7, GTK+-3.24.41, ImageMagick-7.1.1-28, Little CMS-2.14, libjpeg-turbo-3.0.1, libpng-1.6.42, librsvg-2.57.1, libseccomp-2.5.5, libwebp-1.3.2, libxml2-2.12.5, MIT Kerberos V5-1.21.2, SQLite-3.45.1, Valgrind-3.22.0, intlfonts, libungif, libotf, and m17n-lib - to correctly display such complex scripts as Indic and Khmer, and also for scripts that require Arabic shaping support (Arabic and Farsi), mailutils, and libXaw3d
Install Emacs by running the following commands:
./configure --prefix=/usr && make
This package does not come with a test suite. If make succeeds, you can test the result by running src/emacs -Q, which is the program that will be installed, with its auxiliary files. This should start and display the application opening screen.
Now, as the root
user:
make install && chown -v -R root:root /usr/share/emacs/29.2 && rm -vf /usr/lib/systemd/user/emacs.service
This package installs icon files into the /usr/share/icons/hicolor
hierarchy and
you can improve system performance and memory usage by
updating /usr/share/icons/hicolor/index.theme
. To
perform the update you must have GTK+-3.24.41 installed and
issue the following command as the root
user:
gtk-update-icon-cache -qtf /usr/share/icons/hicolor
--with-imagemagick
: Use this if
you have installed ImageMagick-7.1.1-28 and wish to
link against it.
--with-gif=no
: Use this if you
have not installed giflib-5.2.1 or libungif.
--with-tiff=no
: Use this if you
have not installed libtiff-4.6.0.
--with-gnutls=no
: Use this if you
have not installed GnuTLS-3.8.3.
--without-harfbuzz
: Use this if
you have not installed HarfBuzz-8.3.0.
--with-json=no
: Use this if you
have not installed jansson-2.14.
The Gedit package contains a lightweight UTF-8 text editor for the GNOME Desktop.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/gedit/46/gedit-46.2.tar.xz
Download MD5 sum: 01327f0d35778d8f3a914fffb69e8cd6
Download size: 2.6 MB
Estimated disk space required: 66 MB (with tests)
Estimated build time: 0.2 SBU (using parallelism=4; with tests)
gsettings-desktop-schemas-45.0, itstool-2.0.7, libpeas-1.36.0, libgeditsourceview-299.0.4, and tepl-6.8.0
gspell-1.12.2, Gvfs-1.52.2 (runtime), ISO Codes-4.16.0, and PyGObject-3.46.0 (Python 3 module)
Install Gedit by running the following commands:
mkdir gedit-build && cd gedit-build && meson setup --prefix=/usr \ --buildtype=release \ -Dgtk_doc=false \ .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
If you installed the package to your system using a
“DESTDIR” method, /usr/share/glib-2.0/schemas/gschemas.compiled
was not updated/created. Create (or update) the file using
the following command as the root
user:
glib-compile-schemas /usr/share/glib-2.0/schemas
-Dgtk_doc=false
: This
switch disables generating the API documentation. Omit this
switch if you have GTK-Doc-1.33.2 installed and wish to
generate the API documentation.
JOE (Joe's own editor) is a small text editor capable of emulating WordStar, Pico, and Emacs.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/joe-editor/joe-4.6.tar.gz
Download MD5 sum: 9017484e6116830d846678b625ea5c43
Download size: 1.8 MB
Estimated disk space required: 22 MB
Estimated build time: 0.2 SBU
Install JOE by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --docdir=/usr/share/doc/joe-4.6 && make
This package does not come with a test suite.
Now, as the root
user:
make install && install -vm 755 joe/util/{stringify,termidx,uniproc} /usr/bin
is a symbolic link to joe used to launch Emacs emulation mode |
|
is a small text editor capable of emulating WordStar, Pico, and Emacs |
|
is a symbolic link to joe used to launch Pico emulation mode |
|
is a symbolic link to joe used to launch WordStar emulation mode |
|
is a symbolic link to joe that restricts JOE to editing only files which are specified on the command-line |
|
is a program used by joe to convert rc and .jsf files into a C file (see /usr/share/doc/joe-4.6/util/README) |
|
is a program used by joe to generate the termcap index file (see /usr/share/doc/joe-4.6/util/README) |
|
is a program used by joe to generate joe's unicode database file unicat.c from Blocks.txt CaseFolding.txt EastAsianWidth.txt and UnicodeData.txt (find them at /usr/share/doc/joe-4.6/util; see usr/share/doc/joe-4.6/util/README) |
The Kate package contains an advanced KF5 based graphical text editor.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.kde.org/stable/release-service/23.08.5/src/kate-23.08.5.tar.xz
Download MD5 sum: 46323fc33eea7a38816277b47b1fa08a
Download size: 7.7 MB
Estimated disk space required: 217 MB
Estimated build time: 0.7 SBU (using parallelism=4)
Install Kate by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=OFF \ -Wno-dev .. && make
This package does not come with a test suite.
Now, as the root
user:
make install
Mousepad is a simple GTK+ 3 text editor for the Xfce desktop environment.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.xfce.org/src/apps/mousepad/0.6/mousepad-0.6.2.tar.bz2
Download MD5 sum: 3ad46198202d2696cac27d5a0f08bab0
Download size: 1.3 MB
Estimated disk space required: 16 MB
Estimated build time: 0.1 SBU
DConf-0.40.0 (runtime) and dbus-glib-0.112
Install Mousepad by running the following commands:
./configure --prefix=/usr \ --enable-gtksourceview4 \ --enable-keyfile-settings && make
This package does not come with a test suite.
Now, as the root
user:
make install
--enable-keyfile-settings
: Use
the GSettings keyfile backend rather than the default
DConf-0.40.0.
The Nano package contains a small, simple text editor which aims to replace Pico, the default editor in the Pine package.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz
Download MD5 sum: 13742c686c6ddb0b7b294634f0c13cec
Download size: 1.5 MB
Estimated disk space required: 20 MB
Estimated build time: 0.2 SBU
Install Nano by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --enable-utf8 \ --docdir=/usr/share/doc/nano-7.2 && make
This package does not come with a test suite.
Now, as the root
user:
make install && install -v -m644 doc/{nano.html,sample.nanorc} /usr/share/doc/nano-7.2
--enable-utf8
: This
switch enables unicode support in Nano.
Example configuration (create as a system-wide /etc/nanorc
or a personal ~/.nanorc
file)
set autoindent
set constantshow
set fill 72
set historylog
set multibuffer
set nohelp
set positionlog
set quickblank
set regexp
Check the sample.nanorc
file
in the installed documentation directory. It includes color
configurations and has some documentation included in the
comments.
Syntax highlighting is provided for several file types, in
/usr/share/nano/
directory.
E.g., for shell scripts, you can insert include /usr/share/nano/sh.nanorc
in the
personal or global configuration file. If you wish
highlighting for all supported files, use include /usr/share/nano/*.nanorc
. This
include does not descend into the extra
directory. Move required files one
level up.
The Vim package, which is an abbreviation for VI IMproved, contains a vi clone with extra features as compared to the original vi.
The default LFS instructions install vim as a part of the base system. If you would prefer to link vim against X, you should recompile vim to enable GUI mode. There is no need for special instructions since X support is automatically detected.
The version of vim changes daily. To get the latest version, go to https://github.com/vim/vim/releases.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/vim/vim/archive/v9.1.0041/vim-9.1.0041.tar.gz
Download MD5 sum: 79dfe62be5d347b1325cbd5ce2a1f9b3
Download size: 17 MB
Estimated disk space required: 125 MB (add 67 MB for tests)
Estimated build time: 0.3 SBU (with parallelism=4; add 3.0 SBU for tests)
a graphical environment and GTK+-3.24.41
GPM-1.20.7, Lua-5.4.6, Ruby-3.3.0, and rsync-3.2.7
If you recompile Vim to
link against X and your
X libraries are not on the
root partition, you will no longer have an editor for use
in emergencies. You may choose to install an additional
editor, not link Vim
against X, or move the
current vim
executable to the /bin
directory under a different name such as vi
.
Install Vim by running the following commands:
If you intend to run the tests and have not installed Xorg in /usr, append LDFLAGS='-L$XORG_PREFIX/lib' to the configure line below.
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h && echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' >> src/feature.h && ./configure --prefix=/usr \ --with-features=huge \ --enable-gui=gtk3 \ --with-tlib=ncursesw && make
If the global configuration file /etc/vimrc
references the VIMRUNTIME
environment variable, some tests
may complain about being unable to find the corresponding
directory and wait for user input. If this is the case,
this file should be saved and removed before running the
tests. Or if bubblewrap-0.8.0 is installed, it's
also possible to create a lightweight container environment
where this file is hidden and run the tests in the
container.
To test the results, issue: make -j1 test, or
bwrap --dev-bind / / --dev-bind
/dev/null /etc/vimrc make -j1 test if running
the tests with bubblewrap-0.8.0 and /etc/vimrc
hidden. Even if one of the tests
fails to produce the file test.out
in src/testdir
, the remaining tests will still
be executed. If all goes well, the log will report
ALL DONE
. Some tests labelled as
“flaky”
may fail occasionally and can be ignored. The tests are known
to fail if the output is redirected to a file, and also if
they are run in a 'screen' session.
Some color tests expect to be executed under the xterm terminal emulator.
Now, as the root
user:
make install
By default, Vim's documentation is installed in /usr/share/vim
. The following symlink
allows the documentation to be accessed via /usr/share/doc/vim-9.1.0041
, making it
consistent with the location of documentation for other
packages:
ln -snfv ../vim/vim91/doc /usr/share/doc/vim-9.1.0041
If you wish to update the runtime files, issue the following command (requires rsync-3.2.7) to download it:
rsync -avzcP --exclude="/dos/" --exclude="/spell/" \ ftp.nluug.nl::Vim/runtime/ ./runtime/
And then install the updated runtime files and regenerate the
tags
file, as the root
user issue:
make -C src installruntime && vim -c ":helptags /usr/share/doc/vim-9.1.0041" -c ":q"
--with-features=huge
:
This switch enables all the additional features available in
Vim, including support for
multibyte characters.
--with-tlib=ncursesw
:
This switch forces Vim to link against the libncursesw
library.
--enable-gui=no
: This will
prevent compilation of the GUI. Vim will still link against X, so that some features such as the
client-server model or the x11-selection (clipboard) are
still available.
--without-x
: If you prefer not to
link Vim against
X, use this switch.
--enable-luainterp
, --enable-perlinterp
, --enable-python3interp=dynamic
, --enable-tclinterp --with-tclsh=tclsh
,
--enable-rubyinterp
: These
options include the Lua, Perl, Python3, Tcl, or Ruby
interpreters that allow using other application code in
vim scripts. All the
--enable-*
options can accept
=dynamic
to dynamically load the
interpreter when needed. This is required for Python 3 to prevent segmentation faults.
For tcl, it is necessary to
indicate the name of the tclsh executable, since
configure only
searches versioned names with old versions.
Vim has an integrated spell checker which you can enable by issuing the following in a vim window:
:setlocal spell spelllang=ru
This setting will enable spell checking for the Russian language for the current session.
By default, Vim only
installs spell files for the English language. If a spell
file is not available for a language, then Vim will call the $VIMRUNTIME/plugin/spellfile.vim
plugin
and will try to obtain the *.spl and optionally *.sug from
the vim ftp server, by using the $VIMRUNTIME/plugin/netrwPlugin.vim
plugin.
Alternatively you can manually download the *.spl and *.sug
files from: ftp://ftp.vim.org/pub/vim/runtime/spell/
and save them to ~/.vim/spell
or in /usr/share/vim/vim91/spell/
.
To find out what's new in Vim-9.1.0041 issue the following command:
:help version-9.1.0041
For additional information on setting up Vim configuration files, see The vimrc Files and https://vim.fandom.com/wiki/Example_vimrc.
A list of the reinstalled files, along with their short descriptions can be found in the LFS Vim Installation Instructions.
We are all familiar with the Bourne Again SHell, but there are two other user interfaces that are considered useful modern shells – the Berkeley Unix C shell and the Korn shell. This chapter installs packages compatible with these additional shell types.
Dash is a POSIX compliant
shell. It can be installed as /bin/sh or as the default shell
for either root
or a second
user with a userid of 0. It depends on fewer libraries than
the Bash shell and is
therefore less likely to be affected by an upgrade problem or
disk failure. Dash is also
useful for checking that a script is completely compatible
with POSIX syntax.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.12.tar.gz
Download MD5 sum: 57222b768b84003ea4b801e5d5e0e52b
Download size: 244 KB
Estimated disk space required: 2.9 MB
Estimated build time: less than 0.1 SBU
libedit (command line editor library)
Install Dash by running the following commands:
./configure --bindir=/bin --mandir=/usr/share/man && make
This package does not come with a test suite.
Now, as the root
user:
make install
If you would like to make dash the default
sh, recreate
the /bin/sh
symlink as the
root
user:
If you create the symbolic link from dash to sh, you will need to reset the link to bash to build LFS.
ln -svf dash /bin/sh
--bindir=/bin
: This
parameter places the dash binary into the root
filesystem.
--with-libedit
: To compile
Dash with libedit support.
The Tcsh package contains “an enhanced but completely compatible version of the Berkeley Unix C shell (csh)”. This is useful as an alternative shell for those who prefer C syntax to that of the bash shell, and also because some programs require the C shell in order to perform installation tasks.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://astron.com/pub/tcsh/tcsh-6.24.10.tar.gz
Download MD5 sum: 8fe4421f3cac3f230b3fe88df6ccff5f
Download size: 936 KB
Estimated disk space required: 11 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install Tcsh by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install install.man && ln -v -sf tcsh /bin/csh && ln -v -sf tcsh.1 /usr/share/man/man1/csh.1
ln -v -sf tcsh
/bin/csh: The FHS states that if there is a
C shell installed, there
should be a symlink from /bin/csh
to it. This creates that symlink.
There are numerous configuration files for the C shell.
Examples of these are /etc/csh.cshrc
, /etc/csh.login
, /etc/csh.logout
, ~/.tcshrc
, ~/.cshrc
, ~/.history
, ~/.cshdirs
, ~/.login
, and ~/.logout
. More information on these
files can be found in the tcsh(1) man
page.
Update /etc/shells
to include
the C shell program names (as the root
user):
cat >> /etc/shells << "EOF"
/bin/tcsh
/bin/csh
EOF
The following ~/.cshrc
provides two alternative colour prompts and coloured
ls output. If
you prefer a global modification, issue the command as the
root
user, replacing
~/.cshrc
by /etc/csh.cshrc
.
cat > ~/.cshrc << "EOF"
# Original at:
# https://www.cs.umd.edu/~srhuang/teaching/code_snippets/prompt_color.tcsh.html
# Modified by the BLFS Development Team.
# Add these lines to your ~/.cshrc (or to /etc/csh.cshrc).
# Colors!
set red="%{\033[1;31m%}"
set green="%{\033[0;32m%}"
set yellow="%{\033[1;33m%}"
set blue="%{\033[1;34m%}"
set magenta="%{\033[1;35m%}"
set cyan="%{\033[1;36m%}"
set white="%{\033[0;37m%}"
set end="%{\033[0m%}" # This is needed at the end...
# Setting the actual prompt. Two separate versions for you to try, pick
# whichever one you like better, and change the colors as you want.
# Just don't mess with the ${end} guy in either line... Comment out or
# delete the prompt you don't use.
set prompt="${green}%n${blue}@%m ${white}%~ ${green}%%${end} "
set prompt="[${green}%n${blue}@%m ${white}%~ ]${end} "
# This was not in the original URL above
# Provides coloured ls
alias ls ls --color=always
# Clean up after ourselves...
unset red green yellow blue magenta cyan yellow white end
EOF
The zsh package contains a command interpreter (shell) usable as an interactive login shell and as a shell script command processor. Of the standard shells, zsh most closely resembles ksh but includes many enhancements.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.zsh.org/pub/zsh-5.9.tar.xz
Download MD5 sum: 182e37ca3fe3fa6a44f69ad462c5c30e
Download size: 3.2 MB
Estimated disk space required: 48 MB (includes documentation and tests)
Estimated build time: 1.6 SBU (Using parallelism=4; includes documentation and tests)
When there is a new zsh release, the old files shown above are moved to a new server directory: https://www.zsh.org/pub/old/.
PCRE-8.45, Valgrind-3.22.0, and yodl
Adapt the documentation build system for texinfo-7.0 or later:
sed -e 's/set_from_init_file/texinfo_&/' \ -i Doc/Makefile.in
The documentation files contain references to zsh
configuration files in /etc
,
but we'll use /etc/zsh
to hold
these configuration files instead. The building system will
fix up those references if the yodl package is available, but it's out
of the scope of BLFS. So we need to fix up the references
manually:
sed 's|/etc/z|/etc/zsh/z|g' -i Doc/*.*
Install zsh by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc/zsh \ --enable-etcdir=/etc/zsh \ --enable-cap \ --enable-gdbm && make && makeinfo Doc/zsh.texi --html -o Doc/html && makeinfo Doc/zsh.texi --plaintext -o zsh.txt && makeinfo Doc/zsh.texi --html --no-split --no-headers -o zsh.html
If you have texlive-20230313 installed, you can build PDF format of the documentation by issuing the following command:
texi2pdf Doc/zsh.texi -o Doc/zsh.pdf
To test the results, issue: make check.
Now, as the root
user:
make install && make infodir=/usr/share/info install.info && make htmldir=/usr/share/doc/zsh-5.9/html install.html && install -v -m644 zsh.{html,txt} Etc/FAQ /usr/share/doc/zsh-5.9
If you built the PDF format of the documentation, install it
by issuing the following command as the root
user:
install -v -m644 Doc/zsh.pdf /usr/share/doc/zsh-5.9
--sysconfdir=/etc/zsh
and --enable-etcdir=/etc/zsh
: These
parameters are used so that all the zsh configuration files are consolidated
into the /etc/zsh
directory.
Omit these parameters if you wish to retain historical
compatibility by having all the files located in the
/etc
directory.
--enable-cap
: This
option enables POSIX capabilities.
--enable-gdbm
: This
option enables the use of the GDBM library.
--enable-pcre
: This option allows
zsh to use the PCRE regular
expression library in shell builtins.
There are a whole host of configuration files for
zsh including /etc/zsh/zshenv
, /etc/zsh/zprofile
, /etc/zsh/zshrc
, /etc/zsh/zlogin
and /etc/zsh/zlogout
. You can find more
information on these in the zsh(1) and
related manual pages.
The first time zsh is executed, you will be prompted by
messages asking several questions. The answers will be used
to create a ~/.zshrc
file. If
you wish to run these questions again, run zsh
/usr/share/zsh/5.9/functions/zsh-newuser-install
-f.
There are several built-in advanced prompts. In the
zsh shell,
start advanced prompt support with autoload -U promptinit,
then promptinit. Available
prompt names are listed with prompt -l. Select a
particular one with prompt
<prompt-name>
.
Display all available prompts with prompt -p. Except for the
list and display commands above, you can insert the other
ones in ~/.zshrc
to be
automatically executed at shell start, with the prompt you
chose.
Virtualization allows running a complete operating system, or virtual machine (VM), within another operating environment as a task. There are several commercial and open source environments that either emulate another processor or utilize the hardware virtualization features of the host processor.
qemu is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.qemu.org/qemu-8.2.1.tar.xz
Download MD5 sum: bda54248d773be2599df66f8995f10e1
Download size: 124 MB
Estimated disk space required: 2.2 GB (373 MB installed)
Estimated build time: 1.3 SBU (add 0.8 SBU for tests, both using parallelism=4)
alsa-lib-1.2.11, Libslirp-4.7.0, and SDL2-2.30.0
pipewire-1.0.3 or PulseAudio-17.0 (can be used instead of alsa-lib), BlueZ-5.72, cURL-8.6.0, Cyrus SASL-2.1.28, Fuse-3.16.2, GnuTLS-3.8.3, GTK+-3.24.41, keyutils-1.6.3, libaio-0.3.113, libusb-1.0.27, libgcrypt-1.10.3, libjpeg-turbo-3.0.1, libseccomp-2.5.5, libssh2-1.11.0, libpng-1.6.42, libtasn1-4.19.0, Linux-PAM-1.6.0, LZO-2.10, Nettle-3.9.1, Mesa-24.0.1, VTE-0.74.2, capstone, ceph, daxctl, JACK, glusterfs, libbpf, libcacard, libcap-ng, libdw, libfdt, libiscsi, libnfs, libpmem, libssh, libu2f-emu, lzfse, netmap, numactl, rdma-core, SELinux, snappy, spice, usbredir, and VDE
This optional dependencies list is not comprehensive. See the output of ./configure --help for a more complete list.
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/qemu
Before building qemu, check to see if your processor supports Virtualization Technology (VT):
grep -E '^flags.*(vmx|svm)' /proc/cpuinfo
If you get any output, you have VT technology (vmx for Intel processors and svm for AMD processors). You then need to go into your system BIOS and ensure it is enabled. After enabling, reboot back to your LFS instance.
Enable the following options in the kernel configuration and recompile the kernel if necessary:
[*] Virtualization ---> [VIRTUALIZATION] <*/M> Kernel-based Virtual Machine (KVM) support [KVM] # Enable the option for your CPU: < /*/M> KVM for Intel (and compatible) processors support [KVM_INTEL] < /*/M> KVM for AMD processors support [KVM_AMD]
The Intel or AMD settings are not both required, but the one matching your system processor is required.
To use the “bridge” network device, as explained below, check that bridge-utils-1.7.1 is installed and the following options in the kernel configuration are enabled:
[*] Networking support ---> [NET] Networking options ---> <*/M> 802.1d Ethernet Bridging [BRIDGE] Device Drivers ---> [*] Network device support ---> [NETDEVICES] [*] Network core driver support [NET_CORE] <*/M> Universal TUN/TAP device driver support [TUN]
The udev rule of LFS only allows the root
user, the users owning a local login
session supported by the optional runtime dependency
elogind-252.9 , or the users in
the kvm
group to use the KVM
device. As the root
user, add
any non-root
users that might
use the KVM device either without elogind-252.9 installed or
remotely (via a SSH connection) to the kvm
group:
usermod -a -G kvm <username>
Install qemu by running the following commands:
Qemu is capable of running many targets. The build process
is also capable of building multiple targets at one time in
a comma delimited list assigned to --target-list
. Run ./configure --help to get
a complete list of available targets.
if [ $(uname -m) = i686 ]; then QEMU_ARCH=i386-softmmu else QEMU_ARCH=x86_64-softmmu fi mkdir -vp build && cd build && ../configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --target-list=$QEMU_ARCH \ --audio-drv-list=alsa \ --disable-pa \ --enable-slirp \ --docdir=/usr/share/doc/qemu-8.2.1 && unset QEMU_ARCH && make
qemu uses ninja as a subprocess when building. To run the tests, issue: ninja test. Two tests, bios-tables-test and migration-test, are known to fail.
Now, as the root
user:
make install
Change the permissions and ownership of a helper script,
which is needed when using the “bridge” network
device (see below). Again as the root
user, issue:
You need to add any users who might use the “bridge” network
device into the kvm
group
even if elogind-252.9
is installed.
chgrp kvm /usr/libexec/qemu-bridge-helper && chmod 4750 /usr/libexec/qemu-bridge-helper
For convenience you may want to create a symbolic link to
run the installed program. For instance (as the
root
user):
ln -sv qemu-system-`uname -m` /usr/bin/qemu
--audio-drv-list=alsa
: This
switch sets the audio driver to ALSA. See below for enabling
other audio drivers.
--disable-pa
: even if
pa is not in
--audio-drv-list
list, the pulseaudio driver is built, unless disabled by this
parameter.
--enable-slirp
: This
switch forces the building system to check for Libslirp-4.7.0. Remove it if you don't
need the -netdev user
support.
--audio-drv-list=pa
--disable-alsa
: This switch sets the audio driver to
pulseaudio. For other drivers see the --audio-drv-list
choices in the output of ./configure --help. The
default audio driver is OSS. To enable support for both alsa
and pulseaudio, use --audio-drv-list=alsa,pa
.
Since using qemu means using a virtual computer, the steps to
set up the virtual machine are in close analogy with those to
set up a real computer. You'll need to decide about CPU,
memory, disk, USB devices, network card(s), screen size, etc.
Once the “hardware” is decided, you'll have for
example to choose how to connect the machine to internet,
and/or to install an OS. In the following, we show basic ways
of performing those steps. But qemu is much more than this,
and it is strongly advised to read the qemu documentation in
/usr/share/doc/qemu-8.2.1/qemu-doc.html
.
It is standard practice to name the computer running qemu “host” and the emulated machine running under qemu the “guest”. We'll use those notations in the following.
The following instructions assume the optional symbolic
link, qemu
, has been created.
Additionally, qemu should be run in a
graphical environment. But it is possible to use qemu
“headless” or through SSH. See the
documentation for the various possibilities.
A virtual disk may be set up in the following way:
VDISK_SIZE=50G
VDISK_FILENAME=vdisk.img
qemu-img create -f qcow2 $VDISK_FILENAME $VDISK_SIZE
The virtual disk size and filename should be adjusted as desired. The actual size of the file will be less than specified, but will expand as needed, so it is safe to put a high value.
To install an operating system, download an iso image from
your preferred Linux distribution. For the purposes of this
example, we'll use Fedora-16-x86_64-Live-LXDE.iso
in the
current directory. Run the following:
qemu -enable-kvm \
-drive file=$VDISK_FILENAME \
-cdrom Fedora-16-x86_64-Live-LXDE.iso \
-boot d \
-m 1G
Follow the normal installation procedures for the chosen
distribution. The -boot
option specifies the boot
order of drives as a string of drive letters. Valid drive
letters are: a, b (floppy 1 and 2), c (first hard disk), d
(first CD-ROM). The -m
option is the amount of
memory to use for the virtual machine. The choice depends on
the load of the host. Modern distributions should be
comfortable with 1GB. The -enable-kvm
option allows
hardware acceleration. Without this switch, the emulation is
much slower.
The virtual machine hardware is defined by the qemu command line. An example command is given below:
qemu -enable-kvm \ -smp 4 \ -cpu host \ -m 1G \ -drive file=$VDISK_FILENAME \ -cdrom grub-img.iso \ -boot order=c,once=d,menu=on \ -net nic,netdev=net0 \ -netdev user,id=net0 \ -device ac97 \ -vga std \ -serial mon:stdio \ -name "fedora-16"
-enable-kvm
: enable
full KVM virtualization support. On some hardware, it may be
necessary to add the undocumented -machine smm=off
option in order to enable
KVM.
-smp <N>
:
enable symmetric multiprocessing with <N> CPUs.
-cpu <model>
:
simulate CPU <model>. the list of supported models can
be obtained with -cpu help
.
-drive
file=<filename>
: defines a virtual disk
whose image is stored in <filename>
.
-cdrom grub-img.iso
:
defines an iso formatted file to use as a cdrom. Here we use
a grub rescue disk, which may turn handy when something goes
wrong at boot time.
-boot
order=c,once=d,menu=on
: defines the boot order
for the virtual BIOS.
-net
nic,netdev=<netid>
: defines a network card
connected to the network device with id <netid>.
-netdev
user,id=<netid>
: defines the network
“user”
device. This is a virtual local network with addresses
10.0.2.0/24, where the host has address 10.0.2.2 and acts as
a gateway to internet, and with a name server at address
10.0.2.3, and an smb server at address 10.0.2.4. A builtin
DHCP server can allocate addresses between 10.0.2.15 and
10.0.2.31.
-soundhw
<model>
: defines the soundcard model. The
list may be obtained with -soundhw
help
.
-vga <type>
:
defines the type of VGA card to emulate. For -vga std
, if you are building a
Linux kernel for the guest, it's recommended to enable
CONFIG_DRM_BOCHS
(as a part of
the kernel or a kernel module) to drive all the features of
the emulated VGA card, and CONFIG_FB
to display the Linux console on it.
The other <type>
values are
not tested by the editors and may require additional
dependencies.
-serial mon:stdio
:
sends the serial port of the guest (/dev/ttyS0
on linux guests), multiplexed
with the qemu monitor, to the standard input and output of
the qemu process.
-name <name>
:
sets the name of the guest. This name is displayed in the
guest window caption. It may be useful if you run several
guests at the same time.
-drive
if=pflash,format=raw,readonly=on,file=/usr/share/qemu/edk2-x86_64-code.fd
:
Load a pre-built EDK2 UEFI firmware, instead of the default
PC BIOS. Use this option if you want to boot the guest OS
with UEFI.
-drive
file=<filename>,if=virtio
: Provide Virtio
interface to the guest kernel for accessing the disk image,
instead of simulating a real disk hardware. This can improve
disk I/O performance, but it requires a Virtio driver in
guest kernel. Use it instead of a plain -drive
if the guest kernel supports Virtio.
To build a Linux kernel with Virtio support for the guest,
use make defconfig &&
make kvm_guest.config to create an initial
kernel configuration with the Virtio drives enabled, then
make your customization. And, if the guest kernel is Linux,
the virtual disks using Virtio interface will be named
vdx
in the devtmpfs, instead of
sdx
.
-net
nic,netdev=net0,model=virtio-net-pci
: Provide Virtio
interface to the guest kernel for accessing the network
interface, instead of simulating a real network interface
card. This can improve network I/O performance, but it
requires a Virtio driver in guest kernel. Use it instead of a
plain -net
if the guest kernel
supports Virtio.
To set the resolution of the emulated display for a Xorg server running in the guest Linux system, read the section called “Fine Tuning Display Settings”.
The above solution for networking allows the guest to access
the local network through the host (and possibly to access
internet through the local routers), but the converse is not
true. Not even the host can access the guest, unless port
forwarding is enabled. And in the case several guests are
running, they cannot communicate with each other. Other
network devices can be used for this purpose. For example,
there is the “socket” device, which allows several
guests to share a common virtual network. In the following,
we describe in more details how to set up the “bridge” device,
which allows the guests to appear as if connected to the
local network. All the commands below should be run as the
root
user.
Set up bridging with bridge-utils-1.7.1. Only the physical interface(s) should be set up at boot. The virtual interface(s) will be added as needed when qemu is started.
Set up a required configuration file:
install -vdm 755 /etc/qemu && echo allow br0 > /etc/qemu/bridge.conf
In the qemu command line above, replace the switch -netdev user,...
with
-netdev bridge,...
.
Converts files from elf to dmp format |
|
is a test tool for the qemu EDID generator |
|
implements support for QMP (QEMU Monitor Protocol) commands and events that terminate and originate respectively within the guest using an agent built as part of QEMU |
|
provides commands to manage QEMU disk images |
|
is a diagnostic and manipulation program for (virtual) memory media. It is still at an early stage of development |
|
generates qemu reverse keymaps from xkb keymaps, which can be used with the qemu "-k" command line switch |
|
exports Qemu disk images using the QEMU Disk Network Block Device (NBD) protocol |
|
Implements the persistent reservation helper for QEMU |
|
allows to modify disk images using the QEMU Monitor Protocol (QMP) without running a VM |
|
is the QEMU PC System emulator |
Libraries contain code which is often required by more than one program. This has the advantage that each program doesn't need to duplicate code (and risk introducing bugs), it just has to call functions from the libraries installed on the system. The most obvious example of a set of libraries is Glibc which is installed during the LFS book. This contains all of the C library functions which programs use.
There are two types of libraries: static and shared. Shared
libraries (usually libXXX.so
) are
loaded into memory from the shared copy at runtime (hence the
name). Static libraries ( libXXX.a
)
are actually linked into the program executable file itself, thus
making the program file larger. Quite often, you will find both
static and shared copies of the same library on your system.
Generally, you only need to install libraries when you are
installing software that needs the functionality they supply. In
the BLFS book, each package is presented with a list of (known)
dependencies. Thus, you can figure out which libraries you need
to have before installing that program. If you are installing
something without using BLFS instructions, usually the
README
or INSTALL
file will contain details of the
program's requirements.
There are certain libraries which nearly everyone will need at some point. In this chapter these and some others are listed and it is explained why you may want to install them.
The AppStream package contains a library and tool that is useful for retrieving software metadata and making it easily accessible to programs which need it.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/appstream/releases/AppStream-1.0.1.tar.xz
Download MD5 sum: a1122ba2d3c41ba694f00844c84dddd7
Download size: 2.6 MB
Estimated disk space required: 34 MB
Estimated build time: 0.3 SBU (Using parallelism=4)
cURL-8.6.0, elogind-252.9, itstool-2.0.7, libxml2-2.12.5, libxmlb-0.3.15, and libyaml-0.2.5
Gi-DocGen-2023.3, (Qt-5.15.12 or qt-alternate-5.15.12), Qt-6.6.2, DAPS, and libstemmer
Install AppStream by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr \ --buildtype=release \ -Dapidocs=false \ -Dstemming=false .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install && mv -v /usr/share/doc/appstream{,-1.0.1}
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dapidocs=false
: This
switch disables building the API documentation. Remove it if
you have Gi-DocGen-2023.3 installed and wish to
regenerate the API documentation. When the API documentation
is not regenerated, a pre-built copy is installed anyway.
-Dstemming=false
:
This switch disables stemming support. Remove this switch if
you have libstemmer
installed and want faster searches.
-Dqt5=true
: Use this option if
you have (Qt-5.15.12 or qt-alternate-5.15.12) installed
and you want to build support for Qt-5 applications into this
package.
-Dqt=true
: Use this option if you
have Qt-6.6.2 installed and you want to build
support for Qt6 applications into this package. This option
conflicts with -Dqt5=true
.
AppStream expects an
operating system metainfo file describing the GNU/Linux
distribution. As the root
user, create the file describing LFS:
install -vdm755 /usr/share/metainfo &&
cat > /usr/share/metainfo/org.linuxfromscratch.lfs.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<component type="operating-system">
<id>org.linuxfromscratch.lfs</id>
<name>Linux From Scratch</name>
<summary>A customized Linux system built entirely from source</summary>
<description>
<p>
Linux From Scratch (LFS) is a project that provides you with
step-by-step instructions for building your own customized Linux
system entirely from source.
</p>
</description>
<url type="homepage">https://www.linuxfromscratch.org/lfs/</url>
<metadata_license>MIT</metadata_license>
<developer id='linuxfromscratch.org'>
<name>The Linux From Scratch Editors</name>
</developer>
<releases>
<release version="12.2" type="development" date="2024-09-01">
<description>
<p>The next release of Linux From Scratch.</p>
</description>
</release>
<release version="12.1" type="stable" date="2024-03-01">
<description>
<p>Now contains Binutils 2.42, GCC-13.2.0, Glibc-2.39, and Linux
kernel 6.7.</p>
</description>
</release>
</releases>
</component>
EOF
The Apache Portable Runtime (APR) is a supporting library for the Apache web server. It provides a set of application programming interfaces (APIs) that map to the underlying Operating System (OS). Where the OS doesn't support a particular function, APR will provide an emulation. Thus programmers can use the APR to make a program portable across different platforms.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.apache.org/dist/apr/apr-1.7.4.tar.bz2
Download MD5 sum: f8a62f3984898ba0ea8b6f26b851cb99
Download size: 876 KB
Estimated disk space required: 11 MB (additional 4 MB for the tests)
Estimated build time: 0.1 SBU (add 1.4 SBU for tests)
Install Apr by running the following commands:
./configure --prefix=/usr \ --disable-static \ --with-installbuilddir=/usr/share/apr-1/build && make
To test the results, issue: make test.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The Apache Portable Runtime Utility Library provides a predictable and consistent interface to underlying client library interfaces. This application programming interface assures predictable if not identical behavior regardless of which libraries are available on a given platform.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.apache.org/dist/apr/apr-util-1.6.3.tar.bz2
Download MD5 sum: b6e8c9b31d938fe5797ceb0d1ff2eb69
Download size: 423 KB
Estimated disk space required: 7.6 MB (add 1.4 MB for tests)
Estimated build time: less than 0.1 SBU (add 0.3 SBU for tests)
FreeTDS, MariaDB-10.11.7 or MySQL, OpenLDAP-2.6.7, PostgreSQL-16.2, SQLite-3.45.1, unixODBC-2.3.12, and Berkeley DB (deprecated)
Install Apr Util by running the following commands:
./configure --prefix=/usr \ --with-apr=/usr \ --with-gdbm=/usr \ --with-openssl=/usr \ --with-crypto && make
To test the results, issue: make -j1 test. One test, testdbm, is known to fail.
Now, as the root
user:
make install
--with-gdbm=/usr
:
This switch enables the apr_dbm_gdbm-1.so
plugin.
--with-openssl=/usr
--with-crypto
: These
switches enable the apr_crypto_openssl-1.so
plugin.
--with-berkeley-db=/usr
: If you
have installed
Berkeley DB (deprecated), use this switch to compile the
apr_dbm_db-1.so
plugin.
--with-ldap
: If you have
installed OpenLDAP-2.6.7, use this switch to
compile the apr_ldap.so
plugin.
The Aspell package contains an interactive spell checking program and the Aspell libraries. Aspell can either be used as a library or as an independent spell checker.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/aspell/aspell-0.60.8.1.tar.gz
Download MD5 sum: 187bd142f522ada555c7aa6b9cbf56e6
Download size: 3.4 MB
Estimated disk space required: 41 MB (Additional 8 MB for EN dictionary)
Estimated build time: 0.4 SBU
You'll need to download at least one dictionary. The English dictionary is given as an example below. Dictionaries in many other languages can be found at https://ftp.gnu.org/gnu/aspell/dict.
Aspell English dictionary: https://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-2020.12.07-0.tar.bz2
Which-2.21 (for the dictionaries)
Install Aspell 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 && ln -svfn aspell-0.60 /usr/lib/aspell && install -v -m755 -d /usr/share/doc/aspell-0.60.8.1/aspell{,-dev}.html && install -v -m644 manual/aspell.html/* \ /usr/share/doc/aspell-0.60.8.1/aspell.html && install -v -m644 manual/aspell-dev.html/* \ /usr/share/doc/aspell-0.60.8.1/aspell-dev.html
If you do not plan to install Ispell, then copy the wrapper script ispell:
install -v -m 755 scripts/ispell /usr/bin/
If you do not plan to install Spell, then copy the wrapper script spell:
install -v -m 755 scripts/spell /usr/bin/
ln -svfn aspell-0.60 /usr/lib/aspell: This command is useful for configuration of other applications, such as enchant-2.6.7.
After Aspell is installed, you must set up at least one dictionary. Install the English dictionary by running the following commands:
tar xf ../aspell6-en-2020.12.07-0.tar.bz2 && cd aspell6-en-2020.12.07-0 && ./configure && make
Now, as the root
user:
make install
Other dictionaries can be installed with the same instructions.
is a utility that can function as an ispell -a replacement, as an independent spell checker, as a test utility to test out Aspell features, and as a utility for managing dictionaries |
|
is a wrapper around aspell to invoke it in ispell compatible mode |
|
is a wrapper around aspell to invoke it in spell compatible mode |
|
imports old personal dictionaries into Aspell |
|
decompresses a prezipped file to stdout |
|
decompresses a prezipped file |
|
is a prefix delta compressor, used to compress sorted word lists or other similar text files |
|
is called by the various wrapper scripts to perform the actual compressing and decompressing |
|
displays information about the |
|
is a script to help use Aspell as an ispell replacement |
|
compresses or decompresses sorted word lists for use with the Aspell spell checker |
|
contains spell checking API functions |
|
is an interface to the |
Boost provides a set of free peer-reviewed portable C++ source libraries. It includes libraries for linear algebra, pseudorandom number generation, multithreading, image processing, regular expressions and unit testing.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.xz
Download MD5 sum: 893b5203b862eb9bbd08553e24ff146a
Download size: 90 MB
Estimated disk space required: 1.1 GB (199 MB installed)
Estimated build time: 1.7 SBU (Using parallelism=4; add 0.1 SBU for tests)
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/boost
This package can be built with several jobs running in
parallel. In the instructions below, <N>
stands for the number
of jobs. Install Boost by
running the following commands:
./bootstrap.sh --prefix=/usr --with-python=python3 &&
./b2 stage -j<N>
threading=multi link=shared
To run Boost.Build's regression tests, issue pushd tools/build/test; python3 test_all.py; popd. With python-3.11.x all 169 tests should pass. With Python-3.12.2, 7 tests fail for undetermined reasons.
To run every library's regression tests, issue pushd status; ../b2; popd.
A few tests may fail. They take a very long time (over 119
SBU at -j4) and use a very large amount of disk space (46
GB). You should use the -jN
switch to speed them up.
Boost installs many versioned directories in
/usr/lib/cmake. If a new version of Boost is installed over a previous
version, the older cmake directories need to be explicitly
removed. To do this, run as the root
user:
rm -rf /usr/lib/cmake/[Bb]oost*
before installing the new version.
Now, as the root
user:
./b2 install threading=multi link=shared
threading=multi
: This
parameter ensures that Boost
is built with multithreading support.
link=shared
: This
parameter ensures that only shared libraries are created,
except for libboost_exception and libboost_test_exec_monitor
which are created as static. Most people will not need the
static libraries, and most programs using Boost only use the headers. Omit this
parameter if you do need static libraries.
--with-python=python3
: This
switch ensures Python3 is used if Python2 is installed.
-jN
: This switch may be added to
the b2 command
lines, to run up to N processes in parallel.
Brotli provides a general-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling. Its libraries are particularly used for WOFF2 fonts on webpages.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/google/brotli/archive/v1.1.0/brotli-1.1.0.tar.gz
Download MD5 sum: 3a6a3dba82a3604792d3cb0bd41bca60
Download size: 500 KB
Estimated disk space required: 33 MB (with python3 bindings)
Estimated build time: 0.3 SBU (with python3 bindings; parallelism=4)
pytest-8.0.0 (for testing Python3 bindings)
Install brotli by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ .. && make
To test the results, issue: make test.
Now, as the root
user:
make install
If desired, build the Python3 bindings:
cd .. && sed "/c\/.*\.[ch]'/d;\ /include_dirs=\[/\ i libraries=['brotlicommon','brotlidec','brotlienc']," \ -i setup.py && pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Install the Python3 bindings
as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user Brotli
To test the Python3 binding, issue: pytest.
sed ... -i
setup.py: Stop setup.py
from rebuilding the entire package
all over again, use the already installed libraries for the
Python3 binding instead.
CLucene is a C++ version of Lucene, a high performance text search engine.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/clucene/clucene-core-2.3.3.4.tar.gz
Download MD5 sum: 48d647fbd8ef8889e5a7f422c1bfda94
Download size: 2.2 MB
Estimated disk space required: 78 MB
Estimated build time: 0.8 SBU
Install CLucene by running the following commands:
patch -Np1 -i ../clucene-2.3.3.4-contribs_lib-1.patch && sed -i '/Misc.h/a #include <ctime>' src/core/CLucene/document/DateTools.cpp && mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_CONTRIBS_LIB=ON .. && make
Now, as the root
user:
make install
-DBUILD_CONTRIBS_LIB=ON
: This
cmake variable enables building the CLucene contribs library
necessary for running applications that use language specific
text analyzers like LibreOffice for example.
The D-Bus GLib package contains GLib interfaces to the D-Bus API.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.112.tar.gz
Download MD5 sum: 021e6c8a288df02c227e4aafbf7e7527
Download size: 700 KB
Estimated disk space required: 12 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install D-Bus GLib by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-static && make
To test the results, issue: make check. Note that more comprehensive tests can be run by following the same method used in D-Bus instructions, which requires building the package twice.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The Double-conversion package contains a library that facilitates binary-to-decimal and decimal-to-binary routines for IEEE doubles.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/google/double-conversion/archive/v3.3.0/double-conversion-3.3.0.tar.gz
Download MD5 sum: b344abb64084a4a1d98a43e67752989b
Download size: 6.7 MB
Estimated disk space required: 62 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install Double-conversion by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_TESTING=ON \ .. && make
To test the results, issue: make test.
Now, as the root
user:
make install
-DBUILD_SHARED_LIBS=ON
: This
switch forces cmake to build a shared version of the library
instead of the static version.
-DBUILD_TESTING=ON
:
This switch builds the test programs.
duktape is an embeddable Javascript engine, with a focus on portability and compact footprint.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://duktape.org/duktape-2.7.0.tar.xz
Download MD5 sum: b3200b02ab80125b694bae887d7c1ca6
Download size: 1003 KB
Estimated disk space required: 25 MB
Estimated build time: 0.3 SBU
Install duktape by running the following commands:
sed -i 's/-Os/-O2/' Makefile.sharedlibrary make -f Makefile.sharedlibrary INSTALL_PREFIX=/usr
Now, as the root
user:
make -f Makefile.sharedlibrary INSTALL_PREFIX=/usr install
The enchant package provides a generic interface into various existing spell checking libraries.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/AbiWord/enchant/releases/download/v2.6.7/enchant-2.6.7.tar.gz
Download MD5 sum: 250e0b07d8dd80d9f2ed0046a6cc2933
Download size: 4.3 MB
Estimated disk space required: 19 MB (add 70 MB for tests)
Estimated build time: 0.1 SBU (add 0.7 SBU for tests)
dbus-glib-0.112, Doxygen-1.10.0, Hspell, Hunspell, Nuspell, Voikko, and unittest-cpp (required for tests)
Install enchant by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir /usr/share/doc/enchant-2.6.7 && make
To run tests, unittest-cpp must be installed and the
--enable-relocatable
option
passed to configure above. If these conditions are present,
the tests may be run with make
check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
You can test your installation and configuration by creating a test file and running the following commands (you can replace the en_GB dictionary by any other downloaded when installing Aspell-0.60.8.1):
cat > /tmp/test-enchant.txt << "EOF"
Tel me more abot linux
Ther ar so many commads
EOF
enchant-2 -d en_GB -l /tmp/test-enchant.txt &&
enchant-2 -d en_GB -a /tmp/test-enchant.txt
You will see a list of the misspelled words followed by a list of alternatives for them.
See more details in the enchant manual page.
Exempi is an implementation of XMP (Adobe's Extensible Metadata Platform).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://libopenraw.freedesktop.org/download/exempi-2.6.5.tar.xz
Download MD5 sum: 51fe14c2a5fa44816ba8187c6ad87d78
Download size: 2.7 MB
Estimated disk space required: 289 MB (add 236 MB for tests)
Estimated build time: 0.4 SBU (add 0.6 SBU for tests; both using parallelism=4)
If you intend to run the regression tests, first remove a test that depends on an apparently proprietary Adobe SDK:
sed -i -r '/^\s?testadobesdk/d' exempi/Makefile.am && autoreconf -fiv
Install Exempi by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.fftw.org/fftw-3.3.10.tar.gz
Download MD5 sum: 8ccbf6a5ea78a16dbc3e1306e234cc5c
Download size: 4.0 MB
Estimated disk space required: 59 MB
Estimated build time: 1.6 SBU (add 3.4 SBU for tests, both using parallelism=4)
We build fftw three times for different libraries in different numerical precisions: the default double precision floating point, the older 32-bit (single precision) version named float which sacrifices precision for speed, and the long double which offers increased precision at the cost of slower execution.
The first build is for double precision arithmetic. Install fftw by running the following commands:
./configure --prefix=/usr \ --enable-shared \ --disable-static \ --enable-threads \ --enable-sse2 \ --enable-avx \ --enable-avx2 && make
To test the results, issue: make check. On 32-bit systems, the tests can take substantially longer than they would on 64-bit machines.
Now, as the root
user:
make install
Now build single precision:
make clean && ./configure --prefix=/usr \ --enable-shared \ --disable-static \ --enable-threads \ --enable-sse2 \ --enable-avx \ --enable-avx2 \ --enable-float && make
As the root
user:
make install
Finally, build long double precision:
make clean && ./configure --prefix=/usr \ --enable-shared \ --disable-static \ --enable-threads \ --enable-long-double && make
As the root
user:
make install
--enable-shared
--disable-static
: Use
shared libs instead of static libs.
--enable-threads
:
This enables libfftw3_threads.so
to be compiled. It is
used by e.g. the gimp plugin
from G'MIC.
--enable-{sse2,avx,avx2}
: These
enables building the optimized routines using SSE2, AVX, and
AVX2 instructions. FFTW will check if these routines can be
really used on the current CPU when the FFTW library is
loaded, so a FFTW build with these routines enabled can still
run on a CPU without SSE2, AVX, or AVX512. These options are
not compatible with --enable-long-double
.
--enable-float
: This
enables building the library that uses single precision
floating point arithmetic. It is faster but less precise than
the default double precision library. The library will be
called libfftw3f.so
needed by
PulseAudio-17.0.
--enable-long-double
:
This enables building the library that uses higher precision
long-double floating point arithmetic. The library will be
called libfftw3l.so
.
--enable-avx512
: This enables
building the optimized routines using AVX512F instructions.
FFTW will check if these routines can be really used on the
current CPU when the FFTW library is loaded, so a FFTW build
with these routines enabled can still run on a CPU without
AVX512F. Use this option if the FFTW build will be used on a
CPU with AVX512F. This option is not compatible with
--enable-long-double
.
is a utility to generate FFTW wisdom files, which contain saved information about how to optimally compute (Fourier) transforms of various sizes |
|
is a utility to generate C configuration routines from FFTW wisdom files, where the latter contain saved information about how to optimally compute (Fourier) transforms of various sizes |
|
is the Fast Fourier Transform library |
|
is the threaded Fast Fourier Transform library |
|
is the single-precision Fast Fourier Transform library, described as “float” for historic reasons |
|
is the threaded single-precision Fast Fourier Transform library |
|
is the long double Fast Fourier Transform library |
|
is the threaded long double Fast Fourier Transform library |
The fmt package is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/fmtlib/fmt/archive/refs/tags/10.2.1/fmt-10.2.1.tar.gz
Download MD5 sum: dc09168c94f90ea890257995f2c497a5
Download size: 836 KB
Estimated disk space required: 4.5 MB (add 40 MB for tests)
Estimated build time: less than 0.1 SBU (add 0.2 SBU for tests)
Install fmt by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=/usr/lib \ -DBUILD_SHARED_LIBS=ON \ -DFMT_TEST=OFF \ -G Ninja .. && ninja
If you have enabled tests, issue: ninja test.
Now, as the root
user:
ninja install
-DFMT_TEST=OFF
: This
switch initializes the package tests. Set to ON if you wish
to run tests.
The GLib package contains low-level libraries useful for providing data structure handling for C, portability wrappers and interfaces for runtime functionality such as an event loop, threads, dynamic loading and an object system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/glib/2.78/glib-2.78.4.tar.xz
Download MD5 sum: 0781e889cab64f1f7dbb6e8357c6a95f
Download size: 5.1 MB
Estimated disk space required: 130 MB (add 20 MB for tests)
Estimated build time: 0.8 SBU (add 0.5 SBU for tests; both using parallelism=4)
libxslt-1.1.39 and pcre2-10.42
dbus-1.14.10 (for some tests), Fuse-3.16.2 and bindfs (both needed for one test), GDB-14.1 (for bindings), docbook-xml-4.5, docbook-xsl-nons-1.79.2, GTK-Doc-1.33.2 (to build API documentation), glib-networking-2.78.0 (for some tests, but this is a circular dependency), and sysprof
gobject-introspection-1.78.1 (should be installed before gtk+, atk, etc.)
Quoted directly from the INSTALL
file: “Some of the mimetype-related
functionality in GIO requires the update-mime-database and
update-desktop-database
utilities”, which are part of shared-mime-info-2.4 and desktop-file-utils-0.27,
respectively. These two utilities are also needed for some
tests.
If desired, apply the optional patch. In many cases,
applications that use this library, either directly or
indirectly via other libraries such as GTK+-3.24.41, output
numerous warnings when run from the command line. This patch
enables the use of an environment variable, GLIB_LOG_LEVEL
, that suppresses unwanted
messages. The value of the variable is a digit that
corresponds to:
1 Alert |
2 Critical |
3 Error |
4 Warning |
5 Notice |
For instance export
GLIB_LOG_LEVEL=4
will skip output of Warning
and Notice messages (and Info/Debug messages if they are
turned on). If GLIB_LOG_LEVEL
is
not defined, normal message output will not be affected.
patch -Np1 -i ../glib-skip_warnings-1.patch
If a previous version of glib is installed, move the headers out of the way so that later packages do not encounter conflicts:
if [ -e /usr/include/glib-2.0 ]; then rm -rf /usr/include/glib-2.0.old && mv -vf /usr/include/glib-2.0{,.old} fi
Install GLib by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dman=true && ninja
If libxslt-1.1.39 is installed, the above command may indicate several (about 33) errors that start with "Error: no ID for constraint linkend:" when generating the man pages. These are harmless.
The GLib test suite requires desktop-file-utils for some tests. However, desktop-file-utils requires GLib in order to compile; therefore, you must first install GLib and then run the test suite.
Now, as the root
user:
ninja install && mkdir -p /usr/share/doc/glib-2.78.4 && cp -r ../docs/reference/{gio,glib,gobject} /usr/share/doc/glib-2.78.4
You should now install desktop-file-utils-0.27 and shared-mime-info-2.4 and proceed to run the test suite.
Do not run the test suite as root
or some tests will fail
unexpectedly and leave some non-FHS-compliant directories
in the /usr
hierarchy.
To test the results, after having installed the package,
issue: LC_ALL=C ninja
test as a non-root
user.
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dman=true
: This
switch causes the build to create and install the package man
pages.
-Dgtk_doc=true
: This switch
causes the build to create and install the API documentation.
can be used to start applications and to send messages to already-running instances of other applications |
|
is a simple tool used for working with D-Bus objects |
|
is used to generate code and/or documentation for one or more D-Bus interfaces |
|
is a utility that makes many GIO features available from the command line |
|
is used to create a |
|
is used to read the resource description from a file and the files that it references to create a binary resource bundle that is suitable for use with the GResource API |
|
is used to compile all the GSettings XML schema
files in a directory into a binary file with the
name |
|
is a C code marshaller generation utility for GLib closures |
|
is a variant of the gettext internationalization utility |
|
is a C language enum description generation utility |
|
is a small utility that draws a tree of types |
|
offers a simple command line interface to GResource |
|
offers a simple command line interface to GSettings |
|
is a test running utility |
|
is a test report formatting utility |
|
contain low-level core libraries for the GIMP Toolkit |
The GLibmm package is a set of C++ bindings for GLib.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/glibmm/2.66/glibmm-2.66.5.tar.xz
Download MD5 sum: b6c2c8ba36abf6c5e43cee459a74b8a1
Download size: 7.3 MB
Estimated disk space required: 80 MB (with tests)
Estimated build time: 0.5 SBU (Using parallelism=4; with tests)
GLib-2.78.4 and libsigc++-2.12.1
Doxygen-1.10.0, glib-networking-2.78.0 (for tests), GnuTLS-3.8.3 (for tests), libxslt-1.1.39, and mm-common
Install GLibmm by running the following commands:
mkdir bld && cd bld && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
The GMime package contains a set of utilities for parsing and creating messages using the Multipurpose Internet Mail Extension (MIME) as defined by the applicable RFCs. See the GMime web site for the RFCs resourced. This is useful as it provides an API which adheres to the MIME specification as closely as possible while also providing programmers with an extremely easy to use interface to the API functions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/gmime/3.2/gmime-3.2.7.tar.xz
Download MD5 sum: 7ecd9aa75e0cd2e8668206b1d53df874
Download size: 2.1 MB
Estimated disk space required: 25 MB (with tests)
Estimated build time: 0.3 SBU (with tests)
GLib-2.78.4 and libgpg-error-1.47
gobject-introspection-1.78.1 and libidn2-2.3.7
DocBook-utils-0.6.14, GPGME-1.23.2, GTK-Doc-1.33.2, libnsl-2.0.1, Vala-0.56.14, and Gtk# (requires Mono)
Install GMime by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The GObject Introspection is used to describe the program APIs and collect them in a uniform, machine readable format.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/gobject-introspection/1.78/gobject-introspection-1.78.1.tar.xz
Download MD5 sum: da2677e6b9c91b33c036d2233a96cec3
Download size: 1.0 MB
Estimated disk space required: 48 MB (with tests)
Estimated build time: 0.3 SBU (With tests; both using parallelism=4)
Cairo-1.18.0 (required for the tests), Gjs-1.78.4 (to satisfy one test), GTK-Doc-1.33.2, Mako-1.3.2, and Markdown-3.4.1
Install GObject Introspection by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, fix an incompatibility of the test suite with Python 3.12 or later and then run the test suite:
sed "/PYTHONPATH/a'/usr/lib/python3.12'," -i ../tests/warn/meson.build && ninja test
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dgtk_doc=true
: Build and install
the documentation.
creates or extracts annotation data from GI typelibs |
|
converts one or more GIR files into one or more typelib |
|
generates Mallard files that can be viewed with yelp or rendered to HTML with yelp-build from yelp-tools |
|
is a utility that gives information about a GI typelib |
|
is a GIR generator that uses the repository API |
|
is a tool which generates GIR XML files by parsing headers and introspecting GObject based libraries |
|
provides an API to access the typelib metadata |
The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/gsl/gsl-2.7.1.tar.gz
Download MD5 sum: 36aee97e67f64dbdab7afae197e3483b
Download size: 7.2 MB
Estimated disk space required: 213 MB (with tests, without docs)
Estimated build time: 1.2 SBU (Using parallelism=4; with tests, without docs)
Install Gsl by running the following commands:
./configure --prefix=/usr --disable-static && make
If you have sphinx_rtd_theme-2.0.0 installed, build the documentation with:
make html
To test the results, issue: make check.
Now, as the root
user:
make install
If you built the documentation, install it (as root
) with:
mkdir /usr/share/doc/gsl-2.7.1 && cp -R doc/_build/html/* /usr/share/doc/gsl-2.7.1
--disable-static
:
This switch prevents installation of static versions of the
libraries.
is a shell script to get the version number and compiler flags of the installed Gsl library |
|
is a demonstration program for the GNU Scientific Library that computes a histogram from data taken from stdin |
|
is a demonstration program for the GNU Scientific Library that generates random samples from various distributions |
|
contains functions that implement a C interface to Basic Linear Algebra Subprograms |
|
contains functions that provide a collection of numerical routines for scientific computing |
The gspell package provides a flexible API to add spell checking to a GTK+ application.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/gspell/1.12/gspell-1.12.2.tar.xz
Download MD5 sum: f1e5f02695aee20ba543352889c28ff5
Download size: 436 KB
Estimated disk space required: 11 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
enchant-2.6.7, ICU-74.2, and GTK+-3.24.41
gobject-introspection-1.78.1, GTK-Doc-1.33.2, Vala-0.56.14, and Valgrind-3.22.0
Install gspell by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check. The tests must be run in an X session. One test, test-checker, is known to fail if the external package Hunspell is not installed.
Now, as the root
user:
make install
The libtool archive file from this package is referring to
the libraries from ICU-74.2. Such a reference may cause packages
depending on this package to be unnecessary linked against
the ICU libraries and increase the burden to rebuild packages
if ICU is updated to a new major version. As we've explained
in Libtool archive (.la)
files, these libtool archive files are unneeded anyway.
So as the root
user, remove
the libtool archive file now:
rm -v /usr/lib/libgspell-1.la
The International Components for Unicode (ICU) package is a mature, widely used set of C/C++ libraries providing Unicode and Globalization support for software applications. ICU is widely portable and gives applications the same results on all platforms.
Upgrading this package to a new major version (for example,
from 72.1 to 74.2) will require rebuilding of many other
packages. If some packages that use the libraries built by
icu4c-74 are rebuilt, they will use the new libraries while
current packages will use the previous libraries. If the
Linux application loader (/usr/lib/ld-linux-x86-64.so.2
) determines
that both the old and new libraries are needed, and a
symbol (name of data or function) exists in both versions
of the library, all references to the symbol will be
resolved to the version appearing earlier in the
breadth-first sequence of the dependency graph. This may
result in the application failing if the definition of the
data or the behavior of the function referred by the symbol
differs in two versions. To avoid the issue, users will
need to rebuild every package linked to an ICU library as
soon as possible once ICU is updated to a new major
version.
To determine what external libraries are needed (directly or indirectly) by an application or a library, run:
ldd <application or library>
or to see only the directly needed libraries:
readelf -d <application or library> | grep NEEDED
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/unicode-org/icu/releases/download/release-74-2/icu4c-74_2-src.tgz
Download MD5 sum: 94c0b370f43123ea92b146ebea9c709d
Download size: 25 MB
Estimated disk space required: 339 MB (add 42 MB for tests)
Estimated build time: 0.7 SBU (Using parallelism=4; add 1.5 SBU for tests)
LLVM-17.0.6 (with Clang), and Doxygen-1.10.0 (for documentation)
This package expands to the directory icu
.
If clang++ is available, it will be used in the mistaken belief that g++ might not support C++11, even though configure has tested for that. If using g++ there will be an unnecessary warning at the end of configure. Building with g++ also takes longer than the estimated SBU shown.
Install ICU by running the following commands:
cd source && ./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
disassembles a resource bundle |
|
converts “\u” escaped characters into unicode characters |
|
compiles ICU break iteration rules source files into binary data files |
|
generates C or platform specific assembly code from an ICU data file |
|
reads in Unicode confusable character definitions and writes out the binary data |
|
generates an ICU memory-mappable data file |
|
compiles the converter's aliases file |
|
compiles word lists into ICU string trie dictionaries |
|
builds binary data files with Unicode normalization data |
|
compiles a resource bundle |
|
compiles StringPrep data from filtered RFC 3454 files |
|
outputs ICU build options |
|
outputs configuration information about the current ICU |
|
extracts or modifies an ICU .dat archive |
|
compiles a converter table |
|
packages data for use by ICU |
|
converts data from one encoding to another |
|
is the data library |
|
is the internationalization (i18n) library |
|
is the ICU I/O (unicode stdio) library |
|
is the test library |
|
is the tool utility library |
|
is the common library |
This package is a simple .INI file parser written in C.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/benhoyt/inih/archive/r58/inih-r58.tar.gz
Download MD5 sum: 5c9725320ad2c79e0b1f76568bd0ff24
Download size: 20 KB
Estimated disk space required: 724 KB
Estimated build time: less than 0.1 SBU
Install inih by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
The Intel-gmmlib package contains the Intel Graphics Memory Management Library, which provides device specific memory and buffer management functions for the Intel Media Driver for VAAPI and the Intel Graphics Computer Runtime for OpenCL (TM).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-22.3.16.tar.gz
Download MD5 sum: 7d947d9fa06c101731ac4881857e056a
Download size: 828 KB
Estimated disk space required: 53 MB
Estimated build time: 0.5 SBU
The tarball intel-gmmlib-22.3.16.tar.gz
will extract
to the directory gmmlib-intel-gmmlib-22.3.16
.
Install Intel-gmmlib by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_TYPE=Release \ -G Ninja \ -Wno-dev .. && ninja
The test suite is normally run by ninja unless -DRUN_TEST_SUITE=NO is passed to cmake.
Now, as the root
user:
ninja install
The Jansson package contains a library used to encode, decode, and manipulate JSON data.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/akheron/jansson/releases/download/v2.14/jansson-2.14.tar.bz2
Download MD5 sum: 3f90473d7d54ebd1cb6a2757396641df
Download size: 424 KB
Estimated disk space required: 5.6 MB (add 1.9 MB for tests)
Estimated build time: 0.1 SBU (with tests)
First fix one of the tests:
sed -e "/DT/s;| sort;| sed 's/@@libjansson.*//' &;" \ -i test/suites/api/check-exports
Install jansson by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
The JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C, output them as JSON formatted strings and parse JSON formatted strings back into the C representation of JSON objects.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://s3.amazonaws.com/json-c_releases/releases/json-c-0.17.tar.gz
Download MD5 sum: bad8f5e91b7b2563ee2d507054c70eb2
Download size: 384 KB
Estimated disk space required: 7.9 MB
Estimated build time: 0.4 SBU (with tests)
Doxygen-1.10.0 and Graphviz-10.0.1 (for dot tool)
Install JSON-C by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC_LIBS=OFF \ .. && make
If you have installed Doxygen-1.10.0 and Graphviz-10.0.1, you can build the documentation by running the following command:
doxygen doc/Doxyfile
To test the results, issue: make test.
Now, as the root
user:
make install
If you built the documentation, install it by running the
following commands as the root
user:
install -d -vm755 /usr/share/doc/json-c-0.17 && install -v -m644 doc/html/* /usr/share/doc/json-c-0.17
-DCMAKE_BUILD_TYPE=Release
:
This switch is used to apply a higher level of compiler
optimizations.
The JSON GLib package is a library providing serialization and deserialization support for the JavaScript Object Notation (JSON) format described by RFC 4627.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/json-glib/1.8/json-glib-1.8.0.tar.xz
Download MD5 sum: f1aac2b8a17fd68646653cc4d8426486
Download size: 156 KB
Estimated disk space required: 7.8 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install JSON GLib by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dgtk_doc=disabled
: Add this
option if you have GTK-Doc-1.33.2 installed and do not wish
to generate the API documentation.
Keyutils is a set of utilities for managing the key retention facility in the kernel, which can be used by filesystems, block devices and more to gain and retain the authorization and encryption keys required to perform secure operations.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/snapshot/keyutils-1.6.3.tar.gz
Download MD5 sum: 6b70b2b381c1b6d9adfaf66d5d3e7c00
Download size: 136 KB
Estimated disk space required: 2.6 MB (with tests)
Estimated build time: less than 0.1 SBU (add 0.4 SBU for tests)
lsb-tools-0.12 (referred by the test suite)
If running the test suite, some tests needs the following kernel features enabled:
Security options ---> [*] Enable access key retention support [KEYS] [*] Large payload keys [BIG_KEYS] [*] Diffie-Hellman operations on retained keys [KEY_DH_OPERATIONS] -*- Cryptographic API ---> [CRYPTO] Public-key cryptography ---> <*/M> RSA (Rivest-Shamir-Adleman) [CRYPTO_RSA] [*] Asymmetric (public-key cryptographic) key type ---> [ASYMMETRIC_KEY_TYPE] <*> Asymmetric public-key crypto algorithm subtype ... [ASYMMETRIC_PUBLIC_KEY_SUBTYPE] # If not built into the kernel, [SYSTEM_TRUSTED_KEYRING] won't show up; # building as a module won't work: <*> X.509 certificate parser [X509_CERTIFICATE_PARSER] Certificates for signature checking ---> [*] Provide system-wide ring of trusted keys [SYSTEM_TRUSTED_KEYRING] [*] Provide a keyring to which extra trustable keys may be added ... [SECONDARY_TRUSTED_KEYRING] [*] Provide system-wide ring of blacklisted keys [SYSTEM_BLACKLIST_KEYRING] Library routines ---> Crypto library routines ---> # If not built into the kernel, [BIG_KEYS] won't show up; # building as a module won't work: <*> ChaCha20-Poly1305 AEAD support (8-byte nonce library version) ... [CRYPTO_LIB_CHACHA20POLY1305]
Install keyutils by running the following commands:
make
Now, as the root
user:
make NO_ARLIB=1 LIBDIR=/usr/lib BINDIR=/usr/bin SBINDIR=/usr/sbin install
The test suite can only run after installing this package. To
test the results, issue, as the root
user:
make -k test
If lsb-tools-0.12 is not installed, the
test suite will output some lines complaining the
lsb_release
command not available but it won't affect the test result.
One test named TRY ADDING ASYMMETRIC
KEYS
is known to fail due to the removal of the
support for SHA1 with RSA signature algorithm from Linux
kernel version 6.7 or newer.
NO_ARLIB=1
: This make
flag disables installing the static library.
controls the key management facility with a variety of subcommands |
|
is invoked by request-key on behalf of the kernel when kernel services (such as NFS, CIFS and AFS) need to perform a hostname lookup and the kernel does not have the key cached. It is not ordinarily intended to be called directly |
|
is invoked by the kernel when the kernel is asked for a key that it doesn't have immediately available. The kernel creates a temporary key and then calls out to this program to instantiate it. It is not intended to be called directly |
|
contains the keyutils library API instantiation |
The libaio package is an asynchronous I/O facility ("async I/O", or "aio") that has a richer API and capability set than the simple POSIX async I/O facility. This library, libaio, provides the Linux-native API for async I/O. The POSIX async I/O facility requires this library in order to provide kernel-accelerated async I/O capabilities, as do applications which require the Linux-native async I/O API.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://pagure.io/libaio/archive/libaio-0.3.113/libaio-0.3.113.tar.gz
Download MD5 sum: 605237f35de238dfacc83bcae406d95d
Download size: 48 KB
Estimated disk space required: 1.0 MB
Estimated build time: less than 0.1 SBU
First, disable the installation of the static library:
sed -i '/install.*libaio.a/s/^/#/' src/Makefile
Build libaio by running the following command:
make
To test the results, issue: make partcheck.
Now, install the package as the root
user:
make install
The libarchive library provides a single interface for reading/writing various compression formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libarchive/libarchive/releases/download/v3.7.2/libarchive-3.7.2.tar.xz
Download MD5 sum: 4f4ef6a17c7b0b484aa2c95aa6deefac
Download size: 5.0 MB
Estimated disk space required: 42 MB (add 34 MB for tests)
Estimated build time: 0.3 SBU (add 0.7 SBU for tests)
Install libarchive by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: LC_ALL=C make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--without-xml2
: This switch sets
expat for xar archive format support instead of preferred
libxml2 if both packages are installed.
--without-nettle
: This switch
sets OpenSSL for crypto support instead of preferred Nettle
if both packages are installed.
The libassuan package contains an inter process communication library used by some of the other GnuPG related packages. libassuan's primary use is to allow a client to interact with a non-persistent server. libassuan is not, however, limited to use with GnuPG servers and clients. It was designed to be flexible enough to meet the demands of many transaction based environments with non-persistent servers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.6.tar.bz2
Download MD5 sum: 9c22e76168675ec996b9d620ffbb7b27
Download size: 564 KB
Estimated disk space required: 7.9 MB (with tests, add 3.4 MB for documentation)
Estimated build time: 0.1 SBU (with tests and documentation)
Install libassuan by running the following commands:
./configure --prefix=/usr && make && make -C doc html && makeinfo --html --no-split -o doc/assuan_nochunks.html doc/assuan.texi && makeinfo --plaintext -o doc/assuan.txt doc/assuan.texi
The above commands build the documentation in html and plaintext formats. If you wish to build alternate formats of the documentation, you must have texlive-20230313 installed and issue the following commands:
make -C doc pdf ps
To test the results, issue: make check.
Now, as the root
user:
make install && install -v -dm755 /usr/share/doc/libassuan-2.5.6/html && install -v -m644 doc/assuan.html/* \ /usr/share/doc/libassuan-2.5.6/html && install -v -m644 doc/assuan_nochunks.html \ /usr/share/doc/libassuan-2.5.6 && install -v -m644 doc/assuan.{txt,texi} \ /usr/share/doc/libassuan-2.5.6
If you built alternate formats of the documentation, install
them by running the following commands as the root
user:
install -v -m644 doc/assuan.{pdf,ps,dvi} \ /usr/share/doc/libassuan-2.5.6
The libatasmart package is a disk reporting library. It only supports a subset of the ATA S.M.A.R.T. functionality.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://0pointer.de/public/libatasmart-0.19.tar.xz
Download MD5 sum: 53afe2b155c36f658e121fe6def33e77
Download size: 248 KB
Estimated disk space required: 3 MB
Estimated build time: less than 0.1 SBU
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libatasmart
Install libatasmart 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:
make docdir=/usr/share/doc/libatasmart-0.19 install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
libatomic_ops provides implementations for atomic memory update operations on a number of architectures. This allows direct use of these in reasonably portable code. Unlike earlier similar packages, this one explicitly considers memory barrier semantics, and allows the construction of code that involves minimum overhead across a variety of architectures.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/ivmai/libatomic_ops/releases/download/v7.8.2/libatomic_ops-7.8.2.tar.gz
Download MD5 sum: d07b3d8369d7f9efdca59f7501dd1117
Download size: 516 KB
Estimated disk space required: 6.8 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install libatomic_ops by running the following commands:
./configure --prefix=/usr \ --enable-shared \ --disable-static \ --docdir=/usr/share/doc/libatomic_ops-7.8.2 && make
To check the results, issue make check.
Now, as the root
user:
make install
--enable-shared
: This
switch enables building of the libatomic_ops
shared libraries.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
libblockdev is a C library supporting GObject Introspection for manipulation of block devices. It has a plugin-based architecture where each technology (like LVM, Btrfs, MD RAID, Swap,...) is implemented in a separate plugin, possibly with multiple implementations (e.g. using LVM CLI or the new LVM DBus API).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/storaged-project/libblockdev/releases/download/3.1.0-1/libblockdev-3.1.0.tar.gz
Download MD5 sum: 033f2098a13f9dae6105d0337470efd3
Download size: 1.0 MB
Estimated disk space required: 13 MB
Estimated build time: 0.1 SBU
cryptsetup-2.7.0, gobject-introspection-1.78.1 (required for GNOME), keyutils-1.6.3, libbytesize-2.10, libnvme-1.8, and LVM2-2.03.23
btrfs-progs-6.7.1, GTK-Doc-1.33.2, mdadm-4.2, parted-3.6, volume_key, ndctl, and targetcli (for tests)
Install libblockdev by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --with-python3 \ --without-escrow \ --without-gtk-doc \ --without-lvm \ --without-lvm_dbus \ --without-nvdimm \ --without-tools && make
The test suite requires targetcli, which is not a part of BLFS.
Now, as the root
user:
make install
--without-escrow
:
This switch allows building libblockdev without volume_key
installed.
--without-lvm
--without-lvm_dbus
--without-tools
: The
combination of these switches allows building libblockdev without parted-3.6 installed.
Remove it if you've installed parted-3.6 and wish to build the
lvm-cache-stats
or vfat-resize
utilities, or wish libblockdev to support logical volumes.
--without-btrfs --without-mdraid
--without-tools
: The combination of these switches
allows building libblockdev
without libbytesize-2.10 installed. The
--without-mdraid
option will
break UDisks-2.10.1, so don't use it unless you
really know what you are doing.
--without-crypto
: This switch
allows building libblockdev
without cryptsetup-2.7.0 or keyutils-1.6.3
installed. This switch will break UDisks-2.10.1, so don't
use it unless you really know what you are doing.
--without-dm --without-lvm
--without-lvm_dbus --without-mpath
: The combination of
these switches allows building libblockdev without LVM2-2.03.23 installed.
The --without-dm
and --without-mpath
options are not in the
instructions provided by the book because LVM2-2.03.23 is
required for cryptsetup-2.7.0 and cryptsetup-2.7.0 is a recommended
dependency of libblockdev
anyway.
--without-nvme
: This switch
allows building libblockdev
without libnvme-1.8 installed. This switch will
break UDisks-2.10.1, so don't use it unless you
really know what you are doing.
The libbytesize package is a library which facilitates the common operations with sizes in bytes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/storaged-project/libbytesize/releases/download/2.10/libbytesize-2.10.tar.gz
Download MD5 sum: 2ed2ad2e44c4017f016e1ca55be83e62
Download size: 452 KB
Estimated disk space required: 3.5 MB
Estimated build time: less than 0.1 SBU (including tests)
pcre2-10.42 and Pygments-2.17.2
GTK-Doc-1.33.2, pocketlint (python module for one test), and polib (python module for one test)
Install libbytesize by running the following commands:
./configure --prefix=/usr && make
If you have the optional python modules installed, the regression tests can be run with: make check.
Now, as the root
user:
make install
The libcloudproviders package contains a library which provides a DBus API that allows cloud storage sync clients to expose their services.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libcloudproviders/0.3/libcloudproviders-0.3.5.tar.xz
Download MD5 sum: bdb46d0e8222df79eeff4043cd9933b2
Download size: 24 KB
Estimated disk space required: 1.5 MB
Estimated build time: less than 0.1 SBU
gobject-introspection-1.78.1 and Vala-0.56.14
Install libcloudproviders by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Denable-gtk-doc
: Use this switch
if you have GTK-Doc-1.33.2 installed and wish to
generate the API documentation.
The libdaemon package is a lightweight C library that eases the writing of UNIX daemons.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://0pointer.de/lennart/projects/libdaemon/libdaemon-0.14.tar.gz
Download MD5 sum: 509dc27107c21bcd9fbf2f95f5669563
Download size: 332 KB
Estimated disk space required: 3 MB
Estimated build time: 0.1 SBU
Install libdaemon by running the following commands:
./configure --prefix=/usr --disable-static && make
If you have Doxygen installed and wish to build the API documentation, issue the following command:
make -C doc doxygen
This package does not come with a test suite.
Now, as the root
user:
make docdir=/usr/share/doc/libdaemon-0.14 install
If you built the API documentation, install it using the
following commands as the root
user:
install -v -m755 -d /usr/share/doc/libdaemon-0.14/reference/html && install -v -m644 doc/reference/html/* /usr/share/doc/libdaemon-0.14/reference/html && install -v -m644 doc/reference/man/man3/* /usr/share/man/man3
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libgcrypt package contains a general purpose crypto library based on the code used in GnuPG. The library provides a high level interface to cryptographic building blocks using an extendable and flexible API.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.10.3.tar.bz2
Download MD5 sum: a8cada0b343e10dbee51c9e92d856a94
Download size: 3.6 MB
Estimated disk space required: 131 MB (with tests)
Estimated build time: 0.3 SBU (with documentation; add 0.4 SBU for tests)
Install libgcrypt by running the following commands:
./configure --prefix=/usr && make && make -C doc html && makeinfo --html --no-split -o doc/gcrypt_nochunks.html doc/gcrypt.texi && makeinfo --plaintext -o doc/gcrypt.txt doc/gcrypt.texi
To test the results, issue: make check.
Now, as the root
user:
make install && install -v -dm755 /usr/share/doc/libgcrypt-1.10.3 && install -v -m644 README doc/{README.apichanges,fips*,libgcrypt*} \ /usr/share/doc/libgcrypt-1.10.3 && install -v -dm755 /usr/share/doc/libgcrypt-1.10.3/html && install -v -m644 doc/gcrypt.html/* \ /usr/share/doc/libgcrypt-1.10.3/html && install -v -m644 doc/gcrypt_nochunks.html \ /usr/share/doc/libgcrypt-1.10.3 && install -v -m644 doc/gcrypt.{txt,texi} \ /usr/share/doc/libgcrypt-1.10.3
--with-capabilities
: This option
enables libcap2 support. Note that this breaks cryptsetup-2.7.0
is a debug tool for S-expressions |
|
is a standalone HMAC-SHA-256 implementation used to compute an HMAC-SHA-256 authentication code |
|
determines the compile and linker flags that should
be used to compile and link programs that use
|
|
is a RPN (Reverse Polish Notation) calculator |
|
contains the cryptographic API functions |
The libgpg-error package contains a library that defines common error values for all GnuPG components.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.47.tar.bz2
Download MD5 sum: 58e054ca192a77226c4822bbee1b7fdb
Download size: 1.0 MB
Estimated disk space required: 11 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install libgpg-error by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install && install -v -m644 -D README /usr/share/doc/libgpg-error-1.47/README
The libgrss package contains a library designed to manipulate RSS and Atom feeds.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libgrss/0.7/libgrss-0.7.0.tar.xz
Download MD5 sum: 7c0ee46a82dc0e9610183fe9ef8c7c1d
Download size: 356 KB
Estimated disk space required: 10 MB
Estimated build time: 0.1 SBU
Install libgrss by running the following commands:
patch -Np1 -i ../libgrss-0.7.0-bugfixes-2.patch && autoreconf -fv && ./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The libgsf package contains a library used for providing an extensible input/output abstraction layer for structured file formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libgsf/1.14/libgsf-1.14.52.tar.xz
Download MD5 sum: c64b4a29dd2e67749313f3917a12a709
Download size: 692 KB
Estimated disk space required: 14 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
GLib-2.78.4 and libxml2-2.12.5
gdk-pixbuf-2.42.10 (To build gsf-office-thumbnailer)
gobject-introspection-1.78.1, GTK-Doc-1.33.2, and Valgrind-3.22.0 (for tests)
Install libgsf by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
is a simple archive utility, somewhat similar to tar(1) |
|
is used internally by GNOME applications such as Nautilus to generate thumbnails of several types of office application files |
|
is used to extract Visual Basic for Applications macros from files |
|
contains the libgsf API functions |
The libgudev package contains GObject bindings for libudev.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libgudev/238/libgudev-238.tar.xz
Download MD5 sum: 46da30a1c69101c3a13fa660d9ab7b73
Download size: 32 KB
Estimated disk space required: 2.0 MB
Estimated build time: less than 0.1 SBU
gobject-introspection-1.78.1 (for gir-data, needed for GNOME), GTK-Doc-1.33.2, and umockdev-0.17.18 (for testing)
Install libgudev by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dgtk_doc=true
: Use this option
if GTK-Doc is installed and you wish to build and install the
API documentation.
The libgusb package contains the GObject wrappers for libusb-1.0 that makes it easy to do asynchronous control, bulk and interrupt transfers with proper cancellation and integration into a mainloop.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/hughsie/libgusb/releases/download/0.4.8/libgusb-0.4.8.tar.xz
Download MD5 sum: edc0715ded0b886c063189deef94c754
Download size: 52 KB
Estimated disk space required: 2.1 MB (with tests and docs)
Estimated build time: 0.1 SBU (with tests and docs)
JSON-GLib-1.8.0 and libusb-1.0.27
gobject-introspection-1.78.1,
usbutils-017 (for usb.ids
data file, which is also required
for the tests), and Vala-0.56.14
Gi-DocGen-2023.3 and umockdev-0.17.18 (for full test coverage)
Install libgusb by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Ddocs=false && ninja
If you have Gi-DocGen-2023.3 installed and wish to build the API documentation for this package, issue:
sed -E "/output|install_dir/s/('libgusb)'/\1-0.4.8'/" \ -i ../docs/meson.build && meson configure -Ddocs=true && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Ddocs=false
: Allow
building this package without Gi-DocGen-2023.3
installed. If you have Gi-DocGen-2023.3 installed and
you wish to rebuild and install the API documentation, a
meson configure
command will reset this option.
The libical package contains an implementation of the iCalendar protocols and data formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libical/libical/releases/download/v3.0.17/libical-3.0.17.tar.gz
Download MD5 sum: aab3e2c80a5a61c744204675bff19ae0
Download size: 888 KB
Estimated disk space required: 38 MB (with tests and API documentation)
Estimated build time: 0.4 SBU (with tests and documentation)
gobject-introspection-1.78.1 and Vala-0.56.14 (both required for GNOME)
Doxygen-1.10.0 (for the API documentation), Graphviz-10.0.1 (for the API documentation), GTK-Doc-1.33.2 (for the API documentation), ICU-74.2, PyGObject-3.46.0 (for some tests), and Berkeley DB (deprecated)
Install libical by running the following commands:
This package may occasionally fail when building with multiple processors. See Using Multiple Processors for more information.
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DSHARED_ONLY=yes \ -DICAL_BUILD_DOCS=false \ -DGOBJECT_INTROSPECTION=true \ -DICAL_GLIB_VAPI=true \ .. && make -j1
If you have Doxygen-1.10.0, Graphviz-10.0.1, and
GTK-Doc-1.33.2 installed and wish to
build the API documentation, you should remove the -DICAL_BUILD_DOCS=false
switch
and issue:
make docs
To test the results, issue: make test.
Now, as the root
user:
make install
If you have built the API documentation, install by issuing,
as root
user:
install -vdm755 /usr/share/doc/libical-3.0.17/html && cp -vr apidocs/html/* /usr/share/doc/libical-3.0.17/html
-DCMAKE_BUILD_TYPE=Release
:
This switch is used to apply higher level of the compiler
optimizations.
-DSHARED_ONLY=yes
:
This switch is used in order to only build the shared
libraries.
-DICAL_BUILD_DOCS=false
: This
switch prevents building the GTK documentation. Remove if you want to
build the documentation.
-DGOBJECT_INTROSPECTION=true
:
This switch is used to generate GObject metadata bindings.
-DICAL_GLIB_VAPI=true
: This
switch is used in order to build bindings for Vala-0.56.14.
-DUSE_BUILTIN_TZDATA=yes
: This
switch is used in order to build using your own timezone
data.
libidn is a package designed for internationalized string handling based on the Stringprep, Punycode and IDNA specifications defined by the Internet Engineering Task Force (IETF) Internationalized Domain Names (IDN) working group, used for internationalized domain names. This is useful for converting data from the system's native representation into UTF-8, transforming Unicode strings into ASCII strings, allowing applications to use certain ASCII name labels (beginning with a special prefix) to represent non-ASCII name labels, and converting entire domain names to and from the ASCII Compatible Encoding (ACE) form.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn-1.42.tar.gz
Download MD5 sum: fe061a95ae23979150a692d102dce4ad
Download size: 2.5 MB
Estimated disk space required: 19 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Emacs-29.2, GTK-Doc-1.33.2, OpenJDK-21.0.2, Valgrind-3.22.0, and Mono
Install libidn by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, run:
pushd tests && make check && popd
Now, as the root
user:
make install && find doc -name "Makefile*" -delete && rm -rf -v doc/{gdoc,idn.1,stamp-vti,man,texi} && mkdir -v /usr/share/doc/libidn-1.42 && cp -r -v doc/* /usr/share/doc/libidn-1.42
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
--enable-java
: Use this switch to
enable building the Java implementation of libidn. Note that OpenJDK-21.0.2 must be
installed to use this option.
is a command line interface to the internationalized domain name library |
|
contains a generic Stringprep implementation that does Unicode 3.2 NFKC normalization, mapping and prohibition of characters, and bidirectional character handling. Profiles for Nameprep, iSCSI, SASL and XMPP are included as well as support for Punycode and ASCII Compatible Encoding (ACE) via IDNA. A mechanism to define Top-Level Domain (TLD) specific validation tables, and to compare strings against those tables, as well as default tables for some TLDs are included |
libidn2 is a package designed for internationalized string handling based on standards from the Internet Engineering Task Force (IETF)'s IDN working group, designed for internationalized domain names.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn2-2.3.7.tar.gz
Download MD5 sum: de2818c7dea718a4f264f463f595596b
Download size: 2.1 MB
Estimated disk space required: 21 MB (add 3 MB for tests)
Estimated build time: 0.1 SBU (add 0.6 SBU for tests)
Install libidn2 by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
libiodbc is an API to ODBC compatible databases.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/iodbc/libiodbc-3.52.15.tar.gz
Download MD5 sum: 89949a41e542bb1b880d7fcc4987dad2
Download size: 1.0 MB
Estimated disk space required: 26 MB
Estimated build time: 0.2 SBU
GTK+-2.24.33 (to create the GUI admin tool)
Install libiodbc by running the following commands:
./configure --prefix=/usr \ --with-iodbc-inidir=/etc/iodbc \ --includedir=/usr/include/iodbc \ --disable-libodbc \ --disable-static && make
This package does not come with a test suite.
Now, as the root
user:
make install
--with-iodbc-inidir=/etc/iodbc
:
libiodbc will install
configuration files in this directory.
--includedir=/usr/include/iodbc
:
This installs the interface headers to a private directory to
avoid a conflict with headers installed by unixODBC.
--disable-libodbc
:
This prevents the installation of the libodbc.so
symbolic link to avoid a
conflict with unixODBC.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The Libksba package contains a library used to make X.509 certificates as well as making the CMS (Cryptographic Message Syntax) easily accessible by other applications. Both specifications are building blocks of S/MIME and TLS. The library does not rely on another cryptographic library but provides hooks for easy integration with Libgcrypt.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libksba/libksba-1.6.5.tar.bz2
Download MD5 sum: 57b88e5d24c8705d9a3ba3832140d188
Download size: 692 KB
Estimated disk space required: 9.4 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install Libksba by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
This package provides a library for learning linear classifiers for large scale applications. It supports Support Vector Machines (SVM) with L2 and L1 loss, logistic regression, multi class classification and also Linear Programming Machines (L1-regularized SVMs). Its computational complexity scales linearly with the number of training examples making it one of the fastest SVM solvers around.
This package is known to build and work properly using an LFS 12.1 platform.
After updating this package from liblinear-1.96 or earlier, you need to reinstall Nmap-7.94, in order to link to the new library.
Download (HTTP): https://github.com/cjlin1/liblinear/archive/v247/liblinear-247.tar.gz
Download MD5 sum: 0c81dd2b2cabc4fba85f61b9dc51c4a3
Download size: 560 KB
Estimated disk space required: 1.6 MB
Estimated build time: less than 0.1 SBU
Install liblinear by running the following commands:
make lib
This package does not come with a test suite.
Now, as the root
user:
install -vm644 linear.h /usr/include && install -vm755 liblinear.so.5 /usr/lib && ln -sfv liblinear.so.5 /usr/lib/liblinear.so
The libmbim package contains a GLib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/libmbim/libmbim-1.26.4.tar.xz
Download MD5 sum: 58dea20cad346f31d2873b68385a9973
Download size: 553 KB
Estimated disk space required: 33 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install libmbim by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The libnvme package is a library which provides type definitions for NVMe specification structures, enumerations, and bit fields, helper functions to construct, dispatch, and decode commands and payloads, and utilities to connect, scan, and manage NVMe devices on a Linux system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/linux-nvme/libnvme/archive/refs/tags/v1.8/libnvme-1.8.tar.gz
Download MD5 sum: ff72b83dc2ada1da0bd528570154eed3
Download size: 616 KB
Estimated disk space required: 13 MB
Estimated build time: 0.1 SBU (including tests)
Install libnvme by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release -Dlibdbus=auto .. && ninja
To run the tests, issue: ninja test.
Now, as the root
user:
ninja install
This package is intended to provide a simple way for applications to take actions based on a system or user-specified paper size.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/rrthomas/libpaper/releases/download/v2.1.3/libpaper-2.1.3.tar.gz
Download MD5 sum: dc9cdf541173d7737ee73963f3052c7a
Download size: 1.2 MB
Estimated disk space required: 11 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install libpaper by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-static \ --enable-relocatable \ --docdir=/usr/share/doc/libpaper-2.1.3 && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-relocatable
:
This switch is needed to run the tests.
The paper size is automatically determined from the system
locale; see LC_PAPER
in
locale(7). If
you want to override it, create a papersize
file in the user configuration
directory. For example:
mkdir -pv ~/.config && echo "a4" > ~/.config/papersize
If you want to override the paper size globally (for all
users), set up the PAPERSIZE
environment variable. For example:
echo "PAPERSIZE=a4" > /etc/profile.d/libpaper.sh
You may use a different paper size, such as “letter
”.
The libportal package provides a library that contains GIO-style async APIs for most Flatpak portals.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/flatpak/libportal/releases/download/0.7.1/libportal-0.7.1.tar.xz
Download MD5 sum: f94be41e8495ae7d6aaed046481daa61
Download size: 76 KB
Estimated disk space required: 3.0 MB (with tests)
Estimated build time: 0.1 SBU (add 0.3 SBU for tests)
Optional patch (required for running the test suite): https://www.linuxfromscratch.org/patches/blfs/12.1/libportal-0.7.1-testsuite_fix-1.patch
To make this package really useful, install xdg-desktop-portal-1.18.2, xdg-desktop-portal-gtk-1.15.1, xdg-desktop-portal-gnome-45.1 (if running a GNOME desktop environment), and xdg-desktop-portal-lxqt-0.5.0 (if running a LXQt desktop environment). They are not needed if only using this package to satisfy a build dependency.
Gi-DocGen-2023.3 (for documentation), dbusmock-0.30.2 and pytest-8.0.0 (for testing), (Qt-5.15.12 or qt-alternate-5.15.12) (for the Qt5 version of libportal), and Vala-0.56.14
If a previous version of libportal is installed, move the
headers out of the way so that later packages do not
encounter conflicts (as the root
user):
if [ -e /usr/include/libportal ]; then rm -rf /usr/include/libportal.old && mv -vf /usr/include/libportal{,.old} fi
If running the test suite, apply a patch to fix a dozen of test failures with python-dbusmock 0.30.0 or later:
patch -Np1 -i ../libportal-0.7.1-testsuite_fix-1.patch
Install libportal by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release -Ddocs=false .. && ninja
If you have Gi-DocGen-2023.3 installed and wish to build the API documentation for this package, issue:
sed "/output/s/-1/-0.7.1/" -i ../doc/meson.build && meson configure -Ddocs=true && ninja
To test the results, issue: ninja test. Note that
additional dbus-daemon
processes may need to be killed after the tests are run.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Ddocs=false
: Allow
building this package without Gi-DocGen-2023.3
installed. If you have Gi-DocGen-2023.3 installed and
you wish to rebuild and install the API documentation, a
meson configure
command will reset this option.
The libptytty package provides a library that allows for OS independent and secure pty/tty and utmp/wtmp/lastlog handling.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://dist.schmorp.de/libptytty/libptytty-2.0.tar.gz
Download MD5 sum: 2a7f3f3c0d3ef71902da745dc7959529
Download size: 48 KB
Estimated disk space required: 1.4 MB
Estimated build time: less than 0.1 SBU
Install libptytty by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DPT_UTMP_FILE:STRING=/run/utmp \ .. && make
This package does not come with a test suite.
Now, as the root
user:
make install
The libqalculate package contains a library that provides functions for a multi-purpose calculator.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/Qalculate/libqalculate/releases/download/v4.9.0/libqalculate-4.9.0.tar.gz
Download MD5 sum: c129774b53e2bf1f0488214c99c7171a
Download size: 2.5 MB
Estimated disk space required: 139 MB (with tests)
Estimated build time: 0.8 SBU (With tests; both using parallelism=4)
cURL-8.6.0, ICU-74.2, and libxml2-2.12.5
Install libqalculate by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/libqalculate-4.9.0 && make
To test the results, issue: make check.
Now, as the root
user:
make install
The libtool archive file from this package is referring to
the libraries from ICU-74.2. Such a reference may cause packages
depending on this package to be unnecessary linked against
the ICU libraries and increase the burden to rebuild packages
if ICU is updated to a new major version. As we've explained
in Libtool archive (.la)
files, these libtool archive files are unneeded anyway.
So as the root
user, remove
the libtool archive file now:
rm -v /usr/lib/libqalculate.la
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libqmi package contains a GLib-based library for talking to WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/libqmi/libqmi-1.30.8.tar.xz
Download MD5 sum: 5ec8838914f80e1dfa4d2fa8cc2f186d
Download size: 1.2 MB
Estimated disk space required: 151 MB (with tests)
Estimated build time: 0.3 SBU (Using parallelism=4; with tests)
gobject-introspection-1.78.1 and libmbim-1.26.4
Install libqmi by running the following commands:
PYTHON=python3 ./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
--disable-mbim-qmux
: This switch
disables support for using a MBIM control device for QMI
messages. Use this switch if you did not install libmbim.
is an utility used to control QMI devices |
|
is an utility used to perform firmware updates on QMI devices |
|
is an utility used for simple network management of QMI devices |
|
contains API functions for talking to WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol |
The libseccomp package provides an easy to use and platform independent interface to the Linux kernel's syscall filtering mechanism.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/seccomp/libseccomp/releases/download/v2.5.5/libseccomp-2.5.5.tar.gz
Download MD5 sum: c27a5e43cae1e89e6ebfedeea734c9b4
Download size: 628 KB
Estimated disk space required: 7.1 MB (additional 4.7 MB for tests)
Estimated build time: less than 0.1 SBU (additional 2.9 SBU for tests)
Which-2.21 (needed for tests), Valgrind-3.22.0, and LCOV
Install libseccomp by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libsigc++ package implements a typesafe callback system for standard C++.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libsigc++/2.12/libsigc++-2.12.1.tar.xz
Download MD5 sum: 891f1b2dbaebd8007eda8c639bbe1149
Download size: 4.8 MB
Estimated disk space required: 27 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Boost-1.84.0 and libxslt-1.1.39
DocBook-utils-0.6.14, docbook-xml-5.0, Doxygen-1.10.0, and mm-common
Install libsigc++ by running the following commands:
mkdir bld && cd bld && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
-Dbuild-documentation=true
: Use
this switch if Doxygen-1.10.0 is installed and you wish
to build and install the API documentation.
libsigsegv is a library for handling page faults in user mode. A page fault occurs when a program tries to access to a region of memory that is currently not available. Catching and handling a page fault is a useful technique for implementing pageable virtual memory, memory-mapped access to persistent databases, generational garbage collectors, stack overflow handlers, and distributed shared memory.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.14.tar.gz
Download MD5 sum: 63a2b35f11b2fbccc3d82f9e6c6afd58
Download size: 456 KB
Estimated disk space required: 3.6 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Install libsigsegv by running the following commands:
./configure --prefix=/usr \ --enable-shared \ --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--enable-shared
: This
switch ensures that shared libraries are compiled.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
Libssh2 package is a client-side C library implementing the SSH2 protocol.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.libssh2.org/download/libssh2-1.11.0.tar.gz
Download MD5 sum: a01d543fd891ca48fe47726540d50b17
Download size: 1.1 MB
Estimated disk space required: 13 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
CMake-3.28.3 (can be used instead of the configure script), libgcrypt-1.10.3 (can be used instead of OpenSSL), OpenSSH-9.6p1 (for some tests), and Docker (for some tests)
First, fix a critical security vulnerability in libssh2:
patch -Np1 -i ../libssh2-1.11.0-security_fixes-1.patch
If you want to test the package, exclude the tests requiring a static library:
sed -E '/^DOCKER_TEST/,/^SSHD_TEST/s/test_(auth_keyboard_info.* |hostkey |simple)/$(NOTHING)/' \ -i tests/Makefile.inc && autoreconf -fi
Install libssh2 by running the following commands:
./configure --prefix=/usr \ --disable-docker-tests \ --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-docker-tests
: Disable
the tests requiring Docker, which is beyond the scope of
BLFS. Remove this switch if you've installed Docker and you
wish to run the test suite.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
This is a library that provides cross platform access to statistics about the system on which it's run. It's written in C and presents a selection of useful interfaces which can be used to access key system statistics. The current list of statistics includes CPU usage, memory utilisation, disk usage, process counts, network traffic, disk I/O, and more.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.mirrorservice.org/sites/ftp.i-scream.org/pub/i-scream/libstatgrab/libstatgrab-0.92.1.tar.gz
Download MD5 sum: af685494e985229e0ac46365bc0cd50e
Download size: 800 KB
Estimated disk space required: 7.6 MB (with tests)
Estimated build time: 0.1 SBU (add 1.5 SBU for tests)
Install libstatgrab by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/libstatgrab-0.92.1 && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
libtasn1 is a highly portable C library that encodes and decodes DER/BER data following an ASN.1 schema.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.19.0.tar.gz
Download MD5 sum: f701ab57eb8e7d9c105b2cd5d809b29a
Download size: 1.7 MB
Estimated disk space required: 17 MB (with tests)
Estimated build time: 0.8 SBU (with tests)
Install libtasn1 by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
If you did not pass the --enable-gtk-doc
parameter to the
configure
script, you can install the API documentation using the
following command as the root
user:
make -C doc/reference install-data-local
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: This parameter
is normally used if GTK-Doc
is installed and you wish to rebuild and install the API
documentation. It is broken for this package due to the use
of a long deprecated gtk-doc program that is no longer
available.
libunistring is a library that provides functions for manipulating Unicode strings and for manipulating C strings according to the Unicode standard.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/libunistring/libunistring-1.1.tar.xz
Download MD5 sum: 0dfba19989ae06b8e7a49a7cd18472a1
Download size: 2.3 MB
Estimated disk space required: 51 MB (add 56 MB for tests)
Estimated build time: 0.4 SBU (Using parallelism=4; add 1.0 SBU for tests)
texlive-20230313 (or install-tl-unx) (to rebuild the documentation)
Install libunistring by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/libunistring-1.1 && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libunwind package contains a portable and efficient C programming interface (API) to determine the call-chain of a program. The API additionally provides the means to manipulate the preserved (callee-saved) state of each call-frame and to resume execution at any point in the call-chain (non-local goto). The API supports both local (same-process) and remote (across-process) operation.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.savannah.nongnu.org/releases/libunwind/libunwind-1.6.2.tar.gz
Download MD5 sum: f625b6a98ac1976116c71708a73dc44a
Download size: 884 KB
Estimated disk space required: 20 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
texlive-20230313 (for latex2man)
Install libunwind by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check. Two tests, run-coredump-unwind and run-coredump-unwind-mdi are known to fail.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The userspace-rcu package provides a set of userspace RCU (read-copy-update) libraries. These data synchronization libraries provide read-side access which scales linearly with the number of cores. It does so by allowing multiples copies of a given data structure to live at the same time, and by monitoring the data structure accesses to detect grace periods after which memory reclamation is possible.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://lttng.org/files/urcu/userspace-rcu-0.14.0.tar.bz2
Download MD5 sum: 0cd5647788b048a5d6bbdb3b08d46299
Download size: 648 KB
Estimated disk space required: 25 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install liburcu by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/liburcu-0.14.0 && make
To test the results, issue: make check.
Now, as the root
user:
make install
The libusb package contains a library used by some applications for USB device access.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2
Download MD5 sum: 1fb61afe370e94f902a67e03eb39c51f
Download size: 632 KB
Estimated disk space required: 5.7 MB
Estimated build time: less than 0.1 SBU
To access raw USB devices (those not treated as a disk by the mass-storage driver), appropriate support must be available in the kernel. Check your kernel configuration:
Device Drivers ---> [*] USB support ---> [USB_SUPPORT] <*/M> Support for Host-side USB [USB] [*] PCI based USB host interface [USB_PCI] # These are most common USB controller drivers for PC-like systems. # For modern systems often [USB_XHCI_HCD] is the only one needed # even if the system has USB 2.0 ports: < /*/M> xHCI HCD (USB 3.0) support [USB_XHCI_HCD] < /*/M> EHCI HCD (USB 2.0) support [USB_EHCI_HCD] < /*/M> OHCI HCD (USB 1.1) support [USB_OHCI_HCD]
For more details on setting up USB devices, see the section called “USB Device Issues”.
Install libusb by running the following commands:
./configure --prefix=/usr --disable-static && make
If Doxygen is installed and you wish to build the API documentation, issue the following commands:
pushd doc && doxygen -u doxygen.cfg && make docs && popd
This package does not come with a test suite.
Now, as the root
user:
make install
If you built the API documentation, install it using the
following commands as the root
user:
install -v -d -m755 /usr/share/doc/libusb-1.0.27/apidocs && install -v -m644 doc/api-1.0/* \ /usr/share/doc/libusb-1.0.27/apidocs
The libuv package is a multi-platform support library with a focus on asynchronous I/O.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://dist.libuv.org/dist/v1.48.0/libuv-v1.48.0.tar.gz
Download MD5 sum: a808517c32ebd07c561bf21a4e30aeab
Download size: 1.3 MB
Estimated disk space required: 14 MB (add 16 MB for tests)
Estimated build time: less than 0.1 SBU (add 0.5 SBU for tests)
Install libuv by running the following commands:
The sh autogen.sh command below fails if the ACLOCAL environment variable is set as specified in Xorg-7. If it is used, ACLOCAL needs to be unset for this package and then reset for other packages.
sh autogen.sh && ./configure --prefix=/usr --disable-static && make
If you installed the optional sphinx-7.2.6 python module, create the man page:
make man -C docs
If you want to run the tests, run: make check as a non-root user.
Now, as the root
user:
make install
If you built the man page, install it as the root
user:
install -Dm644 docs/build/man/libuv.1 /usr/share/man/man1
libxkbcommon is a keymap compiler and support library which processes a reduced subset of keymaps as defined by the XKB specification.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://xkbcommon.org/download/libxkbcommon-1.6.0.tar.xz
Download MD5 sum: 90079ab4a0c6fa56dc75abffef9b1bc6
Download size: 500 KB
Estimated disk space required: 23 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
xkeyboard-config-2.41 (runtime)
libxcb-1.16, Wayland-1.22.0, and wayland-protocols-1.33
Install libxkbcommon by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Denable-docs=false && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Denable-docs=false
:
This switch disables documentation generation. Remove it if
Doxygen-1.10.0 is installed.
mv -v /usr/share/doc/libxkbcommon{,-1.6.0}: If you removed -Denable-docs=false, use this command to install the documentation in a versioned directory.
The libxml2 package contains libraries and utilities used for parsing XML files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libxml2/2.12/libxml2-2.12.5.tar.xz
Download MD5 sum: 329138464b69422815c11e62acbc10dd
Download size: 2.5 MB
Estimated disk space required: 103 MB (with tests)
Estimated build time: 0.4 SBU (Using parallelism=4; with tests)
Optional Test Suite: https://www.w3.org/XML/Test/xmlts20130923.tar.gz - This enables make check to do complete testing.
Valgrind-3.22.0 (may be used in the tests)
Install libxml2 by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-static \ --with-history \ --with-icu \ PYTHON=/usr/bin/python3 \ --docdir=/usr/share/doc/libxml2-2.12.5 && make
If you downloaded the test suite, issue the following command:
tar xf ../xmlts20130923.tar.gz
To test the results, issue: make check > check.log.
This command will print several lines of error messages like
“Failed to parse
xstc/...
” because some test files are
missing and these messages can be safely ignored. A summary
of the results can be obtained with grep -E '^Total|expected|Ran'
check.log. If Valgrind-3.22.0 is
installed and you want to check for memory leaks, replace
check with
check-valgrind.
The tests use http://localhost/ to test parsing
of external entities. If the machine where you run the
tests serves as a web site, the tests may hang, depending
on the content of the file served. It is therefore
recommended to shut down the server during the tests, as
the root
user:
/etc/init.d/httpd stop
Now, as the root
user:
make install
Finally, prevent some packages from unnecessarily linking to
ICU using the following commands as the root
user:
rm -vf /usr/lib/libxml2.la && sed '/libs=/s/xml2.*/xml2"/' -i /usr/bin/xml2-config
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-history
: This
switch enables Readline
support when running xmlcatalog or xmllint in shell mode.
--with-icu
: This
switch enables support for ICU, which provides additional Unicode
support. This is needed for some packages in BLFS, such as
for QtWebEngine.
PYTHON=/usr/bin/python3
: Allows
building the libxml2 module with Python3 instead of Python2.
determines the compile and linker flags that should
be used to compile and link programs that use
|
|
is used to monitor and manipulate XML and SGML catalogs |
|
parses XML files and outputs reports (based upon options) to detect errors in XML coding |
|
provides functions for programs to parse files that use the XML format |
The libxmlb package contains a library and a tool which help create and query binary XML blobs.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/hughsie/libxmlb/releases/download/0.3.15/libxmlb-0.3.15.tar.xz
Download MD5 sum: ff8f7cefefc89d8bed97b911cb38fa9c
Download size: 100 KB
Estimated disk space required: 3.8 MB
Estimated build time: 0.1 SBU
Install libxmlb by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release -Dgtkdoc=false .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dgtkdoc=false
: This
switch disables building the API documentation. Remove it if
you have GTK-Doc-1.33.2 installed and wish to
build the API documentation.
-Dintrospection=false
: Use this
switch if you do not have gobject-introspection-1.78.1
installed.
-Dstemmer=true
: Use this switch
if you have libstemmer
installed and wish to build stemmer support.
The libxslt package contains
XSLT libraries used for extending libxml2
libraries to support XSLT files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libxslt/1.1/libxslt-1.1.39.tar.xz
Download MD5 sum: 22e9eb7c23825124e786611b3760a3c7
Download size: 1.5 MB
Estimated disk space required: 34 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
docbook-xml-4.5 and docbook-xsl-nons-1.79.2
Although it is not a direct dependency, many applications using libxslt will expect docbook-xml-4.5 and docbook-xsl-nons-1.79.2 to be present.
Install libxslt by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/libxslt-1.1.39 \ PYTHON=/usr/bin/python3 && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
is used to find out the pre-processor, linking and compiling flags necessary to use the libxslt libraries in 3rd-party programs |
|
is used to apply XSLT stylesheets to XML documents |
|
is used to provide extensions to XSLT functions |
|
provides extensions to the |
The libwacom package contains a library used to identify wacom tablets and their model-specific features.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/linuxwacom/libwacom/releases/download/libwacom-2.10.0/libwacom-2.10.0.tar.xz
Download MD5 sum: 9baf8fb0e486e225ef81b9becb46031b
Download size: 116 KB
Estimated disk space required: 3.4 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Doxygen-1.10.0, git-2.44.0, librsvg-2.57.1, Valgrind-3.22.0 (optional for some tests), and pytest-8.0.0 with python-libevdev and pyudev
Install libwacom by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dtests=disabled && ninja
To test the results, issue: ninja test. To run additional tests, install pytest-8.0.0, python-libevdev, and pyudev, then remove the "-Dtests=disabled" option from the meson line above.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dtests=disabled
:
This parameter disables some of the more advanced tests
because they require pytest-8.0.0 and other two Python modules
beyond the scope of BLFS to work properly.
The libwpe package contains a general purpose library for WPE WebKit and the WPE Renderer.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://wpewebkit.org/releases/libwpe-1.14.2.tar.xz
Download MD5 sum: 61840e24ba0a0f5828194dff28db92ee
Download size: 64 KB
Estimated disk space required: 1.9 MB
Estimated build time: less than 0.1 SBU
libxkbcommon-1.6.0 and Mesa-24.0.1
Install libwpe by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
The yaml package contains a C library for parsing and emitting YAML (YAML Ain't Markup Language) code.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/yaml/libyaml/releases/download/0.2.5/yaml-0.2.5.tar.gz
Download MD5 sum: bb15429d8fb787e7d3f1c83ae129a999
Download size: 596 KB
Estimated disk space required: 6.4 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Install libyaml by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
log4cplus is an easy to use C++20 logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration. It is modeled after the Java log4j API.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/log4cplus/log4cplus/releases/download/REL_2_1_1/log4cplus-2.1.1.tar.xz
Download MD5 sum: 6ee2555be39cd269086cc871c834e43f
Download size: 919 KB
Estimated disk space required: 73 MB
Estimated build time: 0.3 SBU (Using parallelism=4; add 0.5 SBU for tests)
Build log4cplus by running the following command:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, install the package as the root
user:
make install
--with-qt5
: This option enables
compilation of a separate shared library
(liblog4cplusqt5debugappender) that implements
Qt5DebugAppender. It requires Qt5 and pkg-config to be
available.
LZO is a data compression library which is suitable for data decompression and compression in real-time. This means it favors speed over compression ratio.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
Download MD5 sum: 39d3f3f9c55c87b1e5d6888e1420f4b5
Download size: 588 KB
Estimated disk space required: 12 MB
Estimated build time: 0.3 SBU (with tests)
Install LZO by running the following commands:
./configure --prefix=/usr \ --enable-shared \ --disable-static \ --docdir=/usr/share/doc/lzo-2.10 && make
To test the results, issue: make check. All the checks should pass. Now issue make test to run the full suite of tests.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The mtdev package contains Multitouch Protocol Translation Library which is used to transform all variants of kernel MT (Multitouch) events to the slotted type B protocol.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://bitmath.org/code/mtdev/mtdev-1.1.6.tar.bz2
Download MD5 sum: bf8ef2482e84a00b5db8fbd3ce00e249
Download size: 292 KB
Estimated disk space required: 2.5 MB
Estimated build time: less than 0.1 SBU
Install mtdev 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:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://nodejs.org/dist/v20.11.1/node-v20.11.1.tar.xz
Download MD5 sum: 3b2fe4d7a4c8dadb58563d822de6c4f4
Download size: 41 MB
Estimated disk space required: 1040 MB (add 62 MB for tests)
Estimated build time: 10.9 SBU (add 3.2 SBU for tests: both using parallelism=8 and 8 CPUs online, parts of the tests will use all online CPUs)
Brotli-1.1.0, c-ares-1.26.0, ICU-74.2, libuv-1.48.0, and nghttp2-1.59.0
http-parser and npm (an internal copy of npm will be installed if not present)
Build Node.js by running the following commands:
./configure --prefix=/usr \ --shared-brotli \ --shared-cares \ --shared-libuv \ --shared-openssl \ --shared-nghttp2 \ --shared-zlib \ --with-intl=system-icu && make
To test the results, issue: make test-only.
Now, as the root
user:
make install && ln -sf node /usr/share/doc/node-20.11.1
--with-intl=system-icu
: use the
system version of icu. Other
values are full-icu
(to build a
local, full icu library) and
small-icu
(to build a local,
minimal icu library).
--shared-{brotli,cares,libuv,nghttp2,openssl,zlib}
:
use the system installed libraries instead of local copies.
--without-npm
: do not build
npm (use if you'd like to
build a separate npm later).
--shared-http-parser
: use the
system installed library instead of a local copy.
The NPth package contains a very portable POSIX/ANSI-C based library for Unix platforms which provides non-preemptive priority-based scheduling for multiple threads of execution (multithreading) inside event-driven applications. All threads run in the same address space of the server application, but each thread has its own individual program-counter, run-time stack, signal mask and errno variable.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2
Download MD5 sum: 375d1a15ad969f32d25f1a7630929854
Download size: 296 KB
Estimated disk space required: 2.6 MB (with checks)
Estimated build time: less than 0.1 SBU (with checks)
Install NPth by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
is a utility used to configure and build applications based on the npth library. It can be used to query the C compiler and linker flags which are required to correctly compile and link the application against the npth library |
|
contains the API functions used by the New Portable Threads Library |
Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.mozilla.org/pub/nspr/releases/v4.35/src/nspr-4.35.tar.gz
Download MD5 sum: 5e0acf9fbdde85181bddd510f4624841
Download size: 1.0 MB
Estimated disk space required: 9.6 MB
Estimated build time: less than 0.1 SBU
Install NSPR by running the following commands:
cd nspr && sed -i '/^RELEASE/s|^|#|' pr/src/misc/Makefile.in && sed -i 's|$(LIBRARY) ||' config/rules.mk && ./configure --prefix=/usr \ --with-mozilla \ --with-pthreads \ $([ $(uname -m) = x86_64 ] && echo --enable-64bit) && make
The test suite is designed for testing changes to nss or nspr and is not particularly useful for checking a released version (e.g. it needs to be run on a non-optimized build with both nss and nspr directories existing alongside each other). For further details, see the Editor Notes for nss at https://wiki.linuxfromscratch.org/blfs/wiki/nss
Now, as the root
user:
make install
sed -ri '/^RELEASE/s/^/#/' pr/src/misc/Makefile.in: This sed disables installing two unneeded scripts.
sed -i 's#$(LIBRARY) ##' config/rules.mk: This sed disables installing the static libraries.
--with-mozilla
: This
parameter adds Mozilla support to the libraries (required if
you want to build any other Mozilla products and link them to
these libraries).
--with-pthreads
: This
parameter forces use of the system pthread library.
--enable-64bit
: The
--enable-64bit parameter is required on an x86_64 system to
prevent configure failing with a
claim that this is a system without pthread support. The [
$(uname -m) = x86_64 ] test ensures it has no effect on a 32
bit system.
provides compiler and linker options to other packages that use NSPR |
|
contains functions that provide platform independence for non-GUI operating system facilities such as threads, thread synchronization, normal file and network I/O, interval timing and calendar time, basic memory management and shared library linking |
|
contains functions that implement many of the features offered by libnspr4 |
|
contains functions that provide data structures |
The PCRE package contains Perl Compatible Regular Expression libraries. These are useful for implementing regular expression pattern matching using the same syntax and semantics as Perl 5.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.bz2
Download MD5 sum: 4452288e6a0eefb2ab11d36010a1eebb
Download size: 1.5 MB
Estimated disk space required: 23 MB (with tests)
Estimated build time: 0.3 SBU (with tests)
Install PCRE by running the following commands:
./configure --prefix=/usr \ --docdir=/usr/share/doc/pcre-8.45 \ --enable-unicode-properties \ --enable-pcre16 \ --enable-pcre32 \ --enable-pcregrep-libz \ --enable-pcregrep-libbz2 \ --enable-pcretest-libreadline \ --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--enable-unicode-properties
:
This switch enables Unicode properties support and includes
the code for handling UTF-8/16/32 character strings in the
library. You need this switch if you are going to build
GLib-2.78.4.
--enable-pcre16
: This
switch enables 16 bit character support.
--enable-pcre32
: This
switch enables 32 bit character support.
--enable-pcregrep-libz
: This
switch adds support to pcregrep to read
.gz
compressed files.
--enable-pcregrep-libbz2
: This
switch adds support to pcregrep to read
.bz2
compressed files.
--enable-pcretest-libreadline
:
This switch adds line editing and history features to
pcretest
program.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-jit
: this option enables
Just-in-time compiling, which can greatly speed up pattern
matching.
The PCRE2 package contains a new generation of the Perl Compatible Regular Expression libraries. These are useful for implementing regular expression pattern matching using the same syntax and semantics as Perl.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.bz2
Download MD5 sum: a8e9ab2935d428a4807461f183034abe
Download size: 1.7 MB
Estimated disk space required: 24 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
Install PCRE2 by running the following commands:
./configure --prefix=/usr \ --docdir=/usr/share/doc/pcre2-10.42 \ --enable-unicode \ --enable-jit \ --enable-pcre2-16 \ --enable-pcre2-32 \ --enable-pcre2grep-libz \ --enable-pcre2grep-libbz2 \ --enable-pcre2test-libreadline \ --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--enable-unicode
:
This switch enables Unicode support and includes the
functions for handling UTF-8/16/32 character strings in the
library.
--enable-pcre2-16
:
This switch enables 16 bit character support.
--enable-pcre2-32
:
This switch enables 32 bit character support.
--enable-pcre2grep-libz
: This
switch adds support for reading .gz compressed files to
pcre2grep.
--enable-pcre2grep-libbz2
: This
switch adds support for reading .bz2 compressed files to
pcre2grep.
--enable-pcre2test-libreadline
:
This switch adds line editing and history features to the
pcre2test program.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-jit
: this
option enables Just-in-time compiling, which can greatly
speed up pattern matching.
The popt package contains the popt libraries which are used by some programs to parse command-line options.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://ftp.rpm.org/popt/releases/popt-1.x/popt-1.19.tar.gz
Download MD5 sum: eaa2135fddb6eb03f2c87ee1823e5a78
Download size: 584 KB
Estimated disk space required: 6.9 MB (includes installing documentation and tests)
Estimated build time: less than 0.1 SBU (with tests)
Doxygen-1.10.0 (for generating documentation)
Install popt by running the following commands:
./configure --prefix=/usr --disable-static && make
If you have Doxygen-1.10.0 installed and wish to build the API documentation, issue:
sed -i 's@\./@src/@' Doxyfile && doxygen
To test the results, issue: make check.
Now, as the root
user:
make install
If you built the API documentation, install it using the
following commands issued by the root
user:
install -v -m755 -d /usr/share/doc/popt-1.19 && install -v -m644 doxygen/html/* /usr/share/doc/popt-1.19
--disable-static
:
This switch prevents installation of static versions of the
libraries.
Qca aims to provide a straightforward and cross-platform crypto API, using Qt datatypes and conventions. Qca separates the API from the implementation, using plugins known as Providers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.kde.org/stable/qca/2.3.8/qca-2.3.8.tar.xz
Download MD5 sum: 4c6348286c170b3da24820c977565d75
Download size: 744 KB
Estimated disk space required: 42 MB
Estimated build time: 0.5 SBU (using parallelism=4; add 0.1 SBU for tests)
make-ca-1.13, CMake-3.28.3, Qt-5.15.12, and Which-2.21
Cyrus SASL-2.1.28, GnuPG-2.4.4, libgcrypt-1.10.3, libgpg-error-1.47, nss-3.98, NSPR-4.35, p11-kit-0.25.3, Doxygen-1.10.0, Which-2.21, and Botan
Fix the location of the CA certificates:
sed -i 's@cert.pem@certs/ca-bundle.crt@' CMakeLists.txt
Install Qca by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=$QT5DIR \ -DCMAKE_BUILD_TYPE=Release \ -DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man \ .. && make
To test the results, issue make test.
Now, as the root
user:
make install
-DCMAKE_BUILD_TYPE=Release
:
This switch is used to apply a higher level of compiler
optimizations.
-DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man
:
Install the qca man page in the normal location.
SpiderMonkey is Mozilla's JavaScript and WebAssembly Engine, written in C++ and Rust. In BLFS, the source code of SpiderMonkey is taken from Firefox.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://archive.mozilla.org/pub/firefox/releases/115.7.0esr/source/firefox-115.7.0esr.source.tar.xz
Download MD5 sum: 9105bdf076d457ce5e0aa5628d5acc84
Download size: 492 MB
Estimated disk space required: 3.6 GB (40 MB installed after removing 36MB static lib; add 34 MB for the main tests and 37 MB for the jit tests)
Estimated build time: 1.9 SBU (with parallelism=4; add 1.1 SBU for the main tests and 3.7 SBU for the jit tests)
ICU-74.2, rustc-1.76.0, six-1.16.0, and Which-2.21
LLVM-17.0.6 (with Clang, required for 32-bit systems without SSE2 capabilities)
If you are building this package on a 32-bit system, and
Clang is not installed or you're overriding the default
compiler choice with the environment variable CXX
, please read the Command Explanations
section first.
Unlike most other packages in BLFS, the instructions below
require you to untar firefox-115.7.0esr.tar.xz
and change into
the firefox-115.7.0
folder.
Extracting the tarball will reset the permissions of the
current directory to 0755 if you have permission to do
that. If you do this in a directory where the sticky bit is
set, such as /tmp
it will end
with error messages:
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-t: Operation not permitted
tar: Exiting with failure status due to previous errors
This does finish with non-zero status, but it does
NOT mean there is a
real problem. Do not untar as the root
user in a directory where the
sticky bit is set - that will unset it.
The building system ships several internal copies of the
Python 3 module six.py
. The
shipped copies are too old to work well with Python 3.12 or
later. Replace them with the symlinks to six-1.16.0 already
installed on the system:
for i in $(find -name six.py); do ln -sfv /usr/lib/python3.12/site-packages/six.py $i; done
Install SpiderMonkey by running the following commands:
If you are compiling this package in chroot you must ensure
that /dev/shm
is mounted. If
you do not do this, the Python configuration will fail with a
traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py
.
As the root
user, run:
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
Compiling the C++ code respects $MAKEFLAGS and defaults to 'j1', the rust code will use all processors.
mkdir obj && cd obj && ../js/src/configure --prefix=/usr \ --disable-debug-symbols \ --disable-jemalloc \ --enable-readline \ --enable-rust-simd \ --with-intl-api \ --with-system-icu \ --with-system-zlib && make
To run the SpiderMonkey test suite, issue: make -C js/src check-jstests JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled". It's recommended to redirect the output into a log. Because we are building with system ICU, 42 tests (out of a total of more than 50,000) are known to fail. The test suite is executed with all CPU cores available: even in a cgroup with less cores assigned, it still attempts to spawn as many testing jobs as the number of all cores in the system; fortunately the kernel still won't run these jobs on cores not assigned to the cgroup so the CPU usage is still controlled.
To run the JIT test suite, issue: make -C js/src check-jit-test
JITTEST_EXTRA_ARGS="--timeout 300". Like the
SpiderMonkey test suite, the number of test jobs is same as
the number of all CPU cores in the system even if a cgroup is
used. To make things worse, there are six tests each of them
will use 3 GB of system memory, so the peak memory usage may
be up to 18 GB if the number of cores is six or more. Running
the JIT test suite without enough memory may invoke the
kernel OOM killer and cause stability issues. If you don't
have enough system memory available, append -jN
after --timeout
300
with N replaced by the number of parallel test
jobs you want to start. For example, if you have 16 GB system
memory available and 8 CPU cores, issue make -C js/src check-jit-test
JITTEST_EXTRA_ARGS="--timeout=300 -j5" to run
the test with 5 parallel jobs so the memory usage won't
exceed 15 GB.
An issue in the installation process causes any running program which links to SpiderMonkey shared library (for example, GNOME Shell) to crash if SpiderMonkey is reinstalled, or upgraded or downgraded without a change of the major version number (115 in 115.7.0). To work around this issue, remove the old version of the SpiderMonkey shared library before installation:
rm -fv /usr/lib/libmozjs-115.so
Now, as the root
user:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js115-config
--disable-debug-symbols
: Don't
generate debug symbols since they are very large and most
users won't need it. Remove it if you want to debug
SpiderMonkey.
--disable-jemalloc
:
This switch disables the internal memory allocator used in
SpiderMonkey. jemalloc is only intended for the Firefox
browser environment. For other applications using
SpiderMonkey, the application may crash as items allocated in
the jemalloc allocator are freed on the system (glibc)
allocator.
--enable-readline
:
This switch enables Readline support in the SpiderMonkey
command line interface.
--enable-rust-simd
:
This switch enables SIMD optimization in the shipped
encoding_rs crate.
--with-intl-api
: This
enables the internationalization functions required by
Gjs.
--with-system-*
:
These parameters allow the build system to use system
versions of the above libraries. These are required for
stability.
rm -v /usr/lib/libjs_static.ajs: Remove a large static library which is not used by any BLFS package.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js115-config: Prevent js115-config from using buggy CFLAGS.
: BLFS used to prefer to use gcc and g++
instead of upstream's defaults of the clang programs. With the release of
gcc-12 the build takes longer with gcc and g++, primarily
because of extra warnings, and is bigger. Pass these
environment variables to the configure script if you wish to
continue to use gcc, g++ (by exporting them and unset them
after the installation, or simply prepending them before the
../js/src/configure
command). If you are building on a 32-bit system, also see
below.
CC=gcc
CXX=g++
: Use SSE2 instead of 387 for
double-precision floating-point operations. It's needed by
GCC to satisfy the expectations of upstream (Mozilla)
developers with floating-point arithmetic. Use it if you are
building this package on a 32-bit system with GCC (if Clang
is not installed or GCC is explicitly specified). Note that
this will cause SpiderMonkey to crash on a processor without
SSE2 capability. If you are running the system on such an old
processor, Clang is strictly needed. This setting is not
needed on 64-bit systems because all 64-bit x86 processors
support SSE2 and the 64-bit compilers (both Clang and GCC)
use SSE2 by default.
CXXFLAGS="-msse2
-mfpmath=sse"
The SPIRV-Headers package contains headers that allow for applications to the SPIR-V language and instruction set with Vulkan. SPIR-V is a binary intermediate language for representing graphical shader stages and compute kernels for multiple Khronos APIs, including OpenGL and Vulkan.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/vulkan-sdk-1.3.275.0/SPIRV-Headers-1.3.275.0.tar.gz
Download MD5 sum: f293886617aa816fdbb2b50d5e909681
Download size: 456 KB
Estimated disk space required: 6.7 MB
Estimated build time: less than 0.1 SBU
This tarball SPIRV-Headers-1.3.275.0.tar.gz
will
extract to the directory SPIRV-Headers-vulkan-sdk-1.3.275.0
.
Install SPIRV-Headers by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
The SPIRV-Tools package contains libraries and utilities for processing SPIR-V modules.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/vulkan-sdk-1.3.275.0/SPIRV-Tools-1.3.275.0.tar.gz
Download MD5 sum: f187bb132058995a5992a5a15c269bb1
Download size: 3.0 MB
Estimated disk space required: 70 MB
Estimated build time: 1.0 SBU (with parallelism=8)
This tarball SPIRV-Tools-1.3.275.0.tar.gz
will extract
to the directory SPIRV-Tools-vulkan-sdk-1.3.275.0
.
Install SPIRV-Tools by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DSPIRV_WERROR=OFF \ -DBUILD_SHARED_LIBS=ON \ -DSPIRV_TOOLS_BUILD_STATIC=OFF \ -DSPIRV-Headers_SOURCE_DIR=/usr \ -G Ninja .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
-DSPIRV_WERROR=OFF
:
This switch stops the build system from treating warnings as
errors.
-DBUILD_SHARED_LIBS=ON
: This
switch forces the build system to install shared libraries
instead of static libraries.
-DSPIRV_TOOLS_BUILD_STATIC=OFF
:
This switch disables building static versions of the
libraries.
-DSPIRV-Headers_SOURCE_DIR
:
This switch tells the build system that SPIRV-Headers-1.3.275.0 is
installed in /usr. This is needed since the build system
tries to use an internal copy by default.
creates a SPIR-V binary module from SPIR-V assembly text |
|
shows the control flow graph in "dot" format |
|
disassembles a SPIR-V binary module |
|
automatically disassembles a .SPV file for 'less' |
|
links SPIR-V binary files together |
|
checks a SPIR-V binary module for errors |
|
dumps information from a SPIR-V binary |
|
performs optimizations on SPIR-V binary files |
|
reduces a SPIR-V binary file |
|
validates a SPIR-V binary file |
|
contains functions for processing SPIR-V modules |
Talloc provides a hierarchical, reference counted memory pool system with destructors. It is the core memory allocator used in Samba.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.samba.org/ftp/talloc/talloc-2.4.2.tar.gz
Download MD5 sum: d29bdf75ce181e148c46b16a83de6d76
Download size: 664 KB
Estimated disk space required: 10 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
docbook-xml-4.5, docbook-xsl-nons-1.79.2 and libxslt-1.1.39 (To generate man pages), GDB-14.1, git-2.44.0, libnsl-2.0.1, libtirpc-1.3.4, Valgrind-3.22.0, and xfsprogs-6.6.0
Install Talloc by running the following commands:
./configure --prefix=/usr && make
To check the results, issue make check.
Now, as the root
user:
make install
The Telepathy GLib contains a library used by GLib based Telepathy components. Telepathy is a D-Bus framework for unifying real time communication, including instant messaging, voice calls and video calls. It abstracts differences between protocols to provide a unified interface for applications.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://telepathy.freedesktop.org/releases/telepathy-glib/telepathy-glib-0.24.2.tar.gz
Download MD5 sum: a3a75657e9389381b44fee1680f770a7
Download size: 3.7 MB
Estimated disk space required: 256 MB
Estimated build time: 1.2 SBU
dbus-glib-0.112 and libxslt-1.1.39
gobject-introspection-1.78.1, and Vala-0.56.14
If you intend to run the tests, one of them defaults to
invoking /usr/bin/python
and
fails if it is absent, causing the second batch of tests to
not run - unlike the other tests which can be overridden from
the environment. Fix it with the following command:
sed -i 's%/usr/bin/python%&3%' tests/all-errors-documented.py
Install Telepathy GLib by running the following commands:
PYTHON=/usr/bin/python3 ./configure --prefix=/usr \ --enable-vala-bindings \ --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--enable-vala-bindings
: This
switch enables building of the Vala bindings. Remove if you
don't have Vala-0.56.14 installed.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The Uchardet package contains an encoding detectory library which takes a sequence of bytes in an unknown character encoding and attempts to determine the encoding of the text.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/uchardet/releases/uchardet-0.0.8.tar.xz
Download MD5 sum: 9e267be7aee81417e5875086dd9d44fd
Download size: 217 KB
Estimated disk space required: 4.6 MB (with test)
Estimated build time: less than 0.1 SBU (with test)
Install Uchardet by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_STATIC=OFF \ -Wno-dev .. && make
To test the results, issue: make test.
Now, as the root
user:
make install
-DBUILD_STATIC=OFF
:
This switch disables building the static version of the
library.
The Umockdev package contains a framework that allows a developer to mock devices for use in unit testing.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/martinpitt/umockdev/releases/download/0.17.18/umockdev-0.17.18.tar.xz
Download MD5 sum: a9ff284518c034aa334b58237074e313
Download size: 484 KB
Estimated disk space required: 6.8 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
libgudev-238, libpcap-1.10.4, and Vala-0.56.14
GTK-Doc-1.33.2 and libgphoto2 (optional for tests)
Install Umockdev by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test. One test needs to be run in an X session.
Now, as the root
user:
ninja install
-Dgtk_doc=true
: Use this switch
if you have GTK-Doc-1.33.2 installed and wish to
rebuild and install the API documentation.
The utfcpp package contains a set of include files to provide UTF-8 with C++ in a Portable Way.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/nemtrif/utfcpp/archive/v4.0.5/utfcpp-4.0.5.tar.gz
Download MD5 sum: 8e0fe13266a7fa02f61340bf399986c3
Download size: 36 KB
Estimated disk space required: 496 KB
Estimated build time: less than 0.1 SBU
Install utfcpp by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr ..
This package does not come with a test suite.
Now, as the root
user:
make install
Wayland is a project to define a protocol for a compositor to talk to its clients as well as a library implementation of the protocol.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.22.0/downloads/wayland-1.22.0.tar.xz
Download MD5 sum: 7410ab549e3928fce9381455b17b0803
Download size: 228 KB
Estimated disk space required: 7.4 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Doxygen-1.10.0, Graphviz-10.0.1 and xmlto-0.0.28 (to build the API documentation) and docbook-xml-4.5, docbook-xsl-nons-1.79.2 and libxslt-1.1.39 (to build the manual pages)
Install Wayland by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Ddocumentation=false && ninja
To test the results, issue: env -u XDG_RUNTIME_DIR ninja test.
Now, as the root
user:
ninja install
-Ddocumentation=false
: This
switch is used to disable building of the API documentation.
Remove it if you have installed optional dependencies.
is a tool to generate proxy methods in wayland-client-protocol.h and wayland-server-protocol.h |
|
contains API functions for writing Wayland applications |
|
contains API functions for managing cursors in Wayland applications |
|
contains API functions for handling OpenGL calls in Wayland applications |
|
contains API functions for writing Wayland compositors |
The Wayland-Protocols package contains additional Wayland protocols that add functionality outside of protocols already in the Wayland core.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/1.33/downloads/wayland-protocols-1.33.tar.xz
Download MD5 sum: 6af4d3a18fbfc7d8aa3f9ccf5b4743f3
Download size: 92 KB
Estimated disk space required: 7.9 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install Wayland-protocols by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
The wpebackend-fdo package contains the Freedesktop.org backend for WPE WebKit and the WPE renderer.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://wpewebkit.org/releases/wpebackend-fdo-1.14.2.tar.xz
Download MD5 sum: dafd899646b2e31ef2d97938a638c48d
Download size: 44 KB
Estimated disk space required: 1.7 MB
Estimated build time: 0.1 SBU
Install wpebackend-fdo by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. ninja
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
The wv package contains tools for reading information from an MS Word document.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/wv/wv-1.2.9.tar.gz
Download MD5 sum: dbccf2e9f747e50c913b7e3d126b73f7
Download size: 608 KB
Estimated disk space required: 25 MB
Estimated build time: 0.4 SBU
libgsf-1.14.52 and libpng-1.6.42
Install wv by running the following commands:
./configure --prefix=/usr --disable-static && make
This package does not have a test suite.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
Xapian is an open source search engine library.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://oligarchy.co.uk/xapian/1.4.24/xapian-core-1.4.24.tar.xz
Download MD5 sum: f0136a41451567099ac9d2b5ff028e77
Download size: 3.0 MB
Estimated disk space required: 195 MB (add 163 MB for tests)
Estimated build time: 0.7 SBU (using parallelism=4; add 16 SBU for tests)
Valgrind-3.22.0 (for tests)
Install Xapian by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/xapian-core-1.4.24 && make
To run the test suite, issue: make check.
Now, as the root
user:
make install
performs a document-by-document copy of one or more Xapian databases |
|
is a command line tool to search through a database |
|
is a simple example program demonstrating query expansion |
|
indexes each paragraph of a text file as a Xapian document |
|
is a simple command line search utility |
|
checks the consistency of a database or table |
|
compacts a database, or merges and compacts several databases |
|
reports information about the installed version of xapian |
|
inspects the contents of a Xapian database |
|
reads and writes user metadata |
|
inspects the contents of a flint table for development or debugging |
|
is a remote server for use with ProgClient |
|
replicates a database from a master server to a local copy |
|
services database replication requests from clients |
|
is the TCP daemon for use with Xapian's remote backend |
Depending on what your system will be used for, you may or may not require the graphics and font libraries. Most desktop machines will want them for use with graphical applications. Most servers on the other hand, will not require them.
AAlib is a library to render any graphic into ASCII Art.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/aa-project/aalib-1.4rc5.tar.gz
Download MD5 sum: 9801095c42bba12edebd1902bcf0a990
Download size: 388 KB
Estimated disk space required: 6.5 MB
Estimated build time: 0.1 SBU
Xorg Libraries, Xorg Fonts (runtime), slang-2.3.3, and GPM-1.20.7
Fix a minor problem with the included m4 file:
sed -i -e '/AM_PATH_AALIB,/s/AM_PATH_AALIB/[&]/' aalib.m4
Change the default X11 font from Xorg Legacy Fonts to Xorg Fonts:
sed -e 's/8x13bold/-*-luxi mono-bold-r-normal--13-120-*-*-m-*-*-*/' \ -i src/aax.c
Install AAlib by running the following commands:
./configure --prefix=/usr \ --infodir=/usr/share/info \ --mandir=/usr/share/man \ --with-ncurses=/usr \ --disable-static && make
This package does not come with a test suite.
Now, as the root
user:
make install
is a demo of AAlib, rendering an animated fire in ASCII Art |
|
provides information for your current settings related to AAlib |
|
provides configuration info for AAlib |
|
saves a font to a file |
|
shows the abilities of AAlib in a little test |
|
is a collection of routines to render any graphical input in portable format to ASCII Art. It can be used through many programs and has a very well documented API, so you can easily put it into your own programs |
The Babl package is a dynamic, any to any, pixel format translation library.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gimp.org/pub/babl/0.1/babl-0.1.108.tar.xz
Download MD5 sum: 749169721b551882332a64ac17735de6
Download size: 312 KB
Estimated disk space required: 13 MB (with tests)
Estimated build time: 0.1 SBU (Using parallelism=4; with tests)
gobject-introspection-1.78.1 and librsvg-2.57.1
Little CMS-2.14 and w3m
Install Babl by running the following commands:
mkdir bld && cd bld && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install && install -v -m755 -d /usr/share/gtk-doc/html/babl/graphics && install -v -m644 docs/*.{css,html} /usr/share/gtk-doc/html/babl && install -v -m644 docs/graphics/*.{html,svg} /usr/share/gtk-doc/html/babl/graphics
install -v -m755 -d
/usr/share/gtk-doc/html/babl/graphics: This
and the subsequent commands install the library html
documentation under /usr/share/gtk-doc/html
where other gtk
packages put the programmer-oriented documentation.
Exiv2 is a C++ library and a command line utility for managing image and video metadata.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/Exiv2/exiv2/archive/v0.28.2/exiv2-0.28.2.tar.gz
Download MD5 sum: 75a8766216a15ad104f09ab4a0eab7ca
Download size: 43 MB
Estimated disk space required: 127 MB (with tests)
Estimated build time: 0.3 SBU (Using parallelism=4, with tests)
Brotli-1.1.0, cURL-8.6.0, and inih-58
Install Exiv2 by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DEXIV2_ENABLE_VIDEO=yes \ -DEXIV2_ENABLE_WEBREADY=yes \ -DEXIV2_ENABLE_CURL=yes \ -DEXIV2_BUILD_SAMPLES=no \ -G "Unix Makefiles" .. && make
To test the results, issue: make test
Now, as the root
user:
make install
-DEXIV2_ENABLE_VIDEO=yes
: This
switch enables managing video metadata.
-DEXIV2_ENABLE_WEBREADY=yes
:
This switch enables managing web image metadata.
-DEXIV2_BUILD_SAMPLES=no
: This
switch is necessary to suppress building and installing
sample programs. If the sample programs are built, 34
additional programs are installed in /usr/bin.
-DEXIV2_ENABLE_CURL=yes
: This
switch is necessary to enable network/http capabilities.
-DEXIV2_ENABLE_INIH=no
: Use this
switch if you have not installed inih-58.
-DEXIV2_ENABLE_BROTLI=no
: Use
this switch if you have not installed Brotli-1.1.0.
The FreeType2 package contains a library which allows applications to properly render TrueType fonts.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/freetype/freetype-2.13.2.tar.xz
Download MD5 sum: 1f625f0a913c449551b1e3790a1817d7
Download size: 2.4 MB
Estimated disk space required: 33 MB (with additional documentation)
Estimated build time: 0.2 SBU (with additional documentation)
Additional Documentation
Download (HTTP): https://downloads.sourceforge.net/freetype/freetype-doc-2.13.2.tar.xz
Download MD5 sum: e6466f08934ebf2d7f711b0464d7a6cf
Download size: 2.1 MB
HarfBuzz-8.3.0 (first, install without it, after it is installed, reinstall FreeType-2.13.2), libpng-1.6.42, and Which-2.21
Brotli-1.1.0 and librsvg-2.57.1
If you downloaded the additional documentation, unpack it into the source tree using the following command:
tar -xf ../freetype-doc-2.13.2.tar.xz --strip-components=2 -C docs
Install FreeType2 by running the following commands:
sed -ri "s:.*(AUX_MODULES.*valid):\1:" modules.cfg && sed -r "s:.*(#.*SUBPIXEL_RENDERING) .*:\1:" \ -i include/freetype/config/ftoption.h && ./configure --prefix=/usr --enable-freetype-config --disable-static && 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 as
the root
user:
cp -v -R docs -T /usr/share/doc/freetype-2.13.2 && rm -v /usr/share/doc/freetype-2.13.2/freetype-config.1
sed -ri ...:
First command enables GX/AAT and OpenType table validation
and second command enables Subpixel Rendering. Note that
Subpixel Rendering may have patent issues. Be sure to read
the 'Other patent issues'
part
of https://freetype.org/patents.html
before enabling this option.
--enable-freetype-config
: This
switch ensure that the man page for freetype-config is
installed.
--without-harfbuzz
: If
harfbuzz is installed prior
to freetype without
freetype support, use this
switch to avoid a build failure.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The Fontconfig package contains a library and support programs used for configuring and customizing font access.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.15.0.tar.xz
Download MD5 sum: 5bb3a2829aecb22ae553c39099bd0d6a
Download size: 1.4 MB
Estimated disk space required: 17 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
bubblewrap-0.8.0 (used by some tests), cURL-8.6.0 and UnZip-6.0 (both used by some tests for downloading and extracting test files), JSON-C-0.17, DocBook-utils-0.6.14 and libxml2-2.12.5, texlive-20230313 (or install-tl-unx)
An Internet connection is needed for some tests of this package.
If you have DocBook Utils
installed and you remove the --disable-docs
parameter from
the configure
command below, you must have SGMLSpm-1.1 and
texlive-20230313 installed
also, or the Fontconfig
build will fail.
Install Fontconfig by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-docs \ --docdir=/usr/share/doc/fontconfig-2.15.0 && make
To test the results, issue: make check. One test is known to fail if the kernel does not support user namespaces. Some tests will download some font files via Internet.
Now, as the root
user:
make install
If you did not remove the --disable-docs
parameter from
the configure
command, you can install the pre-generated documentation by
using the following commands as the root
user:
install -v -dm755 \ /usr/share/{man/man{1,3,5},doc/fontconfig-2.15.0/fontconfig-devel} && install -v -m644 fc-*/*.1 /usr/share/man/man1 && install -v -m644 doc/*.3 /usr/share/man/man3 && install -v -m644 doc/fonts-conf.5 /usr/share/man/man5 && install -v -m644 doc/fontconfig-devel/* \ /usr/share/doc/fontconfig-2.15.0/fontconfig-devel && install -v -m644 doc/*.{pdf,sgml,txt,html} \ /usr/share/doc/fontconfig-2.15.0
--disable-docs
: This
switch avoids building the documentation (the release tarball
includes pre-generated documentation).
The main configuration file for Fontconfig is /etc/fonts/fonts.conf
. Generally you do
not want to edit this file. It will also read /etc/fonts/local.conf
and any files in
/etc/fonts/conf.d
. To put a
new font directory in the configuration, create (or update)
the /etc/fonts/local.conf
file with your local information or add a new file in
/etc/fonts/conf.d
. The
default location of fonts in Fontconfig is:
/usr/share/fonts
~/.local/share/fonts
~/.fonts (this is now deprecated, but for the moment it still works)
Fontconfig also ships many
example configuration files in the /usr/share/fontconfig/conf.avail
directory. Symlinking specific files to /etc/fonts/conf.d
will enable them. The
default setup is generally good enough for most users. See
/etc/fonts/conf.d/README
for
a description of the configuration files.
More information about configuring Fontconfig can be found in the user's manual in file:///usr/share/doc/fontconfig-2.15.0/fontconfig-user.html.
is used to create font information caches |
|
is used to read font information caches |
|
shows the ruleset files' information on the system |
|
is used to create font lists |
|
is used to match available fonts, or find fonts that match a given pattern |
|
is used to parse pattern (empty pattern by default) and show the parsed result |
|
is used to query fonts files and print resulting patterns |
|
is used to scan font files and directories, and print resulting patterns |
|
is used to validate font files |
|
contains functions used by the Fontconfig programs and also by other programs to configure or customize font access |
The FriBidi package is an implementation of the Unicode Bidirectional Algorithm (BIDI). This is useful for supporting Arabic and Hebrew alphabets in other packages.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/fribidi/fribidi/releases/download/v1.0.13/fribidi-1.0.13.tar.xz
Download MD5 sum: 49b17442e0d8fa2e97b5c898078f6f51
Download size: 1.1 MB
Estimated disk space required: 21 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Install FriBidi by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
is a command-line interface to the |
|
contains functions used to implement the Unicode Bidirectional Algorithm |
This package provides the GEneric Graphics Library, which is a graph based image processing format.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gimp.org/pub/gegl/0.4/gegl-0.4.48.tar.xz
Download MD5 sum: a96ae32d46855ab4eefa1fce2dbefda1
Download size: 5.5 MB
Estimated disk space required: 80 MB (Add 4 MB for tests)
Estimated build time: 0.7 SBU (add 0.1 SBU for tests, both with parallelism=4)
babl-0.1.108 and JSON-GLib-1.8.0
gobject-introspection-1.78.1, Graphviz-10.0.1 (build with pango), Pygments-2.17.2, and PyGObject-3.46.0
asciidoc-10.2.0, Cairo-1.18.0, FFmpeg-6.1.1, gdk-pixbuf-2.42.10, gexiv2-0.14.2, GTK-Doc-1.33.2, JasPer-4.2.0, Little CMS-2.14, libraw-0.21.2, librsvg-2.57.1, libtiff-4.6.0, libwebp-1.3.2, Pango-1.51.2, Poppler-24.02.0, Ruby-3.3.0, SDL2-2.30.0, v4l-utils-1.26.1, Vala-0.56.14, libspiro-20220722, LuaJIT, lensfun, LuaJIT, libnsgif, libumfpack, maxflow, MRG, OpenCL, OpenEXR, poly2tri-c, source-highlight, and w3m
If installing over a previous version of gegl, one module needs to be removed. As
the root
user, run:
rm -f /usr/lib/gegl-0.4/vector-fill.so
Install gegl by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To run the tests, issue: ninja
test. 7 tests in the gegl:ff-load-save
portion of the test suite
are known to fail due to incompatibilities with ffmpeg-6.0.
Now, as the root
user:
ninja install
-Ddocs=true
: Build and install
documentation (requires GTK-Doc-1.33.2,).
is a commandline tool for working with the XML data model |
|
is a simple image difference detection tool for use in regression testing |
|
provides infrastructure to do demand based cached non destructive image editing on larger than RAM buffers |
|
is the GEGL N-point image deformation library |
The giflib package contains libraries for reading and writing GIFs as well as programs for converting and working with GIF files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://sourceforge.net/projects/giflib/files/giflib-5.2.1.tar.gz
Download MD5 sum: 6f03aee4ebe54ac2cc1ab3e4b0a049e5
Download size: 436 KB
Estimated disk space required: 3.2 MB (with documentation)
Estimated build time: less than 0.1 SBU (with documentation)
Install giflib by running the following commands:
make
This package does not come with a test suite.
Now, as the root
user:
make PREFIX=/usr install && rm -fv /usr/lib/libgif.a && find doc \( -name Makefile\* -o -name \*.1 \ -o -name \*.xml \) -exec rm -v {} \; && install -v -dm755 /usr/share/doc/giflib-5.2.1 && cp -v -R doc/* /usr/share/doc/giflib-5.2.1
rm -fv /usr/lib/libgif.a: This command removes a static library which is not used by any BLFS package.
find doc ... -exec rm -v {}
\;: This command removes Makefiles
, man and xml files from the
documentation directory that would otherwise be installed by
the commands that follow.
converts images saved as GIF to 24-bit RGB images |
|
dumps GIF data in a textual format, or undumps it to a GIF |
|
modifies GIF image colormaps |
|
clumsily attempts to fix truncated GIF images |
|
prints (text only) general information about a GIF file |
|
is a GIF transformation tool |
|
contains API functions required by the giflib programs and any other programs needing library functionality to read, write and manipulate GIF images |
The Glad package contains a generator for loading Vulkan, OpenGL, EGL, GLES, and GLX contexts.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/Dav1dde/glad/archive/refs/tags/v2.0.5/glad-2.0.5.tar.gz
Download MD5 sum: 7bd99cc337608d9cad42b861ccc0e28e
Download size: 620 KB
Estimated disk space required: 36 MB
Estimated build time: less than 0.1 SBU
pytest-8.0.0, rustc-1.76.0, Xorg Libraries, glfw, and WINE
Install Glad by running the following commands:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
This package comes with a test suite, but it cannot be run without installing the external dependencies listed above.
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user glad2
OpenGL Mathematics (GLM) is a header-only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications. An extension system provides extended capabilities such as matrix transformations and quaternions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/g-truc/glm/archive/1.0.0/glm-1.0.0.tar.gz
Download MD5 sum: 61f6cd584a7489a0d4c8152191d5d2fa
Download size: 4.3 MB
Estimated disk space required: 44 MB
Estimated build time: less than 0.1 SBU
This package is unusual as it includes its functionality in header files. We just copy them into position.
As the root
user:
cp -r glm /usr/include/ && cp -r doc /usr/share/doc/glm-1.0.0
Graphite2 is a rendering engine for graphite fonts. These are TrueType fonts with additional tables containing smart rendering information and were originally developed to support complex non-Roman writing systems. They may contain rules for e.g. ligatures, glyph substitution, kerning, justification - this can make them useful even on text written in Roman writing systems such as English. Note that firefox by default provides an internal copy of the graphite engine and cannot use a system version (although it can now be patched to use it), but it too should benefit from the availability of graphite fonts.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/silnrsi/graphite/releases/download/1.3.14/graphite2-1.3.14.tgz
Download MD5 sum: 1bccb985a7da01092bfb53bb5041e836
Download size: 6.3 MB
Estimated disk space required: 30 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
FreeType-2.13.2, silgraphite to build the comparerender test and benchmarking tool, and if that is present, and HarfBuzz-8.3.0 to add more functionality to it (this is a circular dependency, you would need to first build graphite2 without harfbuzz).
To build the documentation: asciidoc-10.2.0, Doxygen-1.10.0, texlive-20230313 (or install-tl-unx), and dblatex (for PDF docs)
To execute the test suite you will need FontTools (Python 3 module), otherwise, the "cmp" tests fail.
You will need at least one suitable graphite font for the package to be useful.
Some tests fail if FontTools (Python 3 module) is not installed. These tests can be removed with:
sed -i '/cmptest/d' tests/CMakeLists.txt
Install Graphite2 by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr .. && make
If you wish to build the documentation, issue:
make docs
To test the results, issue: make test. One test named
nametabletest
is known to fail.
Now, as the root
user:
make install
If you built the documentation, install, as the root
user:
install -v -d -m755 /usr/share/doc/graphite2-1.3.14 && cp -v -f doc/{GTF,manual}.html \ /usr/share/doc/graphite2-1.3.14 && cp -v -f doc/{GTF,manual}.pdf \ /usr/share/doc/graphite2-1.3.14
-DCMAKE_VERBOSE_MAKEFILE=ON
: This
switch turns on build verbose mode.
The HarfBuzz package contains an OpenType text shaping engine.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/harfbuzz/harfbuzz/releases/download/8.3.0/harfbuzz-8.3.0.tar.xz
Download MD5 sum: 7bf11a21c51a4f3ce0728decc4c557d4
Download size: 18 MB
Estimated disk space required: 153 MB (with tests)
Estimated build time: 0.8 SBU (Using parallelism=4; with tests)
gobject-introspection-1.78.1 (required if building GNOME), GLib-2.78.4 (required for Pango), Graphite2-1.3.14 (required for building texlive-20230313 or LibreOffice-24.2.0.3 with system harfbuzz), ICU-74.2, and FreeType-2.13.2 (after HarfBuzz-8.3.0 is installed, reinstall FreeType-2.13.2)
Cairo-1.18.0 (circular: build cairo and all its recommended dependencies, including harfbuzz, first, then rebuild harfbuzz if the cairo backend is needed), git-2.44.0, GTK-Doc-1.33.2, FontTools (Python 3 module, for the test suite), ragel, and wasm-micro-runtime
Recommended dependencies are not strictly required to build the package. However, you might not get expected results at runtime if you don't install them. Please do not report bugs with this package if you have not installed the recommended dependencies.
Install HarfBuzz by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dgraphite2=enabled && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dgraphite2=enabled
:
This switch enables Graphite2 support, which is required for
building texlive-20230313 or LibreOffice-24.2.0.3 with system
harfbuzz.
-Ddocs=disabled
: If GTK-Doc-1.33.2 is installed, the
documentation is built and installed. This switch prevents
that.
is used for gathering information about fonts installed on the system |
|
gives the set of characters contained in a string, represented as single characters and/or single character names. Example: hb-ot-shape-closure /usr/share/fonts/dejavu/DejaVuSans.ttf "Hello World." |
|
is used for the conversion of text strings into positioned glyphs |
|
is used to create subsets of fonts, and display text using them |
|
displays a graphical view of a string shape using a particular font as a set of glyphs. The output format is automatically defined by the file extension, the supported ones being ansi/png/svg/pdf/ps/eps. For example: hb-view --output-file=hello.png /usr/share/fonts/dejavu/DejaVuSans.ttf "Hello World." |
|
is the HarfBuzz text shaping library |
|
provides Cairo integration for the Harfbuzz text shaping library |
|
provides GObject integration for the HarfBuzz text shaping library |
|
provides ICU integration for the HarfBuzz text shaping library |
|
provides API functions for performing subsetting operations on font files |
The JasPer Project is an open-source initiative to provide a free software-based reference implementation of the JPEG-2000 codec.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/jasper-software/jasper/archive/version-4.2.0/jasper-4.2.0.tar.gz
Download MD5 sum: 14e0fe33bf708603de4966026aa2695d
Download size: 1.9 MB
Estimated disk space required: 10.0 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Freeglut-3.4.0 (required for jiv), Doxygen-1.10.0 (needed for generating html documentation), and texlive-20230313 (needed to regenerate the pdf documentation)
The tarball jasper-4.2.0.tar.gz will extract to jasper-version-4.2.0.
Install JasPer by running the following commands:
mkdir BUILD && cd BUILD && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_SKIP_INSTALL_RPATH=YES \ -DJAS_ENABLE_DOC=NO \ -DALLOW_IN_SOURCE_BUILD=YES \ -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-4.2.0 \ .. && make
To test the results, issue: make test.
Now, as the root
user:
make install
-DCMAKE_SKIP_INSTALL_RPATH=YES
:
This option removes embedded library search paths.
-DJAS_ENABLE_DOC=NO
:
This option disables rebuilding the pdf documentation if
texlive-20230313 is installed.
-DALLOW_IN_SOURCE_BUILD=YES
:
This switch allows building from within the source tree. In
our case, this is needed to allow us to build inside of the
BUILD directory instead of needing to create another
directory outside of the source tree.
The Little Color Management System is a small-footprint color management engine, with special focus on accuracy and performance. It uses the International Color Consortium standard (ICC), which is the modern standard for color management.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/mm2/Little-CMS/releases/download/lcms2.14/lcms2-2.14.tar.gz
Download MD5 sum: 7f7baa3e605c961b9301135105ee9a34
Download size: 7.1 MB
Estimated disk space required: 20 MB (with the tests)
Estimated build time: 0.2 SBU (with the tests)
Apply the upstream fix for an issue breaking colord:
sed '/BufferSize < TagSize/,+1 s/goto Error/TagSize = BufferSize/' \ -i src/cmsio0.c
Install Little CMS2 by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libavif package contains a library used for encoding and decoding AVIF files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/AOMediaCodec/libavif/archive/v1.0.4/libavif-1.0.4.tar.gz
Download MD5 sum: 8c786fd21f8757ace8cc011401e4d420
Download size: 11 MB
Estimated disk space required: 16 MB
Estimated build time: less than 0.1 SBU
Install libavif by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DAVIF_CODEC_AOM=ON \ -DAVIF_BUILD_GDK_PIXBUF=ON \ -G Ninja .. && ninja
This package does come with a test suite, but it requires gtest, which is not part of BLFS.
Now, as the root
user:
ninja install
The AV1 format needs to be added to the loaders cache. As the
root
user:
gdk-pixbuf-query-loaders --update-cache
-DAVIF_CODEC_AOM=ON
:
This switch enables using the AOM codec. This package is
useless without at least one codec built in.
-DAVIF_BUILD_GDK_PIXBUF=ON
:
This switch builds the AVIF loader for applications which use
gdk-pixbuf. Remove it if you have not installed gdk-pixbuf-2.42.10.
-DAVIF_CODEC_DAV1D=ON
: Use this
switch if you have installed libdav1d and
wish to use it as a codec.
-DAVIF_CODEC_RAV1E=ON
: Use this
switch if you have installed rav1e and wish to use it
as a codec.
-DAVIF_CODEC_SVT=ON
: Use this
switch if you have installed svt-av1 and
wish to use it as a codec.
The libexif package contains a library for parsing, editing, and saving EXIF data. Most digital cameras produce EXIF files, which are JPEG files with extra tags that contain information about the image. All EXIF tags described in EXIF standard 2.1 are supported.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/libexif/libexif/releases/download/v0.6.24/libexif-0.6.24.tar.bz2
Download MD5 sum: 00ea6e7ff62d3fd41ea9b2139746703c
Download size: 1.9 MB
Estimated disk space required: 17 MB
Estimated build time: 0.1 SBU
Install libexif by running the following commands:
./configure --prefix=/usr \ --disable-static \ --with-doc-dir=/usr/share/doc/libexif-0.6.24 && make
To test the results, issue: make check.
Now, as the root
user:
make install
Documentation was built and installed if you have the
dependencies shown above installed. If you don't have the
dependencies installed, there is a compressed tarball in the
source tree doc
directory that
can be unpacked into /usr/share/doc/libexif-0.6.24.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libgxps package provides an interface to manipulate XPS documents.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/libgxps/0.3/libgxps-0.3.2.tar.xz
Download MD5 sum: 0527ac7c8c405445e96a5baa6019a0c3
Download size: 80 KB
Estimated disk space required: 5.4 MB
Estimated build time: 0.1 SBU
GTK+-3.24.41, Little CMS-2.14, libarchive-3.7.2, libjpeg-turbo-3.0.1, libtiff-4.6.0, and libxslt-1.1.39
Install Libgxps by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to accelerate baseline JPEG compression and decompression. libjpeg is a library that implements JPEG image encoding, decoding and transcoding.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-3.0.1.tar.gz
Download MD5 sum: 1fdc6494521a8724f5f7cf39b0f6aff3
Download size: 2.7 MB
Estimated disk space required: 55 MB (with tests)
Estimated build time: 0.5 SBU (with tests; both using parallelism=4)
NASM-2.16.01 or yasm-1.3.0 (for building the package with optimized assembly routine)
Install libjpeg-turbo by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=RELEASE \ -DENABLE_STATIC=FALSE \ -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib \ -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libjpeg-turbo-3.0.1 \ .. && make
To test the results, issue: make test.
Now, as the root
user:
make install
-DWITH_JPEG8=ON
: This switch
enables compatibility with libjpeg version 8.
compresses image files to produce a JPEG/JFIF file on the standard output. Currently supported input file formats are: PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, and Targa |
|
decompresses image files from JPEG/JFIF format to either PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, or Targa format |
|
is used for lossless transformation of JPEG files |
|
displays text comments from within a JPEG file |
|
is used to benchmark the performance of libjpeg-turbo |
|
inserts text comments into a JPEG file |
|
contains functions used for reading and writing JPEG images |
The libmng libraries are used by programs wanting to read and write Multiple-image Network Graphics (MNG) files which are the animation equivalents to PNG files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/libmng/libmng-2.0.3.tar.xz
Download MD5 sum: e9e899adb1b681b17f14d91e261878c5
Download size: 932 KB
Estimated disk space required: 15 MB
Estimated build time: 0.1 SBU
Install libmng 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:
make install && install -v -m755 -d /usr/share/doc/libmng-2.0.3 && install -v -m644 doc/*.txt /usr/share/doc/libmng-2.0.3
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libmypaint package, a.k.a. "brushlib", is a library for making brushstrokes which is used by MyPaint and other projects.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/mypaint/libmypaint/releases/download/v1.6.1/libmypaint-1.6.1.tar.xz
Download MD5 sum: 7f1dab2d30ce8a3f494354c7c77a2977
Download size: 508 KB
Estimated disk space required: 11 MB (add 1 MB for tests)
Estimated build time: 0.1 SBU (add 0.3 SBU for tests)
GLib-2.78.4 and gobject-introspection-1.78.1
Doxygen-1.10.0 (to create XML docs), gegl (0.3 versions only) and gperftools
Install libmypaint by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
The libpng package contains libraries used by other programs for reading and writing PNG files. The PNG format was designed as a replacement for GIF and, to a lesser extent, TIFF, with many improvements and extensions and lack of patent problems.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/libpng/libpng-1.6.42.tar.xz
Download MD5 sum: c580b12b1a8c040b13c35f324a636bb6
Download size: 1.0 MB
Estimated disk space required: 14 MB (with tests)
Estimated build time: 0.1 SBU (add 0.5 SBU for tests)
Recommended patch to include animated png functionality in libpng (required to use the system libpng in Firefox, Seamonkey, and Thunderbird): https://downloads.sourceforge.net/sourceforge/libpng-apng/libpng-1.6.40-apng.patch.gz
Patch md5sum: c6e309802ada5ed814a6a553161d8fe6
If you want to patch libpng to support apng files, apply it here:
gzip -cd ../libpng-1.6.40-apng.patch.gz | patch -p1
Install libpng by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install && mkdir -v /usr/share/doc/libpng-1.6.42 && cp -v README libpng-manual.txt /usr/share/doc/libpng-1.6.42
--disable-static
:
This switch prevents installation of static versions of the
libraries.
tests, optimizes and optionally fixes the zlib header in PNG files. Optionally, when fixing, strips ancillary chunks from the file |
|
fixes PNG files that have an incorrect length field in the iTXt chunks |
|
is a shell script that provides configuration information for applications wanting to use libpng |
|
contain routines used to create and manipulate PNG format graphics files |
Libraw is a library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.libraw.org/data/LibRaw-0.21.2.tar.gz
Download MD5 sum: 0533724bad17c0fde22e642e4594e45d
Download size: 1.6 MB
Estimated disk space required: 30 MB
Estimated build time: 0.2 SBU (Using parallelism=4)
Install libraw by running the following commands:
autoreconf -fiv && ./configure --prefix=/usr \ --enable-jpeg \ --enable-jasper \ --enable-lcms \ --disable-static \ --docdir=/usr/share/doc/libraw-0.21.2 && make
This package does not come with a test suite.
Now, as the root
user:
make install
--enable-jpeg
: This
switch enables support for jpeg. Remove if you don't have
libjpeg-turbo-3.0.1 installed.
--enable-jasper
: This
switch enables support for jasper. Remove if you don't have
JasPer-4.2.0 installed.
--enable-lcms
: This
switch enables support for Little CMS2. Remove if you don't
have Little CMS-2.14 installed.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
All the installed programs are examples of using libraw.
generates four TIFF files from RAW data, one file per channel |
|
emulates "dcraw -h" (see DCRAW manpage) |
|
emulates "dcraw [-4] [-6] [-e]" (see DCRAW manpage) |
|
creates eight different renderings from one source file. The first and fourth one should be identical |
|
emulates call to "dcraw [-D] [-T] [-v] [-e] [-4]" (see DCRAW manpage) |
|
is an almost complete dcraw emulator (see DCRAW manpage) |
|
emulates call to "dcraw -h [-w] [-a] [-v]" (see DCRAW manpage) |
|
creates eight different renderings from one source file. The first and fourth one should be identical |
|
emulates call to "dcraw -i [-v]" (see DCRAW manpage) |
|
generates unprocessed raw image: with masked pixels and without black subtraction |
The librsvg package contains a library and tools used to manipulate, convert and view Scalable Vector Graphic (SVG) images.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/librsvg/2.57/librsvg-2.57.1.tar.xz
Download MD5 sum: 0a9d809a4bdd371c894792e4c2eb94e9
Download size: 5.4 MB
Estimated disk space required: 998 MB (16 MB installed), add 589 MB for tests
Estimated build time: 1.2 SBU (add 0.5 SBU for tests; both using parallelism=4)
Cairo-1.18.0, gdk-pixbuf-2.42.10, Pango-1.51.2, and rustc-1.76.0
An Internet connection is needed for building this package.
gobject-introspection-1.78.1 and Vala-0.56.14
docutils-0.20.1 (for man pages), Gi-DocGen-2023.3 (for documentation), and Xorg Fonts (for tests)
Install librsvg by running the following commands:
./configure --prefix=/usr \ --enable-vala \ --disable-static \ --docdir=/usr/share/doc/librsvg-2.57.1 && make
To test the results, issue: LC_ALL=C make -k check.
Now, as the root
user:
make DOC_INSTALL_DIR='$(docdir)' install
If you installed the package on to your system using a
“DESTDIR” method, an important file
was not installed and should be copied and/or generated.
Generate it using the following command as the root
user:
gdk-pixbuf-query-loaders --update-cache
--enable-vala
: This
switch enables building of the Vala bindings. Remove this
switch if you don't have Vala-0.56.14 installed.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
DOC_INSTALL_DIR='$(docdir)'
:
This override ensures installing the API documentation into
the expected location if Gi-DocGen-2023.3 is installed.
--disable-introspection
: Use this
switch if you have not installed Gobject Introspection.
--disable-gtk-doc
: This switch
prevents building the API documentation, even if Gi-DocGen-2023.3 (despite the name of
the option) is available.
Libspiro will take an array of spiro control points and convert them into a series of bezier splines which can then be used in the myriad of ways the world has come to use beziers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/fontforge/libspiro/releases/download/20220722/libspiro-dist-20220722.tar.gz
Download MD5 sum: c21f86e6c1ad65ed4cb1f754f6d7563c
Download size: 428 KB
Estimated disk space required: 5.1 MB (add 1.3 MB if running the tests)
Estimated build time: 0.1 SBU
Install libspiro by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The libtiff package contains the TIFF libraries and associated utilities. The libraries are used by many programs for reading and writing TIFF files and the utilities are used for general work with TIFF files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.osgeo.org/libtiff/tiff-4.6.0.tar.gz
Download MD5 sum: fc7d49a9348b890b29f91a4ecadd5b49
Download size: 3.4 MB
Estimated disk space required: 46 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Freeglut-3.4.0 (required for tiffgt), libjpeg-turbo-3.0.1, sphinx-7.2.6, libwebp-1.3.2, JBIG-KIT, and LERC
Install libtiff by running the following commands:
mkdir -p libtiff-build && cd libtiff-build && cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.6.0 \ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
copies (and possibly converts) a TIFF file |
|
prints verbatim information about TIFF files |
|
prints information about TIFF files |
|
sets the value of a TIFF header to a specified value |
|
splits a multi-image TIFF into single-image TIFF files |
|
contains the API functions used by the libtiff programs as well as other programs to read and write TIFF files |
|
contains the C++ API functions used by programs to read and write TIFF files |
The libwebp package contains a library and support programs to encode and decode images in WebP format.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.3.2.tar.gz
Download MD5 sum: 34869086761c0e2da6361035f7b64771
Download size: 4.0 MB
Estimated disk space required: 45 MB
Estimated build time: 0.1 SBU (with parallelism=4)
libjpeg-turbo-3.0.1, libpng-1.6.42, libtiff-4.6.0, and sdl12-compat-1.2.68 (for improved 3D Acceleration)
Install libwebp by running the following commands:
./configure --prefix=/usr \ --enable-libwebpmux \ --enable-libwebpdemux \ --enable-libwebpdecoder \ --enable-libwebpextras \ --enable-swap-16bit-csp \ --disable-static && make
This package does not come with a test suite.
Now, as the root
user:
make install
--enable-swap-16bit-csp
: This
switch enables byte swap for 16 bit colorspaces.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
compresses an image using the WebP format |
|
decompresses WebP files into PNG, PAM, PPM or PGM images |
|
converts a GIF image to a WebP image |
|
creates an animated WebP file from a sequence of input images |
|
decompresses a WebP file and displays it in a window |
|
prints out the cunk level structure of WebP files along with performing basic integrity checks |
|
creates animated WebP files from non-animated WebP images, extracts frames from animated WebP images, and manages XMP/EXIF metadata and the ICC profile |
|
contains the API functions for WebP encoding and decoding |
The mypaint-brushes package contains brushes used by packages which use libmypaint.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/mypaint/mypaint-brushes/releases/download/v1.3.1/mypaint-brushes-1.3.1.tar.xz
Download MD5 sum: 7241032d814cb91d2baae7d009a2a2e0
Download size: 1.3 MB
Estimated disk space required: 3.4 MB
Estimated build time: less than 0.1 SBU
Install mypaint-brushes 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
Newt is a programming library for color text mode, widget based user interfaces. It can be used to add stacked windows, entry widgets, checkboxes, radio buttons, labels, plain text fields, scrollbars, etc., to text mode user interfaces. Newt is based on the S-Lang library.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://releases.pagure.org/newt/newt-0.52.24.tar.gz
Download MD5 sum: 9a0630e2f59eaa3037aec94989c36c4a
Download size: 176 KB
Estimated disk space required: 3.0 MB
Estimated build time: less than 0.1 SBU
popt-1.19 and slang-2.3.3
GPM-1.20.7 (runtime)
Install newt by running the following command:
sed -e '/install -m 644 $(LIBNEWT)/ s/^/#/' \ -e '/$(LIBNEWT):/,/rv/ s/^/#/' \ -e 's/$(LIBNEWT)/$(LIBNEWTSH)/g' \ -i Makefile.in && ./configure --prefix=/usr \ --with-gpm-support \ --with-python=python3.12 && make
This package does not come with a test suite.
Now, as the root
user:
make install
sed -e ... -i Makefile.in: Disables installation of a static library.
--with-gpm-support
:
This switch enables mouse support for newt applications
through GPM.
--with-python=python3.12
: By
giving explicitly the name of the directory where python
modules reside, this switch prevents building the python2
module.
The opencv package contains graphics libraries mainly aimed at real-time computer vision.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/opencv/opencv/archive/4.9.0/opencv-4.9.0.tar.gz
Download MD5 sum: 153b4b8dd103b1bfe447f7dd1f22eac0
Download size: 88 MB
Estimated disk space required: 820 MB
Estimated build time: 7.4 SBU (using parallelism=4)
Optional additional modules: https://github.com/opencv/opencv_contrib/archive/4.9.0/opencv_contrib-4.9.0.tar.gz
One additional file that starts with "ippicv" (integrated performance primitives) will be automatically downloaded during the cmake portion of the build procedure. This download is specific to the system architecture.
FFmpeg-6.1.1, gst-plugins-base-1.22.10, GTK+-3.24.41, JasPer-4.2.0, libexif-0.6.24, libjpeg-turbo-3.0.1, libpng-1.6.42, libtiff-4.6.0, libwebp-1.3.2, OpenJPEG-2.5.0, v4l-utils-1.26.1, and xine-lib-1.2.13
apache-ant-1.10.14, Doxygen-1.10.0, Java-21.0.2, NumPy-1.26.4, ATLAS, blas, Cuda, Eigen, OpenEXR, GDAL, lapack, libdc1394, Threading Building Blocks (TBB), and VTK - The Visualization Toolkit,
If you downloaded the optional modules, unpack them now:
tar -xf ../opencv_contrib-4.9.0.tar.gz
Install opencv by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DENABLE_CXX11=ON \ -DBUILD_PERF_TESTS=OFF \ -DWITH_XINE=ON \ -DBUILD_TESTS=OFF \ -DENABLE_PRECOMPILED_HEADERS=OFF \ -DCMAKE_SKIP_RPATH=ON \ -DBUILD_WITH_DEBUG_INFO=OFF \ -Wno-dev .. && make
The package does not come with a test suite.
Now, as the root
user:
make install
-DWITH_XINE=ON
: This
option instructs the make procedure to use xine-lib-1.2.13.
-DENABLE_PRECOMPILED_HEADERS=OFF
:
This option is needed for compatibility with gcc-6.1 and
later.
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.9.0/modules
:
instructs the build system to build additional modules.
OpenJPEG is an open-source implementation of the JPEG-2000 standard. OpenJPEG fully respects the JPEG-2000 specifications and can compress/decompress lossless 16-bit images.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/uclouvain/openjpeg/archive/v2.5.0/openjpeg-2.5.0.tar.gz
Download MD5 sum: 5cbb822a1203dd75b85639da4f4ecaab
Download size: 1.8 MB
Estimated disk space required: 13 MB
Estimated build time: 0.2 SBU
Little CMS-2.14, libpng-1.6.42, libtiff-4.6.0, and Doxygen-1.10.0 (to build the API documentation)
Install OpenJPEG by running the following commands:
mkdir -v build && cd build && cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_STATIC_LIBS=OFF .. && make
This package does not come with a test suite.
Now, as the root
user:
make install && cp -rv ../doc/man -T /usr/share/man
The Pixman package contains a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cairographics.org/releases/pixman-0.43.2.tar.gz
Download MD5 sum: b5ad6407cd8c7abf8c1669273a2fb162
Download size: 776 KB
Estimated disk space required: 27 MB (With tests)
Estimated build time: 0.2 SBU (Using parallelism=4; with tests)
GTK+-2.24.33 and libpng-1.6.42 (for tests and demos)
Install Pixman by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
The Poppler package contains a PDF rendering library and command line tools used to manipulate PDF files. This is useful for providing PDF rendering functionality as a shared library.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://poppler.freedesktop.org/poppler-24.02.0.tar.xz
Download MD5 sum: a02d3b32e956bef66a5108fcaabe1c63
Download size: 1.8 MB
Estimated disk space required: 79 MB (with Qt5 library; add 13 MB for tests)
Estimated build time: 0.9 SBU (with parallelism=4 and Qt5 library; add 2.7 SBU for tests)
Poppler Encoding Data
Download (HTTP): https://poppler.freedesktop.org/poppler-data-0.4.12.tar.gz
Download MD5 sum: 67ee4a40aa830b1f6e2560ce5f6471ba
Download size: 4.3 MB
Estimated disk space required: 26 MB
Estimated build time: less than 0.1 SBU
The additional package consists of encoding files for use with Poppler. The encoding files are optional and Poppler will automatically read them if they are present. When installed, they enable Poppler to render CJK and Cyrillic properly.
CMake-3.28.3, Fontconfig-2.15.0, and gobject-introspection-1.78.1
Boost-1.84.0, Cairo-1.18.0, GPGME-1.23.2, Little CMS-2.14, libjpeg-turbo-3.0.1, libpng-1.6.42, libtiff-4.6.0, nss-3.98, OpenJPEG-2.5.0, and (Qt-5.15.12 or qt-alternate-5.15.12) (required for PDF support in Okular-23.08.5)
cURL-8.6.0, gdk-pixbuf-2.42.10, git-2.44.0 (for downloading test files), GTK-Doc-1.33.2, GTK+-3.24.41, and Qt-6.6.2
Install Poppler by running the following commands:
mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DTESTDATADIR=$PWD/testfiles \ -DENABLE_QT6=OFF \ -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \ .. && make
In order to run the test suite, some testcases are needed and can be obtained only from a git repository. The command to download them is: git clone --depth 1 https://gitlab.freedesktop.org/poppler/test.git testfiles. Then issue: LC_ALL=en_US.UTF-8 make test. One test, check_qt5_signature_basics, is known to fail.
Now, as the root
user:
make install
To install the documentation, run the following commands as
root
:
install -v -m755 -d /usr/share/doc/poppler-24.02.0 && cp -vr ../glib/reference/html /usr/share/doc/poppler-24.02.0
If you downloaded the additional encoding data package, install it by issuing the following commands:
tar -xf ../../poppler-data-0.4.12.tar.gz && cd poppler-data-0.4.12
Now, as the root
user:
make prefix=/usr install
-DCMAKE_BUILD_TYPE=Release
:
This switch is used to apply a higher level of compiler
optimizations.
-DTESTDATADIR=$PWD/testfiles
:
Tells the test programs where the auxiliary files are
located.
-DENABLE_QT6=OFF
:
This switch is needed to prevent an error when Qt6 is not
installed. Remove it if you have installed Qt-6.6.2.
-DENABLE_UNSTABLE_API_ABI_HEADERS=ON
:
Installs some old Xpdf
headers required by certain programs.
-DENABLE_GTK_DOC=ON
: Use this
parameter if GTK-Doc is installed and you wish to rebuild and
install the API documentation.
-DENABLE_QT5=OFF
: Use this
parameter if (Qt-5.15.12 or qt-alternate-5.15.12) is not
installed.
-DENABLE_BOOST=OFF
: Use this
parameter if you have not installed boost (the Splash backend for Qt5
recommends boost).
-DENABLE_NSS3=OFF
: Use this
parameter if you have not installed nss.
-DENABLE_GPGME=OFF
: Use this
parameter if you have not installed gpgme.
-DENABLE_LIBTIFF=OFF
: Use this
parameter if you have not installed libtiff.
LC_ALL=en_US.UTF-8 make test: Runs the test suite. The environment variable LC_ALL=en_US.UTF-8 is only needed if the default locale does not include UTF-8.
adds a new embedded file to an existing PDF file |
|
lists or extracts embedded files from PDF files |
|
lists the fonts used in a PDF file along with various information for each font |
|
saves images from a PDF file as PPM, PBM, or JPEG files |
|
prints the contents of the 'Info' dictionary (plus some other useful information) from a PDF file |
|
extracts single pages from a PDF file |
|
verifies the digital signatures in a PDF document |
|
converts a PDF file to one of several formats (PNG, JPEG, PDF, PS, EPS, SVG) using the cairo output device of the poppler library |
|
converts a PDF file to HTML |
|
converts PDF files to PBM, PGM and PPM formats |
|
converts PDF files to Postscript format |
|
converts PDF files to plain text |
|
merges several PDF files, in the order of their occurrence on the command line, to one PDF output file |
|
contains the API functions to render PDF files |
|
is a C++ backend for rendering PDF files |
|
is a wrapper library used to interface the PDF rendering functions with GTK+ |
|
is a wrapper library used to interface the PDF rendering functions with Qt5 |
|
is a wrapper library used to interface the PDF rendering functions with Qt6 |
Potrace™ is a tool for transforming a bitmap (PBM, PGM, PPM, or BMP format) into one of several vector file formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/potrace/potrace-1.16.tar.gz
Download MD5 sum: 5f0bd87ddd9a620b0c4e65652ef93d69
Download size: 644 KB
Estimated disk space required: 7.1 MB (including tests)
Estimated build time: less than 0.1 SBU (including tests)
LLVM-17.0.6 (including clang)
Install Potrace by running the following commands:
./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/potrace-1.16 \ --enable-a4 \ --enable-metric \ --with-libpotrace && make
To run the test suite, issue: make check.
Now, as the root
user:
make install
--enable-a4
: Use A4
as the default paper size.
--enable-metric
: Use
metric units (centimeters) as default
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-libpotrace
:
Install the library and headers.
The Qpdf package contains command-line programs and a library that does structural, content-preserving transformations on PDF files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/qpdf/qpdf/releases/download/v11.8.0/qpdf-11.8.0.tar.gz
Download MD5 sum: aec6ad628203411cd04fbb7e145ecc72
Download size: 18 MB
Estimated disk space required: 256 MB (add 1 MB for tests)
Estimated build time: 0.5 SBU (using parallelism=4; add 0.5 SBU for tests)
ghostscript-10.02.1, GnuTLS-3.8.3, libtiff-4.6.0, sphinx-7.2.6 with sphinx_rtd_theme-2.0.0, and texlive-20230313 or install-tl-unx
Install Qpdf by running the following commands:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC_LIBS=OFF \ -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/qpdf-11.8.0 \ .. && make
To test the results, issue: ctest.
Now, as the root
user:
make install
Qrencode is a fast and compact library for encoding data in a QR Code symbol, a 2D symbology that can be scanned by handheld terminals such as a mobile phone with a CCD sensor.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://fukuchi.org/works/qrencode/qrencode-4.1.1.tar.bz2
Download MD5 sum: de7185bcab635a34730e1b73d4efa705
Download size: 451 KB
Estimated disk space required: 5.0 MB (with documentation, add 5 MB for tests)
Estimated build time: less than 0.1 SBU, add 0.1 SBU for tests
Doxygen-1.10.0 for generating documentation, and SDL2-2.30.0 for tests
Install libqrencode by running the following commands:
./configure --prefix=/usr && make
If you have installed Doxygen-1.10.0, you can build the documentation by issuing:
doxygen
The tests must be run after installing the package.
Now, as the root
user:
make install
If you have built the optional documentation, install it as
the root
user:
install -vdm 755 /usr/share/doc/qrencode-4.1.1 && mv html/* /usr/share/doc/qrencode-4.1.1
To test the results, if you have passed the --with-tests
option to configure, issue:
make check.
--with-tests
: This option allows
building the test programs. It requires SDL2-2.30.0.
--without-tools
: This option
prevents building the qrencode executable,
removing the need for libpng-1.6.42.
SassC is a wrapper around libsass, a CSS pre-processor language.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/sass/sassc/archive/3.6.2/sassc-3.6.2.tar.gz
Download MD5 sum: 4c3b06ce2979f2a9f0a35093e501d8bb
Download size: 28 KB
Estimated disk space required: 5.1 MB
Estimated build time: less than 0.1 SBU
Download (HTTP): https://github.com/sass/libsass/archive/3.6.6/libsass-3.6.6.tar.gz
Download MD5 sum: afda97284d75a030cabadf5b9f998a3b
Download size: 336 KB
Estimated disk space required: 135 MB
Estimated build time: 0.4 SBU (Using parallelism=4)
First, build the library:
tar -xf ../libsass-3.6.6.tar.gz && pushd libsass-3.6.6 && autoreconf -fi && ./configure --prefix=/usr --disable-static && make
This package does not come with a test suite.
Now, as the root
user:
make install
Build the command line wrapper:
popd && autoreconf -fi && ./configure --prefix=/usr && make
This package does not come with a test suite.
Now, as the root
user:
make install
The webp-pixbuf-loader package contains a library that allows gdk-pixbuf to load and process webp images.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/aruiz/webp-pixbuf-loader/archive/0.2.7/webp-pixbuf-loader-0.2.7.tar.gz
Download MD5 sum: e97025dc70178877dbd041776f151947
Download size: 8.8 MB
Estimated disk space required: 9.7 MB
Estimated build time: less than 0.1 SBU (with tests)
Install webp-pixbuf-loader by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
The webp format needs to be added to the loaders cache:
gdk-pixbuf-query-loaders --update-cache
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
gdk-pixbuf-query-loaders --update-cache: This command updates the gdk-pixbuf loader cache so that it knows the webp loader has been installed.
WOFF2 is a library for converting fonts from the TTF format to the WOFF 2.0 format. It also allows decompression from WOFF 2.0 to TTF. The WOFF 2.0 format uses the Brotli compression algorithm to compress fonts suitable for downloading in CSS @font-face rules.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/google/woff2/archive/v1.0.2/woff2-1.0.2.tar.gz
Download MD5 sum: 793c8844845351cb80730a74937e411b
Download size: 39 KB
Estimated disk space required: 1.6 MB
Estimated build time: less than 0.1 SBU
Install WOFF2 by running the following commands:
mkdir out && cd out && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release .. && make
This package does not come with a test suite.
Now, as the root
user:
make install
This chapter contains various utilities that do not fit conveniently into other chapters. Programs include some documentation generators, several utilities for manipulating text and graphics, programs for listing files, a program for entering PIN numbers and pass-phrases, and a connection manager.
Asciidoctor is a fast, open source text processor and publishing toolchain for converting AsciiDoc content to HTML5, DocBook, PDF, and other formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/asciidoctor/asciidoctor/archive/v2.0.20/asciidoctor-2.0.20.tar.gz
Download MD5 sum: 11f40bda9a2c07f6b632a0fc91b43a13
Download size: 1.6 MB
Estimated disk space required: 5.4 MB
Estimated build time: less than 0.1 SBU
When building this package, the following message may appear:
fatal: not a git repository (or any of the parent directories): .git
. This is normal, and the package will continue building past this point.
Build the Ruby gem:
gem build asciidoctor.gemspec
The test suite needs many Ruby gems beyond the scope of BLFS.
Now, as the root
user:
gem install asciidoctor-2.0.20.gem && install -vm644 man/asciidoctor.1 /usr/share/man/man1
The Bogofilter application is a mail filter that classifies mail as spam or ham (non-spam) by a statistical analysis of the message's header and content (body).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/bogofilter/bogofilter-1.2.5.tar.xz
Download MD5 sum: 8763f87adfff7b802ced177d8c654539
Download size: 784 KB
Estimated disk space required: 19 MB
Estimated build time: 0.1 SBU
Gsl-2.7.1, libxml2-2.12.5, and SQLite-3.45.1
lmdb-0.9.31, xmlto-0.0.28, Berkeley DB (deprecated), QDBM and TokyoCabinet
If you do not install the recommended Gsl-2.7.1 package then a statically linked shipped version will be used instead.
If you plan to change the version of your database library on an existing installation, or to change to a different database, read the warning at the top of the RELEASE.NOTES file.
Install Bogofilter by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc/bogofilter \ --with-database=sqlite3 && make
To test the results, issue make check.
Now, as the root
user:
make install
--with-database=sqlite3
: This
switch makes Bogofilter use SQLite-3.45.1 as the database,
instead of Berkeley DB.
--with-database={lmdb,qdbm,tokyocabinet}
:
This switch also allows to use lmdb, qdbm, or tokyocabinet as
the database.
creates a more compact bogofilter working directory with a dump/load cycle |
|
copies a bogofilter working directory to another directory |
|
bundles a bogofilter working directory in tar format and copies it to standard output |
|
is a fast Bayesian spam filter |
|
is used to separate messages into tokens and to test new versions of the lexer.l code |
|
attempts to find optimum parameter settings for bogofilter |
|
upgrades the bogofilter database to the current version |
|
dumps, loads, and maintains bogofilter database files |
Compface provides utilities and a library to convert from/to X-Face format, a 48x48 bitmap format used to carry thumbnails of email authors in a mail header.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/compface/compface-1.5.2.tar.gz
Download MD5 sum: 62f4f79c0861ad292ba3cf77b4c48319
Download size: 47 KB
Estimated disk space required: 520 KB
Estimated build time: less than 0.1 SBU
Install Compface by running the following commands:
./configure --prefix=/usr --mandir=/usr/share/man && make
This package does not come with a test suite.
Now, as the root
user:
make install && install -m755 -v xbm2xface.pl /usr/bin
is a filter for generating highly compressed representations of 48x48x1 face image files |
|
is an inverse filter which performs an inverse transformation with no loss of data |
|
is a script to generate xfaces |
|
allows the compression and decompression algorithms to be used in other programs such as MTAs |
The Desktop File Utils package contains command line utilities for working with Desktop entries. These utilities are used by Desktop Environments and other applications to manipulate the MIME-types application databases and help adhere to the Desktop Entry Specification.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/desktop-file-utils/releases/desktop-file-utils-0.27.tar.xz
Download MD5 sum: fdf9215aea91acb6aebc43f770537f2c
Download size: 80 KB
Estimated disk space required: 1.2 MB
Estimated build time: less than 0.1 SBU
If you are upgrading from a previous version of desktop-file-utils that used the Autotools method of installing and configuring the package, you must remove the desktop-file-edit symlink by using the following commands.
rm -fv /usr/bin/desktop-file-edit
Install Desktop File Utils by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
The XDG Base Directory specification defines the standard locations for applications to place data and configuration files. These files can be used, for instance, to define the menu structure and menu items in a desktop environment.
The default location for configuration files to be
installed is /etc/xdg
, and
the default locations for data files are /usr/local/share
and /usr/share
. These locations can be
extended with the environment variables XDG_CONFIG_DIRS
and XDG_DATA_DIRS
, respectively. The
GNOME, KDE and XFCE environments respect these
settings.
When a package installs a .desktop
file to a location in one of the
base data directories, the database that maps MIME-types to
available applications can be updated. For instance, the
cache file at /usr/share/applications/mimeinfo.cache
can be rebuilt by executing the following command as the
root
user:
install -vdm755 /usr/share/applications && update-desktop-database /usr/share/applications
The dos2unix package contains an any-to-any text format converter.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/dos2unix/dos2unix-7.5.2.tar.gz
Download MD5 sum: 646272020848c9b673de24c4e8e3422e
Download size: 972 KB
Estimated disk space required: 7.2 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Build dos2unix by running the following commands:
make
To test the results, issue: make check.
Now, as the root
user:
make install
The Graphviz package contains graph visualization software. Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. Graphviz has several main graph layout programs. It also has web and interactive graphical interfaces, auxiliary tools, libraries, and language bindings.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.com/graphviz/graphviz/-/archive/10.0.1/graphviz-10.0.1.tar.bz2
Download MD5 sum: 5d343d0ba08dc11624d3961af2b4755c
Download size: 26 MB
Estimated disk space required: 220 MB
Estimated build time: 0.8 SBU (using parallelism=4)
Graphviz basic usage does not need any libraries out of what is found in the LFS book. Its “core” rendering engine allows to generate several graphic formats, such as Postscript, SVG, VML, .fig, and Tk. Those formats can be converted to almost any other format using for example tools from ImageMagick-7.1.1-28. The dependencies below add the ability to generate graph images in bitmap format, to display the graph image on screen, to edit a graph by viewing the resulting image directly, or to view large graphs. Since Graphviz is a dependency of several other packages in this book, it is suggested to first build it without any dependencies, then to rebuild it when you have built enough packages to suit your needs.
Pango-1.51.2, with Cairo-1.18.0, Xorg Libraries, Fontconfig-2.15.0, and libpng-1.6.42, to generate images in bitmap SVG, postscript, PNG, and PDF formats, or displaying the image on screen. The PNG output is required for building gegl-0.4.48
Adding GTK+-2.24.33 with libjpeg-turbo-3.0.1 adds support for JPEG, BMP, TIF, and ICO formats, and allows displaying the image in a GTK+ window
GD Library may be used instead of Pango. It adds the ability to generate images in GIF, VRML, and GD formats, but Pango provides better outputs for the other formats, and is needed for displaying images
Other formats may be added with libwebp-1.3.2 (WebP support is considered experimental), DevIL, libLASi, and glitz
libgs.so
from ghostscript-10.02.1, librsvg-2.57.1, and Poppler-24.02.0
Freeglut-3.4.0 (with GtkGLExt and libGTS for building the smyrna large graph viewer, which is considered experimental), and (Qt-5.15.12 or qt-alternate-5.15.12) (for building the gvedit graph editor.)
SWIG-4.2.0 (SWIG must be installed or no bindings will be built), GCC-13.2.0 (for the go compiler), Guile-3.0.9, OpenJDK-21.0.2, Lua-5.4.6, PHP-8.3.3, Ruby-3.3.0, Tk-8.6.13, Io, Mono, OCaml, and R
Criterion (framework for tests) and Electric Fence
ghostscript-10.02.1 (for the ps2pdf command)
Install Graphviz by running the following commands:
sed -i '/LIBPOSTFIX="64"/s/64//' configure.ac && ./autogen.sh && ./configure --prefix=/usr \ --docdir=/usr/share/doc/graphviz-10.0.1
A warning is generated by autogen.sh because the build tree is not a git repository. As a result, the build date is set to 0. To get a meaningful date in the version string, you can run:
sed -i "s/0/$(date +%Y%m%d)/" builddate.h
Whether or not you fix the date, proceed to compile the package:
make
This package does not come with a test suite that provides meaningful results.
Now, as the root
user:
make install
sed ... configure.ac: This command is needed to avoid installing files in /usr/lib64.
--with-javaincludedir="$JAVA_HOME/include
-I$JAVA_HOME/include/linux"
: If you have built
OpenJDK-21.0.2 in /opt, and you want to
build the JAVA bindings, it is necessary to specify the
location of the JAVA header files to configure. The configure
switch is designed for only one directory, but two
directories need to be included. This is possible
nevertheless by using the -I switch inside the variable.
--with-webp
: Even if libwebp-1.3.2 is installed, it is not
included in the build without this option.
--with-smyrna
: Even if the needed
dependencies are installed, the interactive graph viewer
smyrna is not
built without this option.
There are no specific configuration requirements for
Graphviz. You may consider
installing the additional plugins and tools available from
the download page at https://graphviz.org/download/source/
for additional capabilities. If additional plugins are
installed, you can run dot
-c (as the root
user) to update the config
file in /usr/lib/graphviz
.
is a filter that takes a directed graph as input and outputs a copy of the graph with sufficient edges reversed to make the graph acyclic |
|
decomposes graphs into their biconnected components, printing the components to standard output |
|
decomposes graphs into their connected components, printing the components to standard output |
|
draws graphs using a circular layout |
|
takes a graph in DOT format as input, finds node clusters and then augments the graph with this information |
|
(needs GD Library) generates an image where each pixel is the difference between the corresponding pixel in each of the two source images |
|
reads a stream of graphs and for each computes the distance of every node from sourcenode |
|
draws directed graphs. It works well on DAGs and other graphs that can be drawn as hierarchies. It reads attributed graph files and writes drawings. By default, the output format dot is the input file with layout coordinates appended |
|
converts between graphs represented in GXL and in
the DOT language. Unless a conversion type is
specified using a flag, gxl2dot will
deduce the type of conversion from the suffix of
the input file, a |
|
performs edge coloring to disambiguate crossing edges |
|
draws undirected graphs using a “spring” model. It relies on a force-directed approach in the spirit of Fruchterman and Reingold |
|
is a graph analogue to wc in that it prints to standard output the number of nodes, edges, connected components or clusters contained in the input files. It also prints a total count for all graphs if more than one graph is given |
|
converts a graph specified in the GML format to a graph in the GV (formerly DOT) format |
|
converts a graph specified in the GRAPHML format to a graph in the GV (formerly DOT) format |
|
converts a graph specified in the GV format to a graph in the GML format |
|
converts a graph specified in the GV format to a graph in the GXL format |
|
is a filter that sets node colors from initial seed values. Colors flow along edges from tail to head, and are averaged (as HSB vectors) at nodes |
|
provides a simple graph editor and viewer. It allows many graphs to be viewed at the same time. The text of each graph is displayed in its own text window |
|
generates a variety of simple, regularly-structured abstract graphs |
|
takes as input a graph in DOT format, finds node clusters and produces a rendering of the graph as a geographic-style map, with clusters highlighted, in xdot format |
|
is a pipeline for running gvmap |
|
reads in a stream of graphs, combines the graphs into a single layout, and produces a single graph serving as the union of the input graphs |
|
is a graph stream editor inspired by awk. It copies input graphs to its output, possibly transforming their structure and attributes, creating new graphs, or printing arbitrary information |
|
converts between graphs represented in GXL and in
the DOT language. Unless a conversion type is
specified using a flag, gxl2dot will
deduce the type of conversion from the suffix of
the input file, a |
|
converts between graphs represented in GXL and in the GV language |
|
converts a sparse matrix of the Matrix Market format to a graph in the GV (formerly DOT) format |
|
draws undirected graphs using “spring” models. Input files must be formatted in the dot attributed graph language. By default, the output of neato is the input graph with layout coordinates appended |
|
reads a stream of graphs and prints each in pretty-printed (canonical) format on stdout. If no files are given, it reads from stdin |
|
draws clustered graphs. It takes any graph in DOT format as input |
|
draws clustered graphs using a squarified treemap layout. It takes any graph in DOT format as input |
|
reads directed graphs in the same format used by dot and removes subgraphs rooted at nodes specified on the command line via options |
|
decomposes digraphs into strongly connected components and an auxiliary map of the relationship between components. In this map, each component is collapsed into a node. The resulting graphs are printed to stdout |
|
draws undirected graphs using the “spring” model, but it uses a multi-scale approach to produce layouts of large graphs in a reasonably short time |
|
computes the transitive reduction of directed graphs, and prints the resulting graphs to standard output. This removes edges implied by transitivity. Nodes and subgraphs are not otherwise affected |
|
draws graphs using a radial layout. Basically, one node is chosen as the center and put at the origin. The remaining nodes are placed on a sequence of concentric circles centered about the origin, each a fixed radial distance from the previous circle |
|
is a preprocessor to dot that is used to improve the aspect ratio of graphs having many leaves or disconnected nodes. The usual layout for such a graph is generally very wide or tall |
|
is a simple script which launches the gvim or vim editor along with a GUI window showing the dot output of the edited file |
|
manages run-time dictionaries using standard container data types: unordered set/multiset, ordered set/multiset, list, stack, and queue |
|
supports graph programming by maintaining graphs in memory and reading and writing graph files. Graphs are composed of nodes, edges, and nested subgraphs |
|
provides a context for applications wishing to manipulate and render graphs. It provides command line parsing interfaces, common rendering code, and a plugin mechanism for renderers |
|
contains functions to find the shortest path between two points in a simple polygon |
|
provides support for parsing and deparsing graphical operations specified by the xdot language |
The GTK-Doc package contains a code documenter. This is useful for extracting specially formatted comments from the code to create API documentation. This package is optional; if it is not installed, packages will not build the documentation. This does not mean that you will not have any documentation. If GTK-Doc is not available, the install process will copy any pre-built documentation to your system.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/gtk-doc/1.33/gtk-doc-1.33.2.tar.xz
Download MD5 sum: ea6563421abe964d02135ca0d5b8dd8e
Download size: 496 KB
Estimated disk space required: 13 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
docbook-xml-4.5, docbook-xsl-nons-1.79.2, itstool-2.0.7, and libxslt-1.1.39
Pygments-2.17.2 at run time
For tests: dblatex or fop-2.9 (XML PDF support), GLib-2.78.4, Which-2.21, and Python modules lxml-4.9.4, parameterized, and yelp-tools
The optional python modules above can be easily installed with the pip3 command.
Install GTK-Doc by running the following commands:
autoreconf -fiv && ./configure --prefix=/usr && make
The test suite will hang if the package (or a previous version) is not already installed.
Now, as the root
user:
make install
To test the results, issue: make check. Some tests will fail depending on optionally installed packages.
Highlight is an utility that converts source code to formatted text with syntax highlighting.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://www.andre-simon.de/zip/highlight-4.10.tar.bz2
Download MD5 sum: 187a16136f7aa4310e57eecb994b7ac4
Download size: 1.4 MB
Estimated disk space required: 24 MB (with gui)
Estimated build time: 0.3 SBU (Using parallelism=4; with gui)
(Qt-5.15.12 or qt-alternate-5.15.12) (to build the GUI front-end)
For consistency, do not compress man pages.
sed -i '/GZIP/s/^/#/' makefile
To build Highlight run the following command:
make
To build the Qt5 GUI front-end, run the following command:
make doc_dir=/usr/share/doc/highlight-4.10/ gui
This package does not come with a test suite.
To install Highlight, run
the following command as the root
user:
make doc_dir=/usr/share/doc/highlight-4.10/ install
To install the GUI program, run the following command as the
root
user:
make install-gui
doc_dir=/usr/share/doc/highlight-4.10/
:
installs the highlight documentation into a versioned
directory. This parameter is also needed for make gui, because its value
would be hardcoded into the gui executable. Note that the
trailing “/” is necessary.
ibus is an Intelligent Input Bus. It is a new input framework for the Linux OS. It provides a fully featured and user friendly input method user interface.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/ibus/ibus/archive/refs/tags/1.5.29/ibus-1.5.29.tar.gz
Download MD5 sum: 2e29a7fb0f8c5ffcf42462fda45348fd
Download size: 1.4 MB
Estimated disk space required: 54 MB (add 3 MB for tests)
Estimated build time: 0.3 SBU (Using parallelism=4; add 0.6 SBU for tests)
Unicode Character Database: https://www.unicode.org/Public/zipped/15.1.0/UCD.zip
DConf-0.40.0, ISO Codes-4.16.0, and Vala-0.56.14
gobject-introspection-1.78.1, GTK+-3.24.41, and libnotify-0.8.3
GTK-4.12.5 (to build IM module for it), GTK-Doc-1.33.2 (for generating API documentation), D-Bus Python-1.3.2 and PyGObject-3.46.0 (both to build the Python support library), libxkbcommon-1.6.0, Wayland-1.22.0 (both to build the Wayland support programs), EmojiOne, and libdbusmenu
First, install the Unicode Character Database as the
root
user:
mkdir -p /usr/share/unicode/ucd && unzip -o ../UCD.zip -d /usr/share/unicode/ucd
Fix an issue with deprecated schema entries:
sed -e 's@/desktop/ibus@/org/freedesktop/ibus@g' \ -i data/dconf/org.freedesktop.ibus.gschema.xml
If GTK-Doc-1.33.2 is not installed, remove the references to it:
if ! [ -e /usr/bin/gtkdocize ]; then sed '/docs/d;/GTK_DOC/d' -i Makefile.am configure.ac fi
Install ibus by running the following commands:
SAVE_DIST_FILES=1 NOCONFIGURE=1 ./autogen.sh && PYTHON=python3 \ ./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-python2 \ --disable-appindicator \ --disable-emoji-dict \ --disable-gtk2 \ --disable-systemd-services && make
To test the results, issue: make -k check. The test named ibus-compose fails because it uses some locales not installed in LFS. The test named ibus-keypress will fail if running in a Wayland session.
Now, as the root
user:
make install
--disable-appindicator
: This
switch disables use of libdbusmenu. Omit if you installed the
optional dependency.
--disable-emoji-dict
:
This switch disables the use of emoticon dictionaries. Omit
if you installed the optional package.
--disable-gtk2
: This
switch removes the dependency on GTK+-2.
--enable-gtk4
: This switch
enables building the GTK 4
immodule. Use it if you have installed GTK 4.
--enable-python-library
: This
switch enables building the Python support library. Use it if you
have installed the optional Python modules.
--enable-wayland
: This switch
enables building the Wayland
support programs. It's automatically enabled if both
libxkbcommon-1.6.0 and Wayland-1.22.0 are installed.
NOCONFIGURE=1
: Prevent
autogen.sh from
running the generated configure script. We'll run
the script manually instead of relying on autogen.sh to run it,
because autogen.sh would set
-fsanitize=address
-fsanitize=leak
in CFLAGS
running configure, but those
compiler options are not suitable for productive use and they
may also cause a build failure.
PYTHON=python3
: This environment
variable makes the configure script look for
Python 3. Use it if you want
to build the Python 3
support library.
SAVE_DIST_FILES=1
: This
environment variable makes the autogen.sh script save some
pre-generated header files instead of overwriting them when
it is run. This prevents build failures when generating
ibusemojigen.h
.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
If GTK+-3 or GTK+-2 are installed and --disable-gtk{3,2}
are not used, the ibus IM
module for GTK+-3 or GTK+-2 will be installed. As the
root
user, update a cache
file of GTK+-3 or GTK+-2 so the GTK-based applications can
find the newly installed IM module and use ibus as an input
method:
gtk-query-immodules-3.0 --update-cache
The command above updates the cache file for GTK+-3. For GTK+-2, use gtk-query-immodules-2.0 instead of gtk-query-immodules-3.0. GTK-4 does not require a cache file for IM modules.
ImageMagick is a collection of tools and libraries to read, write, and manipulate an image in various image formats. Image processing operations are available from the command line. Bindings for Perl and C++ are also available.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.imagemagick.org/archive/releases/ImageMagick-7.1.1-28.tar.xz
Download MD5 sum: 954931222003bbc79c976db4d79e934c
Download size: 11 MB
Estimated disk space required: 210 MB, 45 MB installed (with typical dependencies; add 10 MB for checks)
Estimated build time: 0.7 SBU (with typical dependencies; add 0.7 SBU for checks, both using parallelism=4)
The ImageMagick source releases are updated frequently and the version shown above may no longer be available from the download locations. You can download a more recent version and use the existing BLFS instructions to install it. Chances are that it will work just fine, but this has not been tested by the BLFS team. If the package version shown above is not available from the locations shown above, you can download it from the BLFS package server at Oregon State University: https://ftp.osuosl.org/pub/blfs/conglomeration/ImageMagick/.
The optional dependencies listed below should be installed if
you need support for the specific format or the conversion
tool the dependency provides. Additional information about
the dependencies can be found in the Install-unix.txt
file located in the source
tree as well as issuing the ./configure --help command.
A summary of this information, as well as some additional
notes can be viewed on-line at https://imagemagick.org/script/install-source.php.
Clang from LLVM-17.0.6, Cups-2.4.7, cURL-8.6.0, FFmpeg-6.1.1, fftw-3.3.10, p7zip-17.04 (LZMA), SANE-1.2.1, Wget-1.21.4, xdg-utils-1.2.1, xterm-390, Dmalloc, Electric Fence and PGP or GnuPG-2.4.4 (you'll have to do some hacking to use GnuPG), Profiles
JasPer-4.2.0, Little CMS-2.14, libgxps-0.3.2, libjpeg-turbo-3.0.1, libpng-1.6.42, libraw-0.21.2 (for dng files, needs the thread-safe libraw_r), librsvg-2.57.1, libtiff-4.6.0, libwebp-1.3.2, OpenJPEG-2.5.0, Pango-1.51.2, DjVuLibre, FlashPIX (libfpx), FLIF, JBIG-KIT, libheif with libde265 (both needed if converting macOS heic images), libjxl, libraqm, Liquid Rescale, OpenEXR, and RALCGM (or ralcgm)
Dejavu fonts, ghostscript-10.02.1, Gimp-2.10.36, Graphviz-10.0.1, Inkscape-1.3.2, Blender, corefonts, GhostPCL, Gnuplot, POV-Ray, and Radiance
Enscript-1.6.6, Potrace-1.16, texlive-20230313 (or install-tl-unx) AutoTrace, GeoExpress Command Line Utilities, AKA MrSID Utilities (binary package), hp2xx, libwmf, UniConvertor, and Utah Raster Toolkit (or URT-3.1b)
Install ImageMagick by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --enable-hdri \ --with-modules \ --with-perl \ --disable-static && make
Now, as the root
user:
make DOCUMENTATION_PATH=/usr/share/doc/imagemagick-7.1.1 install
To test the installation, issue: make check. Note that the EPS, PS, and PDF tests require a working Ghostscript. One test in 'make check' needs “Helvetica” from “Ghostscript Standard Fonts”, which are optionally installed in ghostscript-10.02.1 - that test, and one other, might fail, but all the validation can still pass.
--enable-hdri
:
Enables building of a high dynamic range version of
ImageMagick.
--with-modules
:
Enables support for dynamically loadable modules.
--with-perl
: Enables
building and installing of PerlMagick.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-fftw
: Enables support for
the FFTW shared library.
--with-rsvg
: Enables support for
the librsvg library.
--with-autotrace
: Enables support
for the Autotrace library.
--with-wmf
: Enables support for
the libwmf library.
--with-gvc
: Enables support for
GraphViz.
--with-security-policy=open|limited|secure|websafe
:
If you wish to enforce a policy other than the default 'open'
see www/security-policy.html
in
the source for details.
--with-windows-font-dir=
:
This option specifies the directory where the Windows
CoreFonts are installed.
<Some/Directory>
--with-dejavu-font-dir=
:
This option specifies the directory where the DejaVu fonts
are installed.
<Some/Directory>
The options and parameters listed above are the only ones you should have to pass to the configure script to activate all the delegate dependencies. All other dependencies will be automatically detected and utilized in the build if they are installed.
animates a sequence of images |
|
compares an image to a reconstructed image |
|
composites various images into the given base image |
|
processes a MSL script to create an image |
|
converts image(s) from one format to another |
|
displays an image |
|
describes the format and characteristics of an image file |
|
captures an X window |
|
convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample and much more |
|
show information about the installed versions of the ImageMagick libraries |
|
transforms an image |
|
composites various images into a new image |
|
streams one or more pixel components of an image or portion of the image to your choice of storage formats |
|
allows the reading, manipulation and writing of a
large number of image file formats using the
ImageMagick
library. Run make in the
|
|
provides the C API for ImageMagick |
|
is the recommended C API for ImageMagick. Unlike the MagickCore API it uses only a few opaque types |
|
provides the C++ API for ImageMagick |
The ISO Codes package contains a list of country, language and currency names and it is used as a central database for accessing this data.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.debian.org/debian/pool/main/i/iso-codes/iso-codes_4.16.0.orig.tar.xz
Download MD5 sum: 5760b5a359301397cc3ab2baa165c31c
Download size: 3.7 MB
Estimated disk space required: 95 MB
Estimated build time: 0.1 SBU (with tests)
The directory is called iso-codes-4.16.0.
Install ISO Codes by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
If you install ISO codes over a previous installed version, the install step will fail when creating some symlinks. In order to properly update them, run:
sed -i '/^LN_S/s/s/sfvn/' */Makefile
Now, as the root
user:
make install
The lsof package is useful to LiSt Open Files for a given running application or process.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lsof-org/lsof/releases/download/4.99.0/lsof-4.99.0.tar.gz
Download MD5 sum: 8c858675f6d6e137df9b4e26ad6c46e8
Download size: 1.1 MB
Estimated disk space required: 14 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Nmap-7.94
(with a symbolic link nc pointing to ncat in /usr/bin
; used in tests)
To run the tests, the following option should be enabled in the kernel configuration:
General setup ---> [*] POSIX Message Queues [POSIX_MQUEUE]
Install lsof by running the following commands:
./configure --prefix=/usr --disable-static && make
The tests should be run as the root
user. They require that the POSIX
message queues are enabled in the kernel, and that Nmap-7.94 be
installed with a symbolic link /usr/bin/nc
pointing to ncat.
make check
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
mandoc is an utility to format manual pages.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://mandoc.bsd.lv/snapshots/mandoc-1.14.6.tar.gz
Download MD5 sum: f0adf24e8fdef5f3e332191f653e422a
Download size: 684 KB
Estimated disk space required: 22 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Many utilities provided by mandoc conflicts with Man-DB in LFS. Only build the mandoc command:
./configure && make mandoc
To test the package, issue: make regress.
Now, as the root
user:
install -vm755 mandoc /usr/bin && install -vm644 mandoc.1 /usr/share/man/man1
The PIN-Entry package contains a collection of simple PIN or pass-phrase entry dialogs which utilize the Assuan protocol as described by the Ägypten project. PIN-Entry programs are usually invoked by the gpg-agent daemon, but can be run from the command line as well. There are programs for various text-based and GUI environments, including interfaces designed for Ncurses (text-based), and for the common GTK and Qt toolkits.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.2.1.tar.bz2
Download MD5 sum: be9b0d4bb493a139d2ec20e9b6872d37
Download size: 536 KB
Estimated disk space required: 5.6 MB
Estimated build time: less than 0.1 SBU
libassuan-2.5.6 and libgpg-error-1.47
Emacs-29.2, FLTK-1.3.9, Gcr-3.41.2, GTK+-2.24.33, KDE Frameworks-5.115.0 (or kwayland-5.115.0 for lxqt), libsecret-0.21.3, (Qt-5.15.12 or qt-alternate-5.15.12), and efl
Install PIN-Entry by running the following commands:
./configure --prefix=/usr --enable-pinentry-tty && make
This package does not come with a test suite.
Now, as the root
user:
make install
--enable-inside-emacs=yes/no
:
Default is no.
--enable-pinentry-qt=yes/no
:
Default is yes.
--enable-pinentry-gtk2=yes/no
:
Default is yes. Even if other pinentry-* is installed,
pinentry will
be a symlink to pinentry-gtk-2.
--enable-pinentry-gnome3=yes/no
:
Default is yes. Actually, it uses Gcr for the pinentry dialog.
--enable-pinentry-tty
: Default
is 'maybe'.
is a symbolic link to the default PIN-Entry program |
|
is an Ncurses text-based PIN-Entry helper program |
|
is an Emacs version of the PIN-Entry helper program |
|
is a FLTK PIN-Entry helper program |
|
is a GNOME-3 PIN-Entry helper program |
|
is a GTK+2 PIN-Entry helper program |
|
is a Qt4 or 5 PIN-Entry helper program |
|
is a tty PIN-Entry helper program |
Screen is a terminal multiplexor that runs several separate processes, typically interactive shells, on a single physical character-based terminal. Each virtual terminal emulates a DEC VT100 plus several ANSI X3.64 and ISO 2022 functions and also provides configurable input and output translation, serial port support, configurable logging, multi-user support, and many character encodings, including UTF-8. Screen sessions can be detached and resumed later on a different terminal.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/screen/screen-4.9.1.tar.gz
Download MD5 sum: 9a9bdc956bd93e4f0cb9e48678889e26
Download size: 1020 KB
Estimated disk space required: 9.5 MB
Estimated build time: 0.1 SBU
Install Screen by running the following commands:
sh autogen.sh && ./configure --prefix=/usr \ --infodir=/usr/share/info \ --mandir=/usr/share/man \ --with-socket-dir=/run/screen \ --with-pty-group=5 \ --with-sys-screenrc=/etc/screenrc && sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/* && make
This package does not come with a test suite.
Now, as the root
user:
make install && install -m 644 etc/etcscreenrc /etc/screenrc
--with-socket-dir=/run/screen
:
This option places the per-user sockets in a standard
location.
--with-sys-screenrc=/etc/screenrc
:
This option places the global screenrc file in /etc
.
--with-pty-group=5
:
This option sets the gid to the value used by LFS.
sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/*: This command corrects the configuration and documentation files to the location that is used here for the global screenrc file.
The Shared Mime Info package contains a MIME database. This allows central updates of MIME information for all supporting applications.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.4/shared-mime-info-2.4.tar.gz
Download MD5 sum: aac56db912b7b12a04fb0018e28f2f36
Download size: 7.5 MB
Estimated disk space required: 26 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Optional download, required to run the test suite: https://anduin.linuxfromscratch.org/BLFS/xdgmime/xdgmime.tar.xz
xdgmime md5sum: 7dfb4446705d345d3acd672024049e86
GLib-2.78.4 and libxml2-2.12.5
Install Shared Mime Info by running the following commands:
If you wish to run the test suite, you must first extract the
xdgmime
tarball into the
current directory, and compile it so that meson can find it:
tar -xf ../xdgmime.tar.xz && make -C xdgmime
Now build the package:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release -Dupdate-mimedb=true .. && ninja
If you have followed the instructions above to build xdgmime, to test the result issue ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dupdate-mimedb=true
:
This parameter tells the build system to run update-mime-database during
installation. Otherwise, this must be done manually in order
to be able to use the MIME database.
The Sharutils package contains utilities that can create 'shell' archives.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/sharutils/sharutils-4.15.2.tar.xz
Download MD5 sum: 5975ce21da36491d7aa6dc2b0d9788e0
Download size: 1.1 MB
Estimated disk space required: 22 MB (with the test suite)
Estimated build time: 0.4 SBU (with the test suite)
Fix a heap buffer overflow, and an issue exposed by GCC-10:
sed -i 's/BUFSIZ/rw_base_size/' src/unshar.c && sed -i '/program_name/s/^/extern /' src/*opts.h
Install Sharutils by running the following commands:
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c && echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h && ./configure --prefix=/usr && make
To test the results, issue make check.
Now, as the root
user:
make install
creates "shell archives" (or shar files) which are in text format and can be mailed |
|
unpacks a shar file |
|
reads a file (or by default the standard input) and writes an encoded version to the standard output. The encoding uses only printing ASCII characters |
|
reads a file (or by default the standard input) and decodes the uuencoded version to the standard output |
Telepathy Mission Control is an account manager and channel dispatcher for the Telepathy framework, allowing user interfaces and other clients to share connections to real-time communication services without conflicting.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://telepathy.freedesktop.org/releases/telepathy-mission-control/telepathy-mission-control-5.16.6.tar.gz
Download MD5 sum: 911e990c7755eb98a8022223f649405d
Download size: 1.1 MB
Estimated disk space required: 28 MB
Estimated build time: 0.2 SBU
D-Bus Python-1.3.2 (for the “twisted” tests), GTK-Doc-1.33.2, UPower-1.90.2, and Twisted (for the “twisted” tests)
Install Telepathy Mission Control by running the following commands:
PYTHON=python3 \ ./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
PYTHON=python3: prevents using Python2 if it is installed.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
is a command line tool used to manipulate Mission Control accounts |
|
waits for a D-Bus bus name that will be provided automatically by the desktop session |
|
is a D-Bus service which runs on the session bus to implement AccountManager and ChannelDispatcher services described in the Telepathy D-Bus specification |
|
contains Telepathy Mission Control plugin API functions |
The Tidy HTML5 package contains a command line tool and libraries used to read HTML, XHTML and XML files and write cleaned up markup. It detects and corrects many common coding errors and strives to produce visually equivalent markup that is both W3C compliant and compatible with most browsers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/htacg/tidy-html5/archive/5.8.0/tidy-html5-5.8.0.tar.gz
Download MD5 sum: 0f6c55ef651e258adbe5750f555af50f
Download size: 992 KB
Estimated disk space required: 11 MB
Estimated build time: 0.2 SBU
Install Tidy HTML5 by running the following commands:
cd build/cmake && cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TAB2SPACE=ON \ ../.. && make
This package does not come with a test suite.
Now, as the root
user:
make install && rm -fv /usr/lib/libtidy.a && install -v -m755 tab2space /usr/bin
-DCMAKE_BUILD_TYPE=Release
:
This switch is used to build the release library without any
debug `assert` in the code.
-DBUILD_TAB2SPACE=ON
:
This switch is used to enable building the tab2space utility.
The time utility is a program that measures many of the CPU resources, such as time and memory, that other programs use. The GNU version can format the output in arbitrary ways by using a printf-style format string to include various resource measurements.
Although the shell has a builtin command providing similar functionalities, this utility is required by the LSB.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/time/time-1.9.tar.gz
Download MD5 sum: d2356e0fe1c0b85285d83c6b2ad51b5f
Download size: 584 KB
Estimated disk space required: 4.0 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install Time by running the following commands:
./configure --prefix=/usr && make
To test the results, issue: make check.
Now, as the root
user:
make install
The tree application is useful to display a dictionary tree's contents, including files, directories, and links.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.bz2
Download MD5 sum: 85f9a6d1e48f1d5262a9b2d58d47431f
Download size: 52 KB
Estimated disk space required: 732 KB
Estimated build time: less than 0.1 SBU
Install tree by running the following commands:
make
This package does not come with a test suite.
Now, as the root
user:
make PREFIX=/usr MANDIR=/usr/share/man install
The unixODBC package is an Open Source ODBC (Open DataBase Connectivity) sub-system and an ODBC SDK for Linux, Mac OSX, and UNIX. ODBC is an open specification for providing application developers with a predictable API with which to access data sources. Data sources include optional SQL Servers and any data source with an ODBC Driver. unixODBC contains the following components used to assist with the manipulation of ODBC data sources: a driver manager, an installer library and command line tool, command line tools to help install a driver and work with SQL, drivers and driver setup libraries.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lurcher/unixODBC/releases/download/2.3.12/unixODBC-2.3.12.tar.gz
Download MD5 sum: d62167d85bcb459c200c0e4b5a63ee48
Download size: 1.7 MB
Estimated disk space required: 28 MB
Estimated build time: 0.2 SBU (using parallelism=4)
Install unixODBC by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc/unixODBC && make
This package does not come with a test suite.
Now, as the root
user:
make install && find doc -name "Makefile*" -delete && chmod 644 doc/{lst,ProgrammerManual/Tutorial}/* && install -v -m755 -d /usr/share/doc/unixODBC-2.3.12 && cp -v -R doc/* /usr/share/doc/unixODBC-2.3.12
--enable-drivers
: This parameter
enables building the drivers that were installed by default
in previous versions.
--enable-drivers-conf
: This
parameter enables building the driver configuration libraries
that were installed by default in previous versions.
The files in /etc/unixODBC
are meant to be configured by the system administrator (or
the ODBC site administrator if appropriate privileges are
granted to /etc/unixODBC
).
These files are not meant to be directly edited. The ODBC
installer library is responsible for reading and writing
the unixODBC config files.
Unfortunately, there are not many man, or any info pages for the
various programs available in the unixODBC package. Along with the
information in the “Short Descriptions” below and the
documentation installed in /usr/share/doc/unixODBC-2.3.12
, there are
many README
files throughout
the source tree where the use and functionality of the
programs can be found. Additionally, you can use the
parameter -?
for syntax and
usage information. Lastly, the unixODBC web site at http://www.unixodbc.org/ has
very good information.
is a utility used to check a shared library to see if it can be loaded and if a given symbol exists in it |
|
is a utility which can be used to submit SQL to a data source and to format/output results. It can be used in batch or interactive mode |
|
provides the same functionality as the isql program |
|
is used to find out details about the installation of the unixODBC package |
|
is a utility created for install script/RPM
writers. It is a command line interface to key
functionality in the |
|
is a utility which attempts to check whether an ODBC driver was built with 32-bit or 64-bit SQLLEN types |
The xdg-dbus-proxy package contains a filtering proxy for D-Bus connections. This is useful for forwarding data in and out of a sandbox.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/flatpak/xdg-dbus-proxy/releases/download/0.1.5/xdg-dbus-proxy-0.1.5.tar.xz
Download MD5 sum: b496f34b0fa4747a66eb5adb63b7d626
Download size: 124 KB
Estimated disk space required: 1.4 MB
Estimated build time: less than 0.1 SBU
Install xdg-dbus-proxy by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
To test the results, issue: ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
Xdg-user-dirs is a tool to help manage “well known” user directories like the desktop folder and the music folder. It also handles localization (i.e. translation) of the filenames.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://user-dirs.freedesktop.org/releases/xdg-user-dirs-0.18.tar.gz
Download MD5 sum: dc7decea7ffb58cd067eff1fe1798cae
Download size: 267 KB
Estimated disk space required: 3.0 MB
Estimated build time: less than 0.1 SBU
docbook-xml-4.5, docbook-xsl-nons-1.79.2, and libxslt-1.1.39 (all three for building the man pages)
Install xdg-user-dirs by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-documentation && make
This package does not come with a test suite.
Now, as the root
user:
make install
--disable-documentation
:
Disable the installation of the man pages. Remove this switch
if you've installed the optional dependencies and you wish to
install the man pages of this package.
This chapter contains mainly hardware utilities. It also contains some applications used by other applications in the book for installation or configuration purposes.
The AccountsService package provides a set of D-Bus interfaces for querying and manipulating user account information and an implementation of those interfaces based on the usermod(8), useradd(8), and userdel(8) commands.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/accountsservice/accountsservice-23.13.9.tar.xz
Download MD5 sum: 03dccfe1b306b7ca19743e86d118e64d
Download size: 621 KB
Estimated disk space required: 9.8 MB (add 0.5 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
gobject-introspection-1.78.1, elogind-252.9 , and Vala-0.56.14
GTK-Doc-1.33.2 and xmlto-0.0.28
First, rename a directory whose presence prevents the build system from running if dbusmock-0.30.2 is not installed:
mv tests/dbusmock{,-tests}
Then fix a test script so that the new directory is found, and adapt it for Python 3.12.0 or later:
sed -e '/accounts_service\.py/s/dbusmock/dbusmock-tests/' \ -e 's/assertEquals/assertEqual/' \ -i tests/test-libaccountsservice.py
Fix one test that fails if the en_IE.UTF-8
locale is not installed:
sed -i '/^SIMULATED_SYSTEM_LOCALE/s/en_IE.UTF-8/en_HK.iso88591/' tests/test-daemon.py
Install AccountsService by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dadmin_group=adm \ -Delogind=true \ -Dsystemdsystemunitdir=no && ninja
To test the package, issue ninja test.
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Dadmin_group=adm
:
This switch sets the group for administrator accounts.
-Ddocbook=true
: This switch
enables building the D-Bus interface API documentation (needs
xmlto-0.0.28).
-Dgtk_doc=true
: This switch
enables building the libaccountsservice API documentation
(needs GTK-Doc-1.33.2).
-Dvapi=false
: This switch
disables building the vala bindings. Use it if you have not
installed Vala-0.56.14.
To allow users in the adm group to be listed as
Administrators, execute the following commands as the
root
user:
cat > /etc/polkit-1/rules.d/40-adm.rules << "EOF"
polkit.addAdminRule(function(action, subject) {
return ["unix-group:adm"];
});
EOF
/usr/libexec
)
The acpid (Advanced Configuration and Power Interface event daemon) is a completely flexible, totally extensible daemon for delivering ACPI events. It listens on netlink interface and when an event occurs, executes programs to handle the event. The programs it executes are configured through a set of configuration files, which can be dropped into place by packages or by the user.
Some other packages may handle some ACPI events as well and
they may conflict with this package. For example,
elogind-252.9 (read the
documentation for Handle*=
in
logind.conf(5)
for details) and UPower-1.90.2 (used by many desktop
environments such as GNOME, KDE, and XFCE for handling ACPI
events). If you've installed such a package and it's enough
for your use case, this package is probably not needed. If
you really need this package, you must be careful
configuring it and the other packages handling ACPI events
to avoid conflicts. Notably, elogind-252.9 handles some ACPI
events by default, so the handling of these events by
elogind-252.9 should be disabled
first if handling these events with acpid (again, read
logind.conf(5)
for details).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/acpid2/acpid-2.0.34.tar.xz
Download MD5 sum: 988c2e3fd5ba0ea4492d3ba7273af295
Download size: 160 KB
Estimated disk space required: 1.9 MB
Estimated build time: less than 0.1 SBU
Install acpid by running the following commands:
./configure --prefix=/usr \ --docdir=/usr/share/doc/acpid-2.0.34 && make
This package does not come with a test suite.
Now, as the root
user:
make install && install -v -m755 -d /etc/acpi/events && cp -r samples /usr/share/doc/acpid-2.0.34
acpid is configured by user
defined events. Place event files under /etc/acpi/events
directory. If an event
occurs, acpid
recurses through the event files in order to see if the regex
defined after "event" matches. If they do, action is
executed.
The following brief example will suspend the system when the laptop lid is closed (it requires pm-utils-1.4.1). The example also disables the default handling of the lid close event by elogind-252.9 when the system is on battery and not connected to any external monitor, in order to avoid a conflict:
cat > /etc/acpi/events/lid << "EOF"event=button/lid action=/etc/acpi/lid.sh
EOF cat > /etc/acpi/lid.sh << "EOF"#!/bin/sh /bin/grep -q open /proc/acpi/button/lid/LID/state && exit 0 /usr/sbin/pm-suspend
EOF chmod +x /etc/acpi/lid.sh mkdir -pv /etc/elogind/logind.conf.d echoHandleLidSwitch=ignore
> /etc/elogind/logind.conf.d/acpi.conf
Unfortunately, not every computer labels ACPI events in the
same way (for example, the lid may be recognized as
LID0
instead of LID
). To determine how your buttons are
recognized, use the acpi_listen tool. Also,
look in the samples
directory
under /usr/share/doc/acpid-2.0.34
for more
examples.
To automatically start acpid when the system is
rebooted, install the /etc/rc.d/init.d/acpid
boot script from
the blfs-bootscripts-20240209 package.
make install-acpid
is a program that listens for ACPI events and executes the rules that match the received event |
|
is a simple tool which connects to acpid and listens for events |
|
is a monitor program that connects to three sources of ACPI events (events file, netlink and input layer) and then reports on what it sees while it is connected |
The at package provides delayed job execution and batch processing. It is required for Linux Standards Base (LSB) conformance.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/at/at_3.2.5.orig.tar.gz
Download MD5 sum: ca3657a1c90d7c3d252e0bc17feddc6e
Download size: 130 KB
Estimated disk space required: 1.9 MB (including tests)
Estimated build time: less than 0.1 SBU
An MTA
Before building at, as the
root
user you should create
the group and user atd
which
will run the atd daemon:
groupadd -g 17 atd && useradd -d /dev/null -c "atd daemon" -g atd -s /bin/false -u 17 atd
Install at with the following commands:
./configure --with-daemon_username=atd \ --with-daemon_groupname=atd \ --with-jobdir=/var/spool/atjobs \ --with-atspool=/var/spool/atspool \ SENDMAIL=/usr/sbin/sendmail && make -j1
To test the results, issue: make test.
Now, as the root
user:
make install docdir=/usr/share/doc/at-3.2.5 \ atdocdir=/usr/share/doc/at-3.2.5
If At has been built with Linux PAM support, you need to create a PAM configuration file, to get it working correctly with BLFS.
Issue the following commands as the root
user to create the configuration
file for Linux PAM:
cat > /etc/pam.d/atd << "EOF"
# Begin /etc/pam.d/atd
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
# End /etc/pam.d/atd
EOF
Install the /etc/init.d/atd
init script from the blfs-bootscripts-20240209
package.
make install-atd
queues, examines or deletes jobs for later execution |
|
is the daemon that runs jobs queued for later execution |
|
lists the user's pending jobs, or all jobs, if superuser |
|
deletes jobs, identified by their job number |
|
runs jobs queued for later execution |
|
is a script that executes commands when system load levels permit |
Autofs controls the operation of the automount daemons. The automount daemons automatically mount filesystems when they are accessed and unmount them after a period of inactivity. This is done based on a set of pre-configured maps.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/daemons/autofs/v5/autofs-5.1.9.tar.xz
Download MD5 sum: 06fb59a03c82364a0d788435b6853d70
Download size: 328 KB
Estimated disk space required: 5.7 MB
Estimated build time: less than 0.1 SBU
libtirpc-1.3.4 and rpcsvc-proto-1.4.4
nfs-utils-2.6.4, libnsl-2.0.1, libxml2-2.12.5, MIT Kerberos V5-1.21.2, OpenLDAP-2.6.7 (client only), and Cyrus SASL-2.1.28
Verify that automounter kernel support has been enabled:
File systems ---> <*/M> Kernel automounter support (supports v3, v4 and v5) [AUTOFS_FS]
Optionally, enable the following options in the kernel configuration:
File systems ---> [*] Network File Systems ---> [NETWORK_FILESYSTEMS] <*/M> NFS client support [NFS_FS] <*/M> SMB3 and CIFS support (advanced network filesystem) [CIFS]
Recompile and install the new kernel, if necessary.
Install Autofs by running the following commands:
./configure --prefix=/usr \ --with-mapdir=/etc/autofs \ --with-libtirpc \ --without-openldap \ --mandir=/usr/share/man && make
This package does not come with a test suite.
Now, as the root
user:
make install
If autofs is already installed on your system, be sure to backup your configuration files. They'll be overwritten by the following command.
Install the default configuration files, still as the
root
user:
make install_samples
--with-libtirpc
: This
switch forces the package to use libtirpc for RPC
functionality instead of relying on implementation from
Glibc, which was removed in LFS 8.1.
--without-openldap
:
This switch disables openldap if found. If openldap is
desired, omit this switch. Note that openldap support in
autofs requires MIT Kerberos V5-1.21.2.
/etc/sysconfig/autofs.conf
,
/etc/autofs/auto.master
,
/etc/autofs/auto.misc
, and
/etc/autofs/auto.net
The installation process creates auto.master
, auto.misc
, auto.smb
, and auto.net
. Replace the auto.master
file with the following
commands as the root
user:
mv /etc/autofs/auto.master /etc/autofs/auto.master.bak &&
cat > /etc/autofs/auto.master << "EOF"
# Begin /etc/autofs/auto.master
/media/auto /etc/autofs/auto.misc --ghost
#/home /etc/autofs/auto.home
# End /etc/autofs/auto.master
EOF
This file creates a new media directory, /media/auto
that will overlay any
existing directory of the same name. In this example, the
file, /etc/autofs/auto.misc
,
has a line:
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
that will mount a cdrom as /media/auto/cd
if that directory is
accessed. The --ghost
option
tells the automounter to create “ghost” versions
(i.e. empty directories) of all the mount points listed in
the configuration file regardless whether any of the file
systems are actually mounted or not. This is very
convenient and highly recommended, because it will show you
the available auto-mountable file systems as existing
directories, even when their file systems aren't currently
mounted. Without the --ghost
option, you'll have to remember the names of the
directories. As soon as you try to access one of them, the
directory will be created and the file system will be
mounted. When the file system gets unmounted again, the
directory is destroyed too, unless the --ghost
option was given.
An alternative method would be to specify another
automount location such as /var/lib/auto/cdrom
and create a
symbolic link from /media/cdrom
to the automount location.
The auto.misc
file must be
configured to your working hardware. The loaded
configuration file should load your cdrom if /dev/cdrom
is active or it can be edited
to match your device setup. Examples for floppies are
available in the file and easily activated. Documentation
for this file is available using the man 5 autofs command.
In the second line, if enabled, a user's home directory
would be mounted via NFS upon login. The /etc/home.auto
would need to exist and
have an entry similar to:
joe example.org:/export/home/joe
where the directory /export/home/joe
is exported via NFS from
the system example.org. NFS shares are covered on the next
page.
This package could also be used to mount SMB shares, however that feature is not configured in these instructions. For additional configuration information, see the man pages for auto.master(5). There are also web resources such as this AUTOFS HOWTO available.
autofs installs its own boot script, but it has no capability for logging or visual conformance with other BLFS scripts. It will be replaced by an enhanced version.
Install the /etc/init.d/autofs
mount script included
with the blfs-bootscripts-20240209 package.
make install-autofs
The time-out variable is set in /etc/sysconfig/autofs.conf
. The installed
file sets a default of 60 seconds of inactivity before
unmounting the device. A much shorter time may be necessary
to protect buffer writing to a floppy if users tend to
remove the media prior to the timeout setting.
The BlueZ package contains the Bluetooth protocol stack for Linux.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/linux/bluetooth/bluez-5.72.tar.xz
Download MD5 sum: fcacd4d6d65f7da141977a2beb1ba78f
Download size: 2.3 MB
Estimated disk space required: 81 MB (add 84 MB for tests)
Estimated build time: 0.4 SBU (using parallelism=4; with tests)
dbus-1.14.10, GLib-2.78.4, and libical-3.0.17
docutils-0.20.1 (to generate man pages)
If you are building this package to use bluetooth devices (rather than as a build dependency), enable the following options in the kernel configuration, also the options in the “Cryptographic API” section if you intend to run the tests, and recompile the kernel if necessary:
General setup ---> # If it is disabled, [TIMERFD] and [EVENTFD] will be hidden and # enabled implicitly. We DO NOT recommend to enable [EXPERT] # unless you are really an expert user: [ /*] Configure standard kernel features (expert users) ---> [EXPERT] [*] Enable timerfd() system call [TIMERFD] [*] Enable eventfd() system call [EVENTFD] [*] Networking support ---> [NET] <*/M> Bluetooth subsystem support ---> [BT] [*] Bluetooth Classic (BR/EDR) features [BT_BREDR] <*/M> RFCOMM protocol support [BT_RFCOMM] [*] RFCOMM TTY support [BT_RFCOMM_TTY] <*/M> BNEP protocol support [BT_BNEP] [*] Multicast filter support [BT_BNEP_MC_FILTER] [*] Protocol filter support [BT_BNEP_PROTO_FILTER] <*/M> HIDP protocol support [BT_HIDP] Bluetooth device drivers ---> # Select the appropriate drivers for your bluetooth hardware. # There are more vendor-specific drivers not listed here: < /*/M> HCI USB driver [BT_HCIBTUSB] < /*/M> HCI SDIO driver [BT_HCIBTSDIO] < /*/M> HCI UART driver [BT_HCIUART] <*/M> RF switch subsystem support ---> [RFKILL] -*- Cryptographic API ---> [CRYPTO] Crypto core or helper ---> <*/M> Userspace cryptographic algorithm configuration [CRYPTO_USER] Block ciphers ---> <*/M> AES (Advanced Encryption Standard) [CRYPTO_AES] AEAD (authenticated encryption with associated data) ciphers ---> <*/M> CCM (Counter with Cipher Block Chaining-MAC) [CRYPTO_CCM] Hashes, digests, and MACs ---> <*/M> CMAC (Cipher-based MAC) [CRYPTO_CMAC] Userspace interface ---> <*/M> Hash algorithms [CRYPTO_USER_API_HASH] <*/M> Symmetric key cipher algorithms [CRYPTO_USER_API_SKCIPHER] <*/M> AEAD cipher algorithms [CRYPTO_USER_API_AEAD]
Now, make some changes needed for SystemV systems:
patch -Np1 -i ../bluez-5.72-obexd_without_systemd-1.patch
Install BlueZ by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --enable-library \ --disable-manpages \ --disable-systemd && make
To test the results, issue: make check
.
Now, as the root
user:
make install && ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin
Install the main configuration file as the root
user:
install -v -dm755 /etc/bluetooth && install -v -m644 src/main.conf /etc/bluetooth/main.conf
If desired, install the API documentation as the root
user:
install -v -dm755 /usr/share/doc/bluez-5.72 && install -v -m644 doc/*.txt /usr/share/doc/bluez-5.72
--disable-manpages
:
This switch disables generating the manual pages because of
the reliance on 'rst2man' in docutils. Remove this switch if
you have docutils-0.20.1 installed and wish to
generate the manual pages.
--enable-library
:
This switch enables building the BlueZ 4 compatibility library which is
required by some applications.
--disable-systemd
:
This switch is needed because systemd is not part of LFS/BLFS. If you
are using systemd, remove this switch.
ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin: This command makes access to the bluetooth daemon more convenient.
/etc/bluetooth/main.conf
is
installed automatically during the install. Additionally,
there are three supplementary configuration files.
/etc/sysconfig/bluetooth is installed as a part of the boot
script below. In addition, you optionally can install the
following, as the root
user:
cat > /etc/bluetooth/rfcomm.conf << "EOF"
# Start rfcomm.conf
# Set up the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.
# Use one line per command
# See the rfcomm man page for options
# End of rfcomm.conf
EOF
cat > /etc/bluetooth/uart.conf << "EOF"
# Start uart.conf
# Attach serial devices via UART HCI to BlueZ stack
# Use one line per device
# See the hciattach man page for options
# End of uart.conf
EOF
To automatically start the bluetoothd daemon when
the system is rebooted, install the /etc/rc.d/init.d/bluetooth
bootscript
from the blfs-bootscripts-20240209 package.
make install-bluetooth
is a Bluemoon configuration utility |
|
is the interactive Bluetooth control program |
|
is the Bluetooth daemon |
|
provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces |
|
is used to convert a file needed by Broadcom devices to hcd (Broadcom bluetooth firmware) format |
|
is used to send a L2CAP echo request to the Bluetooth MAC address given in dotted hex notation |
|
is a L2CAP testing program |
|
is used to test RFCOMM communications on the Bluetooth stack |
|
contains the BlueZ 4 API functions |
Bubblewrap is a setuid implementation of user namespaces, or sandboxing, that provides access to a subset of kernel user namespace features. Bubblewrap allows user owned processes to run in an isolated environment with limited access to the underlying filesystem.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/containers/bubblewrap/releases/download/v0.8.0/bubblewrap-0.8.0.tar.xz
Download MD5 sum: fc0e14bc26df76225e8f8cc2df9fb657
Download size: 148 KB
Estimated disk space required: 3.4 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
libxslt-1.1.39 (to generate manual pages) and libseccomp-2.5.5 (built with python bindings, for tests)
When this package began, upstream expected it could be installed suid-root. That was a long time ago, suid-root is generally considered a bad idea. As well as the default namespaces, this package requires the optional User namespace to be enabled. If that has not yet been enabled, select the following option in the kernel configuration and recompile the kernel:
General setup ---> -*- Namespaces support ---> [NAMESPACES] [*] User namespace [USER_NS]
Install Bubblewrap by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr --buildtype=release .. && ninja
Next, if you desire to run the test suite, fix an issue caused by the merged-/usr configuration in LFS:
sed 's@symlink usr/lib64@ro-bind-try /lib64@' -i ../tests/libtest.sh
To test the results, issue (as a user other than the
root
user): ninja test
Now, as the root
user:
ninja install
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
Colord is a system service that makes it easy to manage, install, and generate color profiles. It is used mainly by GNOME Color Manager for system integration and use when no users are logged in.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/colord/releases/colord-1.4.7.tar.xz
Download MD5 sum: 94bd795efa1931a34990345e4ac439a8
Download size: 1.7 MB
Estimated disk space required: 18 MB (with tests)
Estimated build time: 0.4 SBU (with tests)
dbus-1.14.10, GLib-2.78.4, Little CMS-2.14, Polkit-124, and SQLite-3.45.1
elogind-252.9, gobject-introspection-1.78.1, libgudev-238, libgusb-0.4.8, and Vala-0.56.14
gnome-desktop-44.0 and colord-gtk-0.3.1 (to build the example tools), DocBook-utils-0.6.14, GTK-Doc-1.33.2, libxslt-1.1.39, SANE-1.2.1, ArgyllCMS, and Bash Completion
There should be a dedicated user and group to take control of
the colord daemon after it has started. Issue the following
commands as the root
user:
groupadd -g 71 colord && useradd -c "Color Daemon Owner" -d /var/lib/colord -u 71 \ -g colord -s /bin/false colord
Install Colord by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Ddaemon_user=colord \ -Dvapi=true \ -Dsystemd=false \ -Dlibcolordcompat=true \ -Dargyllcms_sensor=false \ -Dbash_completion=false \ -Ddocs=false \ -Dman=false && ninja
Now, as the root
user:
ninja install
To test the results, issue: ninja test. One test,
colord-self-test-daemon
, will
fail if the package is already installed. The test suite must
be run with the system-wide D-Bus Daemon running.
--buildtype=release
:
Specify a buildtype suitable for stable releases of the
package, as the default may produce unoptimized binaries.
-Ddaemon_user=colord
:
This switch is used so the colord daemon will run as an
unprivileged user instead of the root
user.
-Dvapi=true
: This
switch enables building the Vala bindings. Remove if you don't have
Vala-0.56.14 installed.
-Dsystemd=false
: This
switch disables support for systemd login in Colord applications.
-Dlibcolordcompat=true
: This
switch enables building a compatibility library for older
packages that use Colord.
-Dargyllcms_sensor=false
: This
switch disables the ArgLLCMS sensor driver. Omit if you have
ArgyllCMS installed and wish
to use it.
-Dbash_completion=false
: This
switch disables Bash Completion support for Colord
applications.
-Ddocs=false
: This
switch disables building of documentation. Omit if you have
GTK-Doc-1.33.2 available.
-Dman=false
: This
switch disables building of man pages. Omit if you have
DocBook-utils-0.6.14 available.
Namespaced versions of the docbook-xsl stylesheets are also
required.
is the Color Manager Profile Creation Tool |
|
is a tool used to fix metadata in ICC profiles |
|
dumps the contents of an ICC profile as human readable text |
|
is the Color Manager Testing Tool |
|
is a text-mode program that allows you to interact with colord on the command line |
|
contains the Colord API functions |
|
contains legacy API functions for compatibility with older applications |
|
contains internal API functions for the programs included with Colord |
|
contains a simple display hardware colorimiter |
The cpio package contains tools for archiving.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.bz2
Download MD5 sum: 3394d444ca1905ea56c94b628b706a0b
Download size: 1.6 MB
Estimated disk space required: 21 MB (with tests and docs)
Estimated build time: 0.3 SBU (with tests and docs)
Install cpio by running the following commands:
./configure --prefix=/usr \ --enable-mt \ --with-rmt=/usr/libexec/rmt && make && makeinfo --html -o doc/html doc/cpio.texi && makeinfo --html --no-split -o doc/cpio.html doc/cpio.texi && makeinfo --plaintext -o doc/cpio.txt doc/cpio.texi
If you have texlive-20230313 installed and wish to create PDF or Postscript documentation, issue one or both of the following commands:
make -C doc pdf && make -C doc ps
To test the results, issue: make check.
Now, as the root
user:
make install && install -v -m755 -d /usr/share/doc/cpio-2.15/html && install -v -m644 doc/html/* \ /usr/share/doc/cpio-2.15/html && install -v -m644 doc/cpio.{html,txt} \ /usr/share/doc/cpio-2.15
If you built PDF or Postscript documentation, install it by
issuing the following commands as the root
user:
install -v -m644 doc/cpio.{pdf,ps,dvi} \ /usr/share/doc/cpio-2.15
--enable-mt
: This
parameter forces the building and installation of the
mt program.
--with-rmt=/usr/libexec/rmt
:
This parameter inhibits building the rmt program as it is
already installed by the Tar
package in LFS.
The cups-pk-helper package contains a PolicyKit helper used to configure Cups with fine-grained privileges.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/cups-pk-helper/releases/cups-pk-helper-0.2.7.tar.xz
Download MD5 sum: 0cdadec9ea8f88b7fc7af8ca206da2bd
Download size: 56 KB
Estimated disk space required: 5.3 MB
Estimated build time: 0.1 SBU
Cups-2.4.7 and Polkit-124
Install cups-pk-helper by running the following commands:
mkdir build && cd build && meson setup --prefix=/usr .. && ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install
D-Bus is a message bus system, a simple way for applications to talk to one another. D-Bus supplies both a system daemon (for events such as “new hardware device added” or “printer queue changed”) and a per-user-login-session daemon (for general IPC needs among user applications). Also, the message bus is built on top of a general one-to-one message passing framework, which can be used by any two applications to communicate directly (without going through the message bus daemon).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://dbus.freedesktop.org/releases/dbus/dbus-1.14.10.tar.xz
Download MD5 sum: 46070a3487817ff690981f8cd2ba9376
Download size: 1.3 MB
Estimated disk space required: 23 MB (add 25 MB for tests)
Estimated build time: 0.2 SBU (add 1.5 SBU for tests)
Xorg Libraries (for dbus-launch program)
For the tests: D-Bus Python-1.3.2, PyGObject-3.46.0, and Valgrind-3.22.0; for documentation: Doxygen-1.10.0, xmlto-0.0.28, Ducktype, and Yelp Tools
Install D-Bus by running the following commands (you may wish to review the output from ./configure --help first and add any desired parameters to the configure command shown below):
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --runstatedir=/run \ --disable-doxygen-docs \ --disable-xml-docs \ --disable-static \ --with-systemduserunitdir=no \ --with-systemdsystemunitdir=no \ --docdir=/usr/share/doc/dbus-1.14.10 \ --with-system-socket=/run/dbus/system_bus_socket && make
See below for test instructions.
Now, as the root
user:
make install
If you are using a DESTDIR install, dbus-daemon-launch-helper
needs to be fixed afterwards. Issue, as root
user:
chown -v root:messagebus /usr/libexec/dbus-daemon-launch-helper && chmod -v 4750 /usr/libexec/dbus-daemon-launch-helper
If you are still building your system in chroot or you did
not start the daemon yet, but you want to compile some
packages that require D-Bus,
generate the D-Bus UUID to
avoid warnings when compiling some packages with the
following command as the root
user:
dbus-uuidgen --ensure
If using elogind-252.9, create a symlink to the
/var/lib/dbus/machine-id
file:
ln -sfv /var/lib/dbus/machine-id /etc
Many tests are disabled unless both D-Bus Python-1.3.2 and PyGObject-3.46.0 have been installed. They must be run as an unprivileged user from a local session with bus address. To run the standard tests issue make check.
If you want to run the unit regression tests, configure requires additional parameters which expose additional functionality in the binaries that are not intended to be used in a production build of D-Bus. If you would like to run the tests, issue the following commands (for the tests, you don't need to build the docs):
make distclean && PYTHON=python3 ./configure --enable-tests \ --enable-asserts \ --disable-doxygen-docs \ --disable-xml-docs && make && make check
One test, test-autolaunch, is known to fail. There have also been reports that the tests may fail if running inside a Midnight Commander shell. You may get out-of-memory error messages when running the tests. These are normal and can be safely ignored.
--disable-doxygen-docs
: This
switch disables doxygen documentation build and install, if
you have doxygen installed.
If doxygen is installed, and
you wish to build them, remove this parameter.
--disable-xml-docs
:
This switch disables html documentation build and install, if
you have xmlto installed. If
xmlto is installed, and you
wish to build them, remove this parameter.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-systemd{user,system}unitdir=no
:
These switches disable installation of systemd units on
elogind based systems.
--with-system-socket=/run/dbus/system_bus_socket
:
This parameter specifies the location of the system bus
socket.
--enable-tests
:
Builds extra parts of the code to support all tests. Do not
use on a production build.
--enable-embedded-tests
: Builds
extra parts of the code to support only unit tests. Do not
use on a production build.
--enable-asserts
:
Enables debugging code to run assertions for statements
normally assumed to be true. This prevents a warning that
'--enable-tests
' on
its own is only useful for profiling and might not give true
results for all tests, but adds its own NOTE that this should
not be used in a production build.
The configuration files listed above should probably not be
modified. If changes are required, you should create
/etc/dbus-1/session-local.conf
and/or
/etc/dbus-1/system-local.conf
and make any desired changes to these files.
If any packages install a D-Bus .service
file outside of the standard
/usr/share/dbus-1/services
directory, that directory should be added to the local
session configuration. For instance, /usr/local/share/dbus-1/services
can be
added by performing the following commands as the
root
user:
cat > /etc/dbus-1/session-local.conf << "EOF"
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Search for .service files in /usr/local -->
<servicedir>/usr/local/share/dbus-1/services</servicedir>
</busconfig>
EOF
To automatically start dbus-daemon when the
system is rebooted, install the /etc/rc.d/init.d/dbus
bootscript from the
blfs-bootscripts-20240209 package.
make install-dbus
If this is the first time to install D-Bus on the system and you are not operating in a chroot environment, you can immediately start dbus-daemon without rebooting the system:
/etc/init.d/dbus start
Note that this boot script only starts the system-wide D-Bus daemon. Each user requiring access to D-Bus services will also need to run a session daemon as well. There are many methods you can use to start a session daemon using the dbus-launch command. Review the dbus-launch man page for details about the available parameters and options. Here are some suggestions and examples:
Add dbus-launch to the
line in the ~/.xinitrc
file that starts your graphical desktop environment.
If you use gdm or some other
display manager that calls the ~/.xsession
file, you can add
dbus-launch to the
line in your ~/.xsession
file that starts your
graphical desktop environment. The syntax would be
similar to the example in the ~/.xinitrc
file.
The examples shown previously use dbus-launch to
specify a program to be run. This has the benefit
(when also using the --exit-with-x11
parameter) of stopping the session daemon when the
specified program is stopped. You can also start the
session daemon in your system or personal startup
scripts by adding the following lines:
# Start the D-Bus session daemon
eval `dbus-launch`
export DBUS_SESSION_BUS_ADDRESS
This method will not stop the session daemon when you
exit your shell, therefore you should add the
following line to your ~/.bash_logout
file:
# Kill the D-Bus session daemon
kill $DBUS_SESSION_BUS_PID
is used to clean up leftover sockets in a directory |
|
is the D-Bus message bus daemon |
|
is used to start dbus-daemon from a shell script. It would normally be called from a user's login scripts |
|
is used to monitor messages going through a D-Bus message bus |
|
starts a process as a new D-Bus session |
|
is used to send a message to a D-Bus message bus |
|
is a D-Bus traffic generator and test tool; it is a multi-purpose tool for debugging and profiling D-Bus |
|
is used to update the environment used for D-Bus session services; it updates the list of environment variables used by dbus-daemon --session when it activates session services without using systemd |
|
is used to generate a universally unique ID |
|
contains the API functions used by the D-Bus message daemon. D-Bus is first a library that provides one-to-one communication between any two applications; dbus-daemon is an application that uses this library to implement a message bus daemon |
elogind is the systemd project's "logind", extracted to
be a standalone daemon. It integrates with Linux-PAM-1.6.0
to track all the users logged in to a system, and whether
they are logged in graphically, on the console, or remotely.
Elogind exposes this
information via the standard org.freedesktop.login1
D-Bus interface, and also
through the file system using systemd's standard /run/systemd
layout.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/elogind/elogind/archive/v252.9/elogind-252.9.tar.gz
Download MD5 sum: 2be2c43298e2fc41c5bee33dde605f01
Download size: 1.8 MB
Estimated disk space required: 45 MB (with tests)
Estimated build time: 0.3 SBU (with parallelism=4)
dbus-1.14.10 (runtime), Linux-PAM-1.6.0 (required for Xorg), Polkit-124 (runtime), docbook-xml-4.5, docbook-xsl-nons-1.79.2, and libxslt-1.1.39 (all three to build the man pages)
lxml-4.9.4, zsh-5.9, Valgrind-3.22.0 (needed for tests), audit-userspace, bash-completion, kexec, and SELinux
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Logind
Enable the following options in the kernel configuration and recompile the kernel if necessary:
File systems ---> [*] Inotify support for userspace [INOTIFY_USER] Pseudo filesystems ---> [*] Tmpfs virtual memory file system support (former shm fs) [TMPFS] [*] Tmpfs POSIX Access Control Lists [TMPFS_POSIX_ACL]
In addition, some tests need the userspace cryptographic kernel API, which is enabled with:
-*- Cryptographic API ---> [CRYPTO] Crypto core or helper ---> <*/M> Userspace cryptographic algorithm configuration [CRYPTO_USER] Userspace interface ---> <*/M> Hash algorithms [CRYPTO_USER_API_HASH]
Install elogind by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dman=auto \ -Ddocdir=/usr/share/doc/elogind-252.9 \ -Dcgroup-controller=elogind \ -Ddev-kvm-mode=0660 \ -Ddbuspolicydir=/etc/dbus-1/system.d && ninja
To test the results, issue: ninja test. A few tests are
skipped if not run with root
privileges. Two tests named test-fs-util
and test-id128
require the /etc/machine-id
symlink, so they will fail
if this symlink is not created following the instruction in
dbus-1.14.10 yet.
Now, as the root
user:
ninja install && ln -sfv libelogind.pc /usr/lib/pkgconfig/libsystemd.pc && ln -sfvn elogind /usr/include/systemd
-Ddocdir=/usr/share/doc/elogind-252.9
:
This is needed to install documentation in a versioned
directory.
-Dcgroup-controller=elogind
:
This switch is necessary to build this package when the
kernel is not built with CONFIG_CGROUPS
enabled. Note that
elogind strictly needs a
kernel with CONFIG_CGROUPS
enabled at runtime, but this switch will allow building the
package first.
-Ddbuspolicydir=/etc/dbus-1/system.d
:
This switch sets the location of the D-Bus policy directory.
-Ddev-kvm-mode=0660
:
The LFS udev rule sets the mode of /dev/kvm
to 0660. This option ensures the
elogind udev rules consistent with the LFS configuration.
-Dman=auto
: The
default value of this switch is false. Setting it to auto allows building and
installing the man pages if the recommended dependencies are
installed.
-Dhtml=auto
: The default value of
this switch is false.
Setting it to auto
allows building and installing the html documentation if the
recommended dependencies are installed.
-Ddefault-kill-user-processes=false
:
Determines whether the processes of a user should be killed
when the user logs out. The default is true, but this defeats the
traditional use of screen or tmux. This can also be
changed in the configuration file (see below).
ln -s ...: These commands install symlinks so that software packages can find the systemd-compatible library and headers.
The installed file /etc/elogind/logind.conf
contains all the
possible options with their defaults, commented out. You
may wish to disable automatically killing user processes
when the user logs out, by running, as the root
user:
sed -e '/\[Login\]/a KillUserProcesses=no' \ -i /etc/elogind/logind.conf
Each user will need to register a user session using
Linux-PAM at login. The
/etc/pam.d/system-session
file needs to be modified and a new file must be created in
order for elogind to work
correctly. Run the following commands as the root
user:
cat >> /etc/pam.d/system-session << "EOF" &&# Begin elogind addition session required pam_loginuid.so session optional pam_elogind.so # End elogind addition
EOF cat > /etc/pam.d/elogind-user << "EOF"# Begin /etc/pam.d/elogind-user account required pam_access.so account include system-account session required pam_env.so session required pam_limits.so session required pam_unix.so session required pam_loginuid.so session optional pam_keyinit.so force revoke session optional pam_elogind.so auth required pam_deny.so password required pam_deny.so # End /etc/pam.d/elogind-user
EOF
After completion of elogind, you should check that it functions properly. First ensure that dbus is running. It may be easiest to do this by rebooting the system. After logging in again, run the command loginctl. The result should indicate that a SESSION and a SEAT have been created.
blocaled is an implementation of the org.freedesktop.locale1 D-Bus protocol, which normally comes with systemd. It is needed by the GNOME desktop.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lfs-book/blocaled/releases/download/v0.5/blocaled-0.5.tar.xz
Download MD5 sum: 04d9833d0dfbf3609b0d8f6d276812ff
Download size: 262 KB
Estimated disk space required: 4.2 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Install blocaled by running the following commands:
./configure --prefix=/usr --sysconfdir=/etc && make
To test the results, issue: make check.
Now, as the root
user:
make install
/etc/blocaled.conf
contains
the location of the settings files used by blocaled. The defaults are suitable
for BLFS. Information about the entries is available as
comments in the file.
The org.freedesktop.locale1 protocol
is unable to export locale variables. Locale settings are
stored by default in /etc/locale.conf
. We need to retrieve
them in the bash profile. As the root
user, issue:
cat > /etc/profile.d/i18n.sh << "EOF"
# Begin /etc/profile.d/i18n.sh
if [ -r /etc/locale.conf ]; then source /etc/locale.conf; fi
if [ -n "$LANG" ]; then export LANG; fi
if [ -n "$LC_TYPE" ]; then export LC_TYPE; fi
if [ -n "$LC_NUMERIC" ]; then export LC_NUMERIC; fi
if [ -n "$LC_TIME" ]; then export LC_TIME; fi
if [ -n "$LC_COLLATE" ]; then export LC_COLLATE; fi
if [ -n "$LC_MONETARY" ]; then export LC_MONETARY; fi
if [ -n "$LC_MESSAGES" ]; then export LC_MESSAGES; fi
if [ -n "$LC_PAPER" ]; then export LC_PAPER; fi
if [ -n "$LC_NAME" ]; then export LC_NAME; fi
if [ -n "$LC_ADDRESS" ]; then export LC_ADDRESS; fi
if [ -n "$LC_TELEPHONE" ]; then export LC_TELEPHONE; fi
if [ -n "$LC_MEASUREMENT" ]; then export LC_MEASUREMENT; fi
if [ -n "$LC_IDENTIFICATION" ]; then export LC_IDENTIFICATION; fi
# End /etc/profile.d/i18n.sh
EOF
Then the /etc/locale
file
should be generated, as the root
user:
cat > /etc/locale.conf << EOF
# Begin /etc/locale.conf
LANG=$LANG
# End /etc/locale.conf
EOF
If you plan to run an X (or Wayland) Window system, you may
want to set up your X keyboard. The best way to do it is to
retrieve the settings from /etc/sysconfig/console
, and feed them to
the blocaled daemon. As
the root
user:
source /etc/sysconfig/console && KEYMAP=${KEYMAP:-us} && gdbus call --system \ --dest org.freedesktop.locale1 \ --object-path /org/freedesktop/locale1 \ --method org.freedesktop.locale1.SetVConsoleKeyboard \ "$KEYMAP" "$KEYMAP_CORRECTIONS" true true
This should create or modify the Xorg configuration file
(default is /etc/X11/xorg.conf.d/30-keyboard.conf
) to
match the keyboard settings set in KEYMAP
.
The Fcron package contains a periodical command scheduler which aims at replacing Vixie Cron.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://fcron.free.fr/archives/fcron-3.2.1.src.tar.gz
Download MD5 sum: bd4996e941a40327d11efc5e3fd1f839
Download size: 587 KB
Estimated disk space required: 5.1 MB
Estimated build time: 0.1 SBU
An MTA, text editor (default is vi from the Vim-9.1.0041 package), Linux-PAM-1.6.0, and DocBook-utils-0.6.14
Fcron uses the cron facility of
syslog to log
all messages. Since LFS does not set up this facility in
/etc/syslog.conf
, it needs to
be done prior to installing Fcron. This command will append the
necessary line to the current /etc/syslog.conf
(perform as the
root
user):
cat >> /etc/syslog.conf << "EOF"
# Begin fcron addition to /etc/syslog.conf
cron.* -/var/log/cron.log
# End fcron addition
EOF
The configuration file has been modified, so reloading the
sysklogd daemon
will activate the changes (again as the root
user).
/etc/rc.d/init.d/sysklogd reload
For security reasons, an unprivileged user and group for
Fcron should be created
(perform as the root
user):
groupadd -g 22 fcron && useradd -d /dev/null -c "Fcron User" -g fcron -s /bin/false -u 22 fcron
Now fix some locations hard coded in the documentation:
find doc -type f -exec sed -i 's:/usr/local::g' {} \;
Install Fcron by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --without-sendmail \ --with-boot-install=no \ --with-systemdsystemunitdir=no && make
This package does not come with a test suite.
Now, as the root
user:
make install
DESTDIR install must be done as root
user. Furthermore, if PAM
configuration files should be installed in /etc/pam.d
, you have to create this
directory in the DESTDIR before doing the install.
--without-sendmail
:
By default, Fcron will
attempt to use the sendmail command from an
MTA package
to email you the results of the fcron script. This switch
is used to disable default email notification. Omit the
switch to enable the default. Alternatively, you can use the
--with-sendmail=
to use a different mailer
command.
</path/to/MTA
command>
--with-boot-install=no
: This
prevents installation of the bootscript included with the
package.
--with-systemdsystemunitdir=no
:
This prevents building the systemd units, which are not needed for
a SYS V system.
--with-editor=
:
This switch allows you to set the default text editor.
</path/to/editor>
--with-dsssl-dir=
:
May be used if you have DocBook-utils-0.6.14
installed. Currently, the dsssl stylesheets are located at
</path/to/dsssl-stylesheets>
/usr/share/sgml/docbook/dsssl-stylesheets-1.79
.
There are no required changes in any of the config files.
Configuration information can be found in the man page for
fcron.conf
.
fcron scripts are written using fcrontab. Refer to the fcrontab man page for proper parameters to address your situation.
If Linux-PAM is installed, two PAM
configuration files are installed in etc/pam.d
. Alternatively if etc/pam.d
is not used, the installation
will append two configuration sections to the existing
/etc/pam.conf
file. You
should ensure the files match your preferences. Modify them
as required to suit your needs.
If you would like to set up a periodic hierarchy for the
root user, first issue the following commands (as the
root
user) to create the
/usr/bin/run-parts
script:
cat > /usr/bin/run-parts << "EOF" &&
#!/bin/sh
# run-parts: Runs all the scripts found in a directory.
# from Slackware, by Patrick J. Volkerding with ideas borrowed
# from the Red Hat and Debian versions of this utility.
# keep going when something fails
set +e
if [ $# -lt 1 ]; then
echo "Usage: run-parts <directory>"
exit 1
fi
if [ ! -d $1 ]; then
echo "Not a directory: $1"
echo "Usage: run-parts <directory>"
exit 1
fi
# There are several types of files that we would like to
# ignore automatically, as they are likely to be backups
# of other scripts:
IGNORE_SUFFIXES="~ ^ , .bak .new .rpmsave .rpmorig .rpmnew .swp"
# Main loop:
for SCRIPT in $1/* ; do
# If this is not a regular file, skip it:
if [ ! -f $SCRIPT ]; then
continue
fi
# Determine if this file should be skipped by suffix:
SKIP=false
for SUFFIX in $IGNORE_SUFFIXES ; do
if [ ! "$(basename $SCRIPT $SUFFIX)" = "$(basename $SCRIPT)" ]; then
SKIP=true
break
fi
done
if [ "$SKIP" = "true" ]; then
continue
fi
# If we've made it this far, then run the script if it's executable:
if [ -x $SCRIPT ]; then
$SCRIPT || echo "$SCRIPT failed."
fi
done
exit 0
EOF
chmod -v 755 /usr/bin/run-parts
Next, create the directory layout for the periodic jobs
(again as the root
user):
install -vdm754 /etc/cron.{hourly,daily,weekly,monthly}
Finally, add the run-parts to the system
fcrontab (while still the root
user):
cat > /var/spool/fcron/systab.orig << "EOF"
&bootrun 01 * * * * root run-parts /etc/cron.hourly
&bootrun 02 4 * * * root run-parts /etc/cron.daily
&bootrun 22 4 * * 0 root run-parts /etc/cron.weekly
&bootrun 42 4 1 * * root run-parts /etc/cron.monthly
EOF
Install the /etc/rc.d/init.d/fcron
init script from
the blfs-bootscripts-20240209 package.
make install-fcron
Finally, again as the root
user, start fcron and generate the /var/spool/fcron/systab
file:
/etc/rc.d/init.d/fcron start && fcrontab -z -u systab
The GPM (General Purpose Mouse daemon) package contains a mouse server for the console and xterm. It not only provides cut and paste support generally, but its library component is used by various software such as Links to provide mouse support to the application. It is useful on desktops, especially if following (Beyond) Linux From Scratch instructions; it's often much easier (and less error prone) to cut and paste between two console windows than to type everything by hand!
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/gpm/gpm-1.20.7.tar.bz2
Download MD5 sum: bf84143905a6a903dbd4d4b911a2a2b8
Download size: 820 KB
Estimated disk space required: 7.4 MB
Estimated build time: 0.1 SBU
texlive-20230313 (for documentation)
Enable the following option in the kernel configuration and recompile the kernel if necessary:
Device Drivers ---> Input device support ---> -*- Generic input layer (needed for keyboard, mouse, ...) [INPUT] <*/M> Mouse interface [INPUT_MOUSEDEV]
Install GPM by running the following commands:
patch -Np1 -i ../gpm-1.20.7-consolidated-1.patch && ./autogen.sh && ./configure --prefix=/usr --sysconfdir=/etc ac_cv_path_emacs=no && make
If texlive-20230313 is installed, build the GPM manual as dvi, ps, and pdf formats:
make -C doc gpm.{dvi,ps} && dvipdfm doc/gpm.dvi -o doc/gpm.pdf
This package does not come with a test suite.
Now, as the root
user:
make install && install-info --dir-file=/usr/share/info/dir \ /usr/share/info/gpm.info && rm -fv /usr/lib/libgpm.a && ln -sfv libgpm.so.2.1.0 /usr/lib/libgpm.so && install -v -m644 conf/gpm-root.conf /etc && install -v -m755 -d /usr/share/doc/gpm-1.20.7/support && install -v -m644 doc/support/* \ /usr/share/doc/gpm-1.20.7/support && install -v -m644 doc/{FAQ,HACK_GPM,README*} \ /usr/share/doc/gpm-1.20.7
If texlive-20230313 is installed
and you've built GPM manual as dvi, ps, and pdf formats,
install them as the root
user:
install -vm644 doc/gpm.{dvi,ps,pdf} /usr/share/doc/gpm-1.20.7
./autogen.sh: This command creates the missing configure script.
ac_cv_path_emacs=no
:
This variable works around an issue causing the package fail
to build with Emacs-29.2 installed. It also suppresses the
installations of some “Emacs support files” shipped with GPM.
These files are quite outdated and they should be superseded
with Emacs-29.2 built-in GPM support. If you need
to use Emacs-29.2 in Linux console with mouse
support, you should install (or reinstall) Emacs-29.2 after GPM.
install-info
...: This package installs a .info
file, but does not update the system
dir
file. This command makes
the update.
ln -v -sfn libgpm.so.2.1.0
/usr/lib/libgpm.so: This command is used to
create (or update) the .so
symlink to the library.
Install the /etc/rc.d/init.d/gpm
init script included
in the blfs-bootscripts-20240209 package.
make install-gpm
/etc/gpm-root.conf
and
~/.gpm-root
: The default and
individual user gpm-root configuration
files.
/etc/sysconfig/mouse
: This
file contains the name of your mouse device and the
protocol it uses. To create this file, run the following as
the root
user:
cat > /etc/sysconfig/mouse << "EOF"
# Begin /etc/sysconfig/mouse
MDEVICE="<yourdevice>
"
PROTOCOL="<yourprotocol>
"
GPMOPTS="<additional options>
"
# End /etc/sysconfig/mouse
EOF
Examples of values to set MDEVICE
, PROTOCOL
, and GPMOPTS
to are:
MDEVICE="/dev/input/mice"
PROTOCOL="imps2"
GPMOPTS=""
A list of which protocol values are known can be found by
running gpm -m [device]
-t
-help. The MDEVICE
setting depends on which type of
mouse you have. For example, /dev/ttyS0
for a serial mouse (on Windows
this is COM1), /dev/input/mice
is often used for USB
mice and /dev/psaux
for PS2
mice. GPMOPTS
is the 'catch all'
for any additional options that are needed for your
hardware.
is a security mechanism used to disable the paste buffer |
|
is a simple program that reports the mouse buttons being pressed and released |
|
is a simple program that reports the mouse coordinates |
|
is used to report the GPM library and server versions |
|
is a cut and paste utility and mouse server for virtual consoles |
|
is a default handler for gpm. It is used to draw menus on the root window |
|
is a simple sample application using the high-level library, meant to be read by programmers trying to use the high-level library |
|
is a program to report mouse events |
|
is a tool for determining the mouse type and device it's attached to |
|
contains the API functions to access the GPM daemon |
The Hdparm package contains a utility that is useful for obtaining information about, and controlling ATA/IDE controllers and hard drives. It allows to increase performance and sometimes to increase stability.
This package is known to build and work properly using an LFS 12.1 platform.
As well as being useful, incorrect usage of Hdparm can destroy your information and in rare cases, drives. Use with caution and make sure you know what you are doing. If in doubt, it is recommended that you leave the default kernel parameters alone.
Download (HTTP): https://downloads.sourceforge.net/hdparm/hdparm-9.65.tar.gz
Download MD5 sum: 6d6d039d61ec995b1ec72ddce0b1853b
Download size: 140 KB
Estimated disk space required: 1.0 MB
Estimated build time: less than 0.1 SBU
Build Hdparm by running the following command:
make
This package does not come with a test suite.
Now, as the root
user:
make binprefix=/usr install
The LSB-Tools package includes tools for Linux Standards Base (LSB) conformance.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lfs-book/LSB-Tools/releases/download/v0.12/LSB-Tools-0.12.tar.gz
Download MD5 sum: 1e6ef8cdfddb55035a6c36757e6313f9
Download size: 20 KB
Estimated disk space required: 412 KB
Estimated build time: less than 0.1 SBU
Install LSB-Tools by running the following commands:
make
Now, as the root
user:
make install
Remove a file that should not be installed as the
root
user:
rm /usr/sbin/lsbinstall
The configuration for this package was done in LFS.
The file /etc/lsb-release
should already exist. Be sure that the DISTRIB_CODENAME entry
has been set properly.
The lm_sensors package provides userspace support for the hardware monitoring drivers in the Linux kernel. This is useful for monitoring the temperature of the CPU and adjusting the performance of some hardware (such as cooling fans).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/lm-sensors/lm-sensors/archive/V3-6-0/lm-sensors-3-6-0.tar.gz
Download MD5 sum: f60e47b5eb50bbeed48a9f43bb08dd5e
Download size: 268 KB
Estimated disk space required: 2.6 MB
Estimated build time: less than 0.1 SBU
RRDtool (required to build the sensord program) and dmidecode (runtime)
The following configuration options attempt to cover the most
common hardware monitoring devices in a typical desktop or
laptop system. View the help of each (by pressing the
H button with
the option focused in the make
menuconfig) to know if you need it. There are
many platform-specific hardware monitoring devices so it's
impossible to list the configuration for all of them here.
You may investigate the content of /sys/class/hwmon
within a “mainstream” distro
running on the system to know which drivers you need.
Power management and ACPI options ---> [*] ACPI (Advanced Configuration and Power Interface) Support ---> [ACPI] < /*/M> Battery [ACPI_BATTERY] < /*/M> Thermal Zone [ACPI_THERMAL] Device Drivers ---> NVME Support ---> < /*> NVM Express block device [BLK_DEV_NVME] # Set [HWMON] to <*> (not <M>!) or it will not show up: [ /*] NVMe hardware monitoring [NVME_HWMON] <*/M> Hardware Monitoring support ---> [HWMON] < /*/M> AMD Athlon64/FX or Opteron temperature sensor [SENSORS_K8TEMP] < /*/M> AMD Family 10h+ temperature sensor [SENSORS_K10TEMP] < /*/M> AMD Family 15h processor power [SENSORS_FAM15H_POWER] < /*/M> Intel Core/Core2/Atom temperature sensor [SENSORS_CORETEMP]
Recompile your kernel and reboot into the new kernel.
Install Lm_sensors by running the following commands:
make PREFIX=/usr \ BUILD_STATIC_LIB=0 \ MANDIR=/usr/share/man
This package does not come with a test suite.
Now, as the root
user:
make PREFIX=/usr \ BUILD_STATIC_LIB=0 \ MANDIR=/usr/share/man install && install -v -m755 -d /usr/share/doc/lm_sensors-3-6-0 && cp -rv README INSTALL doc/* \ /usr/share/doc/lm_sensors-3-6-0
BUILD_STATIC_LIB=0
:
This parameter disables compiling and installing the static
version of libsensors
.
PROG_EXTRA=sensord
: This
parameter enables compiling sensord, a daemon that can
monitor your system at regular intervals. Compiling
sensord
requires RRDtool. Be sure to
install RRDtool in /usr
by
running make
prefix=/usr when building it. Otherwise,
Lm_sensors will not find it easily.
is a shell script for use with lm_sensors. It reads its configuration from a file, then calculates fan speeds from temperatures and sets the corresponding PWM outputs to the computed values |
|
is a small helper program to examine registers visible through the ISA bus. It is intended to probe any chip that lives on the ISA bus working with an address register and a data register (I2C-like access) or a flat range (of up to 256 bytes) |
|
is a small helper program to set registers visible through the ISA bus |
|
tests the pulse width modulation (PWM) outputs of sensors and configures fancontrol |
|
prints the current readings of all sensor chips |
|
is a Perl script to convert lm-sensors version 2 configuration files to work with version 3 |
|
is a Perl script
that will walk you through the process of scanning
your system for various hardware monitoring chips
(sensors) supported by |
|
(optional) is a daemon that can be used to periodically log sensor readings |
|
contains the lm_sensors API functions |
The logrotate package allows automatic rotation, compression, removal, and mailing of log files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/logrotate/logrotate/releases/download/3.21.0/logrotate-3.21.0.tar.xz
Download MD5 sum: 6c15f45efc3475a576c4f7e6cc481b2c
Download size: 164.5 KB
Estimated disk space required: 2.9 MB (add 38 MB for tests)
Estimated build time: less than 0.1 SBU (add 0.2 SBU for tests)
Fcron-3.2.1 (runtime)
An MTA (runtime)
Install logrotate by running the following command:
./configure --prefix=/usr && make
To test the results, issue: make test. One test fails because the very old compress is not present and two tests fail if an MTA is not installed.
Now, as the root
user:
make install
Logrotate needs a
configuration file, which must be passed as an argument to
the command when executed. Create the file as the
root
user:
cat > /etc/logrotate.conf << EOF
# Begin /etc/logrotate.conf
# Rotate log files weekly
weekly
# Don't mail logs to anybody
nomail
# If the log file is empty, it will not be rotated
notifempty
# Number of backups that will be kept
# This will keep the 2 newest backups only
rotate 2
# Create new empty files after rotating old ones
# This will create empty log files, with owner
# set to root, group set to sys, and permissions 664
create 0664 root sys
# Compress the backups with gzip
compress
# No packages own lastlog or wtmp -- rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# Some packages drop log rotation info in this directory
# so we include any file in it.
include /etc/logrotate.d
# End /etc/logrotate.conf
EOF
chmod -v 0644 /etc/logrotate.conf
Now create the /etc/logrotate.d
directory as the root
user:
mkdir -p /etc/logrotate.d
At this point additional log rotation commands can be
entered, typically in the /etc/logrotate.d
directory. For example:
cat > /etc/logrotate.d/sys.log << EOF
/var/log/sys.log {
# If the log file is larger than 100kb, rotate it
size 100k
rotate 5
weekly
postrotate
/bin/killall -HUP syslogd
endscript
}
EOF
chmod -v 0644 /etc/logrotate.d/sys.log
You can designate multiple files in one entry:
cat > /etc/logrotate.d/example.log << EOF
file1
file2
file3 {
...
postrotate
...
endscript
}
EOF
chmod -v 0644 /etc/logrotate.d/example.log
You can use in the same line the list of files: file1 file2 file3. See the logrotate man page or https://www.techrepublic.com/article/manage-linux-log-files-with-logrotate/ for more examples.
The command logrotate
/etc/logrotate.conf can be run manually,
however, the command should be run daily. Other useful
commands are logrotate -d
/etc/logrotate.conf for debugging purposes
and logrotate -f
/etc/logrotate.conf forcing the logrotate
commands to be run immediately. Combining the previous
options -df
, you can debug the
effect of the force command. When debugging, the commands are
only simulated and are not actually run. As a result, errors
about files not existing will eventually appear because the
files are not actually created.
To run the logrotate command daily,
if you've installed Fcron-3.2.1 and
completed the section on periodic jobs, execute the
following commands, as the root
user, to create a daily cron job:
cat > /etc/cron.daily/logrotate.sh << "EOF" &&
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.conf
EOF
chmod 754 /etc/cron.daily/logrotate.sh
MC (Midnight Commander) is a text-mode full-screen file manager and visual shell. It provides a clear, user-friendly, and somewhat protected interface to a Unix system while making many frequent file operations more efficient and preserving the full power of the command prompt.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://ftp.midnight-commander.org/mc-4.8.31.tar.xz
Download MD5 sum: 2c3dd9af66e4cfef5a7a460df1cdf868
Download size: 2.3 MB
Estimated disk space required: 71 MB (add 96 MB for tests)
Estimated build time: 0.3 SBU (using parallelism=4; add 0.2 SBU for tests)
Doxygen-1.10.0, GPM-1.20.7, Graphviz-10.0.1, libssh2-1.11.0, PCRE-8.45, pcre2-10.42, Ruby-3.3.0, UnZip-6.0, a graphical environment, and Zip-3.0
Install MC by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --enable-charset && make
To test the results, issue: make check.
Now, as the root
user:
make install
--sysconfdir=/etc
:
This switch places the global configuration directory in
/etc
.
--enable-charset
:
This switch adds support to mcedit for editing files in
encodings different from the one implied by the current
locale.
--with-search-engine=pcre2
: Use
this switch if you would prefer to use pcre2-10.42 instead of GLib
for the built-in search engine. Alternatively, you can pass
'pcre' instead of 'pcre2' if you prefer to use PCRE-8.45.
The ~/.config/mc
directory
and its contents are created when you start mc for the first time.
Then you can edit the main ~/.config/mc/ini
configuration file
manually or through the MC
shell. Consult the mc(1) man page for
details.
ModemManager provides a unified high level API for communicating with mobile broadband modems, regardless of the protocol used to communicate with the actual device.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.freedesktop.org/software/ModemManager/ModemManager-1.18.12.tar.xz
Download MD5 sum: 9f014dfc59f1bd8bc230bb2c2974d104
Download size: 2.5 MB
Estimated disk space required: 155 MB (with tests)
Estimated build time: 0.7 SBU (Using parallelism=4; with tests)
elogind-252.9, gobject-introspection-1.78.1, libmbim-1.26.4, libqmi-1.30.8, Polkit-124, and Vala-0.56.14
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ModemManager
Install ModemManager by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-static \ --disable-maintainer-mode \ --with-systemd-journal=no \ --with-systemd-suspend-resume && make
To test the results, issue: make check.
Now, as the root
user:
make install
--with-systemd-suspend-resume
:
This switch forces ModemManager to use the elogind
power management facilities.
--with-systemd-journal=no
: This switch forces ModemManager not to use the systemd journal for logging.
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
The Notification Daemon package contains a daemon that displays passive pop-up notifications.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/notification-daemon/3.20/notification-daemon-3.20.0.tar.xz
Download MD5 sum: 2de7f4075352831f1d98d8851b642124
Download size: 336 KB
Estimated disk space required: 4.1 MB
Estimated build time: less than 0.1 SBU
GTK+-3.24.41 and libcanberra-0.30 (Built with GTK+-3.24.41 support).
Install Notification Daemon by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-static && make
This package does not come with a test suite.
Now, as the root
user:
make install
You can test the notification daemon with the command notify-send:
pgrep -l notification-da && notify-send -i info Information "Hi ${USER}, This is a Test"
The command pgrep -l notification-da is added to assure that it is the daemon of this package that is running, not another one, e.g. the daemon from xfce4-notifyd-0.9.4.
p7zip is the Unix command-line port of 7-Zip, a file archiver that archives with high compression ratios. It handles 7z, ZIP, GZIP, Brotli, BZIP2, XZ, TAR, APM, ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, Lizard, LZ5, LZFSE, LZH, LZMA, LZMA2, MBR, MSI, MSLZ, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR, Z, and Zstd formats.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/p7zip-project/p7zip/archive/v17.04/p7zip-17.04.tar.gz
Download MD5 sum: 00acfd6be87848231722d2d53f89e4a5
Download size: 6.5 MB
Estimated disk space required: 55 MB
Estimated build time: 2.3 SBU (with tests)
First, prevent p7zip from installing compressed manual pages:
sed '/^gzip/d' -i install.sh
Next, fix a security vulnerability:
sed -i '160a if(_buffer == nullptr || _size == _pos) return E_FAIL;' CPP/7zip/Common/StreamObjects.cpp
Install p7zip by running the following commands:
make all3
To test the results, issue: make test.
Now, as the root
user:
make DEST_HOME=/usr \ DEST_MAN=/usr/share/man \ DEST_SHARE_DOC=/usr/share/doc/p7zip-17.04 install
If using DESTDIR techniques, use DEST_DIR instead.
pax is an archiving utility created by POSIX and defined by the POSIX.1-2001 standard. Rather than sort out the incompatible options that have crept up between tar and cpio, along with their implementations across various versions of UNIX, the IEEE designed a new archive utility. The name “pax” is an acronym for portable archive exchange. Furthermore, “pax” means “peace” in Latin, so its name implies that it shall create peace between the tar and cpio format supporters. The command invocation and command structure is somewhat a unification of both tar and cpio.
pax has been required to be present in LSB conformant systems since LSB version 3.0.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): http://www.mirbsd.org/MirOS/dist/mir/cpio/paxmirabilis-20201030.tgz
Download MD5 sum: 87a0a3870ec437c41eb1b406334fe2c5
Download size: 172 KB
Estimated disk space required: 1.2 MB
Estimated build time: less than 0.1 SBU
Install pax by running the following commands:.
This package expands to the directory pax.
bash Build.sh
This package does not come with a test suite.
Now, as the root
user:
This package also creates hard links from pax to the programs cpio and tar in the build directory. The LFS editors do not recommend that they be installed as they will overwrite the GNU versions of these programs.
install -v pax /usr/bin && install -v -m644 pax.1 /usr/share/man/man1
The PCI Utils package contains a set of programs for listing PCI devices, inspecting their status and setting their configuration registers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://mj.ucw.cz/download/linux/pci/pciutils-3.10.0.tar.gz
Download MD5 sum: ca53b87d2a94cdbbba6e09aca90924bd
Download size: 912 KB
Estimated disk space required: 5.7 MB
Estimated build time: less than 0.1 SBU
cURL-8.6.0, Wget-1.21.4, or Lynx-2.8.9rel.1 (for the update-pciids script to function correctly).
Install PCI Utils by running the following commands:
make PREFIX=/usr \ SHAREDIR=/usr/share/hwdata \ SHARED=yes
This package does not come with a test suite.
Now, as the root
user:
make PREFIX=/usr \ SHAREDIR=/usr/share/hwdata \ SHARED=yes \ install install-lib && chmod -v 755 /usr/lib/libpci.so
SHARED=yes
: This
parameter enables building of the shared library instead of
the static one.
ZLIB=no
: This option prevents
compression of the pci.ids
file.
The pci.ids
data file is
constantly being updated. To get a current version of this
file, run update-pciids as the
root
user. This program
requires the Which-2.21 script or
program to find cURL-8.6.0, Lynx-2.8.9rel.1, or Wget-1.21.4 which
are used to download the most current file, and then replace
the existing file in /usr/share/hwdata
.
You should update the /usr/share/hwdata/pci.ids
file
periodically. If you've installed
Fcron-3.2.1 and completed the section on
periodic jobs, execute the following commands, as the
root
user, to create a
weekly cron job:
cat > /etc/cron.weekly/update-pciids.sh << "EOF" &&
#!/bin/bash
/usr/sbin/update-pciids
EOF
chmod 754 /etc/cron.weekly/update-pciids.sh
The Power Management Utilities provide simple shell command line tools to suspend and hibernate the computer. They can be used to run user supplied scripts on suspend and resume.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://pm-utils.freedesktop.org/releases/pm-utils-1.4.1.tar.gz
Download MD5 sum: 1742a556089c36c3a89eb1b957da5a60
Download size: 204 KB
Estimated disk space required: 1.6 MB
Estimated build time: 0.1 SBU
xmlto-0.0.28 (to generate man pages)
If needed, enable the following options in the kernel configuration and recompile the kernel:
Power management and ACPI options ---> [*] Suspend to RAM and standby [SUSPEND] [*] Hibernation (aka 'suspend to disk') [HIBERNATION]
Suspend to RAM allows the system to enter sleep states in which main memory is powered and thus its contents are preserved. The method cuts power to most parts of the machine aside from the RAM. Because of the large power savings, it is advisable for laptops to automatically enter this mode when the computer is running on batteries and the lid is closed (or the user is inactive for some time).
Suspend to disk (Hibernation) saves the machine's state into swap space and completely powers off the machine. When the machine is powered on, the state is restored. Until then, there is zero power consumption. Suspend to RAM and hibernation are normally appropriate for portable devices such as laptops, but can be used on workstations. The capability is not really appropriate for servers.
To use hibernation, the kernel parameter resume=/dev/<swap_partition> has to be used on the kernel command line (in grub.cfg). The swap partition should be at least the size of the physical RAM on the system.
First, fix several bugs and a couple of incompatibilities with newer kernels:
patch -Np1 -i ../pm-utils-1.4.1-bugfixes-1.patch
Install Power Management Utilities by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --docdir=/usr/share/doc/pm-utils-1.4.1 && make
This package does not come with a test suite.
Now, as the root
user:
make install
If you don't have xmlto-0.0.28 installed, copy pregenerated
man pages, as the root
user:
install -v -m644 man/*.1 /usr/share/man/man1 && install -v -m644 man/*.8 /usr/share/man/man8 && ln -sv pm-action.8 /usr/share/man/man8/pm-suspend.8 && ln -sv pm-action.8 /usr/share/man/man8/pm-hibernate.8 && ln -sv pm-action.8 /usr/share/man/man8/pm-suspend-hybrid.8
Suspend or resume functionality can be easily modified by
installing files into the /etc/pm/sleep.d
directory. These files,
known as hooks, are run when the system is put into a sleep
state or resumed. Default hooks are located in /usr/lib/pm-utils/sleep.d
, and user hooks
should be put in /etc/pm/sleep.d
. See the pm-action(8)
man page for more information.
In order to use hibernation with GRUB and a swap partition, you need to
add kernel parameter resume=
(e.g.
swap_partition
resume=/dev/sda1
) to the kernel
line in the /boot/grub/grub.cfg
configuration file.
is a script that determines whether the system is running on AC power (rather than a battery) |
|
is a symlink to pm-action script that puts the computer into hibernate mode (the system is fully powered off and system state is saved to disk) |
|
is a script that checks whether power management features such as suspend and hibernate are supported |
|
is a script that puts the computer into powersaving (low power) mode |
|
is a symlink to pm-action script that puts the computer into suspend mode (most devices are shut down and system state is saved in RAM) |
|
is a symlink to pm-action script that puts the computer into hybrid-suspend mode (the system does everything it needs to hibernate, but suspends instead of shutting down) |
The Power-profiles-daemon package provides a program that allows modification of the system power/behavior state. This is used on many laptops and can be used by a Desktop Environment to activate power saving or performance CPU governors through dbus.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/archive/0.20/power-profiles-daemon-0.20.tar.gz
Download MD5 sum: 92df21de1148ef6e7c30e4a0829e02b1
Download size: 68 KB
Estimated disk space required: 1.4 MB
Estimated build time: less than 0.1 SBU (with tests)
gobject-introspection-1.78.1, libgudev-238, Polkit-124, and PyGObject-3.46.0
GTK-Doc-1.33.2, The rest are for the tests, dbusmock-0.30.2, umockdev-0.17.18, isort, and mccabe
Enable the following options in the kernel configuration and recompile the kernel if necessary:
Power management and ACPI options ---> CPU Frequency scaling ---> -*- CPU Frequency scaling [CPU_FREQ] -*- 'performance' governor [CPU_FREQ_GOV_PERFORMANCE] <*/M> 'powersave' governor [CPU_FREQ_GOV_POWERSAVE] # Select if CPU is Intel: [ /*] Intel P state control [X86_INTEL_PSTATE] # Select if CPU is AMD: [ /*] AMD Processor P-State driver [X86_AMD_PSTATE] Device Drivers ---> # Some drivers under this submenu provide "platform profile" support # and power-profiles-daemon can take advantage from platform profiles; # select a driver if suitable for your platform: [ /*] X86 Platform Specific Device Drivers ---> [X86_PLATFORM_DEVICES]
Select the appropriate sub-options that appear when the above options are selected. As much as possible, the layout should be the same as in kernel configuration menus.
Install Power-profiles-daemon by running the following commands:
mkdir build && cd build && meson setup \ --prefix=/usr \ --buildtype=release \ -Dgtk_doc=false \ -Dtests=false \ -Dsystemdsystemunitdir=/tmp \ .. && ninja
If you have installed the external dependencies, to test the results issue: ninja test.
Now, as the root
user:
ninja install
Now, clean up an unneeded systemd unit installed into /tmp:
rm -fv /tmp/power-profiles-daemon.service
-Dgtk_doc=false
:
Prevents building the documentation. Remove this if you have
GTK-Doc installed and wish
to build the documentation.
-Dtests=false
:
Prevents building the tests because they cannot be run within
the boundaries of BLFS. Remove this if you have installed the
external dependencies and wish to run the tests.
-Dsystemdsystemunitdir=/tmp
:
Removes the dependency on systemd.
To automatically start the power-profiles-daemon
when the system is rebooted, install the /etc/rc.d/init.d/power-profiles-daemon
bootscript from the blfs-bootscripts-20240209 as
the root
user:
make install-power-profiles-daemon
Raptor is a C library that provides a set of parsers and serializers that generate Resource Description Framework (RDF) triples.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.librdf.org/source/raptor2-2.0.16.tar.gz
Download MD5 sum: 0a71f13b6eaa0a04bf411083d89d7bc2
Download size: 1.7 MB
Estimated disk space required: 25 MB (additional 2 MB for the tests)
Estimated build time: 0.1 SBU (additional 0.3 SBU for the tests)
First, fix an incompatibility with libxml2-2.11.x:
sed -i 's/20627/20627 \&\& LIBXML_VERSION < 21100/' src/raptor_libxml.c
Install Raptor by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check. Several of the XML tests may fail.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--with-icu-config=/usr/bin/icu-config
: Use
this switch if you have installed ICU-74.2 and wish to build Raptor with its support.
Rasqal is a C library that handles Resource Description Framework (RDF) query language syntaxes, query construction, and execution of queries returning results as bindings, boolean, RDF graphs/triples or syntaxes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.librdf.org/source/rasqal-0.9.33.tar.gz
Download MD5 sum: 1f5def51ca0026cd192958ef07228b52
Download size: 1.6 MB
Estimated disk space required: 22 MB (additional 4 MB for the tests)
Estimated build time: 0.3 SBU (additional 0.7 SBU for the tests)
Install Rasqal by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue: make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
Redland is a set of free software C libraries that provide support for the Resource Description Framework (RDF).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.librdf.org/source/redland-1.0.17.tar.gz
Download MD5 sum: e5be03eda13ef68aabab6e42aa67715e
Download size: 1.6 MB
Estimated disk space required: 18 MB
Estimated build time: 0.2 SBU
libiodbc-3.52.15, SQLite-3.45.1, MariaDB-10.11.7 or MySQL, PostgreSQL-16.2, Berkeley DB (deprecated) virtuoso, and 3store
Install Redland by running the following commands:
./configure --prefix=/usr --disable-static && make
To test the results, issue make check.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
The sg3_utils package contains low level utilities for devices that use a SCSI command set. Apart from SCSI parallel interface (SPI) devices, the SCSI command set is used by ATAPI devices (CD/DVDs and tapes), USB mass storage devices, Fibre Channel disks, IEEE 1394 storage devices (that use the "SBP" protocol), SAS, iSCSI and FCoE devices (amongst others).
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://sg.danny.cz/sg/p/sg3_utils-1.48.tar.xz
Download MD5 sum: 0024393d2d2942cc081ce613d98db68a
Download size: 1.2 MB
Estimated disk space required: 27 MB
Estimated build time: 0.2 SBU
Install sg3_utils 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:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
adds or removes SCSI devices without having to reboot |
|
accesses Linux SCSI logging level information |
|
checks SCSI device support for mandatory commands |
|
does the SCSI READ CAPACITY command on disks |
|
does the SCSI TEST UNIT READY on devices |
|
checks for SCSI to ATA Translation (SAT) device support |
|
starts one or more SCSI disks |
|
stops one or more SCSI disks |
|
fetches the temperature of a SCSI device |
|
performs a SCSI BACKGROUND CONTROL command on a device to perform "advanced background operations" |
|
sends the SCSI COMPARE AND WRITE command to device |
|
sends the SCSI RECEIVE COPY RESULTS command (XCOPY related) |
|
copies data to and from files and devices. Specialised for devices that understand the SCSI command set |
|
takes SCSI sense data in binary or as a sequence of ASCII hexadecimal bytes and decodes it |
|
changes ownership of a LUN from another Service-Processor to this one |
|
formats or resizes a SCSI disk (perhaps changes its block size) |
|
sends a SCSI GET CONFIGURATION command (MMC-4 +) |
|
sends a SCSI GET PHYSICAL ELEMENT STATUS command to a device |
|
sends the SCSI GET LBA STATUS command |
|
sends a SCSI REPORT or SET IDENTIFYING INFORMATION command |
|
access mode page information for a SCSI (or ATAPI) device |
|
sends a SCSI INQUIRY or ATA IDENTIFY (PACKET) DEVICE command and outputs the response |
|
access log pages with SCSI LOG SENSE command |
|
sends the SCSI REPORT LUNS command |
|
displays mapping between linux sg and other SCSI devices |
|
maps a special file to a SCSI generic (sg) device (or vice versa) |
|
copies data to and from files and devices. Specialized for devices that understand the SCSI command set and does memory mapped transfers from sg devices |
|
reads mode pages with the SCSI MODE SENSE command |
|
reports information on supported SCSI commands or task management functions |
|
copies data to and from files and devices. Specialized for devices that understand the SCSI command set |
|
sends a SCSI PERSISTENT RESERVE (IN or OUT) command to manipulate registrations and reservations |
|
sends a SCSI PREVENT ALLOW MEDIUM REMOVAL command |
|
sends an arbitrary SCSI command to a device |
|
reads data using the SCSI READ BUFFER command |
|
displays or modifies the RDAC Redundant Controller Page |
|
reads blocks of data continually from the same offset |
|
performs a SCSI READ ATTRIBUTE command on a device |
|
sends a SCSI READ BLOCK LIMITS command |
|
sends a SCSI READ BUFFER command |
|
sends a SCSI READ CAPACITY command |
|
sends a SCSI READ LONG command |
|
sends a SCSI REASSIGN BLOCKS command |
|
sends a SCSI REPORT REFERRALS command |
|
sends a SCSI REPORT PROVISIONING INITIALIZATION PATTERN command |
|
sends a SCSI REPORT ZONES command |
|
sends one or more SCSI REQUEST SENSE commands |
|
sends a SCSI device, target, bus or host reset; or checks reset state |
|
sends a SCSI RESET WRITE POINTER command |
|
sends a SCSI READ MEDIA SERIAL NUMBER command |
|
sends a SCSI REPORT TARGET PORT GROUPS command |
|
fetches status information from a SCSI Accessed Fault-Tolerant Enclosure (SAF-TE) device |
|
sends a SCSI SANITIZE command |
|
sends an ATA IDENTIFY (PACKET) DEVICE command via a SCSI to ATA Translation (SAT) layer |
|
sends an ATA READ LOG EXT command via a SAT pass through to fetch log page 11h which contains SATA phy event counters |
|
sends an ATA READ LOG EXT command via a SCSI to ATA Translation (SAT) layer |
|
sends an ATA SET FEATURES command via a SCSI to ATA Translation (SAT) layer |
|
does a scan of sg devices (or given SCSI/ATAPI/ATA devices) and prints the results |
|
performs a SCSI SEEK or PRE-FETCH command on a device and it's cache |
|
performs a SCSI SEND DIAGNOSTIC command |
|
sends controls and fetches the current status from a SCSI Enclosure Services (SES) device |
|
sends microcode to a SCSI enclosure |
|
sends a SCSI START STOP UNIT command to start, stop, load or eject medium |
|
sends a SCSI SET TARGET PORT GROUPS command |
|
performs a SCSI STREAM CONTROL or GET STREAM STATUS command on a device to open or close an I/O stream |
|
sends a SCSI command to synchronize the cache |
|
tests the SCSI host adapter by issuing write and read operations on a device's buffer and calculating checksums |
|
reports or sets the timestamp on a SCSI device |
|
sends one or more SCSI TEST UNIT READY commands |
|
sends a SCSI UNMAP command |
|
invokes SCSI VERIFY command(s) on a block device |
|
fetches Vital Product Data (VPD) pages using a SCSI INQUIRY command |
|
sends a SCSI WRITE BUFFER command |
|
sends a SCSI WRITE LONG command |
|
sends a SCSI WRITE SAME command |
|
sends a SCSI WRITE AND VERIFY command |
|
performs SCSI WRITE commands on a device |
|
writes mode pages |
|
copies data to and from files and devices using SCSI EXTENDED COPY (XCOPY) |
|
performs SCSI ZONE commands on a device, such as OPEN, CLOSE, FINISH or SEQUENTIALIZE |
|
contains the sg3_utils API functions |
The sysmon-qt package provides a program to monitor system values including CPU usage, memory usage, and system temperatures in a compact screen window.
This package is known to build and work properly using an LFS 12.1 platform.
There is also a version of this package, sysmon-qt-1.1, at the same location as below that is based on (Qt-5.15.12 or qt-alternate-5.15.12). The build instructions are identical to these. The functionality is the same and it does not make sense to build both versions.
Download (HTTP): https://github.com/lfs-book/sysmon-qt/releases/download/v2.0/sysmon-qt-2.0.tar.xz
Download MD5 sum: 9477952e6918c383cbfee36f710d0a34
Download size: 76 KB
Estimated disk space required: 1.1 MB
Estimated build time: 0.3 SBU
lm-sensors-3-6-0 (runtime)
Install sysmon-qt by running the following commands:
cd src && qmake6 sysmon-qt.pro && make
This package does not come with a test suite.
Now, as the root
user:
cp sysmon-qt /usr/bin && cp ../data/sysmon-qt.desktop /usr/share/applications/ && cp ../data/sysmon-qt.png /usr/share/pixmaps/
The Sysstat package contains utilities to monitor system performance and usage activity. Sysstat contains the sar utility, common to many commercial Unixes, and tools you can schedule via cron to collect and historize performance and activity data.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://sysstat.github.io/sysstat-packages/sysstat-12.7.5.tar.xz
Download MD5 sum: c5cac550f88327f0a93b12f6da93a0cb
Download size: 896 KB
Estimated disk space required: 29 MB
Estimated build time: 0.1 SBU
There are no build-time requirements for this package; however, it is designed to be controlled by a cron daemon such as Fcron-3.2.1.
Install Sysstat by running the following commands:
sa_lib_dir=/usr/lib/sa \ sa_dir=/var/log/sa \ conf_dir=/etc/sysstat \ ./configure --prefix=/usr \ --disable-file-attr && make
This package does not come with a working test suite.
Now, as the root
user:
make install
sa_lib_dir
: This environment
variable specifies the location of the package-specific
library directory.
sa_dir
: This environment variable
specifies the location of the directory containing the data
files.
conf_dir
: This environment
variable specifies the location of the system configuration
directory.
--disable-file-attr
:
Do not set attributes on files being installed. This
parameter causes the installation to ignore the man group
variable resulting in the man files having root
: root
ownership.
Run ./configure
--help to see other influential environment
variables you can pass to configure. You may want
to use the history
and
compressafter
variables to
customize the amount of data files kept on the system.
To begin gathering Sysstat
history information, you must add to, or create a
privileged user's crontab. The history data location is
/var/log/sa
. The user running
Sysstat utilities via cron
must have write access to this location.
Below is an example of what to install in the crontab. Adjust the parameters to suit your needs. Use man sa1 and man sa2 for information about the commands.
# 8am-7pm activity reports every 10 minutes during weekdays
0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &
# 7pm-8am activity reports every hour during weekdays
0 19-7 * * 1-5 /usr/lib/sa/sa1 &
# Activity reports every hour on Saturday and Sunday
0 * * * 0,6 /usr/lib/sa/sa1 &
# Daily summary prepared at 19:05
5 19 * * * /usr/lib/sa/sa2 -A &
Ensure you submit the revised crontab to the cron daemon.
At system startup, a LINUX RESTART message must be inserted
in the daily data file to reinitialize the kernel counters.
This can be automated by installing the /etc/rc.d/init.d/sysstat
init script
included in the blfs-bootscripts-20240209 package
using the following command as the root
user:
make install-sysstat
displays statistics about read and write operations on CIFS filesystems |
|
reports CPU statistics and input/output statistics for devices and partitions |
|
writes activities for each available processor |
|
is used for monitoring individual tasks currently being managed by the Linux kernel |
|
is used for displaying the contents of data files created by the sar command. But unlike sar, sadf can write its data in many different formats |
|
is used for displaying the contents of elected cumulative activity counters in the operating system |
|
is used for monitoring the activity of tape drives connected to a system |
The UDisks package provides a daemon, tools and libraries to access and manipulate disks and storage devices.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/storaged-project/udisks/releases/download/udisks-2.10.1/udisks-2.10.1.tar.bz2
Download MD5 sum: 613af9bfea52cde74d2ac34d96de544d
Download size: 1.8 MB
Estimated disk space required: 44 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
libatasmart-0.19, libblockdev-3.1.0, libgudev-238, libxslt-1.1.39, and Polkit-124
D-Bus Python-1.3.2 (for the integration tests), GTK-Doc-1.33.2, LVM2-2.03.23, PyGObject-3.46.0 (for the integration tests), exFAT, and libiscsi
btrfs-progs-6.7.1, dbus-1.14.10, dosfstools-4.2, gptfdisk-1.0.10, mdadm-4.2, and xfsprogs-6.6.0
Install UDisks by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-static \ --enable-available-modules && make
To test the results, issue: make check. A more thorough
test can be run with make
ci. You must first create the directories
/var/run/udisks2
and
/var/lib/udisks2
, and the
optional python modules should be present.
Now, as the root
user:
make install
--disable-static
:
This switch prevents installation of static versions of the
libraries.
--enable-gtk-doc
: Use this
parameter if GTK-Doc is
installed and you wish to rebuild and install the API
documentation.
--enable-available-modules
:
This switch enables additional UDisks2 functionalities if libblockdev-3.1.0 has been built with
optional dependencies.
The UnRar package contains a
RAR
extraction utility used for
extracting files from RAR
archives. RAR
archives are
usually created with WinRAR,
primarily in a Windows environment.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.rarlab.com/rar/unrarsrc-6.2.12.tar.gz
Download MD5 sum: 1f526429e8e50a9b3b94f325b2848c24
Download size: 244 KB
Estimated disk space required: 2.3 MB
Estimated build time: 0.1 SBU
This package extracts the tarball to the unversioned
directory unrar
and not the
expected directory unrar-6.2.12
.
Install UnRar by running the following commands:
make -f makefile
This package does not come with a test suite.
Now, as the root
user:
install -v -m755 unrar /usr/bin
The UnZip package contains
ZIP
extraction utilities. These
are useful for extracting files from ZIP
archives. ZIP
archives are created with PKZIP or Info-ZIP utilities, primarily in a DOS
environment.
This package is known to build and work properly using an LFS 12.1 platform.
The previous version of the UnZip package had some locale related issues. Currently there are no BLFS editors capable of testing these locale issues. Therefore, the locale related information is left on this page, but has not been tested. A more general discussion of these problems can be found in the Program Assumes Encoding section of the Locale Related Issues page.
Download (HTTP): https://downloads.sourceforge.net/infozip/unzip60.tar.gz
Download MD5 sum: 62b490407489521db863b523a7f86375
Download size: 1.3 MB
Estimated disk space required: 9 MB
Estimated build time: less than 0.1 SBU
Use of UnZip in the JDK, Mozilla, DocBook or any other BLFS package installation is not a problem, as BLFS instructions never use UnZip to extract a file with non-ASCII characters in the file's name.
These issues are thought to be fixed in the patch. But since none of the editors have data to test this, the following workarounds are retained in case they might still be needed.
The UnZip package assumes
that filenames stored in the ZIP archives created on non-Unix
systems are encoded in CP850, and that they should be
converted to ISO-8859-1 when writing files onto the
filesystem. Such assumptions are not always valid. In fact,
inside the ZIP archive, filenames are encoded in the DOS
codepage that is in use in the relevant country, and the
filenames on disk should be in the locale encoding. In MS
Windows, the OemToChar() C function (from User32.DLL
) does the correct conversion
(which is indeed the conversion from CP850 to a superset of
ISO-8859-1 if MS Windows is set up to use the US English
language), but there is no equivalent in Linux.
When using unzip to unpack a ZIP archive containing non-ASCII filenames, the filenames are damaged because unzip uses improper conversion when any of its encoding assumptions are incorrect. For example, in the ru_RU.KOI8-R locale, conversion of filenames from CP866 to KOI8-R is required, but conversion from CP850 to ISO-8859-1 is done, which produces filenames consisting of undecipherable characters instead of words (the closest equivalent understandable example for English-only users is rot13). There are several ways around this limitation:
1) For unpacking ZIP archives with filenames containing non-ASCII characters, use WinZip while running the Wine Windows emulator.
2) Use bsdtar -xf from libarchive-3.7.2 to unpack the ZIP archive. Then fix the damage made to the filenames using the convmv tool (https://j3e.de/linux/convmv/). The following is an example for the zh_CN.UTF-8 locale:
convmv -f cp936 -t utf-8 -r --nosmart --notest \
</path/to/unzipped/files>
First apply the patch:
patch -Np1 -i ../unzip-6.0-consolidated_fixes-1.patch
Now compile the package:
make -f unix/Makefile generic
The test suite does not work for target “generic”.
Now, as the root
user:
make prefix=/usr MANDIR=/usr/share/man/man1 \ -f unix/Makefile install
make -f unix/Makefile generic: This target begins by running a configure script (unlike the older targets such as linux and linux_noasm) which creates a flags file that is then used in the build. This ensures that the 32-bit x86 build receives the right flags to unzip files which are larger than 2GB when extracted.
allows the output of unzip commands to be redirected |
|
lists, tests or extracts files from a |
|
is a self-extracting stub that can be prepended to
a |
|
searches files in a |
|
produces technical information about the files in a
|
The UPower package provides an interface for enumerating power devices, listening to device events and querying history and statistics. Any application or service on the system can access the org.freedesktop.UPower service via the system message bus.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://gitlab.freedesktop.org/upower/upower/-/archive/v1.90.2/upower-v1.90.2.tar.bz2
Download MD5 sum: bfd6e3275e61d7e097b53eb2b216fffa
Download size: 136 KB
Estimated disk space required: 6.5 MB (add 1.1 MB for tests)
Estimated build time: less than 0.1 SBU (using parallelism=4, add 0.6 SBU for tests)
libgudev-238 and libusb-1.0.27
GTK-Doc-1.33.2, libxslt-1.1.39, docbook-xsl-nons-1.79.2, PyGObject-3.46.0, dbusmock-0.30.2, umockdev-0.17.18 (for part of the test suite), and libimobiledevice
First, remove an unneeded dependency from a test:
sed '/parse_version/d' -i src/linux/integration-test.py
Install UPower by running the following commands:
mkdir build && cd build && meson setup .. \ --prefix=/usr \ --buildtype=release \ -Dgtk-doc=false \ -Dman=false \ -Dsystemdsystemunitdir=no \ -Dudevrulesdir=/usr/lib/udev/rules.d && ninja
To test the results, issue: LC_ALL=C ninja test. Some
checks may not pass due to missing files. The test suite
should be run from a local GUI session started with
dbus-launch. On 32-bit machines, one test will fail due to
rounding errors: Tests.test_battery_energy_charge_mixed
. On
some systems, two tests relating to the headphone hotplug
feature are known to fail. Those can be safely ignored since
the functionality still works. The test named Tests.test_bluetooth_le_device
is known to
fail with dbusmock-0.30.1 or later.
Now, as the root
user:
ninja install
-Dgtk-doc=false
:
Prevents building the documentation. Remove this if you have
GTK-Doc installed and wish
to build the documentation.
-Dman=false
: Prevents
building the manual pages. Remove this if you have libxslt-1.1.39 and docbook-xsl-nons-1.79.2
installed and wish to build the manual pages.
-Dsystemdsystemunitdir=no
:
Removes the dependency on systemd.
-Dudevrulesdir=/usr/lib/udev/rules.d
:
Tells the build system where to install udev rules because the information is
missing in /usr/lib/pkgconfig/libudev.pc
The USB Utils package contains utilities used to display information about USB buses in the system and the devices connected to them.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://kernel.org/pub/linux/utils/usb/usbutils/usbutils-017.tar.xz
Download MD5 sum: 8ff21441faf2e8128e4810b3d6e49059
Download size: 168 KB
Estimated disk space required: 4.4 MB
Estimated build time: 0.1 SBU
Install USB Utils by running the following commands:
./configure --prefix=/usr --datadir=/usr/share/hwdata && make
This package does not come with a test suite.
Now, as the root
user:
make install
To install the usb.ids
data
file, using Wget-1.21.4, run, as the root
user:
install -dm755 /usr/share/hwdata/ && wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids
The script lsusb.py displays information in a more easily readable form than lsusb. To find the options, use lsusb.py -h. One form of use recommended by the developer is lsusb.py -ciu.
The usb.ids
data file is
constantly being updated. To get a current version of this
file, using Wget-1.21.4, periodically run again, as the
root
user:
wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids
You should update the /usr/share/hwdata/usb.ids
file
periodically. If you've installed
Fcron-3.2.1 and completed the section on
periodic jobs, execute the following commands, as the
root
user, to create a
weekly cron job:
cat > /etc/cron.weekly/update-usbids.sh << "EOF" &&
#!/bin/bash
/usr/bin/wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids
EOF
chmod 754 /etc/cron.weekly/update-usbids.sh
is a utility for displaying information about all USB buses in the system and all devices connected to them, but not in human friendly form |
|
displays information about all USB buses in the system and all devices connected to them in reasonable human friendly form |
|
is a shell script that displays details of USB buses and devices connected to them. It is designed to be used if /proc/bus/usb/devices is not available on your system |
|
is used to dump report descriptors and streams from HID (human interface device) interfaces of USB devices |
The presence or absence of the which program in the main LFS book is probably one of the most contentious issues on the mailing lists. It has resulted in at least one flame war in the past. To hopefully put an end to this once and for all, presented here are two options for equipping your system with which. The question of which “which” is for you to decide.
The first option is to install the actual GNU which package.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/which/which-2.21.tar.gz
Download MD5 sum: 097ff1a324ae02e0a3b0369f07a7544a
Download size: 148 KB
Estimated disk space required: 1 MB
Estimated build time: less than 0.1 SBU
Install which 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
The second option (for those who don't want to install the
package) is to create a simple script (execute as the
root
user):
cat > /usr/bin/which << "EOF"
#!/bin/bash
type -pa "$@" | head -n 1 ; exit ${PIPESTATUS[0]}
EOF
chmod -v 755 /usr/bin/which
chown -v root:root /usr/bin/which
This should work OK and is probably the easiest solution for most cases, but is not the most comprehensive implementation.
The Zip package contains
Zip utilities. These are
useful for compressing files into ZIP
archives.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://downloads.sourceforge.net/infozip/zip30.tar.gz
Download MD5 sum: 7b74551e63f8ee6aab6fbc86676c0d37
Download size: 1.1 MB
Estimated disk space required: 6.4 MB
Estimated build time: 0.1 SBU
Install Zip by running the following commands:
make -f unix/Makefile generic_gcc
This package does not come with a test suite.
Now, as the root
user:
make prefix=/usr MANDIR=/usr/share/man/man1 -f unix/Makefile install
make prefix=/usr -f
unix/Makefile install: This command overrides
the prefix
variable that is set
to /usr/local
in the
unix/Makefile
. Alternatives to
generic_gcc
can be
seen with a make -f
unix/Makefile list command.
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.
Cbindgen can be used to generate C bindings for Rust code.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/mozilla/cbindgen/archive/v0.26.0/cbindgen-0.26.0.tar.gz
Download MD5 sum: f3ef70691bc4743b8f76ca6d27847ba4
Download size: 216 KB
Estimated disk space required: 121 MB (add 600 MB for tests)
Estimated build time: 0.5 SBU (add 0.4 SBU for tests), both on a 4-core machine
An Internet connection is needed for building this package.
Install cbindgen by running the following commands:
cargo build --release
To test the results, issue: cargo test. Three tests in
profile.rs
are known to fail.
Now, as the root
user:
install -Dm755 target/release/cbindgen /usr/bin/
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 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/clisp/latest/clisp-2.49.tar.bz2
Download MD5 sum: 1962b99d5e530390ec3829236d168649
Download size: 7.8 MB
Estimated disk space required: 163 MB (add 8 MB for tests)
Estimated build time: 0.9 SBU (1.2 SBU with tests)
Optional patch: https://www.linuxfromscratch.org/patches/blfs/12.1/clisp-2.49-readline7_fixes-1.patch (required if building against libffcall)
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
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.
/usr/lib/clisp-2.49/base/
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 12.1 platform.
Download (HTTP): https://cmake.org/files/v3.28/cmake-3.28.3.tar.gz
Download MD5 sum: 6b16c82b81e1fd80b63bee9696846b21
Download size: 11 MB
Estimated disk space required: 435 MB (add 1.2 GB for tests)
Estimated build time: 2.2 SBU (add 3.9 SBU for tests, both using parallelism=4)
cURL-8.6.0, libarchive-3.7.2, libuv-1.48.0, and nghttp2-1.59.0
GCC-13.2.0 (for gfortran), git-2.44.0 (for use during tests), Mercurial-6.6.3 (for use during tests), OpenJDK-21.0.2 (for use during tests), (Qt-5.15.12 or qt-alternate-5.15.12) or Qt-6.6.2 (for the Qt-based GUI), sphinx-7.2.6 (for building documents), Subversion-1.14.3 (for testing), cppdap, jsoncpp, and rhash
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-cppdap \ --no-system-librhash \ --docdir=/share/doc/cmake-3.28.3 && make
To test the results, issue: LC_ALL=en_US.UTF-8 bin/ctest -j<N>
-O
cmake-3.28.3-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.
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
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 the system
installed version for all needed libraries but those
explicitly specified via a --no-system-*
option.
--no-system-jsoncpp
and --no-system-cppdap
: These
switches remove 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 of the
recommended dependencies 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.
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 12.1 platform.
Download (HTTP): https://doxygen.nl/files/doxygen-1.10.0.src.tar.gz
Download MD5 sum: c7455e9961c3491479929935c5087bf6
Download size: 8.0 MB
Estimated disk space required: 253 MB (with tests)
Estimated build time: 2.1 SBU (using parallelism=4; with tests)
Graphviz-10.0.1, ghostscript-10.02.1, libxml2-2.12.5 (required for the tests), LLVM-17.0.6 (with clang), (Qt-5.15.12 or qt-alternate-5.15.12) (for doxywizard), texlive-20230313 (or install-tl-unx), xapian-1.4.24 (for doxyindexer), and javacc
When untarring this package, you may see messages such as “Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.TextEncoding'”. These messages are harmless, and can be safely ignored.
First, fix up some python scripts:
grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'
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.10.0 -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.
-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.
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 require formulas to create PDF documentation, then you must have texlive-20230313 installed. If you require formulas to convert PostScript files to bitmaps, then you must have ghostscript-10.02.1 installed.
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 |
|
is a GUI front-end for configuring and running doxygen |
|
generates a search index called |
|
is a CGI program to search the data indexed by doxyindexer |
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++, Go, and Modula2. Since C and C++ are installed in LFS, this page is either for upgrading C and C++, or for installing additional compilers.
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 12.1 platform.
If you are upgrading GCC from any other version prior to 13.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.
Download (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz
Download MD5 sum: e0e48554cc6e4f261d55ddee9ab69075
Download size: 84 MB
Estimated disk space required: 13 GB (2.9 GB installed with all listed languages; add 1.5 GB for tests)
Estimated build time: 13 SBU (add 29 SBU for tests; both with parallelism=8)
GDB-14.1, Valgrind-3.22.0 (for tests), and ISL (to enable graphite optimization)
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/12.1/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 \ --disable-fixincludes \ --enable-languages=c,c++,fortran,go,objc,obj-c++,m2 && 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-13.2.0, about 65 FAIL occur in the “guality” suite, as well as miscellaneous failures throughout the rest of the test suite. If all the compilers above are built, there will be a little over 80 unexpected failures out of over 546,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/13.2.0/include{,-fixed}
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++,m2
:
This command identifies which languages to build. You may
modify this command to remove undesired languages. GCC also
supports Ada and D, but building GCC with Ada (or D) support
needs an existing Ada (or D) compiler. So they are not
enabled here.
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.
--enable-host-shared
--enable-languages=jit
: Build libgccjit
, a library for embedding GCC
inside programs and libraries for generating machine code.
Despite “JIT” (just-in-time) in the name, the
library can be used for AOT (ahead-of-time) compilation as
well. --enable-host-shared
is
needed for building libgccjit
, but it significantly slows
down GCC. So libgccjit
should
be built and installed separately, not as a part of the
“main”
GCC installation. If you need this library, configure GCC
with these two options and install the library by running
make -C gcc jit.install-common
jit.install-info as the root
user. This library is not used by
any BLFS package, nor tested by the BLFS developers.
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.
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 12.1 platform.
Download (HTTP): https://github.com/ivmai/bdwgc/releases/download/v8.2.6/gc-8.2.6.tar.gz
Download MD5 sum: fc5351214bc2e854070ee3319181a467
Download size: 1.2 MB
Estimated disk space required: 11 MB (with tests)
Estimated build time: 0.2 SBU (with tests)
Install GC by running the following commands:
./configure --prefix=/usr \ --enable-cplusplus \ --disable-static \ --docdir=/usr/share/doc/gc-8.2.6 && 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
--docdir=/usr/share/doc/gc-8.2.6
:
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.
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 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/gdb/gdb-14.1.tar.xz
Download MD5 sum: 4a084d03915b271f67e9b8ea2ab24972
Download size: 23 MB
Estimated disk space required: 966 MB (add 805 MB for docs; add 710 MB for tests)
Estimated build time: 2.1 SBU (add 0.4 SBU for docs; add 18 SBU for tests; all using parallelism=4)
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)
Doxygen-1.10.0, GCC-13.2.0 (ada, gfortran, and go are used for tests), Guile-3.0.9, rustc-1.76.0 (used for some tests), Valgrind-3.22.0, and SystemTap (run-time, used for tests)
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.10.0, 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:
Clean directories are needed if re-running the tests. For that reason, make a copy of the compiled source code directory before the tests in case you need to run the tests again.
Results depend on installed compilers.
A test run of the test suite had 51 unexpected failures out of the over 106000 tests.
On some systems, the gdb.tui test suite will fail if running over SSH.
On some AMD-based systems, over 200 additional tests may fail due to a difference in the threading implementation on those CPUs.
Now, as the root
user:
make -C gdb install && make -C gdbserver 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-14.1 && rm -rf gdb/doc/doxy/xml && cp -Rv gdb/doc/doxy /usr/share/doc/gdb-14.1
--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.
generates a core dump of a running program |
|
is the GNU Debugger |
|
is a remote server for the GNU debugger (it allows programs to be debugged from a different machine) |
|
Allows adding index files to ELF binaries. This speeds up gdb start on large programs. |
|
contains functions for the in-process tracing agent. The agent allows for installing fast tracepoints, listing static tracepoint markers, probing static tracepoints markers, and starting trace monitoring. |
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.6.3, Bazaar, Subversion-1.14.3, CVS, Perforce, and Team Foundation Server.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.kernel.org/pub/software/scm/git/git-2.44.0.tar.xz
Download MD5 sum: 7e4eb7c45e9ba7c90fa51deeea49732f
Download size: 7.1 MB
Estimated disk space required: 307 MB (with downloaded documentation; add 18 MB for building docs)
Estimated build time: 0.3 SBU (with parallelism=4; add 0.4 SBU for building doc, and up to 5 SBU (disk speed dependent) for tests)
https://www.kernel.org/pub/software/scm/git/git-manpages-2.44.0.tar.xz (not needed if you've installed asciidoc-10.2.0, xmlto-0.0.28, and prefer to rebuild them)
https://www.kernel.org/pub/software/scm/git/git-htmldocs-2.44.0.tar.xz and other docs (not needed if you've installed asciidoc-10.2.0 and want to rebuild the documentation).
cURL-8.6.0 (needed to use Git over http, https, ftp or ftps)
Apache-2.4.58 (for some tests), Fcron-3.2.1
(runtime, for scheduling git
maintenance jobs), GnuPG-2.4.4 (runtime, may
be used to sign Git commits
or tags, or verify the signatures of them), OpenSSH-9.6p1
(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.3 with Perl bindings
(runtime, for git
svn), Tk-8.6.13 (gitk, a simple Git repository viewer, uses Tk at runtime), Valgrind-3.22.0,
Authen::SASL and
MIME::Base64
(both runtime, for git
send-email), and
IO-Socket-SSL-2.085 (runtime, for
git send-email
to connect to a SMTP server with SSL encryption)
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
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 -k |& tee test.log. If some test fails, the list of failed tests can be shown via grep '^not ok' test.log | grep -v TODO.
Now, as the root
user:
make perllibdir=/usr/lib/perl5/5.38/site_perl install
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.44.0 install-html
If you downloaded the man pages untar them as the
root
user:
tar -xf ../git-manpages-2.44.0.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.44.0 && tar -xf ../git-htmldocs-2.44.0.tar.xz \ -C /usr/share/doc/git-2.44.0 --no-same-owner --no-overwrite-dir && find /usr/share/doc/git-2.44.0 -type d -exec chmod 755 {} \; && find /usr/share/doc/git-2.44.0 -type f -exec chmod 644 {} \;
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.44.0/man-pages/{html,text} && mv /usr/share/doc/git-2.44.0/{git*.txt,man-pages/text} && mv /usr/share/doc/git-2.44.0/{git*.,index.,man-pages/}html && mkdir -vp /usr/share/doc/git-2.44.0/technical/{html,text} && mv /usr/share/doc/git-2.44.0/technical/{*.txt,text} && mv /usr/share/doc/git-2.44.0/technical/{*.,}html && mkdir -vp /usr/share/doc/git-2.44.0/howto/{html,text} && mv /usr/share/doc/git-2.44.0/howto/{*.txt,text} && mv /usr/share/doc/git-2.44.0/howto/{*.,}html && sed -i '/^<a href=/s|howto/|&html/|' /usr/share/doc/git-2.44.0/howto-index.html && sed -i '/^\* link:/s|howto/|&html/|' /usr/share/doc/git-2.44.0/howto-index.txt
--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.44.0.tar.gz -C /usr/share/man
--no-same-owner: This untars git-manpages-2.44.0.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.44.0 ...: 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.
is the stupid content tracker |
|
is a CVS server emulator for Git |
|
is a graphical Git repository browser (needs Tk-8.6.13) |
|
is invoked by git send-pack and updates the repository with the information fed from the remote end |
|
is a login shell for SSH accounts to provide restricted Git access |
|
is invoked by git archive --remote and sends a generated archive to the other end over the git protocol |
|
is invoked by git fetch-pack, it discovers what objects the other side is missing, and sends them after packing |
|
is a repository management tool that optimizes Git for use in large repositories |
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.
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:
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
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):
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 .
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:
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
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
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.
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 bootscript included in the blfs-bootscripts-20240209 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
The script to start the git daemon uses some default values
internally. Most important is the path to the repository
directory which is set to /srv/git
. In case you have for whatever
reason created the repository in a different location,
you'll need to tell the boot script where the repository is
to be found. This can be achieved by creating a
configuration file named /etc/sysconfig/git-daemon
. This
configuration file will be imported if it exists, meaning
it is optional. The file can look like:
# Begin /etc/sysconfig/git-daemon # Specify the location of the git repository GIT_BASE_DIR="/srv/git/" # Directories added to whitelist DFT_REPO_DIR="$GIT_BASE_DIR" # Add extra options which will appended to the 'git daemon' # command executed in the boot script GIT_DAEMON_OPTS="" # End /etc/sysconfig/git-daemon
There are only three options to set in the configuration file:
GIT_BASE_DIR=<dirname>
Specify the location of the git repositories. Relative paths used when accessing the daemon will translated relative to this directory.
DFT_REPO_DIR=<dirname>
This directory is added to the white list of allowed
directories. This variable can hold multiple
directory names but is usually set equal to
GIT_BASE_DIR
.
GIT_DAEMON_OPTS=<options>
In case special options to the git daemon command
are needed, they have to be specified in this
setting. One example might be to adjust the port
number where daemon is listening. In this case, add
--port=<port
number>
to this variable. For more
information about which options can be set, take a
look at the output of git daemon --help.
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.
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 12.1 platform.
Download (HTTP): https://ftp.gnu.org/gnu/guile/guile-3.0.9.tar.xz
Download MD5 sum: 258983e0156c2bc66539dcbcb96f2bd2
Download size: 5.5 MB
Estimated disk space required: 221 MB (add 4 MB for tests)
Estimated build time: 5.9 SBU (Using parallelism=4; add 0.3 SBU for tests)
Emacs-29.2 and GDB-14.1 (run-time only dependencies).
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
--disable-static
:
This switch prevents installation of static versions of the
libraries.
is a stand-alone Scheme interpreter for Guile |
|
is a Guile script which provides the information necessary to link your programs against the Guile library, in much the same way PkgConfig does |
|
is a script to parse declarations in your C code for Scheme visible C functions |
|
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 |
|
is a symlink to guild |
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 12.1 platform.
Download (HTTP): https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/llvm-17.0.6.src.tar.xz
Download MD5 sum: fd7fc891907e14f8e0ff7e3f87cc89a4
Download size: 57 MB
Estimated disk space required: 4.2 GB (964 MB installed; add 20 GB for tests and 308 MB for documentation)
Estimated build time: 13 SBU (Add 8 SBU for tests; both using parallelism=8)
Cmake modules for LLVM
Download: https://anduin.linuxfromscratch.org/BLFS/llvm/llvm-cmake-17.src.tar.xz
Download MD5 sum: 2b75b6446bfd5d0dcc288cd412b6a52a
Download size: 12 KB
Third-party dependencies for LLVM build system
Download: https://anduin.linuxfromscratch.org/BLFS/llvm/llvm-third-party-17.src.tar.xz
Download MD5 sum: 09c9f2259766dd65b75cd728df11b395
Download size: 376 KB
Clang
Download: https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/clang-17.0.6.src.tar.xz
Download MD5 sum: 52ff9f49e064860445474aa21e4a7e40
Download size: 21 MB
Patch enabling SSP by default in clang: https://www.linuxfromscratch.org/patches/blfs/12.1/clang-17-enable_default_ssp-1.patch
Compiler RT
Download: https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/compiler-rt-17.0.6.src.tar.xz
Download MD5 sum: 85d25f04cbc4c1a20e3a1ab2a2c522cd
Download size: 2.4 MB
Doxygen-1.10.0, git-2.44.0, Graphviz-10.0.1, libxml2-2.12.5, Pygments-2.17.2, rsync-3.2.7 (for tests), recommonmark-0.7.1 (for building documentation), texlive-20230313 (or install-tl-unx), Valgrind-3.22.0, PyYAML-6.0.1, Zip-3.0, OCaml, psutil (for tests), and Z3
Two additional tarballs llvm-cmake-17.src.tar.xz
and llvm-third-party-17.src.tar.xz
are needed
by LLVM building system. The upstream expects them extracted
at the same level as the llvm-17.0.6.src.tar.xz
tarball, and the
extracted directories renamed to cmake
and third-party
. Extract them and modify the
build system to avoid creating ambiguously-named directories
outside the llvm-17.0.6.src
hierarchy:
tar -xf ../llvm-cmake-17.src.tar.xz && tar -xf ../llvm-third-party-17.src.tar.xz && sed '/LLVM_COMMON_CMAKE_UTILS/s@../cmake@llvm-cmake-17.src@' \ -i CMakeLists.txt && sed '/LLVM_THIRD_PARTY_DIR/s@../third-party@llvm-third-party-17.src@' \ -i cmake/modules/HandleLLVMOptions.cmake
Install clang into the source tree by running the following commands:
tar -xf ../clang-17.0.6.src.tar.xz -C tools && mv tools/clang-17.0.6.src tools/clang
If you have downloaded compiler-rt, install it into the source
tree by running the following commands, and modify the
building system so it will find the llvm-cmake-17.src
directory correctly:
tar -xf ../compiler-rt-17.0.6.src.tar.xz -C projects && mv projects/compiler-rt-17.0.6.src projects/compiler-rt && sed '/^set(LLVM_COMMON_CMAKE_UTILS/d' \ -i projects/compiler-rt/CMakeLists.txt
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.12.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-17-enable_default_ssp-1.patch
If you have downloaded compiler-rt, fix a test case broken by default SSP in clang:
sed 's/clang_dfsan/& -fno-stack-protector/' \ -i projects/compiler-rt/test/dfsan/origin_unaligned_memtrans.c
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" \ -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
If you wish to run the tests, remove a test case known to hang indefinitely on some systems:
rm -f ../projects/compiler-rt/test/tsan/getline_nohang.cpp
LLVM test suite can produce many core dump files. They will occupy a large amount of disk space, and the core dump process can significantly slow down the testing. To test the results with core dump disabled, issue:
sh -c 'ulimit -c 0 && ninja check-all'
If -jN
(N replaced with a number)
is passed to ninja, the tests will be
built with N logical cores, but run using all available
logical cores. Run the test command in a cgroup ( read
the
section called “Use Linux Control Group to Limit the Resource
Usage” for details) to limit the number of logical cores
for running the tests. One test named Linux/clone_setns.cpp
will fail if
CONFIG_USER_NS
is not enabled in
kernel configuration.
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-17.0.6 && mv -v /usr/share/doc/LLVM/llvm /usr/share/doc/llvm-17.0.6 && 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-17.0.6 && mv -v /usr/share/doc/LLVM/clang /usr/share/doc/llvm-17.0.6 && rmdir -v --ignore-fail-on-non-empty /usr/share/doc/LLVM
-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"
:
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 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-17.so.
-DLLVM_ENABLE_RTTI=ON
: This
switch is used to build LLVM with run-time type information.
This is required for building Mesa-24.0.1.
-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.10.0. You should run
make
doxygen-html afterwards, and install the
generated documentation manually.
lists AMD GPUs installed; at runtime it needs
|
|
is a static analysis tool |
|
is the automatic test case reduction tool |
|
is used to test the libclang API and demonstrate its usage |
|
is the Clang C, C++, and Objective-C compiler |
|
is a tool to perform static code analysis and display Abstract Syntax Trees (AST) |
|
is a tool to collect the USR name and location of external definitions in a source file |
|
is a tool to format C/C++/Java/JavaScript/Objective-C/Protobuf code |
|
is a wrapper utility over the host linker |
|
is a tool to bundle/unbundle OpenMP offloaded files associated with a common source file |
|
is a tool to bundle several object files into a single binary, which can then be used to create a fatbinary containing offloading code |
|
is a Clang-based refactoring tool for C, C++ and Objective-C |
|
is a tool to rename symbols in C/C++ programs |
|
is a tool to scan for dependencies in a source file |
|
is a combination of tools for dealing with diagnostics in clang |
|
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. |
|
is a tool used to manipulate archived DWARF debug symbol files, compatible with the Darwin command dsymutil |
|
runs clang-format on git generated patches (requires git-2.44.0) |
|
is a Python tool to dump and construct header maps |
|
generates a database of build commands for a project |
|
is the LLVM static compiler |
|
is used to directly execute programs from LLVM bitcode |
|
is a tool used to convert addresses into file names and line numbers |
|
is the LLVM archiver |
|
is the LLVM assembler |
|
is the LLVM bitcode analyzer |
|
strips LLVM bitcode from an object |
|
is a tool to concatenate llvm modules |
|
identifies whether Control Flow Integrity protects all indirect control flow instructions in the provided object file, DSO, or binary |
|
Prints LLVM compilation options |
|
is used to emit coverage information |
|
is a bytecode disassembler |
|
is a tool to convert Microsoft resource files to COFF |
|
is used as a C++ ABI Data Dumper |
|
is used to demangle C++ symbols in llvm code |
|
is used to remap C++ mangled symbols |
|
prints a logical representation of low-level debug information |
|
is a service providing debug information over an HTTP API for analyzing stripped binaries |
|
is an interface to the llvm-debuginfod daemon for finding debuginfod artifacts |
|
is the LLVM structural 'diff' |
|
is the LLVM disassembler |
|
prints the content of DWARF sections in object files |
|
is a tool to copy and manipulate debug info |
|
merges split DWARF files |
|
is used to read information about an ELF binary's ABI |
|
is a benchmarking tool that uses information available in LLVM to measure host machine instruction characteristics like latency or port decomposition |
|
is used to extract a function from an LLVM module |
|
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 |
|
is used to merge interface stubs with object files |
|
is used to rewrite load commands into MachO binary format |
|
is used to parse relocatable object files to make their contents executable in a target process |
|
provides basic libtool functionality on Darwin-based systems. This is mostly useful if you are generating binaries for macOS systems |
|
is the LLVM linker |
|
is used to create universal binaries from MachO files |
|
is the LLVM LTO (link time optimization) linker |
|
is a test harness for the resolution based LTO interface |
|
is a standalone machine code assembler/disassembler |
|
is a performance analysis tool to statically measure the performance of machine code |
|
is a playground for machine code provided by LLVM |
|
is a tool to extract one module from multimodule bitcode files |
|
is a tool to generate signed files and catalogs from a side-by-side assembly manifest (used for Microsoft SDK) |
|
is used to list LLVM bitcode and object file's symbol table |
|
is LLVM's version of an objcopy tool |
|
is an LLVM object file dumper |
|
is a tool to generate an optimization report from YAML optimization record files |
|
is a PDB (Program Database) dumper. PDB is a Microsoft format |
|
is a small tool to manipulate and print profile data files |
|
generates LLVM SPGO profiling information |
|
is used to generate an index for a LLVM archive |
|
is a platform-independent tool to compile resource scripts into binary resource files |
|
displays low-level format-specific information about object files |
|
is used to automatically reduce testcases when running a test suite |
|
reports the difference in instruction count and stack size remarks between two remark files |
|
converts remark files between bitstream and YAML; or prints function instruction count information in remark files |
|
is the LLVM MC-JIT tool |
|
is the LLVM object size dumper |
|
is the LLVM module splitter |
|
is used to generate random |
|
print strings found in a binary (object file, executable, or archive library) |
|
converts addresses into source code locations |
|
is the LLVM Target Description To C++ Code Generator |
|
is the LLVM TargetLibraryInfo versus SDK checker |
|
is a tool to demangle names |
|
is an implementation of Google's XRay function call tracing system |
|
lists NVIDIA GPUs installed; at runtime it needs
|
|
is the LLVM optimizer |
|
is the sanitizer coverage processing tool |
|
is the sanitizer statistics processing tool |
|
is a Perl script that invokes the Clang static analyzer |
|
is a Python script that invokes the Clang static analyzer |
|
is a viewer for Clang static analyzer results |
|
splits an input file into multiple parts separated by regex |
|
is the LLVM tool to verify use-list order |
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 12.1 platform.
Download (HTTP): https://www.lua.org/ftp/lua-5.4.6.tar.gz
Download MD5 sum: 25a429319dff20dfbfb9956c2b5be911
Download size: 356 KB
Estimated disk space required: 3.8 MB (with Basic tests)
Estimated build time: less than 0.1 SBU (with Basic tests)
Required patch: https://www.linuxfromscratch.org/patches/blfs/12.1/lua-5.4.6-shared_library-1.patch
Optional Test Suite Download (HTTP): https://www.lua.org/tests/lua-5.4.6-tests.tar.gz
Optional Test Suite Download MD5 sum: e10a3da28b05d0e8d25ad08b7820c213
Optional Test Suite Download size: 134 KB
Some packages check for the pkg-config file for Lua, which is created with:
cat > lua.pc << "EOF"
V=5.4
R=5.4.6
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.6-shared_library-1.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.6" \ install && mkdir -pv /usr/share/doc/lua-5.4.6 && cp -v doc/*.{html,css,gif,png} /usr/share/doc/lua-5.4.6 && 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.6-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".
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.2.3 and VLC-3.0.20.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.lua.org/ftp/lua-5.2.4.tar.gz
Download MD5 sum: 913fdb32207046b273fdb17aad70be13
Download size: 248 KB
Estimated disk space required: 3.6 MB
Estimated build time: less than 0.1 SBU
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/* /
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.
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 12.1 platform.
Download (HTTP): https://www.mercurial-scm.org/release/mercurial-6.6.3.tar.gz
Download MD5 sum: b6c1716150b0da35d44d1155cb3ae853
Download size: 7.9 MB
Estimated disk space required: 115 MB (with docs, add 1.5 GB for tests)
Estimated build time: 0.3 SBU (with docs; add 14 SBU for tests; both using parallelism=8)
docutils-0.20.1 (required to build the
documentation), git-2.44.0, GPGME-1.23.2 (with Python bindings),
OpenSSH-9.6p1 (runtime, to access
ssh://... repositories), Pygments-2.17.2, rustc-1.76.0 (see
rust/README.rst
and
rust/rhg/README.md
), Subversion-1.14.3 (with Python
bindings), Bazaar, CVS, pyflakes,
pyOpenSSL, and
re2
Build Mercurial by issuing the following command:
make build
To build the documentation (requires docutils-0.20.1), issue:
make doc
If you wish to run the tests, the rust tests must be removed as they are currently broken due to syntax errors. To do this, issue:
sed -i '138,142d' Makefile
To run the test suite, issue:
TESTFLAGS="-j<N>
--tmpdir tmp" make check
where <N>
is
an integer between one and the number of ( processor X
threads ), inclusive. Several tests 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 <user_name> 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.
/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.13 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
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 12.1 platform.
Download (HTTP): https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.xz
Download MD5 sum: d755ba0d16f94616c2907f8cab7c748b
Download size: 993.8 KB
Estimated disk space required: 41 MB
Estimated build time: 0.2 SBU
Optional documentation: https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01-xdoc.tar.xz
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
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 12.1 platform.
Download (HTTP): https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0.tar.gz
Download MD5 sum: b02099b0d63f06b3fe370f4edfc0c085
Download size: 448 KB
Estimated disk space required: 20 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
Install patchelf by running the following commands:
./configure --prefix=/usr \ --docdir=/usr/share/doc/patchelf-0.18.0 && make
To test the results, issue: make check.
Now, as the root
user:
make install
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.
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/perl-modules
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/P/PH/PHRED/Archive-Zip-1.68.tar.gz
Download MD5 sum: a33993309322164867c99e04a4000ee3
UnZip-6.0 (with its patch)
This module uses the standard build and installation instructions:
perl Makefile.PL && make && make test
Now, as the root
user:
make install
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/V/VP/VPIT/autovivification-0.18.tar.gz
Download MD5 sum: 8dec994e1e7d368e055f21a5777385a0
The Business::ISBN module provides functions for working with International Standard Book Numbers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/B/BR/BRIANDFOY/Business-ISBN-3.009.tar.gz
Download MD5 sum: e906867846f4d1fa57366aa519da5846
The Business::ISMN module is for work with International Standard Music Numbers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/B/BR/BRIANDFOY/Business-ISMN-1.204.tar.gz
Download MD5 sum: dbc9023703262ee29d1b9e9a8294106c
The Business::ISSN module is for work with International Standard Serial Numbers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISSN-1.005.tar.gz
Download MD5 sum: f46bf5585d6c3aa9fb32127edb13151a
Class::Accessor generates accessors/mutators for your class.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/K/KA/KASEI/Class-Accessor-0.51.tar.gz
Download MD5 sum: 1f1e5990f87cad7659b292fed7dc0407
The Data::Compare module compares two perl data structures.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DC/DCANTRELL/Data-Compare-1.29.tar.gz
Download MD5 sum: ce9cb42ba6af634f5ab51f13f37e2ddb
Data::Dump provides pretty printing of data structures.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/G/GA/GARU/Data-Dump-1.25.tar.gz
Download MD5 sum: 9bd7131ef0441e1e0e001bf85e9fae31
Data::Uniqid provides three simple routines for generating unique IDs.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/M/MW/MWX/Data-Uniqid-0.12.tar.gz
Download MD5 sum: 6bab3b5da09fedfdf60ce2629a7367db
DateTime::Calendar::Julian implements the Julian Calendar.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/W/WY/WYANT/DateTime-Calendar-Julian-0.107.tar.gz
Download MD5 sum: abd775d1d82f0f45d4fd6214cf7bbed8
DateTime::Format::Builder created DateTime parser classes and objects.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.83.tar.gz
Download MD5 sum: aa41917ca9ad69b3898728ce9c2fb477
Encode::EUCJPASCII provides an eucJP-open (Extended Unix Code, Japanese) mapping.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/N/NE/NEZUMI/Encode-EUCJPASCII-0.03.tar.gz
Download MD5 sum: 5daa65f55b7c2050bb0713d9e95f239d
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz
Download MD5 sum: e1d3bc32c1c8ee304235a06fbcd5d5a4
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
The Encode::JIS2K module provides JIS X 0212 (aka JIS 2000) Encodings.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DA/DANKOGAI/Encode-JIS2K-0.05.tar.gz
Download MD5 sum: 06acd9e878d41ffc354258e265db2875
File::FcntlLock is a module to do file locking in an object
oriented fashion using the fcntl(2) system
call. This allows locks on parts of a file as well as on
the whole file and overcomes some known problems with
flock(2), on
which which Perl's flock()
function is based per default.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/J/JT/JTT/File-FcntlLock-0.22.tar.gz
Download MD5 sum: 579698d735d864ee403674f1175f789d
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/L/LE/LEONT/File-Slurper-0.014.tar.gz
Download MD5 sum: d43bc5f069035eff3b6b7c418b4cedc4
File::Which provides a portable implementation of the 'which' utility.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/P/PL/PLICEASE/File-Which-1.27.tar.gz
Download MD5 sum: d5c9154262b93398f0750ec364207639
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/HTML-Parser-3.81.tar.gz
Download MD5 sum: b9f5dd3b14632f7a60541a2b61389c06
HTML-Tagset-3.20 HTTP-Message-6.44 (stritly speaking, not required for building, but its module HTTP::Headers is required for tests and a run-time requirement for HTML::HeadParser from this distribution).
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/HTTP-Daemon-6.16.tar.gz
Download MD5 sum: 51425462790165aeafc2819a7359706f
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.
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-2.085.tar.gz
Download MD5 sum: 7a13ba92cdbad523f1a489c03b151569
make-ca-1.13 and Net-SSLeay-1.92
URI-5.27 (to access international domain names)
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
IO::String - Emulate file interface for in-core strings.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/G/GA/GAAS/IO-String-1.08.tar.gz
Download MD5 sum: 250e5424f290299fc3d6b5d1e9da3835
IPC::Run3 is used to run a subprocess with input/output redirection.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/R/RJ/RJBS/IPC-Run3-0.049.tar.gz
Download MD5 sum: 569393ca56dfb78dedd79e93c0439159
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/I/IS/ISHIGAKI/JSON-4.10.tar.gz
Download MD5 sum: a709b32e194d0eb38f788cb49f422c4e
Lingua::Translit and its translit program transliterate text between writing systems.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/A/AL/ALINKE/Lingua-Translit-0.29.tar.gz
Download MD5 sum: 605a82f06b05fef4fc18bf069b1be511
This module uses the standard build and installation instructions:
perl Makefile.PL && make && make test
Now, as the root
user:
make install
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/libwww-perl-6.76.tar.gz
Download MD5 sum: 5a069cd1173e8f4284b775f258ed3e33
File-Listing-6.15, HTTP-CookieJar-0.014, HTTP-Cookies-6.10, HTTP-Daemon-6.16, HTTP-Negotiate-6.01, HTML-Parser-3.81, Net-HTTP-6.23, Try-Tiny-0.31 and WWW-RobotRules-6.02
Test-Fatal-0.017, Test-Needs-0.002010 and Test-RequiresInternet-0.05
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.13.
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DR/DROLSKY/List-AllUtils-0.19.tar.gz
Download MD5 sum: 86469b1f6819ba181a8471eb932965f2
List::MoreUtils provides the stuff missing in List::Util.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-0.430.tar.gz
Download MD5 sum: daccd6310021231b827dcc943ff1c6b7
Log::Log4perl provides a Log4j implementation for perl.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/E/ET/ETJ/Log-Log4perl-1.57.tar.gz
Download MD5 sum: acbe29cbaf03f4478a13579a275b0011
This module uses the standard build and installation instructions:
perl Makefile.PL && make && make test
Now, as the root
user:
make install
LWP::Protocol::https provides https support for LWP::UserAgent (i.e. libwww-perl-6.76). 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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/LWP-Protocol-https-6.13.tar.gz
Download MD5 sum: 583582eb7e11d575d16466d2f62b3877
IO-Socket-SSL-2.085, libwww-perl-6.76 and make-ca-1.13 with /etc/pki/tls/certs/ca-bundle.crt
.
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEONT/Module-Build-0.4232.tar.gz
Download MD5 sum: 144885f1cbaf9420017bbed696ec6b83
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
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/N/NL/NLNETLABS/Net-DNS-1.44.tar.gz
Download MD5 sum: e4694815daeeb6f7ac80e0a1fec6839b
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/J/JT/JTBRAUN/Parse-RecDescent-1.967015.tar.gz
Download MD5 sum: 7a36d45d62a9b68603edcdbd276006cc
Parse::Yapp is a Perl extension for generating and using LALR parsers.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/W/WB/WBRASWELL/Parse-Yapp-1.21.tar.gz
Download MD5 sum: 69584d5b0f0304bb2a23cffcd982c5de
This module uses the standard build and installation instructions:
perl Makefile.PL && make && make test
Now, as the root
user:
make install
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/L/LE/LEONT/PerlIO-utf8_strict-0.010.tar.gz
Download MD5 sum: d90ca967f66e05ad9221c79060868346
Regexp::Common provides commonly requested regular expressions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2017060201.tar.gz
Download MD5 sum: b1bb40759b84154990f36a160160fb94
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/R/RA/RAAB/SGMLSpm-1.1.tar.gz
Download MD5 sum: 746c74ae969992cedb1a2879b4168090
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
is an SGML processor |
|
is a symbolic link used during the install of DocBook-utils-0.6.14 |
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/S/SA/SALVA/Sort-Key-1.33.tar.gz
Download MD5 sum: a37ab0da0cfdc26e57b4c79e39f6d98f
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DA/DANBOO/Test-Command-0.11.tar.gz
Download MD5 sum: 9ab83c4695961dbe92cd86efe08f0634
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/D/DC/DCANTRELL/Test-Differences-0.71.tar.gz
Download MD5 sum: 23a54d5ada6ffe0850f42cd768b4b3c1
Text::BibTeX provides an interface to read and parse BibTeX files.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/A/AM/AMBS/Text-BibTeX-0.89.tar.gz
Download MD5 sum: 67fa6d9c03c659627d9fd58bb380c1fe
This module is built using Build.PL
:
perl Build.PL && ./Build && ./Build test
Now, as the root
user:
./Build install
performs lexical analysis on a BibTeX file |
|
parses a series of BibTeX files with command line options to control the string post-processing behavior |
|
parses a BibTeX file, splitting 'author' and 'editor' fields into lists of names, and then dumps everything to stdout |
|
is a library for parsing and processing BibTeX data files |
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/I/IS/ISHIGAKI/Text-CSV-2.04.tar.gz
Download MD5 sum: 500b1cd1349e2186877c39aa404230dc
Text-CSV_XS-1.53 (required by biber-2.19)
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/S/SY/SYP/Text-Roman-3.5.tar.gz
Download MD5 sum: 1f6b09c0cc1f4425b565ff787a39fd83
Unicode::Collate provides a Unicode collation algorithm.
This is a core module. If you are using perl-5.28.0 or later, its version is good enough for biber-2.19 and you do not need to reinstall this module.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/S/SA/SADAHIRO/Unicode-Collate-1.31.tar.gz
Download MD5 sum: ee4d960d057c5e5b02ebb49d0286db8f
Unicode::LineBreak provides a UAX #14 Unicode Line Breaking Algorithm.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/N/NE/NEZUMI/Unicode-LineBreak-2019.001.tar.gz
Download MD5 sum: 003d6da7a13700e069afed9238c864b9
MIME-Charset-1.013.1, also Wget-1.21.4 (to download two files from unicode.org in the test suite)
libthai (to break Thai words into segments)
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/URI-5.27.tar.gz
Download MD5 sum: b5d4d26b96b4e2372bb68764f6377fea
Test-Fatal-0.017, Test-Needs-0.002010, and Test-Warnings-0.031
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/M/MA/MARKOV/XML-LibXML-Simple-1.01.tar.gz
Download MD5 sum: faad5ed26cd83998f6514be199c56c38
XML-LibXSLT provides an interface to libxslt-1.1.39
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXSLT-2.002001.tar.gz
Download MD5 sum: b47ac3a69b58fa43386c4f39be5d7bd5
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 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/G/GR/GRANTM/XML-Simple-2.25.tar.gz
Download MD5 sum: bb841dce889a26c89a1c2739970e9fbc
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),
XML::Writer provides a Perl extension for writing XML documents.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-0.900.tar.gz
Download MD5 sum: 2457214360cefda445742a608dd6195e
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.15p5 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.
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
.
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 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.
Algorithm::Diff computes 'intelligent' differences between two files or lists.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS//Algorithm-Diff-1.201.tar.gz
Download MD5 sum: 2eaae910f5220261ee2bbdfc4a8df2c2
Alien::Build provides tools for building external (non-CPAN) dependencies for CPAN.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Build-2.77.tar.gz
Download MD5 sum: 65dab78e4dbde17fef13667d3be60ae0
Capture-Tiny-0.48, File-Which-1.27, FFI-CheckLib-0.31 and File-chdir-0.1011
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Build-Plugin-Download-GitLab-0.01.tar.gz
Download MD5 sum: ad1d815262ad7dd98b0a9b35ba2f05ef
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.12.5.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.19.tar.gz
Download MD5 sum: 54ef82ddf7641279a72f216e405f9a5e
Alien-Build-Plugin-Download-GitLab-0.01, libxml2-2.12.5, Path-Tiny-0.144
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/B-COW-0.007.tar.gz
Download MD5 sum: 7afc46f19e6f906e2ba5769b21fca5ff
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/B-Hooks-EndOfScope-0.26.tar.gz
Download MD5 sum: 6e1a5334ccc7809aa7cc82dbfa1affc7
Module-Implementation-0.09, Sub-Exporter-Progressive-0.001013 and Variable-Magic-0.63
Business-ISBN-Data is a data pack for Business::ISBN.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Business-ISBN-Data-20240209.001.tar.gz
Download MD5 sum: 9eecef0abe410be4c41a74adafdca230
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Capture-Tiny-0.48.tar.gz
Download MD5 sum: f5d24083ad270f8326dd659dd83eeb54
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RS/RSHERER/Class-Data-Inheritable-0.09.tar.gz
Download MD5 sum: bd25ecd6e5d528fbc3783edf1b8facef
Class::Inspector allows you to get information about a loaded class.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Class-Inspector-1.36.tar.gz
Download MD5 sum: 084c3aeec023639d21ecbaf7d4460b21
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/S/SH/SHAY/Class-Singleton-1.6.tar.gz
Download MD5 sum: d9c84a7b8d1c490c38e88ed1f9faae47
Class:Tiny offers a minimalist class construction kit.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Class-Tiny-1.008.tar.gz
Download MD5 sum: e3ccfae5f64d443e7e1110be964d7202
Clone recursively copies perl datatypes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GARU/Clone-0.46.tar.gz
Download MD5 sum: cafa8984a2c2e005e54b27dd1e3f0afe
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/A/AM/AMBS/Config-AutoConf-0.320.tar.gz
Download MD5 sum: 71664b2864232e265179ac29298e0916
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEONT/CPAN-Meta-Check-0.017.tar.gz
Download MD5 sum: e0117bc582058abed184f6d9b23c445e
DateTime is a date and time object for perl.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-1.59.tar.gz
Download MD5 sum: d6d73ba9ff03e00c83610a995fadc481
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
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Strptime-1.79.tar.gz
Download MD5 sum: 441cfec62b0b8a1b4c05cbe5ef73fbf4
DateTime::Locale provides localization support for DateTime-1.59.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-Locale-1.37.tar.gz
Download MD5 sum: 3b0ce0ebf768960fd5d08300557176e7
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
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-TimeZone-2.57.tar.gz
Download MD5 sum: 1da2beb4ae09e225dd0057dc438a276d
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
Devel::StackTrace provides an object representing a stack trace.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Devel-StackTrace-2.04.tar.gz
Download MD5 sum: a5b09f7be7f2b10b525a9740676906d8
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DO/DOY/Dist-CheckConflicts-0.11.tar.gz
Download MD5 sum: c8725a92b9169708b0f63036812070f2
Encode::Locale determines the locale encoding.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/Encode-Locale-1.05.tar.gz
Download MD5 sum: fcfdb8e4ee34bcf62aed429b4a23db27
Eval::Closure safely and cleanly creates closures via string eval.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DO/DOY/Eval-Closure-0.14.tar.gz
Download MD5 sum: ceeb1fc579ac9af981fa6b600538c285
Exception::Class allows you to declare real exception classes in Perl.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Exception-Class-1.45.tar.gz
Download MD5 sum: 1e564d20b374a99fdf660ba3f36b0098
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/Exporter-Tiny-1.006000.tar.gz
Download MD5 sum: 2d555e289eac6450052e8683c292cbf7
ExtUtils::LibBuilder is a tool to build C libraries.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/A/AM/AMBS/ExtUtils-LibBuilder-0.08.tar.gz
Download MD5 sum: 8ffe9e9a3c2f916f40dc4f6aed237d33
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/FFI-CheckLib-0.31.tar.gz
Download MD5 sum: ffc8e61bb686dd631bed3ddf102af41c
Capture-Tiny-0.48, File-Which-1.27, Path-Tiny-0.144, Test2-Suite-0.000145
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/File-chdir-0.1011.tar.gz
Download MD5 sum: 932090f6c5f602301ae66c259de23ebb
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DM/DMUEY/File-Copy-Recursive-0.45.tar.gz
Download MD5 sum: e5eee1a3f8ae3aebbac063ea54870e54
Path-Tiny-0.144, Test-Deep-1.204, Test-Fatal-0.017, Test-File-1.993 and Test-Warnings-0.031
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/File-Find-Rule-0.34.tar.gz
Download MD5 sum: a7aa9ad4d8ee87b2a77b8e3722768712
This module uses the standard build and installation instructions:
perl Makefile.PL && make && make test
Now, as the root
user:
make install
File::Listing parses a directory listing.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/File-Listing-6.15.tar.gz
Download MD5 sum: 8ba34641a6c5a2ec1b0bf7064f68c535
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RE/REHSACK/File-ShareDir-1.118.tar.gz
Download MD5 sum: 0084f730f4e3d4d89703d92b3ea82f54
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/File-ShareDir-Install-0.14.tar.gz
Download MD5 sum: bac4d924f3d863b00648ab56ec0dcbdc
HTML::Tagset provides several data tables useful in parsing HTML.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz
Download MD5 sum: d2bfa18fe1904df7f683e96611e87437
HTTP::CookieJar provides a minimalist HTTP user agent cookie jar.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/HTTP-CookieJar-0.014.tar.gz
Download MD5 sum: a1d891ce0046f1a2c19e2c617d624d0d
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.76) object knows about.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Cookies-6.10.tar.gz
Download MD5 sum: b4d7804231b1dfd10999d42283e0cf06
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Date-6.05.tar.gz
Download MD5 sum: 2ecbb3aedf6aef062605191813ca3027
TimeDate-2.33 (to allow it to recognize zones other than GMT and numeric)
HTTP::Message provides a base class for HTTP style message objects.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Message-6.44.tar.gz
Download MD5 sum: 926a077669a7828c5ca39b5cf7735625
Clone-0.46, Encode-Locale-1.05, HTTP-Date-6.05, IO-HTML-1.004, LWP-MediaTypes-6.04, and URI-5.27
HTTP::Negotiate provides a complete implementation of the HTTP content negotiation algorithm.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz
Download MD5 sum: 1236195250e264d7436e7bb02031671b
Importer provides an alternative but compatible interface to modules that export symbols.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Importer-0.026.tar.gz
Download MD5 sum: 3f09930b82cadfe26d0ce2fb1338aa1b
IO::HTML opens an HTML file with automatic character set detection.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/C/CJ/CJM/IO-HTML-1.004.tar.gz
Download MD5 sum: 04bbe363686fd19bfb4cc0ed775e3d03
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/J/JK/JKEENAN/IPC-System-Simple-1.30.tar.gz
Download MD5 sum: e68341fd958fd013b3521d909904f675
List::MoreUtils::XS is a compiled backend for List::MoreUtils
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-XS-0.430.tar.gz
Download MD5 sum: e77113e55b046906aecfb4ddb4f0c662
List::SomeUtils provides the stuff missing in List::Util.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-0.59.tar.gz
Download MD5 sum: 333b4adb2907deff2be8da5899881453
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-XS-0.58.tar.gz
Download MD5 sum: 396eabe83a75fcb8d7542d95812469d1
List::UtilsBy provides a number of higher-order list utility functions.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PEVANS/List-UtilsBy-0.12.tar.gz
Download MD5 sum: 54a8c7092bc02f29ea6c5ae215eea385
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/LWP-MediaTypes-6.04.tar.gz
Download MD5 sum: 84b799a90c0d2ce52897a7cb4c0478d0
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/MIME-Charset-1.013.1.tar.gz
Download MD5 sum: b1932cfc806c8deb1b4a20d6afbfa8ac
Encode-EUCJPASCII-0.03, Encode-HanExtra-0.23 and Encode-JIS2K-0.05 (because all are required by biber-2.19)
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
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Module-Implementation-0.09.tar.gz
Download MD5 sum: 52e3fe0ca6b1eff0488d59b7aacc0667
Module-Runtime-0.016, Try-Tiny-0.31
Module::Pluggable provides a way of having 'plugins' for your module.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/S/SI/SIMONW/Module-Pluggable-5.2.tar.gz
Download MD5 sum: 87ce2971662efd0b69a81bb4dc9ea76c
Module::Runtime provides functions to deal with runtime handling of Perl modules.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/Module-Runtime-0.016.tar.gz
Download MD5 sum: d3d47222fa2e3dfcb4526f6cc8437b20
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/MRO-Compat-0.15.tar.gz
Download MD5 sum: f644dafe901214cedfa7ed8b43b56df1
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/namespace-autoclean-0.29.tar.gz
Download MD5 sum: 39b38c776cd1f0ee03cc70781a2f2798
namespace-clean-0.27, Sub-Identify-0.14
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RI/RIBASUSHI/namespace-clean-0.27.tar.gz
Download MD5 sum: cba97f39ef7e594bd8489b4fdcddb662
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/Net-HTTP-6.23.tar.gz
Download MD5 sum: 1682735ddd1c059864ca5c1bbf15ab95
Net::SSLeay is a Perl extension for using OpenSSL.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/C/CH/CHRISN/Net-SSLeay-1.92.tar.gz
Download MD5 sum: 9e928bc6f430a874a1a2185f84a0ae88
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
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Number-Compare-0.03.tar.gz
Download MD5 sum: ded4085a8fc96328742785574ca65208
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Package-Stash-0.40.tar.gz
Download MD5 sum: 7a2922941cc2aad6a52642e4fb13d07b
Dist-CheckConflicts-0.11, Module-Implementation-0.09
CPAN-Meta-Check-0.017, Test-Fatal-0.017, Test-Needs-0.002010
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Params-Validate-1.31.tar.gz
Download MD5 sum: ef5f57387c2c9032b59fb23023cf5b25
Module-Build-0.4232, Module-Implementation-0.09
Params::ValidationCompiler builds an optimized subroutine parameter validator.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Params-ValidationCompiler-0.31.tar.gz
Download MD5 sum: 15528055f3f53c8cfebbee1f928dec07
Exception-Class-1.45, Specio-0.48
Path::Tiny provides a small fast utility for working with file paths.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Path-Tiny-0.144.tar.gz
Download MD5 sum: 7b2fc4f5edfd29b88d2cc3b96830e7d1
Role::Tiny is a minimalist role composition tool.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Role-Tiny-2.002004.tar.gz
Download MD5 sum: 9ee45591befa3d0b1094ac75d282b6ba
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/C/CH/CHOCOLATE/Scope-Guard-0.21.tar.gz
Download MD5 sum: be57b915d23ddac7677ef2ad9e52b92a
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Specio-0.48.tar.gz
Download MD5 sum: 96cf1ae4e2e205986e03672071116b16
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
namespace-autoclean-0.29 (for the test suite)
Sub::Exporter::Progressive is a wrapper for Sub::Exporter.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/F/FR/FREW/Sub-Exporter-Progressive-0.001013.tar.gz
Download MD5 sum: 72cf6acdd2a0a8b105821a4db98e4ebe
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RG/RGARCIA/Sub-Identify-0.14.tar.gz
Download MD5 sum: 014f19e72698b6a2cbcb54adc9691825
Sub::Info is a tool for inspecting subroutines.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Sub-Info-0.002.tar.gz
Download MD5 sum: 335345b534fc0539c894050f7814cbda
Sub::Quote provides ways to generate subroutines from strings.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Sub-Quote-2.006008.tar.gz
Download MD5 sum: f19c60039ba87f69f7f9357fc0a03e07
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-0.2800.tar.gz
Download MD5 sum: 6c6a174861fd160e8d5871a86df00baf
Term::Table formats a header and rows into a table. This is used by some failing tests to provide diagnostics about what has gone wrong.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Term-Table-0.016.tar.gz
Download MD5 sum: ef0c76824c57eaa7796558060067bb49
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Test-Deep-1.204.tar.gz
Download MD5 sum: fcff296434cd92538ae9de9d1744705f
Test::Exception provides convenience methods for testing exception based code.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Test-Exception-0.43.tar.gz
Download MD5 sum: 572d355026fb0b87fc2b8c64b83cada0
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Test-Fatal-0.017.tar.gz
Download MD5 sum: 2f160c31e1848536e3b82112d573bb76
Test::File provides a collection of test utilities for file attributes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Test-File-1.993.tar.gz
Download MD5 sum: dccb988191187261ce3a2a10af939625
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/K/KE/KENTNL/Test-File-ShareDir-1.001002.tar.gz
Download MD5 sum: ec31466aa44c1cd56c6cb51d7ec3a5de
Class-Tiny-1.008, File-Copy-Recursive-0.45, File-ShareDir-1.118, Path-Tiny-0.144 and Scope-Guard-0.21
Test::LeakTrace traces memory leaks.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEEJO/Test-LeakTrace-0.17.tar.gz
Download MD5 sum: afdb2cc6be0807cb635fb601a004d522
Test::Needs skips tests if a requested module is not present.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Test-Needs-0.002010.tar.gz
Download MD5 sum: 2b3d10946001561297624e7668f09c26
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM/Test-Requires-0.11.tar.gz
Download MD5 sum: 999d6c4e46ea7baae7a5113292e02ed8
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/M/MA/MALLEN/Test-RequiresInternet-0.05.tar.gz
Download MD5 sum: 0ba9f1cff4cf90ed2618c2eddfd525d8
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/M/MA/MARKF/Test-utf8-1.02.tar.gz
Download MD5 sum: 71d187539c76ac1ed9a0242ff208796d
Test::Warnings tests for warnings and the lack of them.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Warnings-0.031.tar.gz
Download MD5 sum: f608f7011b0bb8f27d3a27e646a52f60
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/C/CO/CORION/Test-Without-Module-0.21.tar.gz
Download MD5 sum: d6fdc73b60d197a8098fd41a81c92630
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Test2-Plugin-NoWarnings-0.09.tar.gz
Download MD5 sum: efcddec6cda66260ae14206e28f7feeb
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Test2-Suite-0.000145.tar.gz
Download MD5 sum: 5fcc87c264a1e93fe7cb0879a0abae15
Module-Pluggable-5.2, Scope-Guard-0.21, Sub-Info-0.002 and Term-Table-0.016
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/Text-CSV_XS-1.53.tgz
Download MD5 sum: d6af5f1aec99e5a5392ae3175de9a7ae
Text::Diff performs diffs on files and record sets.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/N/NE/NEILB/Text-Diff-1.45.tar.gz
Download MD5 sum: edf57b6189f7651a6be454062a4e6d9c
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Text-Glob-0.11.tar.gz
Download MD5 sum: d001559c504a2625dd117bd1558f07f7
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Tie-Cycle-1.227.tar.gz
Download MD5 sum: 3d5004bd8e6f41345091a697673879b7
TimeDate provides miscellaneous timezone manipulation routines.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/TimeDate-2.33.tar.gz
Download MD5 sum: 5e5afe22c8d417417283d1f7f4572a57
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Try-Tiny-0.31.tar.gz
Download MD5 sum: 993a29ee8a03c9bd9c2f7c53d1082a03
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/V/VP/VPIT/Variable-Magic-0.63.tar.gz
Download MD5 sum: ceb039e74253232bc5bdfb391ed5d6f5
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz
Download MD5 sum: b7186e8b8b3701e70c22abf430742403
libwww-perl-6.76 (install this module first and install that later)
XML::LibXML is a perl binding for libxml2-2.12.5.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0208.tar.gz
Download MD5 sum: 4cda143b948e1550c7fba4a1133cc6ad
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/XML-NamespaceSupport-1.12.tar.gz
Download MD5 sum: a8916c6d095bcf073e1108af02e78c97
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GR/GRANTM/XML-SAX-1.02.tar.gz
Download MD5 sum: b62e3754523695c7f5bbcafa3676a38d
libxml2-2.12.5, XML-NamespaceSupport-1.12 and XML-SAX-Base-1.09
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
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 12.1 platform.
Download (HTTP): https://cpan.metacpan.org/authors/id/G/GR/GRANTM/XML-SAX-Base-1.09.tar.gz
Download MD5 sum: ec347a14065dd7aec7d9fb181b2d7946
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 12.1 platform.
Download (HTTP): https://www.php.net/distributions/php-8.3.3.tar.xz
Download MD5 sum: f8e821c23e4da0cd52710181532cb853
Download size: 12 MB
Estimated disk space required: 525 MB (with documentation)
Estimated build time: 1.6 SBU (with parallelism=4; add 1.7 SBU for tests)
Optional pre-built documentation (single file html): https://www.php.net/distributions/manual/php_manual_en.html.gz
Optional pre-built documentation (chunked html): https://www.php.net/distributions/manual/php_manual_en.tar.gz. Note that the documentation can be found in languages other than English at https://www.php.net/download-docs.php
Apache-2.4.58 and libxml2-2.12.5
Aspell-0.60.8.1, enchant-2.6.7, libxslt-1.1.39, an MTA (that provides a sendmail command), pcre2-10.42, AppArmor, Dmalloc, Net-SNMP, oniguruma, OSSP mm, re2c, and XMLRPC-EPI
FreeType-2.13.2, libexif-0.6.24, libjpeg-turbo-3.0.1, libpng-1.6.42, libtiff-4.6.0, libwebp-1.3.2, a graphical environment, FDF Toolkit, GD, and t1lib
cURL-8.6.0, tidy-html5-5.8.0, Caudium, Hyperwave, Roxen WebServer, and WDDX
libiodbc-3.52.15, lmdb-0.9.31, MariaDB-10.11.7 or MySQL, OpenLDAP-2.6.7, PostgreSQL-16.2, SQLite-3.45.1, unixODBC-2.3.12, Berkeley DB (deprecated) 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.
Cyrus SASL-2.1.28, MIT Kerberos V5-1.21.2, libmcrypt, and mhash
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/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.
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.12.5
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 \ --without-pear \ --enable-fpm \ --with-fpm-user=apache \ --with-fpm-group=apache \ --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 18000) 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.3.3 && install -v -m644 CODING_STANDARDS* EXTENSIONS NEWS README* UPGRADING* \ /usr/share/doc/php-8.3.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.3.3 && gunzip -v /usr/share/doc/php-8.3.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.3.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
--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.
--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.
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.
To automatically start the php-fpm daemon when the
system is rebooted, install the /etc/rc.d/init.d/php
bootscript from the
blfs-bootscripts-20240209 package
as the root
user:
make install-php
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.
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 12.1 platform.
Download (HTTP): https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz
Download MD5 sum: fd6cc8ec0a78c44036f825e739f36e5a
Download size: 12.2 MB
Estimated disk space required: 228 MB (add 17 MB for tests)
Estimated build time: 0.5 SBU (Using parallelism=4; add 5.9 SBU for tests)
Required patch: https://www.linuxfromscratch.org/patches/blfs/12.1/Python-2.7.18-security_fixes-1.patch
Optional HTML Documentation: https://www.python.org/ftp/python/doc/2.7.18/python-2.7.18-docs-html.tar.bz2
SQLite-3.45.1 (For an additional module)
BlueZ-5.72 and Valgrind-3.22.0
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 {} \;
--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.
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
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 |
|
is the Python documentation tool |
|
is an interpreted, interactive, object-oriented programming language |
|
is a version-specific name for the python program |
|
is an SMTP proxy implemented in Python |
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.
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 12.1 platform.
If upgrading to a new Python-3 minor version (for example, from Python-3.11.x to Python-3.12.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.78.1, libxml2-2.12.5, opencv-4.9.0, Graphviz-10.0.1 (if swig is installed).
Before you upgrade, you can get a list of modules installed
with pip3
list. The list may be incomplete as some
Python modules are not installed with pip3, for example the
cracklib
module installed by
CrackLib-2.9.11. Use ls /usr/lib/python3.minor
/site-packages
for a comprehensive list.
The Python modules from LFS will also have to be reinstalled: flit-core, wheel, setuptools, meson, MarkupSafe, and Jinja2.
Download (HTTP): https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz
Download MD5 sum: e7c178b97bf8f7ccd677b94d614f7b3c
Download size: 20 MB
Estimated disk space required: 337 MB (add 57 MB for tests)
Estimated build time: 2.5 SBU (add 0.7 SBU for tests; both using parallelism=4)
Download (HTTP): https://www.python.org/ftp/python/doc/3.12.2/python-3.12.2-docs-html.tar.bz2
Download MD5 sum: 8a6310f6288e7f60c3565277ec3b5279
SQLite-3.45.1 (required if building firefox or thunderbird)
BlueZ-5.72, GDB-14.1 (required for some tests), Valgrind-3.22.0, and libmpdec
libnsl-2.0.1, Tk-8.6.13, and Berkeley DB (deprecated)
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python3
Install Python 3 by running the following commands:
CXX="/usr/bin/g++" \ ./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --enable-optimizations && make
To test the result, issue LC_ALL=en_US.UTF-8 make
test. Some tests may need an Internet
connection. Two tests named test_xml_etree
and test_xml_etree_c
are known to fail with
expat-2.6.0 or newer.
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.12.2/html tar --strip-components=1 \ --no-same-owner \ --no-same-permissions \ -C /usr/share/doc/python-3.12.2/html \ -xvf ../python-3.12.2-docs-html.tar.bz2
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-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.12/config-3.12-<arch>-linux-gnu/libpython3.12.a
with a small increase in the time to compile Python. Run-time results do not appear
to show any benefit from doing this.
In order for python3 to find the installed documentation, create the following version independent symlink:
ln -svfn python-3.12.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
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 |
|
is the Python documentation tool |
|
is an interpreted, interactive, object-oriented programming language |
|
is a version-specific name for the python program |
The Python 3.11 package contains an older version of the Python development environment. This is only needed for building specific programs in BLFS that have not updated their build systems to support Python-3.12.2 (e.g Firefox-115.8.0, Thunderbird-115.8.0, seamonkey-2.53.18, and qtwebengine-5.15.17).
Do NOT install this package if you are not installing one of the above programs.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
Download MD5 sum: 4efe92adf28875c77d3b9b2e8d3bc44a
Download size: 19 MB
Estimated disk space required: 301 MB
Estimated build time: 1.1 SBU (Using parallelism=4)
SQLite-3.45.1 (required if building firefox or thunderbird)
Install Python 3.11 by running the following commands:
CXX="/usr/bin/g++" \ ./configure --prefix=/opt/python3.11 \ --disable-shared \ --with-system-expat && make
Since this package is only used in very limited situations, tests are not recommended.
Now, as the root
user:
make install
CXX="/usr/bin/g++" ./configure ...: Avoid an annoying message during configuration.
--prefix=/opt/python3.11
: This
installs python 3.11 into /opt in order to avoid conflicts
with the system version of python, and allows for easy
removal/isolation once programs update to python3.12 or
later.
--disable-shared
:
This switch disables building shared libraries. Since all the
packages that need python-3.11 have built in modules and
don't directly link to python, it is safe to turn off shared
library support.
--with-system-expat
:
This switch enables linking against the system version of
Expat.
The Python module packages add useful objects to the Python language. Modules utilized by packages throughout BLFS are listed here, along with their dependencies.
If you want to run tests, several of the following modules
depend on the sqlite3
core
python module that has not been built in LFS. It is
therefore recommended to rebuild Python after installing
the recommended dependency listed in Python-3.12.2.
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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/a/asciidoc/asciidoc-10.2.0.tar.gz
Download MD5 sum: ecac3af818f7a65596efc6e243b520a0
Download size: 212 KB
Estimated disk space required: 4.3 MB
Estimated build time: less than 0.1 SBU
docbook-xsl-nons-1.79.2, fop-2.9, libxslt-1.1.39, Lynx-2.8.9rel.1, dblatex, and W3m
Fix an issue causing thousands of lines of “invalid escape
sequence
” warnings outputted when
generating the documentation of some packages with Asciidoc
and Python 3.12 or later:
sed '/self.separator =/s/"/r"/' -i asciidoc/asciidoc.py
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
CSSSelect provides CSS selectors for Python.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/c/cssselect/cssselect-1.2.0.tar.gz
Download MD5 sum: 27fbafacce5447cb867acb240d35002a
Download size: 1.2 MB
Estimated disk space required: 512 KB (add 488 KB for tests)
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://github.com/psf/cachecontrol/archive/refs/tags/v0.14.0/cachecontrol-0.14.0.tar.gz
Download MD5 sum: 221272755063d3827de22e430ad842e6
Download size: 44 KB
Estimated disk space required: 344 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://github.com/cython/cython/releases/download/0.29.36/Cython-0.29.36.tar.gz
Download MD5 sum: a4d0f9fbc9c137f1a88937cd40e8c5ee
Download size: 2.1 MB
Estimated disk space required: 67 MB
Estimated build time: 0.5 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/python-dbusmock/python-dbusmock-0.30.2.tar.gz
Download MD5 sum: abe236e9188292d7f3771259c62b5f2f
Download size: 96 KB
Estimated disk space required: 1.6 MB (with tests)
Estimated build time: less than 0.1 SBU (add 0.3 SBU for tests)
pytest-8.0.0 (required to run the test suite), PyGObject-3.46.0 (required to run the test suite), BlueZ-5.72 (optional for the test suite), and UPower-1.90.2 (optional for the test suite; if not installed one test will fail)
Build the package with:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
To test the results, issue: LC_ALL=C pytest
-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.
D-Bus Python provides Python bindings to the D-Bus API interface.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://dbus.freedesktop.org/releases/dbus-python/dbus-python-1.3.2.tar.gz
Download MD5 sum: 33be8a4a766e1c7c9a377b8f934ce21a
Download size: 592 KB
Estimated disk space required: 4.0 MB
Estimated build time: less than 0.1 SBU
dbus-1.14.10, GLib-2.78.4, meson_python-0.15.0, and patchelf-0.18.0
Build the D-Bus Python module by running the following command:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/d/docutils/docutils-0.20.1.tar.gz
Download MD5 sum: 93bcfe0065cf1d0b6a0bcabeca7a2335
Download size: 2.0 MB
Estimated disk space required: 12 MB
Estimated build time: less than 0.1 SBU
To build the Python 3 applications, run the following command:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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__
-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.
converts documents into various formats |
|
generates (X)HTML documents from standalone reStructuredText sources |
|
generates (X)HTML documents from standalone reStructuredText sources |
|
generates HTML5 documents from standalone reStructuredText sources |
|
generates LaTeX documents from standalone reStructuredText sources |
|
generates plain unix manual documents from standalone reStructuredText sources |
|
generates OpenDocument/OpenOffice/ODF documents from standalone reStructuredText sources |
|
Fix a word-processor-generated styles.odt for odtwriter use |
|
generates pseudo-XML from standalone reStructuredText sources (for testing purposes) |
|
generates S5 (X)HTML slideshow from standalone reStructuredText sources |
|
generates LaTeX documents from standalone reStructuredText sources for compilation with the Unicode-aware TeX variants XeLaTeX or LuaLaTeX |
|
generates Docutils-native XML from standalone reStructuredText sources |
|
generates (X)HTML from reStructuredText-format PEP files |
The Doxypypy package is a doxygen filter for python.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/d/doxypypy/doxypypy-0.8.8.7.tar.gz
Download MD5 sum: 5773d0a7882df900cbda8ee5107e1ced
Download size: 45 KB
Estimated disk space required: 2.1 MB
Estimated build time: less than 0.1 SBU
chardet-5.1.0 and Doxygen-1.10.0 (at run time)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
The Doxyqml package allows using Doxygen to document QML classes.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/d/doxyqml/doxyqml-0.5.3.tar.gz
Download MD5 sum: 3d394a0d896721e27beb62bf032f7f43
Download size: 28 KB
Estimated disk space required: 652 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/g/gi-docgen/gi-docgen-2023.3.tar.gz
Download MD5 sum: 9e6c51bccb72f6d9e0ce092131f03d24
Download size: 2.4 MB
Estimated disk space required: 18 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Markdown-3.4.1, packaging-23.2, Pygments-2.17.2, and typogrify-2.0.7
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
lxml provides Python bindings for libxslt-1.1.39 and libxml2-2.12.5.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/l/lxml/lxml-4.9.4.tar.gz
Download MD5 sum: 043f2ecd529d9aa8c7e4465d12d603f0
Download size: 3.4 MB
Estimated disk space required: 89 MB
Estimated build time: 1.0 SBU
To build the Python 3 module, run:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/M/Mako/Mako-1.3.2.tar.gz
Download MD5 sum: 0500a3df18f02c9e53fe3a9314c1a1ae
Download size: 384 KB
Estimated disk space required: 2.9 MB (add 1.2 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
NumPy is the fundamental package for scientific computing with Python.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/n/numpy/numpy-1.26.4.tar.gz
Download MD5 sum: 19550cbe7bedd96a928da9d4ad69509d
Download size: 15 MB
Estimated disk space required: 91 MB (add 333 MB for tests)
Estimated build time: 0.4 SBU (add 2.8 SBU for tests)
cython-0.29.36, meson_python-0.15.0, and pyproject-metadata-0.7.1
fortran from GCC-13.2.0, lapack and cblas, and openblas
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir -Csetup-args=-Dallow-noblas=true $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
Three tests, out of over 35000 tests, are known to fail.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/packaging/packaging-23.2.tar.gz
Download MD5 sum: d54eeff8c7ca86980528f4132f258d54
Download size: 144 KB
Estimated disk space required: 2.5 MB (add 28 MB for tests)
Estimated build time: less than 0.1 SBU (0.2 SBU for tests)
pytest-8.0.0 and pretend
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user packaging
Assuming pytest-8.0.0 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
-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.
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 12.1 platform.
Download (HTTP): https://github.com/encukou/py3c/archive/v1.4/py3c-1.4.tar.gz
Download MD5 sum: 53029afde7e0cf8672a2d69d378a0cfc
Download size: 47 KB
Estimated disk space required: 608 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
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
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 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/pyatspi/2.46/pyatspi-2.46.1.tar.xz
Download MD5 sum: 0f2bfade055457cb0c2389fd46d1ad70
Download size: 316 KB
Estimated disk space required: 3.9 MB
Estimated build time: less than 0.1 SBU
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
This version of PyCairo provides Python2 bindings to Cairo.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/pygobject/pycairo/releases/download/v1.18.2/pycairo-1.18.2.tar.gz
Download MD5 sum: be2ba51f234270dec340f28f1695a95e
Download size: 196 KB
Estimated disk space required: 2.3 MB
Estimated build time: less than 0.1 SBU
Cairo-1.18.0 and Python-2.7.18
Hypothesis (for tests)
This version of PyCairo is only retained for packages such as Gimp-2.10.36 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
PyCairo provides Python bindings to Cairo.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/pygobject/pycairo/releases/download/v1.26.0/pycairo-1.26.0.tar.gz
Download MD5 sum: 395b9eb21bb2d18801ebe26501ff2b8e
Download size: 340 KB
Estimated disk space required: 3.1 MB
Estimated build time: less than 0.1 SBU
Hypothesis and pytest-8.0.0 (for tests)
The current version of pycairo no longer builds the Python2 module. If you need that module for packages such as Gimp-2.10.36, use PyCairo-1.18.2
Install PyCairo for Python3 by running the following commands:
mkdir build && cd build && meson setup --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.
Now, as the root
user:
ninja install
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/P/Pygments/pygments-2.17.2.tar.gz
Download MD5 sum: 7c059773b0f4808f9402eb0650de6bd4
Download size: 4.7 MB
Estimated disk space required: 52 MB
Estimated build time: less than 0.1 SBU
Build the Python 3 module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/pygobject/2.28/pygobject-2.28.7.tar.xz
Download MD5 sum: ae48b60c690c4aa894e69e0c97802745
Download size: 728 KB
Estimated disk space required: 17 MB
Estimated build time: 0.1 SBU
GLib-2.78.4, PyCairo-1.18.2 and Python-2.7.18
gobject-introspection-1.78.1 and libxslt-1.1.39 (to Build Documentation)
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
--disable-introspection
: Omit
this switch if you have installed gobject-introspection-1.78.1.
Note that it conflicts with PyGObject-3.46.0.
--disable-docs
: This option
disables the rebuilding of the html documentation if
libxslt-1.1.39 is installed.
PyGObject3 provides Python bindings to the GObject class from GLib.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/pygobject/3.46/pygobject-3.46.0.tar.xz
Download MD5 sum: 56c36bfe6f24fa28182a7adcd3815b2c
Download size: 552 KB
Estimated disk space required: 13 MB (add 2.5 MB for tests)
Estimated build time: 0.3 SBU (with tests)
gobject-introspection-1.78.1 and PyCairo-1.26.0 (Python 3 module)
GTK-4.12.5, pep8, pyflakes, and pytest-8.0.0
First, remove two faulty tests:
mv -v tests/test_gdbus.py{,.nouse} && mv -v tests/test_overrides_gtk.py{,.nouse}
Install pygobject3 by running the following commands:
mkdir build && cd build && meson setup --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.12.5 is not installed.
Now, as the root
user:
ninja install
--buildtype=release
: Specify
a buildtype suitable for stable releases of the package, as
the default may produce unoptimized binaries.
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 12.1 platform.
Download (HTTP): https://download.gnome.org/sources/pygtk/2.24/pygtk-2.24.0.tar.bz2
Download MD5 sum: a1051d5794fd7696d3c1af6422d17a49
Download size: 2.2 MB
Estimated disk space required: 83 MB
Estimated build time: 0.7 SBU
PyGObject-2.28.7 and Python-2.7.18
PyCairo-1.18.2 and Pango-1.51.2
PyCairo-1.18.2 and GTK+-2.24.33
PyCairo-1.18.2 and libglade-2.6.4
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
--enable-docs
: This
option enables rebuilding the html documentation if
libxslt-1.1.39 is installed.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pyparsing/pyparsing-3.1.1.tar.gz
Download MD5 sum: bb8c8c6b8015ca5887ae2c37917ee82e
Download size: 868 KB
Estimated disk space required: 3.3 MB (add 27 MB for tests)
Estimated build time: less than 0.1 SBU (0.3 SBU for tests)
railroad-diagrams (also needed for tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user pyparsing
Assuming pytest-8.0.0 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
-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.
The pySerial module encapsulates access to the serial port.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pyserial/pyserial-3.5.tar.gz
Download MD5 sum: 1cf25a76da59b530dbfc2cf99392dc83
Download size: 156 KB
Estimated disk space required: 2.1 MB (add 0.2 MB for tests)
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pytest/pytest-8.0.0.tar.gz
Download MD5 sum: 33171e0864d85ffc89eff6128385a326
Download size: 1.3 MB
Estimated disk space required: 43 MB (with tests)
Estimated build time: 1.8 SBU (with tests)
iniconfig-2.0.0, packaging-23.2, pluggy-1.4.0, and py-1.11.0
Pygments-2.17.2, requests-2.31.0, argcomplete, elementpath, hypothesis, mock, nose, sortedcontainers, and xmlschema
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
PyXDG is a Python library to access freedesktop.org standards.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/b0/25/7998cd2dec731acbd438fbf91bc619603fc5188de0a9a17699a781840452/pyxdg-0.28.tar.gz
Download MD5 sum: d9a1d04fe60c956f5e3b9de3b4ef4722
Download size: 76 KB
Estimated disk space required: 808 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Install the module as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user pyxdg
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/P/PyYAML/PyYAML-6.0.1.tar.gz
Download MD5 sum: c9246277af2d9a13b7018af267a0831a
Download size: 124 KB
Estimated disk space required: 8.0 MB
Estimated build time: less than 0.1 SBU
Build PyYAML with the following command:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, install the module as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user PyYAML
-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.
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-17.0.6 still depends on this module.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/r/recommonmark/recommonmark-0.7.1.tar.gz
Download MD5 sum: 3c550a76eb62006bf007843a9f1805bb
Download size: 34 KB
Estimated disk space required: 680 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
commonmark-0.9.1 and sphinx-7.2.6
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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)'
-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.
generates a html document from markdown sources |
|
generates a latex document from markdown sources |
|
generates a manpage from markdown sources |
|
generates a pseudo-XML document from markdown sources |
|
generates a xetex document from markdown sources |
|
generates an XML document from markdown sources |
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/r/requests/requests-2.31.0.tar.gz
Download MD5 sum: 941e175c276cd7d39d098092c56679a4
Download size: 108 KB
Estimated disk space required: 1.4 MB (add 127 MB for tests)
Estimated build time: less than 0.1 SBU (0.7 SBU for tests)
charset-normalizer-3.0.1, idna-3.4, and urllib3-2.0.2
make-ca-1.13, with p11-kit-0.25.3 (both needed to use system https: certificates, removing an unnecessary dependency on the Certifi module).
PySocks (also needed for testing)
pytest-8.0.0, Flask<2, httpbin, MarkupSafe<2.1, pytest-mock, pytest-httpbin, sphinx<5, trustme, and Werkzeug<2
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.31.0-use_system_certs-1.patch
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user requests
Assuming pytest-8.0.0 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
See make-ca-1.13 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.
-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.
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 12.1 platform.
Download (HTTP): https://github.com/scour-project/scour/archive/v0.38.2/scour-0.38.2.tar.gz
Download MD5 sum: ae30f52602802f8c7df3a32e1f72b325
Download size: 100 KB
Estimated disk space required: 1.3 MB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
Six is a Python 2 to 3 compatibility library.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/six/six-1.16.0.tar.gz
Download MD5 sum: a7c927740e4964dd29b72cebfc1429bb
Download size: 36 KB
Estimated disk space required: 376 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinx/sphinx-7.2.6.tar.gz
Download MD5 sum: 18971ebdd6ec1b7788ff0898682fe0da
Download size: 6.7 MB
Estimated disk space required: 45 MB (add 35 MB for tests)
Estimated build time: less than 0.1 SBU (1.3 SBU for tests)
alabaster-0.7.13, Babel-2.11.0, docutils-0.20.1, imagesize-1.4.1, packaging-23.2, Pygments-2.17.2, requests-2.31.0, snowballstemmer-2.2.0, sphinxcontrib-applehelp-1.0.4, sphinxcontrib-devhelp-1.0.2, sphinxcontrib-htmlhelp-2.0.1, sphinxcontrib-jsmath-1.0.1, sphinxcontrib-qthelp-1.0.3, and sphinxcontrib-serializinghtml-1.1.9
cython-0.29.36, pytest-8.0.0, texlive-20230313, filelock, and html5lib
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user sphinx
Assuming cython-0.29.36 and pytest-8.0.0 are 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 html5lib filelock && python3 -m pytest deactivate
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinx_rtd_theme/sphinx_rtd_theme-2.0.0.tar.gz
Download MD5 sum: 8ad74a8e9ca706ed77117be0e9eed7e8
Download size: 2.7 MB
Estimated disk space required: 36 MB (with tests)
Estimated build time: 0.1 SBU (with tests)
sphinx-7.2.6 and sphinxcontrib-jquery-4.1
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user sphinx_rtd_theme
Assuming pytest-8.0.0 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 warnings because they use a deprecated sphinx API.
-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.
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.
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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/a/alabaster/alabaster-0.7.13.tar.gz
Download MD5 sum: 2e05a5f4fe5a8b95e5e576cbf4a5d503
Download size: 11 KB
Estimated disk space required: 360 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/a/attrs/attrs-22.2.0.tar.gz
Download MD5 sum: eff16b3bbd0d9b72e118cca83a19d380
Download size: 211 KB
Estimated disk space required: 2 MB (add 53 MB for tests)
Estimated build time: less than 0.1 SBU (0.2 SBU for tests)
pytest-8.0.0, coverage[toml], hypothesis, Pympler, mypy, pytest-mypy-plugins, zope.interface, and cloudpickle
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/B/Babel/Babel-2.11.0.tar.gz
Download MD5 sum: 9ee7784fd452d456206ecd3a12694010
Download size: 8.9 MB
Estimated disk space required: 103 MB (add 30 MB for tests)
Estimated build time: less than 0.1 SBU (0.1 SBU for tests)
pytest-8.0.0, Python-3.12.2 (with the sqlite module), freezegun==0.3.12, and pytest-cov
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user Babel
Assuming pytest-8.0.0 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
-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.
Chardet is a universal character encoding detector.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/c/chardet/chardet-5.1.0.tar.gz
Download MD5 sum: 394bd03d7a258d2771040bfbd5a7bf66
Download size: 2 MB
Estimated disk space required: 13 MB (add 1.1 MB for tests)
Estimated build time: less than 0.1 SBU (0.3 SBU for tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
The charset-normalizer library helps reading text from an unknown character encoding.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/c/charset-normalizer/charset-normalizer-3.0.1.tar.gz
Download MD5 sum: 12ee1c8bedbfba84e99db46d5d94f411
Download size: 91 KB
Estimated disk space required: 1.1 MB (add 27 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0, Python-3.12.2 (rebuilt after installing SQLite-3.45.1), and pytest-cov
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user charset-normalizer
Assuming pytest-8.0.0 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
-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.
Commonmark Python parser for the CommonMark Markdown specification.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/c/commonmark/commonmark-0.9.1.tar.gz
Download MD5 sum: cd1dc70c4714d9ed4117a40490c25e00
Download size: 94 KB
Estimated disk space required: 1.3 MB (add 30 MB for tests)
Estimated build time: less than 0.1 SBU (0.1 SBU for tests)
pytest-8.0.0, flake8, and hypothesis
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user commonmark
Assuming pytest-8.0.0 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
-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.
Editables is python library for creating “editable wheels”.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/e/editables/editables-0.3.tar.gz
Download MD5 sum: e91709fbb0ef586cb7b785042068ab67
Download size: 4.6 KB
Estimated disk space required: 180 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
Hatchling is an extensible, standards compliant build backend for python modules.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/h/hatchling/hatchling-1.12.2.tar.gz
Download MD5 sum: 5a6e2fd0c877feea7e71b9d72bbdbed9
Download size: 60 KB
Estimated disk space required: 2.3 MB
Estimated build time: less than 0.1 SBU
editables-0.3, packaging-23.2, pathspec-0.10.3, and pluggy-1.4.0
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
Hatch_vcs is a Hatch plugin for versioning with several VCS .
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/h/hatch-vcs/hatch_vcs-0.3.0.tar.gz
Download MD5 sum: c2f2cbe6851b7b2969cb4aa24c4b9b2f
Download size: 9.9 KB
Estimated disk space required: 436 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
hatchling-1.12.2 and setuptools_scm-7.1.0
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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, tests/test_build.py::test_write, is known to fail.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/i/idna/idna-3.4.tar.gz
Download MD5 sum: 13ea24e076212b6baae1135a116d1e0e
Download size: 179 KB
Estimated disk space required: 2.1 MB (with test)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/i/imagesize/imagesize-1.4.1.tar.gz
Download MD5 sum: 5a40586a25c07e1a8f16f6267252c321
Download size: 1.2 MB
Estimated disk space required: 1.8 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user imagesize
The tests for this package are known to be broken. To test the installation anyway, run pytest.
-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.
Iniconfig is a small and simple INI-file parser module.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/i/iniconfig/iniconfig-2.0.0.tar.gz
Download MD5 sum: 3c030b3f51dcc3aca585de05635600e4
Download size: 4.5 KB
Estimated disk space required: 168 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
Markdown is a Python parser for John Gruber's Markdown specification.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/M/Markdown/Markdown-3.4.1.tar.gz
Download MD5 sum: 597656cf4feadf1998b0511201620202
Download size: 315 KB
Estimated disk space required: 4.1 MB (add 27 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0, PyYAML-6.0.1, and coverage
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user Markdown
Assuming pytest-8.0.0 and PyYAML-6.0.1 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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/m/meson_python/meson_python-0.15.0.tar.gz
Download MD5 sum: e91eb9946d7bb8be06e434c5a2dadd05
Download size: 80 KB
Estimated disk space required: 1.3 MB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
Msgpack 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 Msgpack data.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/m/msgpack/msgpack-1.0.4.tar.gz
Download MD5 sum: 1822cdb939e7531f7ad0f7f09b434f22
Download size: 126 KB
Estimated disk space required: 1.9 MB (add 0.3 MB for tests)
Estimated build time: less than 0.1 SBU
cython-0.29.36 and setuptools_scm-7.1.0
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
Pathspec is a utility library for pattern matching of file paths.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pathspec/pathspec-0.10.3.tar.gz
Download MD5 sum: d89408b52aff020ac768a14c0ef1c7de
Download size: 45 KB
Estimated disk space required: 912 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pluggy/pluggy-1.4.0.tar.gz
Download MD5 sum: ffb69741271eaeefab3f2ef2435e2d5f
Download size: 68 KB
Estimated disk space required: 588 KB (add 18 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user pluggy
Assuming pytest-8.0.0 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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/py/py-1.11.0.tar.gz
Download MD5 sum: bde7dcc1cb452a1e10206ef2f811ba88
Download size: 203 KB
Estimated disk space required: 2.8 MB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user py
Due to the deprecation of this package, the test suite is not maintained and cannot be run.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pyproject-metadata/pyproject-metadata-0.7.1.tar.gz
Download MD5 sum: ca5e9527cff96153a976e14530b53746
Download size: 8 KB
Estimated disk space required: 124 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/p/pytz/pytz-2024.1.tar.gz
Download MD5 sum: b26bb090d1fe96064019bf7068eeb801
Download size: 312 KB
Estimated disk space required: 6.1 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/setuptools_scm/setuptools_scm-7.1.0.tar.gz
Download MD5 sum: 158dc741637fb4fa4b955c62bd2c08be
Download size: 70 KB
Estimated disk space required: 1.6 MB (with tests)
Estimated build time: less than 0.1 SBU (add 0.4 SBU for tests)
packaging-23.2 and typing_extensions-4.4.0
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
Smartypants translates plain ASCII punctuation characters into “smart” typographic punctuation HTML entities.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://github.com/leohemsted/smartypants.py/archive/v2.0.1/smartypants-2.0.1.tar.gz
Download MD5 sum: 27957540f4718e892039b2ed208c78f3
Download size: 24 KB
Estimated disk space required: 344 KB
Estimated build time: less than 0.1 SBU
The tarball extracts into the smartypants.py-2.0.1
directory.
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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. Running a search for connected would also find documents which only have the other forms.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/snowballstemmer/snowballstemmer-2.2.0.tar.gz
Download MD5 sum: 4332ddc7bbee0f344a03915b2ad59a54
Download size: 85 KB
Estimated disk space required: 3.8 MB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-applehelp/sphinxcontrib-applehelp-1.0.4.tar.gz
Download MD5 sum: 8d52173d3d5c7bd9c0e3da26cd217916
Download size: 28 KB
Estimated disk space required: 2.0 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0 and sphinx-7.2.6 (circular dependency)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
The Sphinxcontrib-devhelp package is a Sphinx extension which outputs Devhelp documents.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-devhelp/sphinxcontrib-devhelp-1.0.2.tar.gz
Download MD5 sum: 94069c5cdb5079c445f5477fa6107016
Download size: 17 KB
Estimated disk space required: 2.7 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0 and sphinx-7.2.6 (circular dependency)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-htmlhelp/sphinxcontrib-htmlhelp-2.0.1.tar.gz
Download MD5 sum: e85e6970dc25fbf5fd0f4fa66b897fab
Download size: 28 KB
Estimated disk space required: 3.2 MB (add 26 MB for tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0, sphinx-7.2.6 (circular dependency), and html5lib
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user sphinxcontrib-htmlhelp
Assuming pytest-8.0.0 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 && python3 /usr/bin/pytest deactivate
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.tar.gz
Download MD5 sum: 46ea52845b17343ed6c61e6963fb265d
Download size: 120 KB
Estimated disk space required: 552 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-jsmath/sphinxcontrib-jsmath-1.0.1.tar.gz
Download MD5 sum: e45179f0a3608b6766862e0f34c23b62
Download size: 5.7 KB
Estimated disk space required: 324 KB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0 and sphinx-7.2.6 (circular dependency)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
The Sphinxcontrib-qthelp package is a Sphinx extension which outputs QtHelp documents.
This package is known to build and work properly using an LFS 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib-qthelp/sphinxcontrib-qthelp-1.0.3.tar.gz
Download MD5 sum: 93216721f3e154cce12d1e9c3307b415
Download size: 21 KB
Estimated disk space required: 2.8 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0 and sphinx-7.2.6 (circular dependency)
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/s/sphinxcontrib_serializinghtml/sphinxcontrib_serializinghtml-1.1.9.tar.gz
Download MD5 sum: 84957dfa6d85d2e509181281082c11ee
Download size: 15 KB
Estimated disk space required: 2.0 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
pytest-8.0.0 and sphinx-7.2.6 (circular dependency)
First remove a spurious circular dependency:
sed /^dependencies/,+2d -i pyproject.toml
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
Now, as the root
user:
pip3 install --no-index --find-links=dist --no-cache-dir --no-user sphinxcontrib-serializinghtml
To test the installation, first install sphinx-7.2.6, then run pytest.
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/t/typing_extensions/typing_extensions-4.4.0.tar.gz
Download MD5 sum: 5cfcb56ea6fc4972c3600c0030f4d136
Download size: 47 KB
Estimated disk space required: 528 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.
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 12.1 platform.
Download (HTTP): https://files.pythonhosted.org/packages/source/t/typogrify/typogrify-2.0.7.tar.gz
Download MD5 sum: 63f38f80531996f187d2894cc497ba08
Download size: 13 KB
Estimated disk space required: 404 KB
Estimated build time: less than 0.1 SBU
Build the module:
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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
-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.