# Beyond Linux® From Scratch (systemd Edition)

## Version 11.0

### The BLFS Development Team

Copyright © 2001-2021 The BLFS Development Team

Copyright © 2001-2021, 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 2021-09-01

Revision History
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.

# Dedication

This book is dedicated to the LFS community

# Preface

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)

## Foreword

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

Last updated on

## Who Would Want to Read this Book

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, but for one reason or another want to manually build software and are in need of some assistance. Note that the material contained in this book, in particular the dependency listings, is based upon the assumption that you are using a base 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 nearly 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 matches the LFS book version. This book may be incompatible with a previous or later release of the LFS book.

Last updated on

## Organization

This book is divided into the following parts.

### Part I - Introduction

This part contains information which is essential to the rest of the book.

### Part II - Post LFS Configuration and Extra Software

Here we introduce basic configuration and security issues. We also discuss a range of editors, file systems, and shells which aren't covered in the main LFS book.

### Part III - General Libraries and Utilities

In this section we cover libraries which are often needed by the rest of the book as well as system utilities. Information on Programming (including recompiling GCC to support its full range of languages) concludes this part.

### Part IV - Basic Networking

Here we cover how to connect to a network when you aren't using the simple static IP setup given in the main LFS book. Networking libraries and command-line networking tools are also covered here.

### Part V - Servers

Here we deal with setting up mail and other servers (such as FTP, Apache, etc.).

### Part VI - X + Window Managers

This part explains how to set up a basic X Window System installation along with some generic X libraries and Window managers.

### Part VII - KDE

For those who want to use the K Desktop Environment or some parts of it, this part covers it.

### Part VIII - GNOME

GNOME is the main alternative to KDE in the Desktop Environment arena.

### Part IX - Xfce

Xfce is a lightweight alternative to GNOME and KDE.

### Part X - LXDE

LXDE is another lightweight alternative to GNOME and KDE.

### Part XI - X Software

Office programs and graphical web browsers are important to most people. They, along with some generic X software can be found in this part of the book.

### Part XII - Multimedia

Here we cover setting multimedia libraries and drivers along with some audio, video and CD-writing programs.

### Part XIII - Printing, Scanning and Typesetting (PST)

The PST part of the book covers document handling with applications like Ghostscript, CUPS and DocBook to installing texlive.

### Appendices

The Appendices cover information which doesn't belong in the main book; they are mainly there as a reference.

Last updated on

# Part I. Introduction

## Chapter 1. Welcome to BLFS

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.

## Which Sections of the Book Do I Want?

Unlike the Linux From Scratch book, BLFS isn't designed to be followed in a linear manner. This is because LFS provides instructions on how to create a base system which is capable of turning into 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 the book will want to read certain sections. The Introduction part, which you are currently reading, contains generic information. Especially take note of the information in Chapter 2, Important Information, as this contains comments about how to unpack software, issues related to using different locales and various other aspects 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 with not just configuration but also Security (Chapter 4, Security), File Systems (Chapter 5, File Systems and Disk Management), Editors (Chapter 6, Editors) and Shells (Chapter 7, Shells). Indeed, you may wish to reference certain parts of this chapter (especially the sections on 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 part 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. Note that you don't have to install all of these libraries and packages found in this part to start with as each BLFS installation procedure tells you which packages it depends upon so you can choose the program you want to install and see what it needs.

Likewise, most people will probably want to look at the Networking part. 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) and 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 various database packages.

The next parts of the book principally deal with desktop systems. This portion of the book starts with a part talking about X plus Window and Display Managers. This part also deals with some generic X-based libraries (Chapter 25, X Libraries). After this, KDE and GNOME are given their own parts which are 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-1.2.5 instructions from this chapter quite near the start of their BLFS journey; they are placed here simply 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 and even those who are creating mainly server systems will find it useful.

We hope you enjoy using BLFS and find it useful.

Last updated on

## Conventions Used in this Book

### Typographical Conventions

To make things easy to follow, there are a number of conventions used throughout the book. Following are some examples:

    ./configure --prefix=/usr

> This form of text is designed to be typed exactly as seen 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 text) is showing screen output, probably a result from 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 in the book but mainly to emphasize important points or to give examples as to 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.

SeaMonkey-2.53.9

> 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 type of section is used mainly 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 generally typed as seen.

`<REPLACED TEXT>`

> This form of text is used to encapsulate text that should be modified and is not to be typed as seen, or copy and pasted. Note that the square brackets are not part of the text, but should be substituted for as well.

`root`

> This form of text is used to show a specific system user or group reference in the instructions.

### Conventions Used for Package Dependencies

When packages are created, the authors depend on prior work. In order to build a package in BLFS, these dependencies must be built prior to the desired package. For each package, any prerequisite packages are listed in one or more separate sections: Required, Recommended, and Optional.

#### Required Dependencies

These dependencies are the minimum prerequisite packages required to build the package. Omitted from the list are packages in LFS and required dependencies of other required packages.

#### Recommended Dependencies

These dependencies are those that the BLFS editors have determined are important to give the package reasonable capabilities. Package installation instructions assume they are installed. If a recommended package is not desired, the instructions may need to be modified to accommodate the missing package.

#### Optional Dependencies

These dependencies are those that the package may use. Integration of optional dependencies may be automatic by the package or may need additional instructions not presented by BLFS. Optional packages may be listed without corresponding BLFS instructions. In this case it is up to the user to determine appropriate installation instructions.

### Conventions Used for Kernel Configuration Options

Some packages have specific needs regarding the kernel configuration. The general layout is the following:

    Master section --->
      Subsection --->
        [*]     Required parameter                     [CONFIG_REQU_PAR]
        <*>     Required parameter (not as module)     [CONFIG_REQU_PAR_NMOD]
        <*/M>   Required parameter (could be a module) [CONFIG_REQU_PAR_MOD]
        <*/M/ > Optional parameter                     [CONFIG_OPT_PAR]
        [ ] Incompatible parameter                     [CONFIG_INCOMP_PAR]
        < > Incompatible parameter (even as module)    [CONFIG_INCOMP_PAR_MOD]

[CONFIG_...] on the right gives the name of the option, so you can easily check whether it is set in your `config` file. The meaning of the various entries is:

> Master section | top level menu item
> Subsection | submenu item
> Required parameter | the option could be either built-in or not selected: it must be selected
> Required parameter (not as module) | the option could be either built-in, module, or not selected: it must be selected as built-in
> Required parameter (could be a module) | the option could be either built-in, module, or not selected: it must be selected, either as built-in or module
> Optional parameter | rarely used: the option could be either built-in, module, or not selected: it may be selected at will
> Incompatible parameter | the option could be either built-in or not selected: it must not be selected
> Incompatible parameter (even as module) | the option could be either built-in, module, or not selected: it must not be selected

Note that, depending on other selections, the angle brackets (<>) may appear as braces ({}), if the option cannot be unselected, or even dashes (-*- or -M-), when the choice is imposed. The help text about the option specifies the other selections on which this option relies, and how those other selections are set.

### SBU values in BLFS

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 specific hardware used.

For packages which use ninja (e.g. anything using meson) or rust, by default all cores are used so 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 and using -j1 for the make command is required. Packages that are known to have such limits are marked as such in the text.

Last updated on

## Book Version

This is BLFS-BOOK version 11.0 dated September 1st, 2021. This is the 11.0 branch of the BLFS book, currently targeting the LFS 11.0 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.

Last updated on

## Mirror Sites

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.

Last updated on

## Getting the Source Packages

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.

Last updated on

## Change Log

Current release: 11.0 – September 1st, 2021

Changelog Entries:

- September 1st, 2021

  - [bdubbs] - Release of BLFS-11.0.

- August 30th, 2021

  - [renodr] - Update to ntfs-3g-2021.8.22 (Security Update). Fixes #14583.

  - [renodr] - Fix a regression in Samba's default configuration. Fixes #15474.

  - [renodr] - Update to gtk-4.4.0. Fixes #15452.

  - [pierre] - Create a link from `/opt/kf5/share/polkit-1` to its counterpart in `/usr/share/` so that action files get installed to a place where Polkit finds them.

  - [thomas] - Upgrade to proftpd-1.3.7c. Fixes #15482.

- August 29th, 2021

  - [ken] - fetchmail: Recommend using ssl where possible to ensure that TLS is enforced.

  - [renodr] - Fix a regression in BIND identified upstream. Fixes #15472.

  - [ken] - Update to seamonkey-2.53.9 (security update). Fixes #15464.

  - [bdubbs] - Update to pipewire-0.3.34. Fixes #15470.

  - [bdubbs] - Update to soundtouch-2.3.0. Fixes #15447.

- August 28th, 2021

  - [ken] - Update to qtwebengine-5.15.6 (security fixes). Fixes #15471.

  - [bdubbs] - Update to pinentry-1.2.0. Fixes #15461.

  - [bdubbs] - Update to gdl-3.40.0. Fixes #15468.

  - [pierre] - Add an option to Qt5, so that logging goes to journald if not running on a tty. Fixes #15437.

- August 27th, 2021

  - [ken] - Update to iso-codes_4.7.0. Fixes #15460.

  - [bdubbs] - Update to mercurial-5.9. Fixes #15433.

  - [bdubbs] - Update to doxygen-1.9.2. Fixes #15429.

  - [bdubbs] - Update to umockdev-0.16.2. Fixes #15459.

  - [bdubbs] - Update to bluez-5.61. Fixes #15451.

  - [thomas] - Update to php-8.0.10. Fixes #15469.

  - [thomas] - Update to wireshark-3.4.8. Fixes #15463.

  - [bdubbs] - Update to libsoup-2.74.0. Fixes #15448.

- August 26th, 2021

  - [bdubbs] - Update to json-glib-1.6.6. Fixes #15416.

  - [ken] - Update to mesa-21.2.1. Fixes #15349.

  - [ken] - Add --wrap-mode=nofallback to gdk-pixbuf and pango. Fixes #15466.

  - [ken] - Update to Unicode-Collate-1.31 (perl module). Fixes #15446.

  - [renodr] - Update to blfs-systemd-units-20210819. Fixes #15467.

  - [pierre] - Update to qemu-6.1.0. Fixes #15456.

  - [pierre] - Update to thunderbird-91.0.3. Fixes #15445.

  - [pierre] - Update to openssh-8.7p1, with ssh-askpass. Fixes #15439.

  - [pierre] - Update to licap-2.53 with PAM. Fixes #15406.

  - [pierre] - Add a sed to apr-1.7.0 to fix a security issue. Fixes #15453.

  - [pierre] - Update to libgcrypt-1.9.4 (security fix). Fixes #15450.

  - [xry111] - Update to harfbuzz-2.9.0. Fixes #15428.

  - [xry111] - Update to glib-2.68.4. Fixes #15432.

  - [xry111] - Update to cmake-3.21.2. Fixes #15462.

  - [xry111] - Update to libarchive-3.5.2 (security update). Fixes #15449.

  - [renodr] - Update to samba-4.14.7. Fixes #15457.

  - [renodr] - Update to Mako-1.1.5 (Python Module). Fixes #15442.

  - [renodr] - Update to balsa-2.6.3. Fixes #15431.

  - [renodr] - Update to openldap-2.5.7. Fixes #14530.

  - [renodr] - Update to git-2.33.0. Fixes #15409.

  - [renodr] - Update to Pygments-2.10.0 (Python Module). Fixes #15402.

- August 25th, 2021

  - [renodr] - Update to gnome-weather-40.1. Fixes #15424.

  - [ken] - Update to mutt-2.1.2. Fixes #15458.

- August 23rd, 2021

  - [renodr] - Update to gnome-shell-extensions-40.4. Fixes #15420.

  - [renodr] - Update to gnome-shell-40.4. Fixes #15420.

  - [renodr] - Update to mutter-40.4. Fixes #15419.

  - [renodr] - Update to network-manager-applet-1.24.0. Fixes #15413.

  - [renodr] - Update to libnma-1.8.32. Fixes #15438.

  - [bdubbs] - Update to libreoffice-7.2.0.4. Fixes #15434.

  - [renodr] - Update to gsound-1.0.3. Fixes #15425.

  - [renodr] - Update to NetworkManager-1.32.10. Fixes #15423.

  - [renodr] - Update to gnome-desktop-40.4. Fixes #15427.

  - [ken] - Update to dvisvgm-2.12. Fixes #15412.

  - [ken] - Patch ghostscript-9.54.0 to fix a segfault.

- August 22nd, 2021

  - [renodr] - Update to bubblewrap-0.5.0. Fixes #15443.

  - [bdubbs] - Update to pavucontrol-5.0. Fixes #15403.

- August 21st, 2021

  - [bdubbs] - Update to vim-8.2.3337. Addresses #12241.

  - [bdubbs] - Update to xfsprogs-5.13.0. Fixes #15440.

  - [bdubbs] - Update to ibus-1.5.25. Fixes #15441.

  - [bdubbs] - Update to cups-filters-1.28.10. Fixes #15418.

- August 20th, 2021

  - [renodr] - Update to gexiv2-0.12.3. Fixes #15400.

- August 19th, 2021

  - [renodr] - Update to BIND and BIND-Utilities 9.16.20. Fixes #15426.

  - [renodr] - Reverted OpenLDAP update due to package freeze ongoing.

  - [bdubbs] - Update to upower-UPOWER_0_99_13. Fixes #15417.

  - [bdubbs] - Update to stunnel-5.60. Fixes #15407.

  - [bdubbs] - Update to mc-4.8.27. Fixes #15401.

- August 18th, 2021

  - [thomas] - Update to pango-1.48.9. Fixes #15422.

  - [renodr] - Update to sendmail-8.17.1. Fixes #15421.

  - [renodr] - Update to IO::Socket::SSL-2.072. Fixes #15408.

  - [timtas] - Update to thunderbird-91.0.1 (Security Update). Fixes #15415.

- August 17th, 2021

  - [renodr] - Adapt valgrind to many changes in glibc-2.34. Fixes #15414.

  - [ken] - Update to firefox-91.0.1esr (security update). Fixes #15411.

  - [bdubbs] - Update to vala-0.52.5. Fixes #15404.

  - [renodr] - Update to OpenJDK-16.0.2 (Security Update). Fixes #15357.

- August 16th, 2021

  - [ken] - Firefox-91 and Thunderbird: Replace create-mach-environment by MACH_USE_SYSTEM_PYTHON=1. Fixes #15405.

- August 15th, 2021

  - [bdubbs] - Update to plasma-5.22.4. Fixes #15211.

  - [bdubbs] - Update to kf5-apps-21.08.0. Includes kate and kwave. Fixes #15256.

  - [bdubbs] - Update to mlt-7.0.1. Fixes #14896.

  - [bdubbs] - Update to kf5-5.85.0. Includes extra-cmake-modules, breeze-icons, and oxygen-icons. Fixes #15267.

  - [renodr] - Update to gjs-1.68.3. Fixes #15398.

  - [renodr] - Update to boost-1.77.0. Fixes #15392.

  - [renodr] - Update to libwebp-1.2.1. Fixes #15393.

  - [renodr] - Update to eog-40.3. Fixes #15394.

  - [renodr] - Update to gnome-user-docs-40.4. Fixes #15395.

  - [renodr] - Update to libepoxy-1.5.9. Fixes #15396.

  - [renodr] - Update to libgudev-237. Fixes #15397.

  - [renodr] - Fix building Firefox-91.0 on i686 systems.

- August 14th, 2021

  - [ken] - Update to x264-20210814. Addresses #7555.

  - [ken] - Update to ImageMagick-7.1.0-4. Addresses #7859.

  - [ken] Add a patch to firefox-91 to work around the unexplained build failures I'm seeing on two systems.

  - [ken] Update qtwebengine-20210401 to use build_fixes-4 patch for glibc-2.34. Please note that binutils-2.37 from LFS-dev needs the patch which is now in LFS.

- August 13th, 2021

  - [renodr] - Update to thunderbird-91.0 (Security Update). Fixes #15279.

  - [bdubbs] - Update to postgresql-13.4. Fixes #15385.

  - [bdubbs] - Update to unbound-1.13.2. Fixes #15386.

  - [bdubbs] - Update to LVM2-2.03.13. Fixes #15383.

  - [renodr] - Update to epiphany-40.3. Fixes #15387.

  - [renodr] - Update to evolution-data-server-3.40.4. Fixes #15390.

  - [renodr] - Update to evolution-3.40.4. Fixes #15389.

  - [renodr] - Update to gnome-maps-40.4. Fixes #15391.

- August 12th, 2021

  - [ken] - Update to node.js-v14.17.5 (security update). Fixes #15382.

  - [renodr] - Update to pango-1.48.8. Fixes #15384.

  - [renodr] - Update to enchant-2.3.1. Fixes #15376.

  - [renodr] - Update to gnome-autoar-0.4.0. Fixes #15375.

  - [renodr] - Update to fetchmail-6.4.21. Fixes #15370.

  - [renodr] - Update to gjs-1.68.2. Fixes #15363.

- August 11th, 2021

  - [bdubbs] - Update to SDL2-2.0.16. Fixes #15380.

  - [bdubbs] - Update to NetworkManager-1.32.8. Fixes #15379.

  - [bdubbs] - Update to libjpeg-turbo-2.1.1. Fixes #15377.

  - [bdubbs] - Update to c-ares-1.17.2. Fixes #15374.

  - [timtas] - Remove ifconfig from net-tools-2.10. Fixes #15381.

  - [renodr] - Add a patch for xf86-video-ati that fixes various performance regressions and allows for the driver to build with a future version of xorg-server. This also allows users of ATI graphics cards on SysV systems to be able to run GNOME and KDE Plasma 5 again. Fixes #14129.

- August 10th, 2021

  - [ken] - Update to JS-78.13.0, firefox-91.0esr and introduce a firefox-legacy page for firefox-78.13.0esr (all are security fixes). Fixes #15367 and #15369. If in doubt about which version of firefox to use, consult the firefox page in the wiki which is linked from both.

  - [bdubbs] - Update to ModemManager-1.16.10. Fixes #15372.

  - [bdubbs] - Update to xrdb-1.2.1 (Xorg application). Fixes #15371.

  - [bdubbs] - Update to net-tools-2.10. Fixes #15366.

- August 8th, 2021

  - [renodr] - Update to pidgin-2.14.6. Fixes #15264.

  - [timtas] - Update to nmap-7.92. Fixes #15364.

- August 7th, 2021

  - [bdubbs] - Update to mariadb-10.6.4. Fixes #15361.

  - [bdubbs] - Update to icewm-2.7.0. Fixes #15362.

  - [timtas] - Update to usbutils-014. Fixes #15358.

  - [timtas] - Update to dovecot-2.3.16. Fixes #15360.

  - [timtas] - Update to vsftpd-3.0.5. Fixes #15355.

- August 6th, 2021

  - [renodr] - Fix building guile-3.0.7 with glibc-2.34.

  - [bdubbs] - Update to pipewire-0.3.33. Fixes #15356.

  - [bdubbs] - Update to glib-networking-2.68.2. Fixes #15354.

  - [bdubbs] - Update to SCons-4.2.0. Fixes #15353.

  - [bdubbs] - Update to libqmi-1.30.0. Fixes #15352.

  - [bdubbs] - Update to nss-3.69. Fixes #15351.

  - [bdubbs] - Fix an issue when building gcc identified upstream. Fixes #15350.

- August 5th, 2021

  - [renodr] - Update to gnome-maps-40.3. Fixes #15263.

  - [renodr] - Update to gnome-disk-utility-40.2. Fixes #15266.

  - [renodr] - Update to evince-40.4. Fixes #15274.

  - [bdubbs] - Update to udisks-2.9.3. Fixes #15348.

  - [bdubbs] - Update to poppler-21.08.0. Fixes #15342.

  - [bdubbs] - Update to jasper-2.0.33. Fixes #15341.

- August 4th, 2021

  - [bdubbs] - Update to asciidoctor-2.0.16. Fixes #15346.

  - [bdubbs] - Update to libqmi-1.28.8. Fixes #15344.

  - [bdubbs] - Update to libcap-2.52. Fixes #15343.

  - [bdubbs] - Update to NetworkManager-1.32.6. Fixes #15323.

  - [bdubbs] - Update to krb5-1.19.2. Fixes #15309.

  - [bdubbs] - Update to libinput-1.18.1 (Xorg driver). Fixes #15345.

  - [bdubbs] - Update to xwd-1.0.8 (Xorg Application). Fixes #15338.

  - [bdubbs] - Update to libXft-2.3.4 (Xorg Library). Fixes #15340.

  - [bdubbs] - Update to libXfont2-2.0.5 (Xorg Library). Fixes #15339.

  - [thomas] - Fix a typo in xinit instructions.

- August 1st, 2021

  - [bdubbs] - Update to gcc-11.2.0. Fixes #15322.

  - [bdubbs] - Update to btrfs-progs-v5.13.1. Fixes #15334.

  - [bdubbs] - Update to xf86-video-amdgpu-21.0.0. Fixes #15336.

  - [bdubbs] - Update to mousepad-0.5.6. Fixes #15337.

  - [thomas] - Update to openldap-2.5.6. Fixes #15318.

- July 30th, 2021

  - [bdubbs] - Update to php-8.0.9. Fixes #15332.

  - [bdubbs] - Update to cbindgen-0.20.0. Fixes #15331.

  - [bdubbs] - Fix dependencies for elogind and p11kit. Fixes #15333.

  - [bdubbs] - Fix gcr-3.40.0 to build properly with meson-0.59. Fixes #15329.

  - [bdubbs] - Update to xorg-server-1.20.13. Fixes #15328.

  - [bdubbs] - Update to mesa-21.1.6. Fixes #15326.

  - [bdubbs] - Update to libstatgrab-0.92.1. Fixes #15327.

  - [bdubbs] - Update to libblockdev-2.26. Fixes #15325.

- July 30th, 2021

  - [bdubbs] - Update to libreoffice-7.1.5.2. Fixes #15305.

  - [ken] - Update to fetchmail-6.4.20 (security fix). Fixes #15324.

  - [ken] - Update Perl Module Dependencies - Alien-Build-2.41, Business-ISBN-Data-20210112.006, Config-AutoConf-0.320, DateTime-Format-Strptime-1.79, DateTime-Locale-1.32, DateTime-TimeZone-2.47, Exception-Class-1.45, FFI-CheckLib-0.28, File-ShareDir-1.118, HTTP-Message-6.33, libwww-perl-6.55, Net-HTTP-6.21, Net-SSLeay-1.90, Path-Tiny-0.118, Role-Tiny-2.002004, Specio-0.47, Test-Fatal-0.016, Test-File-1.448, Test-LeakTrace-0.17, Test-MockModule-v0.176.0, Test-Needs-0.002009, Test-Warnings-0.031, Test2-Suite-0.000140, Text-CSV_XS-1.46, XML-LibXML-2.0207. Addresses #13850.

  - [ken] - Update to node.js-v14.17.4 (security fix). Fixes #15330.

  - [bdubbs] - Update to pulseaudio-15.0. Fixes #15320.

  - [bdubbs] - Update to imlib2-1.7.2. Fixes #15319.

  - [bdubbs] - Update to cmake-3.21.1. Fixes #15317.

  - [bdubbs] - Update to libmbim-1.26.0. Fixes #15316.

- July 29th, 2021

  - [bdubbs] - Update to mplayer-export-2021-07-29. Fixes #15313.

  - [bdubbs] - Update to postfix-3.6.2. Fixes #15311.

  - [bdubbs] - Update to feh-3.7.1. Fixes #15310.

  - [thomas] - Upgrade sudo-1.9.7p2. Fixes #15314.

- July 28th, 2021

  - [renodr] - Update to mutter-40.3. Fixes #15271.

  - [renodr] - Update to gnome-shell-40.3. Fixes #15269.

  - [renodr] - Update to gnome-shell-extensions-40.3. Fixes #15270.

  - [renodr] - Update to gdm-40.1. Fixes #15308.

  - [renodr] - Update to gnome-user-docs-40.3. Fixes #15262.

  - [renodr] - Update to yelp-40.3. Fixes #15261.

  - [bdubbs] - Update to pipewire-0.3.32. Fixes #15300.

  - [bdubbs] - Update to shadow-4.9. Fixes #15304.

  - [bdubbs] - Update to dbus-python-1.2.18 (Python module). Fixes #15299.

  - [bdubbs] - Update to libidn-2.3.2. Fixes #15295.

  - [bdubbs] - Update to libidn-1.38. Fixes #15315.

  - [renodr] - Update to samba-4.14.6. Fixes #15276.

  - [thomas] - Update to bind-9.16.19, bind-utils-9.16.19. Fixes #15302.

  - [thomas] - Update to libuv-1.42.0. Fixes #15298.

- July 27th, 2021

  - [bdubbs] - Update to freetype-2.11.0. Fixes #15293.

  - [bdubbs] - Update to gparted-1.3.1. Fixes #15292.

  - [bdubbs] - Update to nghttp2-1.44.0. Fixes #15290.

  - [bdubbs] - Update to graphviz-2.48.0. Fixes #15289.

- July 26th, 2021

  - [timtas] - Update to fltk-1.3.7. Fixes #15312.

- July 25th, 2021

  - [renodr] - Update to WebKitGTK+-2.32.3 (Security Update). Fixes #15306.

- July 23rd, 2021

  - [ken] - perl dependant module Alien::Libxml2 was missing its required dependency of Path::Tiny.

  - [ken] - Reinstate perl module dependency Scalar::List::Utils which provides core module List::Utils. List::AllUtils-0.19 requires version 1.56 at runtime, but perl-5.34.0 shipped with 1.55. Fixes #15307.

  - [ken] - Update to mutt-2.1.1. Fixes #15294.

  - [ken] - Update to seamonkey-2.53.8.1 (security fix). Fixes #15303.

  - [renodr] - Guard systemd against CVE-2021-33910. Fixes #15297.

- July 22nd, 2021

  - [renodr] - Update to gnome-desktop-40.3. Fixes #15283.

  - [renodr] - Update to folks-0.15.3. Fixes #15291.

  - [renodr] - Update to NetworkManager-1.32.4. Fixes #15296.

- July 21st, 2021

  - [timtas] - Update to curl-7.78.0. Fixes #15301.

- July 20th, 2021

  - [renodr] - Update to ModemManager-1.16.8. Fixes #15273.

- July 19th, 2021

  - [bdubbs] - Update to Net-DNS-1.32 (Perl module). Fixes #15288.

  - [bdubbs] - Update to talloc-2.3.3. Fixes #15285.

  - [bdubbs] - Update to wireshark-3.4.7. Fixes #15282.

- July 18th, 2021

  - [bdubbs] - Update to cmake-3.21.0. Fixes #15281.

  - [bdubbs] - Update to btrfs-progs-5.13. Fixes #15278.

  - [bdubbs] - Update to mesa-21.1.5. Fixes #15280.

  - [thomas] - Update to tidy-html5-5.8.0. Fixes #15287.

- July 17th, 2021

  - [thomas] - Update to mpg123-1.28.2. Fixes #15275.

  - [thomas] - Update to libwacom-1.11. Fixes #15284.

  - [thomas] - Update to apache-ant-1.10.11. Fixes #15277.

- July 13th, 2021

  - [bdubbs] - Update to llvm-12.0.1. Fixes #15260.

  - [bdubbs] - Update to nss-3.68. Fixes #15272.

  - [ken] - Update to firefox-78.12.0esr (security fixes) and JS-78.12.0. Fixes #15268.

- July 12th, 2021

  - [renodr] - Adjust cups-pk-helper to no longer use deprecated syntax that will cause issues with future versions of CUPS.

  - [renodr] - Adjust polkit-gnome to be able to pull user icons again.

  - [renodr] - Update to abiword-3.0.5. Fixes #15237.

  - [renodr] - Update to WebKitGTK+-2.32.2. Fixes #15258.

  - [thomas] - Fix install path of docs in libusb.

- July 11th, 2021

  - [thomas] - Adapt autofs to merged-/usr changes. Partially fixes #15223.

  - [thomas] - Adapt stunnel to merged-/usr changes. Partially fixes #15223.

  - [thomas] - Update to mpg123-1.28.1. Fixes #15265.

- July 10th, 2021

  - [renodr] - Update to mercurial-5.8.1. Fixes #15254.

- July 9th, 2021

  - [renodr] - Update to icewm-2.6.0. Fixes #15255.

  - [renodr] - Update to evolution-data-server-3.40.3. Finishes #15257.

  - [renodr] - Update to evolution-3.40.3. Part of #15257.

  - [renodr] - Update to at-spi2-core-2.40.3. Fixes #15259.

  - [ken] - Update to gucharmap-13.0.8. Fixes #15244.

  - [renodr] - Update to gtk+-3.24.30. Fixes #15250.

  - [renodr] - Update to gnome-terminal-3.40.3. Fixes #15251.

  - [renodr] - Update to xorg-server-1.20.12. Fixes #15252.

  - [renodr] - Update to harfbuzz-2.8.2. Fixes #15253.

  - [bdubbs] - Update to ruby-3.0.2. Fixes #15249.

  - [bdubbs] - Update to bluez-5.60. Fixes #15248.

  - [bdubbs] - Update to libuv-1.41.1. Fixes #15247.

  - [bdubbs] - Update to libbytesize-2.6. Fixes #15246.

  - [bdubbs] - Update to mariadb-10.6.3. Fixes #15243.

  - [renodr] - Update to opencv-4.5.3. Fixes #15241.

  - [renodr] - Update to gnupg-2.2.29. Fixes #15242.

- July 8th, 2021

  - [renodr] - Update to Python-3.9.6 (Security Update). Fixes #15221.

  - [renodr] - Update to systemd-249 (Security Update). Fixes #15245.

  - [renodr] - Adapt gptfdisk to merged-/usr changes. Partially fixes #15223.

  - [renodr] - Adapt ntfs-3g to merged-/usr changes. Partially fixes #15223.

  - [renodr] - Adapt keyutils to merged-/usr changes. Partially fixes #15223.

- July 7th, 2021

  - [renodr] - Fix building LLVM-12.0.0 with linux-5.13.x. Fixes #15226.

  - [renodr] - Adapt hdparm to merged-/usr changes. Partially fixes #15223.

- July 6th, 2021

  - [bdubbs] - Update to umockdev-0.16.1. Fixes #15239.

  - [bdubbs] - Update to node.js-14.17.3. Fixes #15240.

  - [timtas] - Update to pango-1.48.7. Fixes #15238.

  - [thomas] - Update to libdrm-2.4.107. Fixes #15236.

  - [thomas] - Adapted mdadm and net-tools to changes in merged-/usr. Partially fixes #15223.

- July 5th, 2021

  - [bdubbs] - Update to poppler-21.07.0. Fixes #15235.

  - [bdubbs] - Update to umockdev-0.16.0. Fixes #15234.

  - [bdubbs] - Update to node.js-14.17.2 (security update). Fixes #15233.

- July 1st, 2021

  - [ken] - Patch gcc-11.1.0 to match LFS (this will be needed when firefox moves to 91ESR). Fixes #15225.

  - [renodr] - Update to mesa-21.1.4. Fixes #15231.

  - [renodr] - Update to babl-0.1.88. Fixes #15230.

  - [renodr] - Update to nspr-4.32. Fixes #15229.

  - [renodr] - Update to php-8.0.8 (security update). Fixes #15232.

- June 30th, 2021

  - [renodr] - Update to seamonkey-2.53.8 (Security Update). Fixes #15227.

  - [renodr] - Update to NetworkManager-1.32.2 (Security Update). Fixes #15228.

- June 29th, 2021

  - [renodr] - Update to pipewire-0.3.31. Fixes #15222.

  - [renodr] - Update to pango-1.48.6. Fixes #15224.

  - [renodr] - Minor tweaks to the configure command in dovecot for merged-/usr and unrecognized options.

- June 28th, 2021

  - [bdubbs] - Update to libuninameslist-20210626. Fixes #15220.

- June 27th, 2021

  - [bdubbs] - Update to icewm-2.5.0. Fixes #15219.

  - [bdubbs] - Update to totem-pl-parser-3.26.6. Fixes #15217.

  - [bdubbs] - Update to Data-Dump-1.25 (Perl module). Fixes #15218.

  - [bdubbs] - Update to libcap-2.51. Fixes #15205.

- June 26th, 2021

  - [timtas] - Update to dovecot-2.3.15. Fixes #15208.

- June 24th, 2021

  - [renodr] - Update to cmake-3.20.5. Fixes #15207.

  - [renodr] - Update to libva-2.12.0. Fixes #15210.

  - [renodr] - Update to mariadb-10.5.11. Fixes #15212.

  - [renodr] - Update to xf86-input-libinput-1.1.0. Fixes #15213.

  - [renodr] - Update to gpgme-1.16.0. Fixes #15215.

  - [renodr] - Update to glu-9.0.2. Fixes #15216.

  - [renodr] - Update to vlc-3.0.16. Fixes #15204.

  - [renodr] - Update to graphviz-2.47.3. Fixes #15200.

- June 23rd, 2021

  - [renodr] - Update to sqlite-3.36.0. Fixes #15202.

  - [renodr] - Update to libhandy-1.2.3. Fixes #15206.

- June 22nd, 2021

  - [renodr] - Fix building Abiword with GCC-11. Fixes #15209.

  - [ken] - Update to mutt-2.1.0. Fixes #15177.

- June 21st, 2021

  - [ken] - Update QtWebengine with newer patch to match the 5.15.5 commercial release (Security Fixes). Fixes #15195.

  - [ken] - Patch Qt-5.15.2 (security fix re qtsvg). Fixes #15197.

- June 20th, 2021

  - [bdubbs] - Update to Text-CSV-2.01 (Perl module). Fixes #15201.

  - [bdubbs] - Update to polkit-qt-1-0.114.0. Fixes #15203.

- June 19th, 2021

  - [renodr] - Update to exiv2-0.27.4 (security update). Fixes #15199.

- June 18th, 2021

  - [renodr] - Update to python-dbusmock-0.23.1. Fixes #15189.

  - [renodr] - Update to mutter-40.2.1. Fixes #15190.

  - [renodr] - Update to NetworkManager-1.32.0. Fixes #15192.

  - [renodr] - Update to upower-0.99.12. Fixes #15194.

  - [renodr] - Update to mesa-21.1.3. Fixes #15196.

  - [bdubbs] - Update to cups-filters-1.28.9. Fixes #15191.

  - [bdubbs] - Update to bind-9.16.18. Fixes #15193.

  - [renodr] - Update to node-v14.17.1. Fixes #15187.

- June 17th, 2021

  - [bdubbs] - Update to plasma-5.22.1. Fixes #14728.

  - [renodr] - Update to pcre-8.45. Fixes #15188.

  - [bdubbs] - Update to kf5-apps-21.04.2. Includes kate and kwave. Fixes #14730.

  - [renodr] - Update to nano-5.8. Fixes #15186.

  - [renodr] - Update to proftpd-1.3.7b. Fixes #15185.

  - [renodr] - Update to nfs-utils-2.5.4. Fixes #15184.

- June 16th, 2021

  - [renodr] - Update to cmake-3.20.4. Fixes #15183.

  - [renodr] - Update to enchant-2.3.0. Fixes #15181.

  - [renodr] - Update to unrar-6.0.7. Fixes #15182.

  - [renodr] - Update to postfix-3.6.1. Fixes #15180.

  - [renodr] - Update to bluez-5.59. Fixes #15178.

  - [renodr] - Update to tracker and tracker-miners 3.1.2. Fixes #15175.

  - [renodr] - Update to libwpe-1.10.1. Fixes #15166.

  - [renodr] - Update to alsa-lib and alsa-utils 1.2.5.1. Fixes #15173.

  - [xry111] - Update to GRUB-2.06. Fixes #15152.

- June 15th, 2021

  - [renodr] - Update to PDFBox/FontBox 2.0.24 (Security Update). Fixes #15176.

- June 14th, 2021

  - [bdubbs] - Update to kf5-5.83.0. Includes extra-cmake-modules, breeze-icons, and oxygen-icons. Fixes #14773.

  - [bdubbs] - Update to plasma-wayland-protocols-1.3.0.

- June 12th, 2021

  - [bdubbs] - Update to sudo-1.9.7p1. Fixes #15174.

  - [bdubbs] - Update to libreoffice-7.1.4.2. Fixes #15170.

- June 11th, 2021

  - [bdubbs] - Update to ristretto-0.11.0. Fixes #15172.

  - [bdubbs] - Update to vlc-3.0.15. Fixes #15171.

  - [bdubbs] - Update to gnumeric-1.12.50. Fixes #15169.

  - [bdubbs] - Update to goffice-0.10.50. Fixes #15168.

  - [bdubbs] - Update to libpcap-1.10.1. Fixes #15167.

  - [bdubbs] - Update to libksba-1.6.0. Fixes #15165.

  - [bdubbs] - Update to nss-3.67. Fixes #15164.

- June 10th, 2021

  - [renodr] - Update to glib-2.68.3. Fixes #15163.

  - [renodr] - Update to mutter-40.2. Fixes #15161.

  - [renodr] - Update to gnome-shell-40.2. Fixes #15159.

  - [renodr] - Update to gnome-shell-extensions-40.2. Fixes #15160.

  - [renodr] - Update to gnupg-2.2.28. Fixes #15162.

  - [bdubbs] - Update to gptfdisk-1.0.8. Fixes #15158.

  - [bdubbs] - Update to pipewire-0.3.30. Fixes #15157.

  - [bdubbs] - Update to xscreensaver-6.01. Fixes #15156.

  - [bdubbs] - Update to fuse3-3.10.4. Fixes #15155.

- June 9th, 2021

  - [renodr] - Update to sshfs-3.7.2. Fixes #15150.

  - [renodr] - Update to xkeyboard-config-2.33. Fixes #15151.

  - [renodr] - Update to gnome-desktop-40.2. Fixes #15153.

  - [renodr] - Update to evince-40.2. Fixes #15154.

  - [ken] - For poppler, promote boost to recommended.

- June 8th, 2021

  - [renodr] - Update to xterm-368. Fixes #15147.

  - [renodr] - Update to sysstat-12.5.4. Fixes #15146.

  - [ken] - Update to Intel microcode-20210608 (security fix). Fixes #15149.

  - [renodr] - Update to libiodbc-3.52.15. Fixes #15144.

  - [renodr] - Update to nettle-3.7.3. Fixes #15143.

  - [renodr] - Update to wpebackend-fdo-1.10.0. Fixes #15145.

  - [thomas] - Upgrade to xfce4-settings-4.16.2. Fixes #15148.

- June 7th, 2021

  - [renodr] - Update to network-manager-applet-1.22.0. Fixes #15020.

  - [renodr] - Update to ModemManager-1.16.6. Fixes #15136.

  - [renodr] - Update to icewm-2.4.0. Fixes #15140.

  - [bdubbs] - Update to git-2.32.0. Fixes #15138.

  - [bdubbs] - Update to Unicode-Collate-1.30 (Perl module). Fixes #15137.

  - [renodr] - Update to pidgin-2.14.5. Fixes #14976.

  - [renodr] - Update to epiphany-40.2. Fixes #14955.

  - [renodr] - Update to gnome-maps-40.2. Fixes #15119.

  - [renodr] - Update to evolution-3.40.2. Fixes #15118.

  - [timtas] - Update to openldap-2.5.5. Fixes #15115.

- June 6th, 2021

  - [renodr] - Update to eog-40.2. Fixes #15129.

  - [renodr] - Fix installing documentation in cdrtools.

  - [renodr] - Update to yelp-40.2. Fixes #15134.

  - [renodr] - Update to Nautilus-40.2. Fixes #15121.

  - [renodr] - Adapt rpcbind to merged-/usr changes.

  - [renodr] - Update to evolution-data-server-3.40.2. Part of #15118.

  - [renodr] - Update to gnome-autoar-0.3.3. Fixes #15120.

  - [renodr] - Update to yelp-xsl-40.2. Fixes #15135.

  - [renodr] - Update to vala-0.52.4. Fixes #15117.

  - [renodr] - Update to libX11-1.7.2 (Xorg Library). Fixes #15133.

  - [bdubbs] - Update to wireshark-3.4.6. Fixes #15132.

  - [bdubbs] - Update to mpg123-1.28.0. Fixes #15132.

  - [bdubbs] - Update to at-spi2-core-2.40.2. Fixes #15130.

  - [bdubbs] - Update to polkit-0.119. Fixes #15110.

  - [bdubbs] - Update to pipewire-0.3.29. Fixes #15109.

  - [bdubbs] - Update to gnome-terminal-3.40.2. Fixes #15128.

  - [bdubbs] - Update to vte-0.64.2. Fixes #15131.

  - [bdubbs] - Update to libogg-1.3.5. Fixes #15126.

  - [bdubbs] - Update to nfs-utils-2.5.3. Fixes #15125.

  - [bdubbs] - Update to librsvg-2.50.7. Fixes #15124.

  - [bdubbs] - Update to libqmi-1.28.6. Fixes #15123.

  - [bdubbs] - Update to dash-0.5.11.4. Fixes #15122.

- June 5th, 2021

  - [renodr] - Update to samba-4.14.5. Fixes #15103.

  - [timtas] - Upgrade to thunderbird-78.11.0. Fixes #15108.

- June 4th, 2021

  - [bdubbs] - Update to poppler-21.06.1. Fixes #15112.

  - [bdubbs] - Update to php-8.0.7. Fixes #15113.

  - [bdubbs] - Update to pycairo-1.20.1 (Python module). Fixes #15114.

  - [xry111] - Update to p11-kit-0.24.0. Fixes #15111.

- June 3rd, 2021

  - [renodr] - Adapt btrfs-progs to merged-/usr changes.

  - [renodr] - Adapt libpwquality to merged-/usr changes.

  - [renodr] - Adapt the timer/unit creation for pciutils, usbutils, and logrotate to the merged-/usr changes.

  - [renodr] - Adapt cracklib to merged-/usr changes.

  - [renodr] - Adapt reiserfsprogs to merged-/usr changes.

  - [renodr] - Adapt IW to merged-/usr changes.

  - [bdubbs] - Update to mesa-21.1.2. Fixes #15107.

  - [bdubbs] - Update to libinput-1.18.0 (Xorg driver). Fixes #15106.

  - [bdubbs] - Update to libmbim-1.24.8. Fixes #15104.

  - [bdubbs] - Update to poppler-21.06.0. Fixes #15102.

  - [bdubbs] - Update to qca-2.3.3. Fixes #15101.

  - [bdubbs] - Update to gsl-2.7. Fixes #15100.

  - [timtas] - Update to alsa-lib-1.2.5, alsa-tools-1.2.5, alsa-utils-1.2.5, and alsa-plugins 1.2.5. Fixes #15099.

- June 1st, 2021

  - [renodr] - Adapt libnsl to merged-/usr changes.

  - [renodr] - Adapt wpa_supplicant to merged-/usr changes.

  - [renodr] - Update to NetworkManager-1.30.4. Fixes #14927.

  - [xry111] - Add asciidoctor, to build man page for util-linux (in LFS).

  - [ken] - Update to firefox-78.11.0esr (security fixes) and JS-78.11.0. Fixes #15098.

- May 31st, 2021

  - [renodr] - Fix an issue when building libevent without a /usr/bin/python symlink.

  - [bdubbs] - Update to nss-3.66. Fixes #15095.

  - [bdubbs] - Update to cryptsetup-2.3.6. Fixes #15093.

  - [bdubbs] - Update to gnutls-3.7.2. Fixes #15094.

  - [bdubbs] - Update to vsftpd-3.0.4. Fixes #15096.

- May 29th, 2021

  - [ken] - Fix seamonkey build breakage with nss-3.65 by using the shipped nss. Fixes #15079.

- May 28th, 2021

  - [bdubbs] - Update to libcap-2.50 (Sync with LFS). Fixes #15080.

  - [bdubbs] - Update to vim-8.2.2890. Sync with LFS.

  - [bdubbs] - Update to cmake-3.20.3. Fixes #15092.

- May 27th, 2021

  - [xry111] - Upgrade to graphviz-2.47.2. Fixes #15091.

  - [bdubbs] - Upgrade to libinput-1.17.3 (Xorg driver). Fixes #15090.

  - [bdubbs] - Upgrade to pcre2-10.37. Fixes #15088.

  - [bdubbs] - Upgrade to nspr-4.31. Fixes #15087.

  - [thomas] - Update to dhcp-4.4.2-P1. Fixes #15089.

  - [renodr] - Update to WebKitGTK+-2.32.1. Fixes #15019.

  - [renodr] - Add wpebackend-fdo to the book. Finishes #14913.

  - [renodr] - Add libwpe to the book. Part of #14913.

- May 26th, 2021

  - [timtas] - Upgrade to curl-7.77.0. Fixes #15086.

  - [renodr] - Update to ModemManager-1.16.4. Fixes #14923.

  - [renodr] - Stop moving the PAM Module to /lib/security in gnome-keyring.

  - [bdubbs] - Upgrade to librsvg-2.50.6. Fixes #15084.

  - [renodr] - Fix building v4l-utils with GCC-11.1 if Qt5 is installed.

  - [timtas] - Update to httpd-2.4.48. Fixes #15085.

- May 25th, 2021

  - [renodr] - Update to icewm-2.3.4. Fixes #14936.

  - [bdubbs] - Upgrade to inkscape-1.1. Fixes #15083.

  - [bdubbs] - Upgrade to libgusb-0.3.7. Fixes #15082.

  - [bdubbs] - Upgrade to xfsprogs-5.12.0. Fixes #15081.

- May 24th, 2021

  - [renodr] - Use the correct systemd unit in Gutenprint.

  - [renodr] - Stop modifying the systemd unit for cups-browsed now that we're using OpenPrinting CUPS.

  - [ken] - Add patch to enable building gst-plugins-good against Qt5 or some other dependencies.

  - [ken] - Upgrade to mutt-2.0.7. Fixes #14996.

  - [renodr] - Use the correct unit name for CUPS.

  - [bdubbs] - Upgrade to IO-Socket-SSL-2.071 (Perl module). Fixes #15077.

  - [bdubbs] - Upgrade to links-2.23. Fixes #15078.

- May 22nd, 2021

  - [bdubbs] - Upgrade to logrotate-3.18.1. Fixes #15076.

  - [bdubbs] - Upgrade to gtkmm3-3.24.5. Fixes #15075.

  - [bdubbs] - Upgrade to libepoxy-1.5.8. Fixes #15074.

  - [bdubbs] - Upgrade to pangomm-2.46.1. Fixes #15073.

  - [bdubbs] - Upgrade to atkmm-2.28.2. Fixes #15072.

  - [renodr] - Disable valgrind in libdrm to allow sysprof to build properly.

- May 21st, 2021

  - [timtas] - Upgrade to thunderbird-78.10.2. Fixes #15055.

  - [thomas] - Add an optional patch to hexchat adding the libera.chat network.

  - [bdubbs] - Update to libndp-1.8. Fixes #15071.

  - [bdubbs] - Update to sassc-3.6.2 and libsass-3.6.5. Fixes #15070.

- May 20th, 2021

  - [bdubbs] - Update to glibmm-2.66.1. Fixes #15069.

  - [bdubbs] - Update to libsigc++-3.0.7. Fixes #15068.

  - [bdubbs] - Update to libsigc++-2.10.7. Fixes #15067.

  - [bdubbs] - Update to pipewire-0.3.28. Fixes #15066.

  - [bdubbs] - Update to mesa-21.1.1. Fixes #15065.

  - [bdubbs] - Update to bind9-9.16.16. Fixes #15064.

  - [bdubbs] - Update to Test-Differences-0.68 (Perl module). Fixes #15063.

  - [renodr] - Update to GCC-11.1.0. Fixes #14993.

  - [renodr] - Update to Python-3.9.5. Fixes #14993.

  - [renodr] - Update to systemd-248. Fixes #14968.

- May 19th, 2021

  - [bdubbs] - Update to libdrm-2.4.106. Fixes #15062.

  - [bdubbs] - Update to Test-Differences-0.68 (Perl Module). Fixes #15061.

  - [bdubbs] - Update to MarkupSafe-2.0.1 (Python Module). Fixes #15060.

  - [bdubbs] - Update to Jinja2-3.0.1 (Python Module). Fixes #15059.

  - [ken] - Fix building gst-plugins-base with meson-0.58.0.

  - [renodr] - Fix building Fluxbox with gcc-11.1.

  - [renodr] - Remove unnecessary configure switches from the xf86-input-wacom driver.

  - [renodr] - Remove instructions for moving the dbus shared library to /lib.

- May 18th, 2021

  - [renodr] - Update the default path in shadow to be consistent with LFS.

  - [renodr] - Force libxcb to use python3, even if python2 is present on the system.

  - [renodr] - Adapt some scripts in subversion to python3.

  - [renodr] - Remove unnecessary instructions from hdparm due to the merged-/usr transition.

  - [thomas] - Use OpenPrinting CUPS. Thanks to Marty Jack for the pointer.

  - [ken] - in Linux-PAM do not move libs to /lib.

  - [bdubbs] - Update to pango-1.48.5. Fixes #15057.

  - [bdubbs] - Update to libX11-1.7.1 (xorg library; Security Release). Fixes #15056.

  - [bdubbs] - Update to unrar-6.0.6. Fixes #15053.

  - [bdubbs] - Update to decorator-5.0.9 (Python module). Fixes #15054.

- May 17th, 2021

  - [bdubbs] - Update to postgresql-13.3. Fixes #15040.

  - [ken] - Patch exiv2-0.27.3 (security fix). Fixes #15052.

  - [bdubbs] - Update to nss-3.65. Fixes #15044.

  - [bdubbs] - Update to libidn-1.37. Fixes #15048.

  - [bdubbs] - Update to btrfs-progs-v5.12.1. Fixes #15038.

  - [bdubbs] - Update to mutter-40.1. Fixes #15043.

  - [bdubbs] - Update to gnome-shell-extensions-40.1. Fixes #15042.

  - [bdubbs] - Update to gnome-shell-40.1. Fixes #15041.

  - [bdubbs] - Update to decorator-5.0.8 (Python module). Fixes #15051.

  - [bdubbs] - Update to rxvt-unicode-9.26. Fixes #15047.

  - [bdubbs] - Update to libqmi-1.28.4. Fixes #15045.

  - [ken] - DHCP - remove instruction to move dhclient to /sbin and use /usr/sbin for dhclient-script.

  - [timtas] - Update to fltk-1.3.6. Fixes #15050.

- May 16th, 2021

  - [bdubbs] - Update to libxml2-2.9.12. Fixes #15039.

  - [renodr] - Restore the ICU-69 patch in node.js.

- May 15th, 2021

  - [renodr] - Create symlinks to /usr/sbin instead of /sbin in ntfs-3g (for consistency).

  - [renodr] - Fix building fuse-3.10.3 with GCC-11.1.0 and also stop moving libraries/binaries to /bin and /lib.

  - [renodr] - Stop moving /usr/bin/traceroute to /bin in the installation instructions for traceroute.

  - [renodr] - Remove an unnecessary test adaptation to keyutils now that merged-/usr changes have landed in LFS.

  - [renodr] - Make changes to the MIT Kerberos V5 page to stop moving libraries and programs to /lib and /bin.

  - [renodr] - Install pax in /usr/bin instead of /bin.

  - [renodr] - Remove instructions for installing cpio in /bin. In merged-/usr, /usr/bin is fine.

- May 14th, 2021

  - [ken] - Remove instructions from libtirpc for moving libraries to /lib.

  - [ken] - Remove instructions from libmnl for moving libraries to /lib.

  - [ken] - Remove instructions from iptables for installing to /sbin and /lib/xtables.

  - [renodr] - Disable generating documentation on cyrus-sasl until Sphinx and docutils are both fixed.

  - [renodr] - Remove instructions from PCRE for moving libraries to /lib.

- May 13th, 2021

  - [bdubbs] - Update to vlc-3.0.14. Fixes #15033.

  - [bdubbs] - Update to libtasn1-4.17.0. Fixes #15037.

  - [bdubbs] - Update to highlight-4.1. Fixes #15036.

  - [bdubbs] - Update to mousepad-0.5.5. Fixes #15034.

  - [bdubbs] - Update to node.js-14.17.0. Fixes #15030.

  - [renodr] - Removed the instructions for moving the popt library in the event that /usr is not available.

  - [bdubbs] - Update to MarkupSafe-2.0.0 (Python module). Fixes #15032.

  - [bdubbs] - Update to jinja2-3.0.0 (Python module). Fixes #15031.

  - [bdubbs] - Update to sudo-1.9.7. Fixes #15029.

  - [bdubbs] - Update to libXfixes-6.0.0. Fixes #15028.

  - [renodr] - Update to libidn2-2.3.1. Fixes #15035.

- May 12th, 2021

  - [renodr] - Update to fuse-3.10.3. Fixes #14902.

  - [renodr] - Update to fetchmail-6.4.19. Fixes #14930.

  - [renodr] - Update to apache-ant-1.10.10. Fixes #14925.

  - [renodr] - Update to samba-4.14.4 (Security Update). Fixes #14928.

  - [renodr] - Update to llvm-12.0.0. Fixes #14911.

  - [pierre] - Patch firefox so that HTML videos do not crash, if compiled with rust-1.52.0.

- May 11th, 2021

  - [pierre] - Fix the pkgconfig file for lua-5.2: the library was -llua instead of -llua5.2.

  - [bdubbs] - Update to btrfs-progs-5.12. Fixes #15021.

  - [bdubbs] - Update to gtk-4.2.1. Fixes #15013.

  - [bdubbs] - Update to glib-2.68.2. Fixes #15027.

  - [bdubbs] - Update to hdparm-9.62. Fixes #15023.

  - [bdubbs] - Update to guile-3.0.7. Fixes #15018.

  - [bdubbs] - Update to feh-3.7. Fixes #15017.

  - [bdubbs] - Update to rpcbind-1.2.6. Fixes #15024.

  - [bdubbs] - Update to libtirpc-1.3.2. Fixes #15025.

  - [thomas] - Add a patch to make curl compatible with openldap-2.5.4. Fixes #15026.

- May 10th, 2021

  - [bdubbs] - Update to nautilus-40.1. Fixes #14965.

  - [bdubbs] - Update to gnome-user-docs-40.1. Fixes #14983.

  - [bdubbs] - Update to gnome-terminal-3.40.1. Fixes #14969.

  - [bdubbs] - Update to gnome-system-monitor-40.1. Fixes #14966.

  - [bdubbs] - Update to gnome-maps-40.1. Fixes #14984.

  - [bdubbs] - Update to gnome-disk-utility-40.1. Fixes #14977.

  - [bdubbs] - Update to gnome-calculator-40.1. Fixes #14967.

  - [bdubbs] - Update to evolution-3.40.1. Fixes #14961.

  - [bdubbs] - Update to eog-40.1. Fixes #14987.

  - [bdubbs] - Update to gnome-settings-daemon-40.0.1. Fixes #14909.

  - [bdubbs] - Update to gvfs-1.48.1. Fixes #14963.

  - [bdubbs] - Update to libwnck-40.0. Fixes #15022.

  - [bdubbs] - Update to evolution-data-server-3.40.1. Partially fixes #14961.

  - [bdubbs] - Update to gnome-online-accounts-3.40.0. Fixes #14937.

  - [bdubbs] - Update to gnome-desktop-40.1. Fixes #14986.

  - [bdubbs] - Update to gnome-autoar-0.3.2. Fixes #14964.

  - [bdubbs] - Update to gjs-1.68.1. Fixes #15009.

- May 9th, 2021

  - [ken] - Update to firefox-78.10.1 and js78.10.1. Fixes #14995.

  - [ken] - Fix seamonkey build breakage with rust-1.52.0.

  - [ken] - Update to rustc-1.52.0 (security fix). Fixes #15000.

  - [bdubbs] - Update to mariadb-10.5.10. Fixes #15008.

  - [bdubbs] - Update to qpdf-10.3.2. Fixes #15014.

  - [bdubbs] - Update to File-Which-1.27 (Perl module). Fixes #15015.

  - [bdubbs] - Update to at_3.2.2. Fixes #15012.

  - [bdubbs] - Update to pipewire-0.3.27. Fixes #15011.

  - [bdubbs] - Update to LVM2.2.03.12. Fixes #15007.

  - [bdubbs] - Update to vlc-3.0.13. Fixes #14975.

  - [bdubbs] - Update to libreoffice-7.1.3.2. Fixes #15010.

  - [bdubbs] - Update to qemu-6.0.0. Fixes #14956.

  - [bdubbs] - Update to mercurial-5.8. Fixes #14992.

  - [bdubbs] - Update to libyaml-0.2.5. Fixes #15004.

  - [bdubbs] - Update to libinput-1.17.2 (xorg driver). Fixes #15005.

  - [bdubbs] - Update to LMDB-0.9.29. Fixes #15005.

  - [bdubbs] - Update to six-1.16.0 (Python Module). Fixes #15001.

  - [bdubbs] - Update to Pygments-2.9.0. Fixes #14991.

  - [bdubbs] - Update to umockdev-0.15.5. Fixes #14989.

- May 8th, 2021

  - [bdubbs] - Update to poppler-21.05.0. Fixes #14981.

  - [bdubbs] - Update to vte-0.64.1. Fixes #14974.

  - [bdubbs] - Update to php-8.0.6. Fixes #14958 (again).

- May 7th, 2021

  - [bdubbs] - Update to librsvg-2.50.5. Fixes #14970.

  - [bdubbs] - Update to php-8.0.5. Fixes #14958.

  - [bdubbs] - Update to gparted-1.3.0. Fixes #14988.

  - [bdubbs] - Update to libass-0.15.1. Fixes #14985.

  - [bdubbs] - Update to wayland-protocols-1.21. Fixes #14973.

  - [bdubbs] - Update to Net-DNS-1.31 (Perl Module). Fixes #14982.

  - [renodr] - Add the systemd-oomd group.

  - [bdubbs] - Update to at-spi2-core-2.40.1. Fixes #14972.

  - [bdubbs] - Update to fdk-aac-2.0.2. Fixes #14953.

  - [bdubbs] - Update to guile-3.0.6. Fixes #14948.

  - [bdubbs] - Update to hdparm-9.61. Fixes #14946.

  - [bdubbs] - Update to tcsh-6.22.04. Fixes #14945.

  - [bdubbs] - Update to graphviz-2.47.1. Fixes #14942.

  - [bdubbs] - Update to gedit-40.1. Fixes #14941.

  - [bdubbs] - Update to adwaita-icon-theme-40.1.1. Fixes #14935 (again).

  - [bdubbs] - Update to gtk+3-3.24.29. Fixes #14934.

  - [bdubbs] - Update to mesa-21.1.0. Fixes #14758.

  - [timtas] - Update to thunar-4.16.8. Fixes #15003.

- May 6th, 2021

  - [renodr] - Update to exo-4.16.2. Fixes #14897.

  - [renodr] - Update to xfce4-settings-4.16.1. Fixes #14898.

  - [renodr] - Update to gnome-session-40.1.1. Fixes #14899.

  - [renodr] - Update to gnome-backgrounds-40.1. Fixes #14900.

  - [bdubbs] - Update to libdvdnav-6.1.1. Fixes #14939.

  - [bdubbs] - Update to libdvdread-6.1.2. Fixes #14940.

  - [bdubbs] - Update to libdvdcss-1.4.3. Fixes #14938.

  - [bdubbs] - Update to wireshark-3.4.5. Fixes #14929.

  - [bdubbs] - Update to glib-networking-2.68.1. Fixes #14931.

  - [bdubbs] - Update to libjpeg-turbo-2.1.0. Fixes #14310.

  - [ken] - Patch qtwebengine-20210401 for latest fixes (security update). Fixes #14999.

  - [bdubbs] - Update to adwaita-icon-theme-40.1. Fixes #14935.

  - [bdubbs] - Update to xf86-input-libinput-1.0.1 (Xorg Driver). Fixes #14933.

  - [bdubbs] - Update to docutils-0.17.1 (Python module). Fixes #14926.

  - [bdubbs] - Update to List-AllUtils-0.19 (Perl module). Fixes #14924.

  - [bdubbs] - Update to libtiff-4.3.0. Fixes #14922.

  - [bdubbs] - Update to jasper-2.0.32. Fixes #14921.

  - [renodr] - Update to cbindgen-0.19.0. Fixes #14885.

  - [renodr] - Update to postfix-3.6.0. Fixes #14892.

  - [renodr] - Update to gdk-pixbuf-2.42.6. Fixes #14893.

  - [renodr] - Update to file-roller-3.40.0. Fixes #14894.

  - [renodr] - Update to seahorse-40.0. Fixes #14895.

  - [renodr] - Update to ICU-69.1. Fixes #14884.

  - [renodr] - Fix building WebKitGTK+ with ICU-69.1. Patch by Xi Ruoyao.

  - [renodr] - Fix building Node.JS with ICU-69.1. Patch by Ken Moffat.

  - [timtas] - Upgrade to xfce4-panel-4.16.3. Fixes #15002.

- May 5th, 2021

  - [timtas] - Upgrade to thunderbird-78.10.1. Fixes #14998.

  - [thomas] - Upgrade libxkbcommon-1.3.0. Fixes #14980.

  - [thomas] - Upgrade libwacom-1.10. Fixes #14949.

  - [thomas] - Upgrade libepoxy-1.5.7. Fixes #14962.

- May 4th, 2021

  - [renodr] - Adapt the Dovecot Lua plugin to Lua-5.4. Fixes #14977.

  - [renodr] - Update to vala-0.52.3. Fixes #14879.

  - [renodr] - Update to libksba-1.5.1. Fixes #14874.

  - [renodr] - Update to pipewire-0.3.26. Fixes #14878.

  - [renodr] - Update to graphene-1.10.6. Fixes #14873.

  - [renodr] - Update to ruby-3.0.1 (Security Update). Fixes #14871.

  - [thomas] - Upgrade to xorgproto-2021.4. Fixes #14960.

  - [thomas] - Upgrade to harfbuzz-2.8.1. Fixes #14990.

  - [timtas] - Upgrade to exim-4.94.2. Fixes #14994.

- May 3rd, 2021

  - [bdubbs] - Upgrade to libical-3.0.10. Fixes #14920.

  - [bdubbs] - Upgrade to boost_1_76_0. Fixes #14918.

  - [bdubbs] - Upgrade to gtk-vnc-1.2.0. Fixes #14908.

  - [bdubbs] - Upgrade to libhandy-1.2.2. Fixes #14906.

  - [bdubbs] - Upgrade to unrar-6.0.5. Fixes #14903.

  - [timtas] - Upgrade to openldap-2.5.4. Fixes #14959.

- May 2nd, 2021

  - [thomas] - Upgrade to tidy-html-5.7.27. Fixes #14944.

  - [thomas] - Upgrade to gdb-10.2. Fixes #14944.

- May 1st, 2021

  - [timtas] - Add a sed to cups-filters to allow building with openldap 2.5.4. Fixes #14978.

  - [renodr] - Update to opencv-4.5.2. Fixes #14855.

  - [renodr] - Update to bluez-5.58. Fixes #14856.

  - [renodr] - Update to decorator-5.0.7 (Python Module). Fixes #14857.

  - [renodr] - Update to stunnel-5.59. Fixes #14869.

  - [renodr] - Update to libportal-0.4. Fixes #14870.

  - [thomas] - Update to bind-9.16.15 (server and utils). Fixes #14951.

  - [thomas] - Update to cmake-3.20.2. Fixes #14957.

  - [thomas] - Update to libgcrypt-1.9.3. Fixes #14919.

- April 30th, 2021

  - [thomas] - Update to sqlite-3.35.5. Fixes #14932.

  - [thomas] - Update to nano-5.7. Fixes #14954.

  - [timtas] - Update to httpd-2.4.47. Fixes #14952.

- April 29th, 2021

  - [ken] - Update to Seamonkey-2.53.7.1. Fixes #14916.

  - [renodr] - Update to pidgin-2.14.3. Fixes #14850.

  - [renodr] - Update to libreoffice-7.1.2.2. Fixes #14849.

  - [ken] - Update to Python-3.9.4 (security fix). Fixes #14858.

- April 28th, 2021

  - [renodr] - Fix the systemd patch to allow compilation with meson-0.57.2 and with Linux-API-Headers-5.11.14 and higher.

  - [ken] - Update to xorg-server-1.20.11 (security fix). Fixes #14905.

- April 27th, 2021

  - [ken] - Update to nss-3.64. Fixes #14915.

  - [renodr] - Update to highlight-4.0. Fixes #14848.

- April 26th, 2021

  - [renodr] - Fix the build of dvisvgm by putting the Python sed after autoreconf -fiv.

  - [ken] - Upgrade to thunderbird-78.10.0 (security fixes). Fixes #14914.

  - [timtas] - Upgrade to p7zip-17.04. Fixes #14943.

  - [thomas] - Upgrade openssh-8.6p1. Fixes #14917.

- April 23rd, 2021

  - [ken] - Patch xindy to include upstream changes.

  - [ken] - Update to texlive-2021. Fixes #14846.

- April 21th, 2021

  - [xry111] - Add workaround for cracklib to build Python 3 module.

  - [xry111] - Revert 7b66ed21, as the proposed fix in it is rejected by Python maintainers.

- April 19th, 2021

  - [ken] - Update to firefox-78.10.0esr (security fixes) and JS-78.10.0.

- April 17th, 2021

  - [pierre] - Fix a build error in evolution-data-server-3.40.0 with cmake-3.20.1.

- April 15th, 2021

  - [ken] - Update to gdk-pixbuf-xlib-2.40.2. Fixes #14883.

  - [ken] - Update to docutils-0.17 (Python module). Fixes #14865.

  - [ken] - Update to poppler-21.04.0. Fixes #14847.

  - [timtas] - Upgrade to curl-7.76.1. Fixes #14907.

- April 14th, 2021

  - [renodr] - Fix the MPlayer instructions and apply several minor tweaks to the page. Fixes #14891.

  - [renodr] - Update to librsvg-2.50.4 (Security Update). Fixes #14901.

  - The XML source code of this book is migrated from SVN to Git.

- April 13th, 2021

  - [timtas] - Upgrade to cifs-utils-6.13. Fixes #14904.

- April 12th, 2021

  - [timtas] - Upgrade to glib-2.68.1. Fixes #14881.

- April 11th, 2021

  - [timtas] - Upgrade to ffmpeg-4.4. Fixes #14888.

  - [timtas] - Upgrade to thunderbird-78.9.1. Fixes #14887.

  - [thomas] - Upgrade icewm-2.3.1. Fixes #14861.

  - [thomas] - Upgrade cmake-3.20.1. Fixes #14886.

  - [ken] - Patch inkscape to build with glib-2.68. Fixes #14889.

- April 9th, 2021

  - [ken] - Update to a qtwebengine snapshot from 2021-04-01 (Security Update). Fixes #14863.

- April 8th, 2021

  - [ken] - Update to node-v14.16.1 (Security Update). Fixes #14875.

  - [renodr] - Update to baobab-40.0. Part of #14801.

  - [renodr] - Update to eog-40.0. Part of #14801.

  - [renodr] - Update to evince-40.1. Part of #14801.

  - [renodr] - Update to gnome-calculator-40.0. Part of #14801.

  - [renodr] - Update to gnome-disk-utility-40.0. Part of #14801.

  - [renodr] - Update to gnome-maps-40.0. Part of #14801.

  - [renodr] - Update to gnome-screenshot-40.0. Part of #14801.

  - [renodr] - Update to gnome-system-monitor-40.0. Part of #14801.

  - [renodr] - Update to gnome-terminal-3.40.0. Part of #14801.

  - [renodr] - Update to gnome-weather-40.0. Part of #14801.

  - [renodr] - Update to gedit-40.0. Part of #14801.

  - [renodr] - Update to epiphany-40.0. Part of #14801.

  - [renodr] - Adapt Cheese to changes in vala-0.52. Fixes #14882.

  - [thomas] - Update to xf86-input-libinput-1.0.0. Fixes #14872.

  - [thomas] - Update to libva-2.11.0. Fixes #14860.

  - [thomas] - Update to libdrm-2.4.105. Fixes #14877.

  - [thomas] - Update to libxkbcommon-1.2.1. Fixes #14864.

  - [renodr] - Update to gnome-tweaks-40.0. Part of #14801.

  - [renodr] - Update to evolution-3.40.0. Part of #14801.

  - [renodr] - Update to yelp-40.0. Part of #14800.

  - [renodr] - Update to gnome-user-docs-40.0. Part of #14800.

  - [renodr] - Update to gdm-40.0. Part of #14800.

  - [renodr] - Update to gnome-shell-extensions-40.0. Part of #14800.

  - [renodr] - Update to gnome-shell-40.0. Part of #14800.

  - [renodr] - Update to mutter-40.0. Part of #14800.

  - [renodr] - Update to gnome-control-center-40.0. Part of #14800.

  - [renodr] - Update to gnome-settings-daemon-40.0. Part of #14800.

  - [renodr] - Update to gnome-keyring-40.0. Part of #14800.

  - [renodr] - Update to gnome-bluetooth-3.34.5. Part of #14800.

  - [renodr] - Update to nautilus-40.0. Part of #14800.

  - [renodr] - Update to gvfs-1.48.0. Part of #14800.

  - [renodr] - Update to dconf-editor-3.38.3. Part of #14800.

- April 6th, 2021

  - [renodr] - Update to tracker3-miners-3.1.1. Part of #14799.

  - [renodr] - Update to tracker3-3.1.1. Part of #14799.

  - [renodr] - Update to evolution-data-server-3.40.0. Part of #14799.

  - [renodr] - Update to libgweather-40.0. Part of #14799.

  - [renodr] - Update to libpeas-1.30.0. Part of #14799.

  - [renodr] - Update to libgee-0.20.4. Part of #14799.

  - [renodr] - Update to gnome-desktop-40.0. Part of #14799.

  - [renodr] - Update to gjs-1.68.0. Part of #14799.

  - [renodr] - Update to vte-0.64.0. Fixes #14862.

  - [renodr] - Update to yelp-xsl-40.0. Part of #14799.

  - [renodr] - Update to gsettings-desktop-schemas-40.0. Part of #14799.

  - [renodr] - Update to gcr-3.40.0. Part of #14799.

  - [renodr] - Fix a security vulnerability in avahi. Fixes #14866.

  - [renodr] - Fix a security vulnerability in NetworkManager. Fixes #14868.

  - [renodr] - Fix a security vulnerability in p7zip. Fixes #14867.

- April 5th, 2021

  - [pierre] - Remove a spurious file in doxygen that prevents building the documentation.

- April 3rd, 2021

  - [thomas] - Upgrade sqlite-3.35.4. Fixes #14859.

  - [thomas] - Upgrade mousepad-0.5.4. Fixes #14854.

- April 2nd, 2021

  - [renodr] - Added gtksourceview-5.0.0. Finishes #14798.

  - [renodr] - Added GTK-4.2.0. Part of #14798.

  - [renodr] - Update to tepl-6.00.0. Part of #14798.

  - [renodr] - Update to sysprof-3.40.1. Part of #14798.

  - [renodr] - Update to libdazzle-3.40.0. Part of #14798.

  - [renodr] - Update to gtk+-3.24.28. Part of #14798.

  - [renodr] - Update to gdk-pixbuf-2.42.4. Part of #14798.

  - [renodr] - Update to at-spi2-core-2.40.0. Part of #14798.

  - [renodr] - Update to glib-networking-2.68.0. Part of #14798.

  - [renodr] - Update to pygobject-3.40.1. Part of #14798.

  - [renodr] - Update to gobject-introspection-1.68.0. Part of #14798.

  - [renodr] - Update to vala-0.52.0. Part of #14798.

  - [renodr] - Update to glib-2.68.0. Part of #14798.

  - [ken] - Add a warning in xdg-utils about an unfixed security vulnerability.

  - [ken] - Patch libssh2-1.9.0 for a security vulnerability. Fixes #14853.

  - [ken] - Patch flac-1.3.3 for a security vulnerability. Fixes #14852.

  - [timtas] - Update to xscreensaver-6.00. Fixes #14851.

- April 1st, 2021

  - [renodr] - Update to ghostscript-9.54.0. Fixes #14842.

  - [renodr] - Update to libXres-1.2.1 (Xorg Library). Fixes #14845.

  - [renodr] - Update to Net-DNS-1.30 (Perl Module). Fixes #14841.

  - [renodr] - Fix Hexchat to work with Python-3.8+ and fix a crash that occurs when Lua-5.4.3 is installed.

  - [renodr] - Update to Seamonkey-2.53.7 (Security Update). Fixes #14840.

  - [timtas] - Update to curl-7.76.0. Fixes #14844.

- March 31st, 2021

  - [renodr] - Update to WebKitGTK-2.32.0 (Security Update). Fixes #14837.

  - [renodr] - Update to gimp-2.10.24. Fixes #14836.

  - [ken] - Patch Python-2.7.18 for security vulnerabilities. Fixes #14843.

- March 30th, 2021

  - [renodr] - Update to lua-5.4.3. Fixes #14839.

  - [renodr] - Update to jasper-2.0.28. Fixes #14838.

- March 29th, 2021

  - [renodr] - Update to graphviz-2.47.0. Fixes #14832.

  - [renodr] - Update to glib-2.66.8 (Security Update). Fixes #14833.

  - [renodr] - Update to libgweather-3.38.2. Fixes #14834.

  - [renodr] - Update to sg3_utils-1.46. Fixes #14835.

  - [renodr] - Update to libXaw-1.0.14 (Xorg Library). Fixes #14828.

  - [renodr] - Update to phonon-backend-vlc-0.11.3. Fixes #14827.

  - [renodr] - Update to dbus-glib-0.112. Fixes #14829.

  - [renodr] - Update to fetchmail-6.4.18. Fixes #14831.

  - [renodr] - Update to python-dbusmock-0.23.0. Fixes #14818.

  - [renodr] - Update to emacs-27.2. Fixes #14822.

  - [renodr] - Update to cups-filters-1.28.8. Fixes #14823.

  - [renodr] - Update to xterm-367. Fixes #14825.

  - [renodr] - Update to pango-1.48.4. Fixes #14826.

- March 28th, 2021

  - [xry111] - Update to samba-4.14.2. Fixes #14819.

  - [renodr] - Adapted the instructions for backgrounds in Fluxbox to be able to copy themes that are stored in directories.

  - [renodr] - Fix a syntax error that causes MariaDB to fail to build with CMake-3.20.

  - [renodr] - Update to webkitgtk-2.30.6 (Security Update). Fixes #14811.

  - [renodr] - Update to gnumeric-1.12.49. Fixes #14810.

  - [timtas] - Update to gegl-0.4.30. Fixes #14830.

  - [timtas] - Update to git-2.31.1. Fixes #14824.

- March 27th, 2021

  - [renodr] - Update to cairo-1.17.4. Fixes #14802.

  - [renodr] - Update to Thunar-4.16.6. Fixes #14806.

  - [renodr] - Update to nettle-3.7.2 (Security Update). Fixes #14807.

  - [renodr] - Update to lxml-4.6.3 (Python Module). Includes a fix for a security vulnerability. Fixes #14808.

  - [renodr] - Update to valgrind-3.17.0. Fixes #14809.

  - [renodr] - Update to links-2.22. Fixes #14787.

  - [renodr] - Update to sqlite-3.35.3. Fixes #14788.

  - [renodr] - Update to NSS-3.63. Fixes #14790.

  - [renodr] - Update to jasper-2.0.27. Fixes #14792.

  - [renodr] - Update to pipewire-0.3.24. Fixes #14797.

- March 26th, 2021

  - [ken] - Update to thunderbird-78.9.0 (security fixes). Fixes #14816.

  - [pierre] - Update to libinput-1.17.1. Fixes #14820.

  - [pierre] - Update to btrfs-progs-5.11.1. Fixes #14817.

  - [pierre] - Update to cmake-3.20.0. Fixes #14815.

  - [pierre] - Update to libgpg-error-1.42. Fixes #14813.

  - [pierre] - Update to libassuan-2.5.5. Fixes #14812.

  - [pierre] - Update to libvpx-1.10.0. Fixes #14741.

  - [timtas] - Update to bridge-utils-1.7.1. Fixes #14814.

  - [timtas] - Update to mpg123-1.26.5. Fixes #14821.

- March 25th, 2021

  - [renodr] - Update to BIND (and BIND-Utilities)-9.16.13. Fixes #14694.

  - [renodr] - Update the PDFBox/FontBox JARs to 2.0.23 in FOP. Patches against two security vulnerabilities. Fixes #14805.

- March 23rd, 2021

  - [renodr] - Modify the qtwebengine patch to fix a build failure when building on a system with libxml2 that was built before ICU was installed.

  - [xry111] - Add packages and instructions for booting on UEFI based system. Fixes #5379.

  - [ken] - Update to firefox-78.9.0 and JS-78.9.0 (security fixes). Fixes #14804.

- March 22nd, 2021

  - [ken] - Revise the Kernel Configuration section of QtWebEngine: User namespace works if PID namespace is enabled.

- March 21st, 2021

  - [ken] - Update to File-Which-1.24 (perl module). Fixes #14803.

  - [ken] - Update to DateTime-Calendar-Julian-0.104 (perl module). Fixes #14777.

- March 20th, 2021

  - [ken] - Update to git-2.31.0. Fixes #14775.

- March 18th, 2021

  - [ken] - Update to qtwebengine-5.15.3 from git (security fixes). Fixes #14729.

- March 17th, 2021

  - [bdubbs] - Update to libcap-2.49. Fixes #14770.

  - [pierre] - Patch dconf-editor so that it builds with vala-0.50.4.

  - [renodr] - Update to xkbcomp-1.4.5 (Xorg Application). Fixes #14786.

  - [renodr] - Update to nspr-4.30. Fixes #14783.

  - [renodr] - Update to harfbuzz-2.8.0. Fixes #14784.

  - [timtas] - Update to icewm-2.2.1. Fixes #14720.

  - [timtas] - Update to openldap-2.4.58. Fixes #14785.

  - [timtas] - Update to sudo-1.9.6p1. Fixes #14771.

  - [renodr] - Update to cmake-3.19.7. Fixes #14778.

  - [renodr] - Update to gnome-online-accounts-3.38.1. Fixes #14779.

  - [renodr] - Update to mutter-3.38.4. Fixes #14781.

  - [renodr] - Update to gnome-shell-3.38.4. Fixes #14780.

  - [renodr] - Update to libgudev-236. Fixes #14782.

  - [renodr] - Update to goffice-0.10.49. Fixes #14772.

  - [renodr] - Update to pyatspi-2.38.1. Fixes #14769.

  - [renodr] - Update the gstreamer stack to gst*-1.18.4. Includes updates for five security vulnerabilities. Fixes #14776.

- March 16th, 2021

  - [renodr] - Update to exo-4.16.1. Fixes #14759.

  - [renodr] - Update to libhandy-1.2.0. Fixes #14760.

  - [renodr] - Update to NetworkManager-1.30.2. Fixes #14761.

  - [renodr] - Update to gtk+-3.24.27. Fixes #14762.

  - [renodr] - Update to epiphany-3.38.3. Fixes #14763.

  - [renodr] - Update to dconf-0.40.0. Fixes #14764.

  - [renodr] - Update to xfsprogs-5.11.0. Fixes #14765.

  - [renodr] - Update to libgusb-0.3.6. Fixes #14766.

  - [renodr] - Update to sqlite-3.35.1. Fixes #14767.

  - [renodr] - Update to wireshark-3.4.4 (Security Update). Fixes #14751.

  - [renodr] - Update to pango-1.48.3. Fixes #14753.

  - [renodr] - Update to cryptsetup-2.3.5. Fixes #14754.

  - [renodr] - Update to gptfdisk-1.0.7. Fixes #14755.

  - [renodr] - Update to libxkbcommon-1.1.0. Fixes #14756.

  - [renodr] - Update to qpdf-10.3.1. Fixes #14757.

- March 15th, 2021

  - [ken] - Update to asymptote-2.70. Fixes #14774.

  - [timtas] - Update to sudo-1.9.6. Fixes #14771.

- March 14th, 2021

  - [ken] - Update to mutt-2.0.6. Fixes #14742.

  - [xry111] - Update to gnome-autoar-0.3.1. Fixes #14768.

  - [renodr] - Update to iso-codes-4.6.0. Fixes #14744.

  - [renodr] - Update to Thunderbird-78.8.1. Fixes #14745.

  - [renodr] - Update to git-2.30.2. Fixes #14746.

  - [renodr] - Update to mercurial-5.7.1. Fixes #14747.

  - [renodr] - Update to samba-4.14.0. Fixes #14748.

- March 12th, 2021

  - [renodr] - Update to libreoffice-7.1.1.2. Fixes #14734.

  - [timtas] - Update to Thunar-4.16.5. Fixes #14752.

  - [xry111] - Update to GnuTLS-3.7.1 (with security fixes). Fixes #14750.

- March 11th, 2021

  - [renodr] - Make sure that the instructions for creating a symlink for /usr/lib/systemd in $KF5_PREFIX are still run when reinitializing /opt/kf5.

  - [renodr] - Update to php-8.0.3. Fixes #14732.

  - [renodr] - Update to libgdata-0.18.1. Fixes #14736.

  - [renodr] - Update to HTML-Parser-3.76. Fixes #14731.

  - [ken] - Prevent a (mostly harmless) segfault when a urxvt term (from rxvt-unicode) shuts down.

- March 10th, 2021

  - [ken] - Add a patch to mupdf to fix a security issue. Fixes #14749.

  - [ken] - Add a caution about unpatched security vulnerabilities in QtWebEngine and Falkon. Addresses #14729.

- March 8th, 2021

  - [timtas] - Update to fetchmail-6.4.17. Fixes #14743.

- March 7th, 2021

  - [pierre] - Update to unrar-6.0.4. Fixes #14740.

  - [pierre] - Update to qpdf-10.3.0. Fixes #14739.

  - [pierre] - Update to jasper-2.0.26. Fixes #14738.

  - [pierre] - Update to btrfs-progs-5.11. Fixes #14737.

- March 5th, 2021

  - [timtas] - Update to dovecot-2.3.14. Fixes #14733.

- March 4th, 2021

  - [renodr] - Update the systemd patch to allow systemd-rfkill to still function properly once LFS gets updated to Linux-5.11.

- March 3rd, 2021

  - [renodr] - Update to URI-5.09 (Perl Module). Fixes #14723.

  - [renodr] - Update to OpenSSH-8.5p1 (and ssh-askpass-8.5p1). Includes a security fix for ssh-agent. Fixes #14725.

  - [renodr] - Update to gtksourceview-4.8.1. Includes a patch to prevent a race condition on some systems. Fixes #14724.

  - [renodr] - Update to poppler-21.03.0. Fixes #14722.

  - [renodr] - Update to babl-0.1.86. Fixes #14715.

  - [renodr] - Update to libgxps-0.3.2. Fixes #14714.

  - [renodr] - Update to qpdf-10.2.0. Fixes #14707.

  - [renodr] - Update to libqmi-1.28.2. Fixes #14721.

  - [renodr] - Update to ModemManager-1.16.2. Fixes #14705.

  - [bdubbs] - Update to bluez-5.56. Fixes #14698.

  - [bdubbs] - Update to nano-5.6.1. Fixes #14727.

  - [bdubbs] - Update to mousepad-0.5.3. Fixes #14718.

  - [bdubbs] - Update to liblinear-243. Fixes #14709.

  - [bdubbs] - Update to libwacom-1.9. Fixes #14703.

  - [bdubbs] - Update to libiodbc-3.52.14. Fixes #14702.

  - [bdubbs] - Update to gtkmm3-3.24.4. Fixes #14701.

  - [bdubbs] - Update to gtk+3 3.24.26. Fixes #14700.

  - [renodr] - Update to vala-0.50.4. Fixes #14719.

  - [renodr] - Update to cbindgen-0.18.0. Fixes #14717.

  - [renodr] - Update to mariadb-10.5.9. Fixes #14699.

  - [renodr] - Update to cmake-3.19.6. Fixes #14710.

- March 2nd, 2021

  - [pierre] - Force usage of python3 for cracklib bindings.

  - [pierre] - Fix a header file in python, so that #include <python3.9/Python.h> works.

  - [thomas] - Fix a seccomp issue in OpenSSH on non-x86_64 platforms.

  - [ken] - Update to nss-3.62. Fixes #14684.

  - [bdubbs] - Update to xorgproto-2021.3. Fixes #14711.

  - [bdubbs] - Update to libinput-1.17.0 (Xorg Driver). Fixes #14706.

  - [bdubbs] - Update to IO-Socket-SSL-2.070 (Perl module). Fixes #14716.

  - [bdubbs] - Update to libqmi-1.28.0. Fixes #14697.

  - [bdubbs] - Update to ibus-1.5.24. Fixes #14693.

- March 1st, 2021

  - [timtas] - Update to icewm-2.2.0. Fixes #14720.

  - [bdubbs] - Release of BLFS-10.1.

Last updated on

## Mailing Lists

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.

Last updated on

## BLFS Wiki

The BLFS Project has created a Wiki for users to comment on pages and instructions at https://wiki.linuxfromscratch.org/blfs/wiki. Comments are welcome from all users.

The following are the rules for posting:

- Users must register and log in to edit a page.

- Suggestions to change the book should be made by creating a new ticket, not by making comments in the Wiki.

- Questions with your specific installation problems should be made by subscribing and mailing to the BLFS Support Mailing List at mailto:blfs-support AT linuxfromscratch D0T org.

- Discussions of build instructions should be made by subscribing and mailing to the BLFS Development List at mailto:blfs-dev AT linuxfromscratch D0T org.

- Inappropriate material will be removed.

Last updated on

## Asking for Help and the FAQ

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.

### Things to Check Prior to Asking

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/`<package>``. 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.

### Things to Mention

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 11.0),

- 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.

Last updated on

## Credits

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.

### Current Editors

- Bruce Dubbs

- Pierre Labastie

- DJ Lucas

- Ken Moffat

- Douglas Reno

### Contributors and Past Editors

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

- 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

- Thomas Trepl

- Tushar Teredesai

- Jeremy Utley

- Zack Winkles

- Christian Wurst

- Igor Živković

### General Acknowledgments

- 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

Last updated on

## Contact Information

Please direct your emails to one of the BLFS mailing lists. See Mailing lists for more information on the available mailing lists.

Last updated on

## Chapter 2. Important Information

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.

## Notes on Building Software

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 'build' directory). We also assume you have uncompressed any required patches and they are in the directory immediately above the 'build' 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.

### Building Software as an Unprivileged (non-root) User

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.

### Unpacking the Software

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

### Note

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, you sometimes need to be able to unpack patches which are generally not in `.tar` format. The best way to do this is to copy the patch file to the parent of the 'build' directory and then run one of the following commands depending on whether the file is a `.gz` or `.bz2` file:

    gunzip -v patchname.gz
    bunzip2 -v patchname.bz2

### Verifying File Integrity

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 random errors or truncations introduced during network transfer. 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.7 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 unoffical location with it. For example, SHA256 checksum can be checked with the command:

### Note

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.2.29 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-key file.sig file

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.

### Creating Log Files During Installation

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.

### Using Multiple Processors

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 how many processors are available. For instance, a Core2Duo can support two simultaneous processes with:

    export MAKEFLAGS='-j2'

or just building with:

    make -j2

Generally the number of processes should not exceed the number of cores supported by the CPU. To list the processors on your system, issue: `grep processor /proc/cpuinfo`.

In some cases, using multiple processors 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.

### Note

When running the package tests or the install portion of the package build process, we do not recommend using an option greater than '-j1' unless specified otherwise. The installation procedures or checks have not been validated using parallel procedures and may fail with issues that are difficult to debug.

### Automated Building Procedures

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.

#### File Redirection to Automate Input

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.

Building the CUPS package is a good example of how redirecting a file as input to prompts can help you automate the build. If you run the test suite, you are asked to respond to a series of questions regarding the type of test to run and if you have any auxiliary programs the test can use. You can create a file with your responses, one response per line, and use a command similar to the one shown below to automate running the test suite:

    make check < ../cups-1.1.23-testsuite_parms

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.

#### Using yes to Automate Input

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.

#### File Redirection to Automate Output

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 | more

Of course, you'll be required to view the output one page at a time because the more 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 | more > 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 | more

    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.

### Dependencies

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.

- Recommended means that BLFS strongly suggests this package is installed first 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.

- 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.

### Using the Most Current Package Sources

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.

### Stripping One More Time

### Warning

If you did not strip programs and libraries in LFS, the following will probably make your system unusable. To avoid that, run the instructions at ../../../../lfs/view/11.0/chapter08/strippingagain.html instead. After the critical files are stripped using those instructions, the instructions below can be run any time new packages are installed.

In LFS, stripping of debugging symbols was discussed a couple of times. When building BLFS packages, there are generally no special instructions that discuss stripping again. It is probably not a good idea to strip an executable or a library while it is in use, so exiting any windowing environment is a good idea. Then you can do:

    find /usr/{bin,lib,sbin} \
        -type f \( -name \*.so* -a ! -name \*dbg \) \
        -exec strip --strip-unneeded {} \;

If you install programs in other directories such as `/opt` or `/usr/local`, you may want to strip the files there too.

For more information on stripping, see http://www.technovelty.org/linux/stripping-shared-libraries.html.

### Working with different build systems

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, optimizatons) by starting with the CFLAGS and CXXFLAGS 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 forcing compilation for a specific microarchitecture (e.g. -march=amdfam10, -march=native) 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-21.2.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.

#### Autotools with Make

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

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.

- 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'.

#### Meson

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 CLFAGS, 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 -DNDEBUG' (but occasionally a package will force -O2 here)

Although the 'release' buildtype is described as enabling -DNDEBUG, and all CMake Release builds pass that, it has so far only been observed (in verbose builds) for Mesa-21.2.1. That suggests that it might only be used when there are debug assertions present.

The -DNDEBUG flag can also be provided by passing -Db_ndebug=true.

To see the details of the commands which are being run in a package using meson, use 'ninja -v'.

#### Rustc and Cargo

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 is 3, like -O3, e.g. `-Copt-level=3`) 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 find an interesting rustc program which is only provided as unpackaged source, you should at least specify `RUSTFLAGS=-Copt-level=2` otherwise it will do an unoptimized compile with debug info and run much slower.

The rust developers seem to assume that everyone will compile on a machine dedicated to producing builds, so by default all CPUs are used. This can often be worked around, either by exporting CARGO_BUILD_JOBS=<N> or passing --jobs <N> to cargo. For compiling rustc itself, specifying --jobs <N> on invocations of x.py (together with the `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.

### Optimizing the build

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/Optimize-Options.html and https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html and 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.

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, or Qt packages which use qmake, in general the CFLAGS and CXXFLAGS used are those which were used by those 'parent' packages.

### Options for hardening the build

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.

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, -fstack-protector=strong, 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.

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. 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.

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.

Last updated on

## The /usr Versus /usr/local Debate

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.

Last updated on

## Optional Patches

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.

Last updated on

## BLFS Systemd Units

The BLFS Systemd Units package contains the systemd unit files that are used throughout the book.

Package Information

- Download: https://www.linuxfromscratch.org/blfs/downloads/11.0-systemd/blfs-systemd-units-20210819.tar.xz

The BLFS Systemd Units package will be used throughout the BLFS book for systemd unit files. Each systemd unit has a separate install target. It is recommended that you keep the package source directory around until completion of your BLFS system. When a systemd unit is requested from BLFS Systemd Units, simply change to the directory, and as the `root` user, execute the given make install-`<systemd-unit>` command. This command installs the systemd unit to its proper location (along with any auxiliary configuration scripts) and also enables it by default.

### Note

It is advisable to peruse each systemd unit before installation to determine whether the installed files meet your needs.

Last updated on

## About Libtool Archive (.la) files

### Files with a .la extention

In LFS we installed a package, libtool, that is used by many packages 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 libraries, information needed to complete the task is embedded in the files. At run time the program loader can query the appropriate files and properly load and execute the program.

The problem is that libtool usually creates one or more text files for package libraries called libtool archives. These small files have a ".la" extention and contain information that is similar to that embedded in the libraries. When building a package that uses libtool, the process automatically looks for these files. If a package is updated and no longer uses the .la file, then the build process can break.

The solution is to remove the .la files. However there is a catch. Some packages, such as ImageMagick-7.1.0-4, 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

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/la-files

Last updated on

## Libraries: Static or shared?

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 (libfoo.a). On some old operating systems they are the only type available.

On almost all Linux platforms there are also shared libraries (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 Live CD if they have to recover. Journaling filesystems also reduce the likelihood of this sort of problem.

Developers, at least while they are developing, often prefer to use static versions of the libraries which their code links to.

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.

Most libraries are shared, but if you do something unusual, such as moving a shared library to `/lib` accidentally breaking the `.so` symlink in `/usr/lib` while keeping the static library in `/lib`, the static library will be silently linked into the programs which need it.

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. You may choose to exclude some of the static libraries from glibc if you do this (`libc_nonshared.a, libg.a, libieee.a, libm.a, libpthread_nonshared.a, librpcsvc.a, libsupc++.a`) to simplify compilation.

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-91.0.1 and ghostscript-9.54.0 include many other libraries. When they link to them, they link statically so this also makes the programs bigger. 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.37 if used for Firefox-91.0.1). 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 might decide to use the included static library even if you usually prefer to use system libraries.

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

Last updated on

## Locale Related Issues

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. For the most recent information about locale related issues for individual packages, check the User Notes in the BLFS Wiki.

### The Needed Encoding is Not a Valid Option in the Program

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.23. 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.

### The Program Assumes the Locale-Based Encoding of External Documents

Severity: High for non-text documents, low for text documents

Some programs, nano-5.8 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 (see the BLFS Wiki ID3v1Coding page for more details). 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-5.8, JOE-4.6, and all media players except Audacious-4.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.

### The Program Uses or Creates Filenames in the Wrong Encoding

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.68.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-8.7p1). 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.

### The Program Breaks Multibyte Characters or Doesn't Count Character Cells Correctly

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.12 and all the shells.

### The Package Installs Manual Pages in Incorrect or Non-Displayable Encoding

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.

Last updated on

## Going Beyond BLFS

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.org/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 Freecode for it at http://freecode.com/. Also search Google at http://google.com/. Sometimes a search for the `rpm` at http://rpmfind.net/ or the `deb` at http://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 http://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 http://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.uk.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 - the mirrors for ebuilds and patches seem to be well-hidden, and they change frequently. Also, if you have found a mirror, you need to know which directory the application has been assigned to. The ebuilds themselves can be found at http://packages.gentoo.org/ - use the search field. If there are any patches, a mirror will have them in the `files/` directory. Depending on your browser, or the mirror, you might need to download the ebuild to be able to read it. Treat the ebuild as a sort of pseudo-code / shell combination - look in particular for sed commands and patches, or hazard a guess at the meanings of the functions such as dodoc.

  - openSUSE provide a rolling release, some package versions are in http://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 http://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 ftp://ftp.ubuntu.com/ubuntu/pool/ - see the debian notes above.

  If everything else fails, try the blfs-support mailing-list.

### Tip

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://downloads.linuxfromscratch.org/deb2targz.tar.bz2 and https://downloads.linuxfromscratch.org/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 http://lkml.indiana.edu/hypermail/linux/kernel/0210.2/att-0093/01-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.

Last updated on

# Part II. Post LFS Configuration and Extra Software

## Chapter 3. After LFS Configuration Issues

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.

There is one remaining topic: Customizing your Logon with /etc/issue. It doesn't have much interaction with the other topics in this chapter.

## Creating a Custom Boot Device

### Decent Rescue Boot Device Needs

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.

### Creating a Rescue Floppy

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.

### Creating a Bootable CD-ROM

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.

### Creating a Bootable USB Drive

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.

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

Last updated on

## About Console Fonts

An LFS system can be used without a graphical desktop, and unless or until you install X Window System 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.

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

### Setting a smaller screen size in 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/11.0-systemd/chapter10/grub.html.

If you decide that you wish to do this, you can then (as the `root` user) edit `/boot/grub/grub.cfg`.

### Using the standard psf fonts

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.

### Testing different fonts

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/vconsole.conf` as described in LFS section 9.6 ../../../../lfs/view/11.0-systemd/chapter09/console.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.

### Editing fonts using psf-tools

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.

### Using fonts from Terminus-font

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

Last updated on

## About Firmware

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: http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/. 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, or install git-2.33.0 and clone that repository.

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 AMGPU 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 Turing (most, maybe all, GTX16xx and RTX20xx GPUs) to linux-firmware, and kernels from linux-5.6 should support it, although Mesa support may require a development version until Mesa-20.2 is released. Note that faster clocks than the default are not enabled by the released firmware.

- Firmware updates for wired network ports. Mostly they work even without the updates, but probably they will 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 wifi. These devices are not required for the PC to boot, but need the firmware before these devices can be used.

### Note

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.13, git-2.33.0, pciutils-3.7.0, and Wget-1.21.1

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

### Microcode updates for CPUs

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 extra updates which maybe update microcode along with the changes to support newer CPUs and faster memory.

There are 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. Not surprisingly, early loading is preferred, (see e.g. an explanatory comment in a kernel commit noted at x86/microcode: Early load microcode on LWN.) Indeed, it 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.

It is still possible to manually force late loading of microcode, either for testing or to prevent having to reboot. You will need to reconfigure your kernel for either method. The instructions here will create a kernel `.config` to suite early loading, before forcing late loading to see if there is any microcode. If there is, the instructions then show you how to create an initrd for early loading.

To confirm what processor(s) you have (if more than one, they will be identical) look in /proc/cpuinfo.

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 is 3.0 MB compared to typically 24 KB for one machine.

#### Intel Microcode for the CPU

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, for those machines which can boot it, is microcode-20210608. 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 release note details this.

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.

Now you need to determine your processor's identity to see if there is any microcode for it. 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. For a Skylake i3 6100 (described as Intel(R) Core(TM) i3-6100 CPU) the relevant values are cpu family 6, model 94, stepping 3 so in this case the required identification is 06-5e-03. A look at the blobs will show that there is one for this CPU (although for older issues it might have already been applied by the BIOS). If there is a blob for your system then test if it will be applied by copying it (replace <XX-YY-ZZ> by the identifier for your CPU) to where the kernel can find it:

    mkdir -pv /lib/firmware/intel-ucode
    cp -v intel-ucode/<XX-YY-ZZ> /lib/firmware/intel-ucode

Now that the Intel microcode has been prepared, use the following options when you configure the kernel to load Intel microcode:

    General Setup --->
      [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
    Processor type and features  --->
      [*] CPU microcode loading support  [CONFIG_MICROCODE]
      [*]      Intel microcode loading support [CONFIG_MICROCODE_INTEL]

After you have successfully booted the new system, force late loading by using the command:

    echo 1 > /sys/devices/system/cpu/microcode/reload

Then use the following command to see if anything was loaded: (N.B. the dates when microcode was created may be months ahead of when it was released.)

    dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'

This reformatted example for a machine with old microcode in its BIOS was created by temporarily booting without microcode, to show the current Firmware Bug messages, then the late load shows it being updated to revision 0xea.

    [    0.000000] Linux version 5.12.8 (lfs@leshp) (gcc (GCC) 11.1.0,
                   GNU ld (GNU Binutils) 2.36.1)
                   #2 SMP PREEMPT Fri Jun 4 01:25:02 BST 2021
    [    0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.12.8-sda11 root=/dev/sda11 ro
                   resume=/dev/sda10
    [    0.028741] [Firmware Bug]: TSC_DEADLINE disabled due to Errata;
                   please update microcode to version: 0xb2 (or later)
    [    0.115716] SRBDS: Vulnerable: No microcode
    [    0.115826] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
    [    0.389005] microcode: sig=0x506e3, pf=0x2, revision=0x74
    [    0.389030] microcode: Microcode Update Driver: v2.2.
    [   70.089502] microcode: updated to revision 0xea, date = 2021-01-25
    [   70.089528] x86/CPU: CPU features have changed after loading microcode,
                   but might not take effect.
    [   70.089530] microcode: Reload completed, microcode revision: 0xea

If the microcode was not updated, there is no new microcode for this system's processor. If it did get updated, you can now proceed to the section called “Early loading of microcode”.

#### AMD Microcode for the CPU

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 and 17h have their own containers. Create the required directory and put the firmware you downloaded into it as the `root` user:

    mkdir -pv /lib/firmware/amd-ucode
    cp -v microcode_amd* /lib/firmware/amd-ucode

When you configure the kernel, use the following options to load AMD microcode:

    General Setup --->
      [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
    Processor type and features  --->
      [*] CPU microcode loading support  [CONFIG_MICROCODE]
      [*]      AMD microcode loading support [CONFIG_MICROCODE_AMD]

After you have successfully booted the new system, force late loading by using the command:

    echo 1 > /sys/devices/system/cpu/microcode/reload

Then use the following command to see if anything was loaded:

    dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'

This historic example from an old Athlon(tm) II X2 shows it has been updated. At that time, all CPUs were still reported in the microcode details on AMD machines (the current position for AMD machines where newer microcode is available is unknown) :

    [    0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
                   #1 SMP Sun Feb 18 02:08:12 GMT 2018
    [    0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
    [    0.307619] microcode: CPU0: patch_level=0x010000b6
    [    0.307671] microcode: CPU1: patch_level=0x010000b6
    [    0.307743] microcode: Microcode Update Driver: v2.2.
    [  187.928891] microcode: CPU0: new patch_level=0x010000c8
    [  187.928899] microcode: CPU1: new patch_level=0x010000c8

If the microcode was not updated, there is no new microcode for this system's processor. If it did get updated, you can now proceed to the section called “Early loading of microcode”.

#### 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.13 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 /lib/firmware/amd-ucode/<MYCONTAINER> kernel/x86/microcode/AuthenticAMD.bin

Or for an Intel machine copy the appropriate blob using this command:

    cp -v /lib/firmware/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` as explained above. 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 same 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 `/sys/devices/system/cpu/vulnerabilities/` to see what is now reported.

The places and times where early loading happens are very different in AMD and Intel machines. First, an Intel (Skylake) example with early loading:

    [    0.000000] microcode: microcode updated early to revision 0xea, date = 2021-01-25
    [    0.000000] Linux version 5.12.8 (lfs@leshp) (gcc (GCC) 11.1.0,
                   GNU ld (GNU Binutils) 2.36.1) #2 SMP PREEMPT Fri Jun 4 01:25:02 BST 2021
    [    0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.12.8-sda11 root=/dev/sda11 ro
                   resume=/dev/sda10
    [    0.381420] microcode: sig=0x506e3, pf=0x2, revision=0xea
    [    0.381479] 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.

### Firmware for Video Cards

#### Firmware for ATI video chips (R600 and later)

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.7.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

There are actually two ways of installing this firmware. BLFS, in the 'Kernel Configuration for additional firmware' section part of the Xorg ATI Driver-19.1.0 section gives an example of compiling the firmware into the kernel - that is slightly faster to load, but uses more kernel memory. Here we will use the alternative method of making the radeon driver a module. In your kernel config set the following:

    Device Drivers --->
      Graphics support --->
          Direct Rendering Manager --->
            [*] Direct Rendering Manager (XFree86 ... support)  [CONFIG_DRM]
          [M] ATI Radeon                                        [CONFIG_DRM_RADEON]

Loading several large blobs from /lib/firmware takes a noticeable time, during which the screen will be blank. If you do not enable the penguin framebuffer logo, or change the console size by using a bigger font, that probably does not matter. If desired, you can slightly reduce the time if you follow the alternate method of specifying 'y' for CONFIG_DRM_RADEON covered in BLFS at the link above — you must specify each needed radeon blob if you do that.

#### Firmware for Nvidia video chips

Some Nvidia graphics chips need firmware updates to take advantage of all the card's capability. These are generally the GeForce 8, 9, 9300, and 200-900 series chips. For more exact information, see https://nouveau.freedesktop.org/wiki/VideoAcceleration/#firmware.

First, the kernel Nvidia driver must be activated:

    Device Drivers --->
      Graphics support --->
          Direct Rendering Manager --->
            <*> Direct Rendering Manager (XFree86 ... support)  [CONFIG_DRM]
          <*/M> Nouveau (NVIDIA) cards                          [CONFIG_DRM_NOUVEAU]

The steps to install the Nvidia firmware are:

    wget https://raw.github.com/imirkin/re-vp2/master/extract_firmware.py
    wget http://us.download.nvidia.com/XFree86/Linux-x86/325.15/NVIDIA-Linux-x86-325.15.run
    sh NVIDIA-Linux-x86-325.15.run --extract-only
    python extract_firmware.py
    mkdir -p /lib/firmware/nouveau
    cp -d nv* vuc-* /lib/firmware/nouveau/

### Firmware for Network Interfaces

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)

### Firmware for Other Devices

Identifying the correct firmware will typically require you to install pciutils-3.7.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 Wireless Tools-29 and wpa_supplicant-2.9.

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`. The access point would send a country code to your wireless NIC, and wpa_supplicant-2.9 would tell the kernel to load the regulation of this country from `regulatory.db`, and enforce it.

Firmware may also be needed for other devices such as some SCSI controllers, bluetooth adaptors, or TV recorders. The same principles apply.

Last updated on

## About Devices

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.

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

### Multiple Sound Cards

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 Device Issues

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 usb, 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.

There is one situation when such fine-grained access control with pre-generated udev rules doesn't work. Namely, PC emulators such as KVM, QEMU and VirtualBox use raw USB device nodes to present arbitrary USB devices to the guest operating system (note: patches are needed in order to get this to work without the obsolete /proc/bus/usb mount point described below). Obviously, maintainers of these packages cannot know which USB devices are going to be connected to the guest operating system. You can either write separate udev rules for all needed USB devices yourself, or use the default catch-all "usb" group, members of which can send arbitrary commands to all USB devices.

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 (e.g., VMware Workstation) still use only this deprecated technique and can't use the new device nodes. For them to work, use the "usb" group, but remember that members will have unrestricted access to all USB devices. To create the fstab entry for the obsolete usbfs filesystem:

    usbfs  /proc/bus/usb  usbfs  devgid=14,devmode=0660  0  0

### Note

Adding users to the "usb" group is inherently insecure, as they can bypass access restrictions imposed through the driver-specific USB device nodes. For instance, they can read sensitive data from USB hard drives without being in the "disk" group. Avoid adding users to this group, if you can.

### Udev Device Attributes

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"

### Note

The above line is used for descriptive purposes only. The scanner udev rules are put into place when installing SANE-1.0.29.

### Devices for DVD Drives

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

Last updated on

## Configuring for Adding Users

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.

###### Useradd

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.

###### /etc/skel

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 User

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>

Last updated on

## About System Users and Groups

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 |
mail |  | 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-bus-proxy | 72 | 72
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 | 99 |
nogroup |  | 99

One value that is missing is 65534. This value is customarily assigned to the user `nobody` and group `nogroup` and is unnecessary.

Last updated on

## The Bash Shell Startup Files

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.

### Note

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.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bash-shell-startup-files

### /etc/profile

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

    # Setup 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}

    # Setup 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

#### The /etc/profile.d Directory

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

#### /etc/profile.d/bash_completion.sh

### Note

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.

#### /etc/profile.d/dircolors.sh

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

#### /etc/profile.d/extrapaths.sh

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

    # Set some defaults before other applications add to these paths.
    pathappend /usr/share/man  MANPATH
    pathappend /usr/share/info INFOPATH
    EOF

#### /etc/profile.d/readline.sh

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"
    # Setup the INPUTRC environment variable.
    if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
            INPUTRC=/etc/inputrc
    fi
    export INPUTRC
    EOF

#### /etc/profile.d/umask.sh

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

#### /etc/profile.d/i18n.sh

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
    . /etc/locale.conf
    export LANG
    EOF

#### Other Initialization Values

Other initialization can easily be added to the `profile` by adding additional scripts to the `/etc/profile.d` directory.

### /etc/bashrc

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

### ~/.bash_profile

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

### ~/.profile

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

### ~/.bashrc

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

### ~/.bash_logout

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

### /etc/dircolors

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 http://www.caliban.org/bash/index.shtml.

Last updated on

## The /etc/vimrc and ~/.vimrc Files

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.

Last updated on

## Customizing your Logon with /etc/issue

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.

### Note

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.

Last updated on

## Chapter 4. Security

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.

## Vulnerabilities

### About vulnerabilities

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/Vulnerabilities is unrestricted).

For some packages, subscribing to their 'announce' lists will provide prompt news of newer versions.

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

Last updated on

## make-ca-1.7

### Introduction to make-ca

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/djlucas/make-ca/releases/download/v1.7/make-ca-1.7.tar.xz

- Download size: 28.5 KB

- Download MD5 Sum: e0356f5ae5623f227a3f69b5e8848ec6

- Estimated disk space required: 6.6 MB (with all runtime deps)

- Estimated build time: 0.1 SBU (with all runtime deps)

#### make-ca Dependencies

##### Required

p11-kit-0.24.0 (required at runtime to generate certificate stores from trust anchors)

##### Optional (runtime)

NSS-3.69 (to generate a shared NSSDB)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/make-ca

### Installation of make-ca

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.24.0 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

As the `root` user, after installing p11-kit-0.24.0, download the certificate source and prepare for system use with the following command:

### Note

If running the script a second time with the same version of `certdata.txt`, for instance, to add additional stores as the requisite software is installed, add the `-r` switch to 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 systemd timer. A timer is installed at `/usr/lib/systemd/system/update-pki.timer` that, if enabled, will check for updates weekly. Execute the following commands, as the `root` user, to enable the systemd timer:

    systemctl enable update-pki.timer

### Configuring make-ca

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.69. Additional upstream downloads are available at the links included in `/etc/make-ca.conf.dist`. Simply copy the file to `/etc/make-ca.conf` and edit as appropriate.

#### About Trust Arguments

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.

#### Adding Additional CA Certificates

The `/etc/ssl/local` directory is available to add additional CA certificates to the system. For instance, you might need to add an organization or government CA certificate. Files in this directory must be in the OpenSSL trusted certificate format. To create an OpenSSL trusted certificate 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.1 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 -f

#### Overriding Mozilla Trust

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 -f

### Contents

Installed Programs: make-ca
Installed Directories: /etc/ssl/{certs,local} and /etc/pki/{nssdb,anchors,tls/{certs,java}}

#### Short Descriptions

make-ca | is a shell script that adapts a current version of `certdata.txt`, and prepares it for use as the system trust store

Last updated on

## CrackLib-2.9.7

### Introduction to CrackLib

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/cracklib/cracklib/releases/download/v2.9.7/cracklib-2.9.7.tar.bz2

- Download MD5 sum: 0d68de25332cee5660850528a385427f

- Download size: 592 KB

- Estimated disk space required: 4.2 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Recommended word list for English-speaking countries (size: 6.7 MB; md5sum: 94e9963e4786294f7fb0f2efd7618551): https://github.com/cracklib/cracklib/releases/download/v2.9.7/cracklib-words-2.9.7.bz2

There are additional word lists available for download, e.g., from http://www.cotse.com/tools/wordlists.htm. CrackLib can utilize as many, or as few word lists you choose to install.

### Important

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.

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

### Installation of CrackLib

Install CrackLib by running the following commands:

    sed -i '/skipping/d' util/packer.c &&

    PYTHON=python3 CPPFLAGS=-I/usr/include/python3.9 \
    ./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.7.bz2 \
                             /usr/share/dict/cracklib-words.bz2    &&

    bunzip2 -v               /usr/share/dict/cracklib-words.bz2    &&
    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

### Important

If you are installing CrackLib after your LFS system has been completed and you have the Shadow package installed, you must reinstall Shadow-4.9 if you wish to provide strong password support on your system. If you are now going to install the Linux-PAM-1.5.1 package, you may disregard this note as Shadow will be reinstalled after the Linux-PAM installation.

### Command Explanations

sed -i '/skipping/d' util/packer.c: Remove a meaningless warning.

`PYTHON=python3`: This forces the installation of python bindings for Python 3, even if Python 2 is installed.

`CPPFLAGS=-I/usr/include/python3.9`: This works around an issue caused by incorrect usage of Python 3 headers.

`--with-default-dict=/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.

### Contents

Installed Programs: cracklib-check, cracklib-format, cracklib-packer, cracklib-unpacker and create-cracklib-dict
Installed Libraries: libcrack.so and the _cracklib.so (Python module)
Installed Directories: /lib/cracklib, /usr/share/dict and /usr/share/cracklib

#### Short Descriptions

cracklib-check | is used to determine if a password is strong
cracklib-format | is used to format text files (lowercases all words, removes control characters and sorts the lists)
cracklib-packer | creates a database with words read from standard input
cracklib-unpacker | displays on standard output the database specified
create-cracklib-dict | is used to create the CrackLib dictionary from the given word list(s)
`libcrack.so` | provides a fast dictionary lookup method for strong password enforcement

Last updated on

## cryptsetup-2.3.6

### Introduction to cryptsetup

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/cryptsetup-2.3.6.tar.xz

- Download MD5 sum: 504d1ab22cbc4d1a59a8d8c7ee5ed3bf

- Download size: 11 MB

- Estimated disk space required: 29 MB (add 113 MB for tests)

- Estimated build time: 0.2 SBU (add 14 SBU for tests)

#### cryptsetup Dependencies

##### Required

JSON-C-0.15, LVM2-2.03.13, and popt-1.18

##### Optional

libpwquality-1.4.4, argon2, and passwdqc

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

### Kernel Configuration

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) ---> [CONFIG_MD]
           <*/M> Device mapper support                        [CONFIG_BLK_DEV_DM]
           <*/M> Crypt target support                         [CONFIG_DM_CRYPT]

    Cryptographic API  --->
      <*/M> XTS support                                       [CONFIG_CRYPTO_XTS]
      <*/M> SHA224 and SHA256 digest algorithm                [CONFIG_CRYPTO_SHA256]
      <*/M> AES cipher algorithms                             [CONFIG_CRYPTO_AES]
      <*/M> User-space interface for symmetric key cipher algorithms
                                                              [CONFIG_CRYPTO_USER_API_SKCIPHER]
      For tests:
      <*/M> Twofish cipher algorithm                          [CONFIG_CRYPTO_TWOFISH]

### Installation of cryptsetup

Install cryptsetup by running the following commands:

    ./configure --prefix=/usr &&
    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

### Configuring cryptsetup

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.

### Contents

Installed Programs: cryptsetup, cryptsetup-reencrypt, integritysetup, and veritysetup
Installed Libraries: libcryptsetup.so
Installed Directories: None

#### Short Descriptions

cryptsetup | is used to setup dm-crypt managed device-mapper mappings
cryptsetup-reencrypt | is a tool for offline LUKS device re-encryption
integritysetup | is a tool to manage dm-integrity (block level integrity) volumes
veritysetup | is used to configure dm-verity managed device-mapper mappings. Device-mapper verity target provides read-only transparent integrity checking of block devices using kernel crypto API

Last updated on

## Cyrus SASL-2.1.27

### Introduction to Cyrus SASL

The Cyrus SASL package contains a Simple Authentication and Security Layer, 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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.27/cyrus-sasl-2.1.27.tar.gz

- Download MD5 sum: a33820c66e0622222c5aefafa1581083

- Download size: 3.9 MB

- Estimated disk space required: 26 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/cyrus-sasl-2.1.27-doc_fixes-1.patch

#### Cyrus SASL Dependencies

##### Recommended

Berkeley DB-5.3.28

##### Optional

Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2, MariaDB-10.6.4 or MySQL, OpenJDK-16.0.2, OpenLDAP-2.5.7, PostgreSQL-13.4, SQLite-3.36.0, krb4, Dmalloc, Pod::POM::View::Restructured, and Sphinx

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cyrus-sasl

### Installation of Cyrus SASL

### Note

This package does not support parallel build.

First, fix a build failure if Sphinx or docutils-0.17.1 is installed on the system:

    patch -Np1 -i ../cyrus-sasl-2.1.27-doc_fixes-1.patch

Install Cyrus SASL by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --enable-auth-sasldb \
                --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.27/html &&
    install -v -m644  saslauthd/LDAP_SASLAUTHD /usr/share/doc/cyrus-sasl-2.1.27      &&
    install -v -m644  doc/legacy/*.html        /usr/share/doc/cyrus-sasl-2.1.27/html &&
    install -v -dm700 /var/lib/sasl

### Command Explanations

`--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 Berkeley DB.

`--with-ldap`: This switch enables the OpenLDAP support.

`--enable-ldapdb`: This switch enables the LDAPDB authentication backend. There is a circular dependency with this parameter. See https://wiki.linuxfromscratch.org/blfs/wiki/cyrus-sasl for a solution to this problem.

`--enable-java`: This switch enables compiling of the Java support libraries.

`--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.

### Configuring Cyrus SASL

#### Config Files

`/etc/saslauthd.conf` (for saslauthd LDAP configuration) and `/etc/sasl2/Appname.conf` (where "Appname" is the application defined name of the application)

#### Configuration Information

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.27/LDAP_SASLAUTHD for configuring saslauthd with OpenLDAP.

See https://www.cyrusimap.org/sasl/sasl/gssapi.html#gssapi for configuring saslauthd with Kerberos.

#### Systemd Unit

If you need to run the saslauthd daemon at system startup, install the `saslauthd.service` unit included in the blfs-systemd-units-20210819 package using the following command:

    make install-saslauthd

### Note

You'll need to modify `/etc/default/saslauthd` and modify the `MECHANISM` parameter with your desired authentication mechanism. The default authentication mechanism is "shadow".

### Contents

Installed Programs: pluginviewer, saslauthd, sasldblistusers2, saslpasswd2 and testsaslauthd
Installed Library: libsasl2.so
Installed Directories: /usr/include/sasl, /usr/lib/sasl2, /usr/share/doc/cyrus-sasl-2.1.27 and /var/lib/sasl

#### Short Descriptions

pluginviewer | is used to list loadable SASL plugins and their properties
saslauthd | is the SASL authentication server
sasldblistusers2 | is used to list the users in the SASL password database `sasldb2`
saslpasswd2 | is used to set and delete a user's SASL password and mechanism specific secrets in the SASL password database `sasldb2`
testsaslauthd | is a test utility for the SASL authentication server
`libsasl2.so` | is a general purpose authentication library for server and client applications

Last updated on

## GnuPG-2.2.29

### Introduction to GnuPG

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.29.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.2.29.tar.bz2

- Download MD5 sum: 5db3334b528cf756b1e583db01319a24

- Download size: 6.9 MB

- Estimated disk space required: 143 MB (with all tests; add 25 MB for docs)

- Estimated build time: 0.4 SBU (using parallelism=4; add 1.5 SBU for tests)

#### GnuPG 2 Dependencies

##### Required

Libassuan-2.5.5, libgcrypt-1.9.4, Libksba-1.6.0, and npth-1.6

##### Recommended

GnuTLS-3.7.2 (required to communicate with keyservers using https or hkps protocol) and pinentry-1.2.0 (Run-time requirement for most of the package's functionality)

##### Optional

cURL-7.78.0, Fuse-3.10.4, ImageMagick-7.1.0-4 (for the convert utility, used for generating the documentation), libusb-1.0.24, an MTA, OpenLDAP-2.5.7, SQLite-3.36.0, texlive-20210325 (or install-tl-unx), fig2dev (for generating documentation), and GNU adns

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

### Installation of GnuPG

By default GnuPG doesn't install the deprecated gpg-zip script, but it is still needed by some programs. Make GnuPG install it with:

    sed -e '/noinst_SCRIPTS = gpg-zip/c sbin_SCRIPTS += gpg-zip' \
        -i tools/Makefile.in

Install GnuPG by running the following commands:

    ./configure --prefix=/usr            \
                --localstatedir=/var     \
                --sysconfdir=/etc        \
                --docdir=/usr/share/doc/gnupg-2.2.29 &&
    make &&

    makeinfo --html --no-split -o doc/gnupg_nochunks.html doc/gnupg.texi &&
    makeinfo --plaintext       -o doc/gnupg.txt           doc/gnupg.texi &&
    make -C doc html

If you have texlive-20210325 installed and you wish to create documentation in alternate formats, issue the following commands (fig2dev is needed for the ps format):

    make -C doc pdf ps

To test the results, issue: make check.

Note that if you have already installed GnuPG, the instructions below will overwrite `/usr/share/man/man1/gpg-zip.1`. Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/gnupg-2.2.29/html            &&
    install -v -m644    doc/gnupg_nochunks.html \
                        /usr/share/doc/gnupg-2.2.29/html/gnupg.html &&
    install -v -m644    doc/*.texi doc/gnupg.txt \
                        /usr/share/doc/gnupg-2.2.29 &&
    install -v -m644    doc/gnupg.html/* \
                        /usr/share/doc/gnupg-2.2.29/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.2.29

### Command Explanations

sed ... tools/Makefile.in: This command is needed to build the gpg-zip program.

`--docdir=/usr/share/doc/gnupg-2.2.29`: This switch changes the default docdir to `/usr/share/doc/gnupg-2.2.29`.

`--enable-all-tests`: This switch allows more tests to be run with make check.

`--enable-g13`: This switch enables building the g13 program.

### Contents

Installed Programs: addgnupghome, applygnupgdefaults, dirmngr, dirmngr-client, g13 (optional), gpg-agent, gpg-connect-agent, gpg, gpgconf, gpgparsemail, gpgscm, gpgsm, gpgsplit, gpgtar, gpgv, gpg-wks-server, gpg-zip, kbxutil, and watchgnupg
Installed Libraries: None
Installed Directories: /usr/share/doc/gnupg-2.2.29 and /usr/share/gnupg

#### Short Descriptions

addgnupghome | is used to create and populate a user's `~/.gnupg` directories
applygnupgdefaults | is a wrapper script used to run gpgconf with the `--apply-defaults` parameter on all user's GnuPG home directories
dirmngr | is a tool that takes care of accessing the OpenPGP keyservers
dirmngr-client | is a tool to contact a running dirmngr and test whether a certificate has been revoked
g13 | is a tool to create, mount or unmount an encrypted file system container (optional)
gpg-agent | 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
gpg-connect-agent | is a utility used to communicate with a running gpg-agent
gpg | 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
gpgconf | is a utility used to automatically and reasonably safely query and modify configuration files in the `~/.gnupg` home directory. It is designed not to be invoked manually by the user, but automatically by graphical user interfaces
gpgparsemail | is a utility currently only useful for debugging. Run it with `--help` for usage information
gpgscm | executes the given scheme program or spawns an interactive shell
gpgsm | 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
gpgsplit | splits an OpenPGP message into packets
gpgtar | is a tool to encrypt or sign files into an archive
gpgv | is a verify only version of gpg
gpg-wks-server | provides a server for the Web Key Service protocol
gpg-zip | encrypts or signs files into an archive
kbxutil | is used to list, export and import Keybox data
watchgnupg | is used to listen to a Unix Domain socket created by any of the GnuPG tools

Last updated on

## GnuTLS-3.7.2

### Introduction to GnuTLS

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 protocol specification:

“The TLS protocol provides communications privacy over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.”

GnuTLS provides support for TLS 1.3, TLS 1.2, TLS 1.1, TLS 1.0, and SSL 3.0 protocols, 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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz

- Download MD5 sum: 95c32a1af583ecfcb280648874c0fbd9

- Download size: 5.8 MB

- Estimated disk space required: 139 MB (add 112 MB for tests)

- Estimated build time: 0.9 SBU (add 2.9 SBU for tests; both using parallelism=4)

#### GnuTLS Dependencies

##### Required

Nettle-3.7.3

##### Recommended

make-ca-1.7, libunistring-0.9.10, libtasn1-4.17.0, and p11-kit-0.24.0

##### Optional

Doxygen-1.9.2, GTK-Doc-1.33.2, Guile-3.0.7, libidn-1.38 or libidn2-2.3.2, libseccomp-2.5.1, Net-tools-2.10 (used during the test suite), texlive-20210325 or install-tl-unx, Unbound-1.13.2 (to build the DANE library), Valgrind-3.17.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

Note that if you do not install libtasn1-4.17.0, an older version shipped in the GnuTLS tarball will be used instead.

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

### Installation of GnuTLS

Install GnuTLS by running the following commands:

    ./configure --prefix=/usr \
                --docdir=/usr/share/doc/gnutls-3.7.2 \
                --disable-guile \
                --disable-rpath \
                --with-default-trust-store-pkcs11="pkcs11:" &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

If you passed `--enable-gtk-doc` to the configure script, the API will automatically be installed. Otherwise, if desired, you can still install the API documentation to the `/usr/share/gtk-doc/html/gnutls` directory using the following command as the `root` user:

    make -C doc/reference install-data-local

### Command Explanations

`--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.24.0 is not installed.

`--disable-guile`: This switch disables GUILE support, since GnuTLS does not support Guile-2.2.x yet.

`--disable-rpath`: This switch prevents building GnuTLS utilities and tests with hardcoded runtime library search path. Hardcoded rpath is unneeded for BLFS, and it causes test failures if an old version of GnuTLS is 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.24.0 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-0.9.10.

### Contents

Installed Programs: certtool, danetool, gnutls-cli, gnutls-cli-debug, gnutls-serv, ocsptool, p11tool, psktool, and srptool
Installed Libraries: libgnutls.so, libgnutls-dane.so, libgnutlsxx.so, and libgnutls-openssl.so (optional)
Installed Directories: /usr/include/gnutls, /usr/share/gtk-doc/html/gnutls, and /usr/share/doc/gnutls-3.7.2

#### Short Descriptions

certtool | is used to generate X.509 certificates, certificate requests, and private keys
danetool | is a tool used to generate and check DNS resource records for the DANE protocol
gnutls-cli | is a simple client program to set up a TLS connection to some other computer
gnutls-cli-debug | is a simple client program to set up a TLS connection to some other computer and produces very verbose progress results
gnutls-serv | is a simple server program that listens to incoming TLS connections
ocsptool | is a program that can parse and print information about OCSP requests/responses, generate requests and verify responses
p11tool | is a program that allows handling data from PKCS #11 smart cards and security modules
psktool | is a simple program that generates random keys for use with TLS-PSK
srptool | is a simple program that emulates the programs in the Stanford SRP (Secure Remote Password) libraries using GnuTLS
`libgnutls.so` | contains the core API functions and X.509 certificate API functions

Last updated on

## GPGME-1.16.0

### Introduction to GPGME

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.16.0.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.16.0.tar.bz2

- Download MD5 sum: e31b9e0efc5a2e1ec1bbed22e7a082a4

- Download size: 1.6 MB

- Estimated disk space required: 222 MB

- Estimated build time: 0.8 SBU (with parallelism=4; with all bindings, add 0.7 SBU for tests)

#### GPGME Dependencies

##### Required

Libassuan-2.5.5

##### Optional

Doxygen-1.9.2 and Graphviz-2.48.0 (for API documentation), GnuPG-2.2.29 (required if Qt or SWIG are installed; used during the testsuite), Clisp-2.49, Qt-5.15.2, and/or SWIG-4.0.2 (for language bindings)

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

### Installation of GPGME

At first, fix an issue building the package with Glibc-2.34 or later:

    sed 's/defined(__sun.*$/1/' -i src/posix-io.c

Install GPGME by running the following commands:

    ./configure --prefix=/usr --disable-gpg-test &&
    make

To test the results, you should have GnuPG-2.2.29 installed and remove the --disable-gpg-test above. Issue: make -k check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-gpg-test`: if this parameter is not passed to configure, the test programs are built during make stage, which requires GnuPG-2.2.29. This parameter is not needed if GnuPG-2.2.29 is installed.

### Contents

Installed Program: gpgme-config, gpgme-json, and gpgme-tool
Installed Libraries: libgpgme, libgpgmepp.so, and libqgpgme.so
Installed Directory: /usr/include/{gpgme++,qgpgme,QGpgME}, /usr/lib/cmake/{Gpgmepp,QGpgme}. /usr/lib/python{2.7,3.9}/site-packages/gpg, and /usr/share/common-lisp/source/gpgme

#### Short Descriptions

gpgme-config | is used to obtain GPGME compilation and linking information
gpgme-json | outputs GPGME commands in JSON format
gpgme-tool | is an assuan server exposing GPGME operations, such as printing fingerprints and keyids with keyservers
`libgpgme.so` | contains the GPGME API functions
`libgpgmepp.so` | contains the C++ GPGME API functions
`libqgpgme.so` | contains API functions for handling GPG operations in Qt applications

Last updated on

## Haveged-1.9.14

### Introduction to Haveged

The Haveged package contains a daemon that generates an unpredictable stream of random numbers and feeds the /dev/random device.

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

#### Package Information

- Download (HTTP): https://github.com/jirka-h/haveged/archive/v1.9.14/haveged-1.9.14.tar.gz

- Download MD5 sum: f756474201bec9a46b41e8712f79468a

- Download size: 488 KB

- Estimated disk space required: 21 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

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

### Installation of Haveged

Install Haveged 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 -pv    /usr/share/doc/haveged-1.9.14 &&
    cp -v README /usr/share/doc/haveged-1.9.14

### Configuring haveged

#### Systemd Unit

If you want the Haveged daemon to start automatically when the system is booted, install the `haveged.service` unit included in the blfs-systemd-units-20210819 package (as the `root` user):

    make install-haveged

### Contents

Installed Programs: haveged
Installed Libraries: libhavege.so
Installed Directory: /usr/include/haveged and /usr/share/doc/haveged-1.9.14

#### Short Descriptions

haveged | is a daemon that generates an unpredictable stream of random numbers harvested from the indirect effects of hardware events based on hidden processor states (caches, branch predictors, memory translation tables, etc)

Last updated on

## iptables-1.8.7

### Introduction to iptables

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-11.0 platform.

#### Package Information

- Download (HTTP): http://www.netfilter.org/projects/iptables/files/iptables-1.8.7.tar.bz2

- Download (FTP): ftp://ftp.netfilter.org/pub/iptables/iptables-1.8.7.tar.bz2

- Download MD5 sum: 602ba7e937c72fbb7b1c2b71c3b0004b

- Download size: 704 KB

- Estimated disk space required: 22 MB

- Estimated build time: 0.1 SBU

#### iptables Dependencies

##### Optional

libpcap-1.10.1 (required for nfsypproxy support), bpf-utils (required for Berkeley Packet Filter support), libnfnetlink (required for connlabel support), libnetfilter_conntrack (required for connlabel support), and nftables

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

### Kernel Configuration

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  --->                                          [CONFIG_NET]
          Networking Options  --->
            [*] Network packet filtering framework (Netfilter) --->       [CONFIG_NETFILTER]
              [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]
              Core Netfilter Configuration --->
                <*/M> Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]
                <*/M> Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]
                <*/M> LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]
              IP: Netfilter Configuration --->
                <*/M> IP tables support (required for filtering/masq/NAT) [CONFIG_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.

### Installation of iptables

### Note

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

### Command Explanations

`--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.

### Configuring iptables

### Note

In the following example configurations, LAN1 is used for the internal LAN interface, and WAN1 is used for the external interace connected to the Internet. You will need to replace these values with appropriate interface names for your system.

#### Personal Firewall

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 5.x kernels.

    install -v -dm755 /etc/systemd/scripts

    cat > /etc/systemd/scripts/iptables << "EOF"
    #!/bin/sh

    # Begin /etc/systemd/scripts/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

    # Log everything else.
    iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "

    # End /etc/systemd/scripts/iptables
    EOF
    chmod 700 /etc/systemd/scripts/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.

#### Masquerading Router

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).

    install -v -dm755 /etc/systemd/scripts

    cat > /etc/systemd/scripts/iptables << "EOF"
    #!/bin/sh

    # Begin /etc/systemd/scripts/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 "http://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

    # The following sections allow inbound packets for specific examples
    # Uncomment the example lines and adjust as necessary

    # Allow ping on the external interface
    #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

    # Reject ident packets with TCP reset to avoid delays with FTP or IRC
    #iptables -A INPUT  -p tcp --dport 113 -j REJECT --reject-with tcp-reset

    # Allow HTTP and HTTPS to 192.168.0.2
    #iptables -A PREROUTING -t nat -i WAN1 -p tcp --dport 80 -j DNAT --to 192.168.0.2
    #iptables -A PREROUTING -t nat -i WAN1 -p tcp --dport 443 -j DNAT --to 192.168.0.2
    #iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 80 -j ACCEPT
    #iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 443 -j ACCEPT

    # End /etc/systemd/scripts/iptables
    EOF
    chmod 700 /etc/systemd/scripts/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.

#### BusyBox

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.

### Note

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.

#### Systemd Unit

To set up the iptables firewall at boot, install the `iptables.service` unit included in the blfs-systemd-units-20210819 package.

    make install-iptables

### Contents

Installed Programs: ip6tables, ip6tables-apply, ip6tables-legacy, ip6tables-legacy-restore, ip6tables-legacy-save, ip6tables-restore, ip6tables-save, iptables, iptables-apply, iptables-legacy, iptables-legacy-restore, iptables-legacy-apply, iptables-restore, iptables-save, iptables-xml, nfsynproxy (optional), and xtables-multi
Installed Libraries: libip4tc.so, libip6tc.so, libipq.so, libiptc.so, and libxtables.so
Installed Directories: /lib/xtables and /usr/include/libiptc

#### Short Descriptions

iptables | is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel
iptables-apply | is a safer way to update iptables remotely
iptables-legacy | is used to interact with iptables using the legacy command set
iptables-legacy-restore | is used to restore a set of legacy iptables rules
iptables-legacy-save | is used to save a set of legacy iptables rules
iptables-restore | is used to restore IP Tables from data specified on STDIN. Use I/O redirection provided by your shell to read from a file
iptables-save | 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
iptables-xml | is used to convert the output of iptables-save to an XML format. Using the `iptables.xslt` stylesheet converts the XML back to the format of iptables-restore
ip6tables* | are a set of commands for IPV6 that parallel the iptables commands above
nfsynproxy | (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
xtables-multi | is a binary that behaves according to the name it is called by

Last updated on

## Setting Up a Network Firewall

### Introduction to Firewall Creation

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.

### Meaning of the Word "Firewall"

The word firewall can have several different meanings.

#### Personal Firewall

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.

#### Masquerading Router

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.

#### BusyBox

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.

#### Firewall with a Demilitarized Zone

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.

#### Packetfilter

This type of firewall does routing or masquerading but does not maintain a state table of ongoing communication streams. It is fast but quite limited in its ability to block undesired packets without blocking desired packets.

### Conclusion

### Caution

The example configurations provided for iptables-1.8.7 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.7. 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 developped 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.

### Extra Information

#### Further Reading on Firewalls

> www.netfilter.org - Homepage of the netfilter/iptables/nftables projects
> Netfilter related FAQ
> Netfilter related HOWTO's
> nftables HOWTO
> en.tldp.org/LDP/nag2/x-087-2-firewall.html
> en.tldp.org/HOWTO/Security-HOWTO.html
> en.tldp.org/HOWTO/Firewall-HOWTO.html
> www.linuxsecurity.com/docs/
> www.little-idiot.de/firewall (German & outdated, but very comprehensive)
> linux.oreillynet.com/pub/a/linux/2000/03/10/netadmin/ddos.html
> staff.washington.edu/dittrich/misc/ddos
> www.e-infomax.com/ipmasq
> www.circlemud.org/~jelson/writings/security/index.htm
> www.securityfocus.com
> www.cert.org - tech_tips
> security.ittoolbox.com
> www.insecure.org/reading.html

Last updated on

## libcap-2.53 with PAM

### Introduction to libcap with PAM

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.53.tar.xz

- Download MD5 sum: 094994d4554c6689cf98ae4f717b8e19

- Download size: 155 KB

- Estimated disk space required: 1.7 MB

- Estimated build time: less than 0.1 SBU

#### libcap Dependencies

##### Required

Linux-PAM-1.5.1

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

### Installation of libcap

### Note

If you are upgrading libcap from a previous version, use the instructions in LFS libcap page to upgrade libcap. If Linux-PAM-1.5.1 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

### Configuring Libcap

In order to allow Linux-PAM to grant privileges based on POSIX capabilites, you need to add the libcap module to the begining 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

Additonally, 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.

### Contents

Installed Programs: None
Installed Library: pam_cap.so
Installed Directories: None

Last updated on

## Linux-PAM-1.5.1

### Introduction to Linux PAM

The Linux PAM package contains Pluggable Authentication Modules used to enable the local system administrator to choose how applications authenticate users.

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

#### Package Information

- Download (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.5.1/Linux-PAM-1.5.1.tar.xz

- Download MD5 sum: 155f2a31d07077b2c63a1f135876c31b

- Download size: 952 KB

- Estimated disk space required: 37 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### Additional Downloads

Optional Documentation

- Download (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.5.1/Linux-PAM-1.5.1-docs.tar.xz

- Download MD5 sum: eb03b8191fc886780411054115866ee2

- Download size 432 KB

#### Linux PAM Dependencies

##### Optional

Berkeley DB-5.3.28, libnsl-1.3.0, libtirpc-1.3.2, libaudit, and Prelude

##### Optional (To Rebuild the Documentation)

docbook-xml-4.5, docbook-xsl-1.79.2, fop-2.6, libxslt-1.1.34 and either Lynx-2.8.9rel.1 or W3m

### Note

Shadow-4.9 and Systemd-249 need to be reinstalled after installing and configuring Linux PAM.

With Linux-PAM-1.4.0 and higher, the pam_cracklib module is not installed by default. To enforce strong passwords, it is recommended to use libpwquality-1.4.4.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/linux-pam

### Installation of Linux PAM

If you downloaded the documentation, unpack the tarball by issuing the following command.

    tar -xf ../Linux-PAM-1.5.1-docs.tar.xz --strip-components=1

If you instead want to regenerate the documentation, fix the configure script so that it detects lynx if installed:

    sed -e 's/dummy elinks/dummy lynx/'                                    \
        -e 's/-no-numbering -no-references/-force-html -nonumbers -stdin/' \
        -i configure

Install Linux PAM by running the following commands:

    ./configure --prefix=/usr                        \
                --sysconfdir=/etc                     \
                --libdir=/usr/lib                      \
                --enable-securedir=/usr/lib/security    \
                --docdir=/usr/share/doc/Linux-PAM-1.5.1 &&
    make

To test the results, a suitable `/etc/pam.d/other` configuration file must exist.

### Reinstallation or upgrade of Linux PAM

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 installed one can be used for that purpose.

You should also be aware that make install overwrites the configuration files in `/etc/security` as well as `/etc/environment`. In case you have modified those files, be sure to back them up.

For a first installation, create the 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. Ensure there are no errors produced by the tests before continuing the installation. Note that the checks are quite long. It may be useful to redirect the output to a log file in order to inspect it thoroughly.

Only in case of a first 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

### Command Explanations

`--enable-securedir=/usr/lib/security`: This switch sets the installation location for the PAM modules.

`--disable-regenerate-docu` : If the needed dependencies (docbook-xml-4.5, docbook-xsl-1.79.2, libxslt-1.1.34, and Lynx-2.8.9rel.1 or W3m) are installed, the manual pages, and the html and text documentations are (re)generated and installed. Furthermore, if fop-2.6 is installed, the PDF documentation is generated and installed. Use this switch if you do not want to rebuild the documentation.

chmod -v 4755 /usr/sbin/unix_chkpwd: The unix_chkpwd helper program must be setuid so that non-`root` processes can access the shadow file.

### Configuring Linux-PAM

#### Config Files

`/etc/security/*` and `/etc/pam.d/*`

#### Configuration Information

Configuration information is placed in `/etc/pam.d/`. Below is an example 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 set up some generic 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 sha512 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       sha512 shadow try_first_pass

    # End /etc/pam.d/system-password
    EOF

If you wish to enable strong password support, install libpwquality-1.4.4, and follow the instructions in that page to configure the pam_pwquality PAM module with strong password support.

Now 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 is created.

    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 for descriptions of fields and allowable entries. The Linux-PAM System Administrators' Guide is recommended for additional information.

### Important

You should now reinstall the Shadow-4.9 and Systemd-249 packages.

### Contents

Installed Program: faillock, mkhomedir_helper, pam_namespace_helper, pam_timestamp_check, pwhistory_helper, unix_chkpwd and unix_update
Installed Libraries: libpam.so, libpamc.so and libpam_misc.so
Installed Directories: /etc/security, /lib/security, /usr/include/security and /usr/share/doc/Linux-PAM-1.5.1

#### Short Descriptions

faillock | displays and modifies the authentication failure record files
mkhomedir_helper | is a helper binary that creates home directories
pam_namespace_helper | is a helper program used to configure a private namespace for a user session
pwhistory_helper | is a helper program that transfers password hashes from passwd or shadow to opasswd
pam_timestamp_check | is used to check if the default timestamp is valid
unix_chkpwd | is a helper binary that verifies the password of the current user
unix_update | is a helper binary that updates the password of a given user
`libpam.so` | provides the interfaces between applications and the PAM modules

Last updated on

## liboauth-1.0.3

### Introduction to liboauth

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-11.0 platform.

#### Package Information

- 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

#### Additional Downloads

- Required patch for use with openssl: https://www.linuxfromscratch.org/patches/blfs/11.0/liboauth-1.0.3-openssl-1.1.0-3.patch

#### liboauth Dependencies

##### Required

cURL-7.78.0

##### Optional

NSS-3.69 and Doxygen-1.9.2 (to build documentation)

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

### Installation of liboauth

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.9.2), 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

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Libraries: liboauth.so
Installed Directories: /usr/share/doc/liboauth-1.0.3

#### Short Descriptions

`liboauth.so` | provides functions to escape and encode stings according to OAuth specifications and offers high-level functionality built on top to sign requests or verify signatures using either NSS or OpenSSL for calculating the hash/signatures

Last updated on

## libpwquality-1.4.4

### Introduction to libpwquality

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libpwquality/libpwquality/releases/download/libpwquality-1.4.4/libpwquality-1.4.4.tar.bz2

- Download MD5 sum: 1fe43f6641dbf1e1766e2a02cf68a9c3

- Download size: 420 KB

- Estimated disk space required: 4.1 MB

- Estimated build time: less than 0.1 SBU

#### libpwquality Dependencies

##### Required

CrackLib-2.9.7

##### Recommended

Linux-PAM-1.5.1

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

### Installation of libpwquality

Install libpwquality by running the following commands:

    ./configure --prefix=/usr                      \
                --disable-static                   \
                --with-securedir=/usr/lib/security \
                --with-python-binary=python3       &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--with-python-binary=python3`: This parameter gives the location of the Python binary. The default is `python`, and requires Python-2.7.18.

### Configuring libpwquality

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 geoscheck=0 \
                                             dictcheck=1 usercheck=1 \
                                             enforcing=1 badwords="" \
                                             dictpath=/usr/lib/cracklib/pw_dict
    # use sha512 hash for encryption, use shadow, and use the
    # authentication token (chosen password) set by pam_pwquality
    # above (or any previous modules)
    password  required    pam_unix.so        sha512 shadow use_authtok

    # End /etc/pam.d/system-password
    EOF

### Contents

Installed Programs: pwscore and pwmake
Installed Libraries: pam_pwquality.so and libpwquality.so
Installed Directories: None

#### Short Descriptions

pwmake | is a simple configurable tool for generating random and relatively easily pronounceable passwords
pwscore | is a simple tool for checking quality of a password
`libpwquality.so` | contains API functions for checking the password quality
`pam_pwquality.so` | is a Linux PAM module used to perform password quality checking

Last updated on

## MIT Kerberos V5-1.19.2

### Introduction to MIT Kerberos V5

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-11.0 platform.

#### Package Information

- Download (HTTP): https://kerberos.org/dist/krb5/1.19/krb5-1.19.2.tar.gz

- Download MD5 sum: eb51b7724111e1a458a8c9a261d45a31

- Download size: 8.3 MB

- Estimated disk space required: 95 MB (add 24 MB for tests)

- Estimated build time: 0.4 SBU (Using parallelism=4; add 1.6 SBU for tests)

#### MIT Kerberos V5 Dependencies

##### Optional

BIND Utilities-9.16.20, GnuPG-2.2.29 (to authenticate the package), keyutils-1.6.1, OpenLDAP-2.5.7, Valgrind-3.17.0 (used during the testsuite), yasm-1.3.0, libedit, cmocka, pyrad, and resolv_wrapper

### Note

Some sort of time synchronization facility on your system (like ntp-4.2.8p15) is required since Kerberos won't authenticate if there is a time difference between a kerberized client and the KDC server.

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

### Installation of MIT Kerberos V5

Build MIT Kerberos V5 by running the following commands:

    cd src &&

    sed -i -e 's@\^u}@^u cols 300}@' tests/dejagnu/config/default.exp     &&
    sed -i -e '/eq 0/{N;s/12 //}'    plugins/kdb/db2/libdb2/test/run.test &&
    sed -i '/t_iprop.py/d'           tests/Makefile.in                    &&

    ./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 as the `root` user: make -k -j1 check. If you have a former version of MIT Kerberos V5 installed, it may happen that the test suite may pick up the installed versions of the libraries, rather than the newly built ones. If so, it is better to run the tests after the installation. Some tests may fail with the latest version of dejagnu and glibc.

Now, as the `root` user:

    make install &&

    install -v -dm755 /usr/share/doc/krb5-1.19.2 &&
    cp -vfr ../doc/*  /usr/share/doc/krb5-1.19.2

### Command Explanations

The first sed increases the width of the virtual terminal used for some tests to prevent some spurious text in the output which is taken as a failure. The second sed removes a test that is known to fail. The third sed removes a test that is known to hang.

`--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.

### Configuring MIT Kerberos V5

#### Config Files

`/etc/krb5.conf` and `/var/lib/krb5kdc/kdc.conf`

#### Configuration Information

##### Kerberos Configuration

### Tip

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.7 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.local
    kadmin.local: add_policy dict-only
    kadmin.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:

    ktutil
    ktutil: rkt /etc/krb5.keytab
    ktutil: 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.

##### Additional Information

For additional information consult the documentation for krb5-1.19.2 on which the above instructions are based.

#### Systemd Unit

If you want to start Kerberos services at boot, install the `krb5.service` unit included in the blfs-systemd-units-20210819 package using the following command:

    make install-krb5

### Contents

Installed Programs: gss-client, gss-server, k5srvutil, kadmin, kadmin.local, kadmind, kdb5_ldap_util (optional), kdb5_util, kdestroy, kinit, klist, kpasswd, kprop, kpropd, kproplog, krb5-config, krb5-send-pr, krb5kdc, ksu, kswitch, ktutil, kvno, sclient, sim_client, sim_server, sserver, uuclient, and uuserver
Installed Libraries: libgssapi_krb5.so, libgssrpc.so, libk5crypto.so, libkadm5clnt_mit.so, libkadm5clnt.so, libkadm5srv_mit.so, libkadm5srv.so, libkdb_ldap.so (optional), libkdb5.so, libkrad.so, libkrb5.so, libkrb5support.so, libverto.so, and some plugins under the /usr/lib/krb5 tree
Installed Directories: /usr/include/{gssapi,gssrpc,kadm5,krb5}, /usr/lib/krb5, /usr/share/{doc/krb5-1.19.2,examples/krb5}, /var/lib/krb5kdc, and /run/krb5kdc

#### Short Descriptions

gss-client | is a GSSAPI test client
gss-server | is a GSSAPI test server
k5srvutil | is a host keytable manipulation utility
kadmin | is an utility used to make modifications to the Kerberos database
kadmin.local | 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
kadmind | is a server for administrative access to a Kerberos database
kdb5_ldap_util (optional) | allows an administrator to manage realms, Kerberos services and ticket policies
kdb5_util | is the KDC database utility
kdestroy | removes the current set of tickets
kinit | 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
klist | reads and displays the current tickets in the credential cache
kpasswd | is a program for changing Kerberos 5 passwords
kprop | takes a principal database in a specified format and converts it into a stream of database records
kpropd | receives a database sent by kprop and writes it as a local database
kproplog | displays the contents of the KDC database update log to standard output
krb5-config | gives information on how to link programs against libraries
krb5kdc | is the Kerberos 5 server
krb5-send-pr | sends a problem report (PR) to a central support site
ksu | is the super user program using Kerberos protocol. Requires a properly configured `/etc/shells` and `~/.k5login` containing principals authorized to become super users
kswitch | makes the specified credential cache the primary cache for the collection, if a cache collection is available
ktutil | is a program for managing Kerberos keytabs
kvno | prints keyversion numbers of Kerberos principals
sclient | is used to contact a sample server and authenticate to it using Kerberos 5 tickets, then display the server's response
sim_client | is a simple UDP-based sample client program, for demonstration
sim_server | is a simple UDP-based server application, for demonstration
sserver | is the sample Kerberos 5 server
uuclient | is another sample client
uuserver | is another sample server
`libgssapi_krb5.so` | 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
`libkadm5clnt.so` | contains the administrative authentication and password checking functions required by Kerberos 5 client-side programs
`libkadm5srv.so` | contains the administrative authentication and password checking functions required by Kerberos 5 servers
`libkdb5.so` | is a Kerberos 5 authentication/authorization database access library
`libkrad.so` | contains the internal support library for RADIUS functionality
`libkrb5.so` | is an all-purpose Kerberos 5 library

Last updated on

## Nettle-3.7.3

### Introduction to Nettle

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz

- Download MD5 sum: a60273d0fab9c808646fcf5e9edc2e8f

- Download size: 2.3 MB

- Estimated disk space required: 87 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### Nettle Dependencies

##### Optional

Valgrind-3.17.0 (optional for the tests)

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

### Installation of Nettle

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.7.3 &&
    install -v -m644 nettle.html /usr/share/doc/nettle-3.7.3

### Command Explanations

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

### Contents

Installed Programs: nettle-hash, nettle-lfib-stream, nettle-pbkdf2, pkcs1-conv and sexp-conv
Installed Libraries: libhogweed.so and libnettle.so
Installed Directory: /usr/include/nettle and /usr/share/doc/nettle-3.7.3

#### Short Descriptions

nettle-hash | calculates a hash value using a specified algorithm
nettle-lfib-stream | 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
nettle-pbkdf2 | 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.
pkcs1-conv | converts private and public RSA keys from PKCS #1 format to sexp format
sexp-conv | converts an s-expression to a different encoding

Last updated on

## NSS-3.69

### Introduction to NSS

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-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/security/nss/releases/NSS_3_69_RTM/src/nss-3.69.tar.gz

- Download MD5 sum: df451e99d09589da6c3d4f103de877bc

- Download size: 79 MB

- Estimated disk space required: 305 MB (add 122 MB for tests)

- Estimated build time: 5.8 SBU (with parallelism=4, add 17 SBU for tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/nss-3.69-standalone-1.patch

#### NSS Dependencies

##### Required

NSPR-4.32

##### Recommended

SQLite-3.36.0 and p11-kit-0.24.0 (runtime)

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

### Installation of NSS

Install NSS by running the following commands:

    patch -Np1 -i ../nss-3.69-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 (1 test is known to fail):

    cd tests &&
    HOST=localhost DOMSUF=localdomain ./all.sh
    cd ../

### Note

Some information about the tests:

- HOST=localhost and DOMSUF=localdomain are required Without these variables, a FQDN is required to specified and this generic way should work for everyone.

- The tests take an extremely 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

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      &&
    chmod -v 644                                  /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

### Command Explanations

`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.

### Configuring NSS

If p11-kit-0.24.0 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 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

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.7 page can generate a system wide NSS DB with the `-n` switch, or by modifying the `/etc/make-ca.conf` file.

### Contents

Installed Programs: certutil, nss-config, and pk12util
Installed Libraries: libcrmf.a, libfreebl3.so, libfreeblpriv3.so, libnss3.so, libnssckbi.so, libnssckbi-testlib.so, libnssdbm3.so, libnsssysinit.so, libnssutil3.so, libpkcs11testmodule.so, libsmime3.so, libsoftokn3.so, and libssl3.so
Installed Directories: /usr/include/nss

#### Short Descriptions

certutil | 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
nss-config | is used to determine the NSS library settings of the installed NSS libraries
pk12util | 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

Last updated on

## OpenSSH-8.7p1

### Introduction to OpenSSH

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz

- Download MD5 sum: f545230799f131aecca04da56e61990a

- Download size: 1.7 MB

- Estimated disk space required: 48 MB (add 18 MB for tests)

- Estimated build time: 0.3 SBU (Using parallelism=4; running the tests takes 20+ minutes, irrespective of processor speed)

#### OpenSSH Dependencies

##### Optional

GDB-10.2 (for tests), Linux-PAM-1.5.1, X Window System, MIT Kerberos V5-1.19.2, libedit, LibreSSL Portable, OpenSC, and libsectok

##### Optional Runtime (Used only to gather entropy)

OpenJDK-16.0.2, Net-tools-2.10, and Sysstat-12.5.4

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

### Installation of OpenSSH

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 -m700 -d /var/lib/sshd &&
    chown    -v root:sys /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-md5-passwords                     \
                --with-privsep-path=/var/lib/sshd        \
                --with-default-path=/usr/bin             \
                --with-superuser-path=/usr/sbin:/usr/bin \
                --with-pid-dir=/run
    make

The testsuite requires an installed copy of scp to complete the multiplexing tests. To run the test suite, first copy the scp program to `/usr/bin`, making sure that you backup any existing copy first.

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-8.7p1     &&
    install -v -m644    INSTALL LICENCE OVERVIEW README* \
                        /usr/share/doc/openssh-8.7p1

### Command Explanations

`--sysconfdir=/etc/ssh`: This prevents the configuration files from being installed in `/usr/etc`.

`--with-md5-passwords`: This enables the use of MD5 passwords.

`--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 refering to deprecated `/var/run`.

`--with-pam`: This parameter enables Linux-PAM support in the build.

`--with-xauth=/usr/bin/xauth`: Set the default location for the xauth binary for X authentication. Change the location if xauth will be installed to a different path. 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.

### Configuring OpenSSH

#### Config Files

`~/.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_rsa.pub REMOTE_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 "ChallengeResponseAuthentication 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.

#### Systemd Unit

To start the SSH server at system boot, install the `sshd.service` unit included in the blfs-systemd-units-20210819 package.

    make install-sshd

### Contents

Installed Programs: scp, sftp, ssh, ssh-add, ssh-agent, ssh-copy-id, ssh-keygen, ssh-keyscan, and sshd
Installed Libraries: None
Installed Directories: /etc/ssh, /usr/share/doc/openssh-8.7p1, and /var/lib/sshd

#### Short Descriptions

scp | is a file copy program that acts like rcp except it uses an encrypted protocol
sftp | is an FTP-like program that works over the SSH1 and SSH2 protocols
ssh | is an rlogin/rsh-like client program except it uses an encrypted protocol
sshd | is a daemon that listens for ssh login requests
ssh-add | is a tool which adds keys to the ssh-agent
ssh-agent | is an authentication agent that can store private keys
ssh-copy-id | is a script that enables logins on remote machines using local keys
ssh-keygen | is a key generation tool
ssh-keyscan | is a utility for gathering public host keys from a number of hosts

Last updated on

## p11-kit-0.24.0

### Introduction to p11-kit

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/p11-glue/p11-kit/releases/download/0.24.0/p11-kit-0.24.0.tar.xz

- Download MD5 sum: 8ccf11c4a2e2e505b8e516d8549e64a5

- Download size: 816 KB

- Estimated disk space required: 56 MB (with tests)

- Estimated build time: 0.2 SBU (add 0.6 SBU for tests)

#### p11-kit Dependencies

##### Recommended

libtasn1-4.17.0 and make-ca-1.7 (runtime)

##### Optional

GTK-Doc-1.33.2, libxslt-1.1.34, and NSS-3.69 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/p11-kit

### Installation of p11-kit

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

    # Generate a new trust store
    /usr/sbin/make-ca -f -g
    EOF

Install p11-kit by running the following commands:

    mkdir p11-build &&
    cd    p11-build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dtrust_paths=/etc/pki/anchors &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install &&
    ln -sfv /usr/libexec/p11-kit/trust-extract-compat \
            /usr/bin/update-ca-certificates

### Command Explanations

`--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.34 and wish to rebuild the documentation and generate manual pages.

### Configuring p11-kit

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

### Contents

Installed Programs: p11-kit, trust, and update-ca-certificates
Installed Libraries: libp11-kit.so and p11-kit-proxy.so
Installed Directories: /etc/pkcs11, /usr/include/p11-kit-1, /usr/lib/pkcs11, /usr/libexec/p11-kit, /usr/share/gtk-doc/html/p11-kit, and /usr/share/p11-kit

#### Short Descriptions

p11-kit | is a command line tool that can be used to perform operations on PKCS#11 modules configured on the system
trust | is a command line tool to examine and modify the shared trust policy store
update-ca-certificates | 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 `--force` and `--get` flags to make-ca and should likely not be used for automated updates
`libp11-kit.so` | contains functions used to coordinate initialization and finalization of any PKCS#11 module
`p11-kit-proxy.so` | is the PKCS#11 proxy module

Last updated on

## Polkit-0.119

### Introduction to Polkit

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/polkit/releases/polkit-0.119.tar.gz

- Download MD5 sum: b945e683eb5d633745864af6c5746726

- Download size: 1.3 MB

- Estimated disk space required: 23 MB (add 2 MB for tests)

- Estimated build time: 0.2 SBU (Using parallelism=4; add 0.3 SBU for tests)

#### Polkit Dependencies

##### Required

GLib-2.68.4 and js78-78.13.0

##### Recommended

Linux-PAM-1.5.1

### Note

Since systemd-logind uses PAM to register user sessions, it is a good idea to build Polkit with PAM support so systemd-logind can track Polkit sessions.

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

D-Bus Python-1.2.18 and dbusmock-0.23.1 (for tests), docbook-xml-4.5, docbook-xsl-1.79.2, GTK-Doc-1.33.2, and libxslt-1.1.34

##### Required Runtime Dependencies

Systemd-249

##### Optional Runtime Dependencies

One polkit authentication agent for using polkit in the graphical environment: polkit-kde-agent in Plasma-5.22.4 for KDE, the agent built in gnome-shell-40.4 for GNOME3, polkit-gnome-0.105 for XFCE, and lxpolkit in LXSession-0.5.5 for LXDE.

### Note

If libxslt-1.1.34 is installed, then docbook-xml-4.5 and docbook-xsl-1.79.2 are required. If you have installed libxslt-1.1.34, but you do not want to install any of the DocBook packages mentioned, you will need to use `--disable-man-pages` in the instructions below.

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

### Installation of Polkit

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

### Note

When building Polkit with systemd logind support, the configure script explicitly checks if system is booted using systemd. This can cause problems if building the package in chroot, where the configure would fail to detect systemd. To workaround the problem, simply run the following command:

    sed -i "s:/sys/fs/cgroup/systemd/:/sys:g" configure

Install Polkit by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --disable-static     \
                --with-os-type=LFS   &&
    make

To test the results, first ensure that the system D-Bus daemon is running. Then run make check.

Now, as the `root` user:

    make install

### Command Explanations

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

`--with-authfw=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.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Configuring Polkit

#### PAM Configuration

### Note

If you did not build Polkit with Linux PAM support, you can skip this section.

If you have built Polkit with Linux PAM support, you need to modify the default PAM configuration file which was installed by default to get Polkit to work correctly with BLFS. Issue the following commands as the `root` user to create the configuration file for Linux PAM:

    cat > /etc/pam.d/polkit-1 << "EOF"
    # Begin /etc/pam.d/polkit-1

    auth     include        system-auth
    account  include        system-account
    password include        system-password
    session  include        system-session

    # End /etc/pam.d/polkit-1
    EOF

### Contents

Installed Programs: pkaction, pkcheck, pk-example-frobnicate, pkexec, pkttyagent and polkitd
Installed Libraries: libpolkit-agent-1.so and libpolkit-gobject-1.so
Installed Directories: /etc/polkit-1, /usr/include/polkit-1, /usr/lib/polkit-1, /usr/share/gtk-doc/html/polkit-1 and /usr/share/polkit-1

#### Short Descriptions

pkaction | is used to obtain information about registered PolicyKit actions
pkcheck | is used to check whether a process is authorized for action
pk-example-frobnicate | is an example program to test the pkexec command
pkexec | allows an authorized user to execute a command as another user
pkttyagent | is used to start a textual authentication agent for the subject
polkitd | provides the org.freedesktop.PolicyKit1 D-Bus service on the system message bus
`libpolkit-agent-1.so` | contains the Polkit authentication agent API functions
`libpolkit-gobject-1.so` | contains the Polkit authorization API functions

Last updated on

## polkit-gnome-0.105

### Introduction to Polkit GNOME

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/polkit-gnome/0.105/polkit-gnome-0.105.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/polkit-gnome-0.105-consolidated_fixes-1.patch

#### Polkit GNOME Dependencies

##### Required

AccountsService-0.6.55, GTK+-3.24.30, and Polkit-0.119

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/polkit-gnome

### Installation of Polkit GNOME

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

### Configuring Polkit GNOME

#### Automatic Startup

For the authentification framework to work, polkit-gnome-authentification-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

### Contents

Installed Program: polkit-gnome-authentication-agent-1
Installed Libraries: None
Installed Directory: None

#### Short Descriptions

polkit-gnome-authentication-agent-1 | is the Polkit authentication agent

Last updated on

## Shadow-4.9

### Introduction to Shadow

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/shadow-maint/shadow/releases/download/v4.9/shadow-4.9.tar.xz

- Download MD5 sum: 126924090caf72f3de7e9261fd4e10ac

- Download size: 1.6 MB

- Estimated disk space required: 40 MB

- Estimated build time: 0.3 SBU

#### Shadow Dependencies

##### Required

Linux-PAM-1.5.1 or CrackLib-2.9.7

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

### Installation of Shadow

### Important

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

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 SHA512@' \
        -e 's@/var/spool/mail@/var/mail@'                 \
        -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                \
        -i etc/login.defs                                 &&

    sed -i.orig '/$(LIBTCB)/i $(LIBPAM) \\' libsubid/Makefile.am &&
    sed -i "224s/rounds/min_rounds/"        libmisc/salt.c       &&

    autoreconf -fiv &&

    ./configure --sysconfdir=/etc --with-group-name-max-length=32 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make exec_prefix=/usr install

### Command Explanations

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 ... {} \;: This command is used to suppress the installation of the groups man pages so the existing ones installed from the Coreutils package are not replaced.

sed -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' -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 more secure 'SHA512' method of hashing passwords, which also allows passwords longer than eight characters. It 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.

sed ... libmisc/salt.c and sed ... libsubid/Makefile.am: Fix a couple of errors that were found after the package was released.

`--with-group-name-max-length=32`: The maximum user name is 32 characters. Make the maximum group name the same.

### Configuring Shadow

Shadow's stock configuration for the useradd utility may not be desirable for your installation. One default parameter causes useradd to create a mailbox file for any newly created user. useradd will make the group ownership of this file to the `mail` group with 0660 permissions. If you would prefer that these mailbox files are not created by useradd, issue the following command as the `root` user:

    sed -i 's/yes/no/' /etc/default/useradd

### Configuring Linux-PAM to Work with Shadow

### Note

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.

#### Config Files

`/etc/pam.d/*` or alternatively `/etc/pam.conf`, `/etc/login.defs` and `/etc/security/*`

#### Configuration Information

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.5.1 page for further configuration information. For information specific to integrating Shadow, Linux-PAM and libpwquality, you can visit the following link:

- http://www.deer-run.com/~hal/linux_passwords_pam.html

##### Configuring /etc/login.defs

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

##### Configuring the /etc/pam.d/ Files

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:

##### 'login'

    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 date of last login - Disabled by default
    #session   optional    pam_lastlog.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

##### 'passwd'

    cat > /etc/pam.d/passwd << "EOF"
    # Begin /etc/pam.d/passwd

    password  include     system-password

    # End /etc/pam.d/passwd
    EOF

##### 'su'

    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
    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

##### 'chage'

    cat > /etc/pam.d/chage << "EOF"
    # Begin /etc/pam.d/chage

    # always allow root
    auth      sufficient  pam_rootok.so

    # include system auth, account, and session settings
    auth      include     system-auth
    account   include     system-account
    session   include     system-session

    # Always permit for authentication updates
    password  required    pam_permit.so

    # End /etc/pam.d/chage
    EOF

##### Other common programs

    for PROGRAM in chfn chgpasswd chpasswd chsh groupadd groupdel \
                   groupmems groupmod newusers 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

### Warning

At this point, you should do a simple test to see if Shadow is working as expected. Open another terminal and log in as a user, then su to `root`. 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. One obvious reason for an error is if the user is not in group `wheel`. You may want to run (as `root`): usermod -a -G wheel `<user>`. Any other 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.

##### Configuring Login Access

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:

    [ -f /etc/login.access ] && mv -v /etc/login.access{,.NOUSE}

##### Configuring Resource Limits

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:

    [ -f /etc/limits ] && mv -v /etc/limits{,.NOUSE}

### Caution

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.

### Contents

A list of the installed files, along with their short descriptions can be found at ../../../../lfs/view/11.0-systemd/chapter08/shadow.html#contents-shadow.

Last updated on

## ssh-askpass-8.7p1

### Introduction to ssh-askpass

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz

- Download (FTP): ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz

- Download MD5 sum: f545230799f131aecca04da56e61990a

- Download size: 1.7 MB

- Estimated disk space required: 9.8 MB

- Estimated build time: less than 0.1 SBU

#### ssh-askpass Dependencies

##### Required

GTK+-2.24.33, Sudo-1.9.7p2 (runtime), Xorg Libraries, and X Window System (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ssh-askpass

### Installation of ssh-askpass

Install ssh-askpass by running the following commands:

    cd contrib &&
    make gnome-ssh-askpass2

Now, as the `root` user:

    install -v -d -m755                    /usr/libexec/openssh/contrib  &&
    install -v -m755    gnome-ssh-askpass2 /usr/libexec/openssh/contrib  &&
    ln -sv -f contrib/gnome-ssh-askpass2   /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.

### Configuring ssh-askpass

#### Configuration Information

As the `root` user, configure Sudo-1.9.7p2 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.

### Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/libexec/openssh/contrib

Last updated on

## stunnel-5.60

### Introduction to stunnel

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 be used to add SSL functionality to commonly used Inetd daemons such as POP-2, POP-3, and IMAP servers, along with standalone daemons such as NNTP, SMTP, and HTTP. 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-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.stunnel.org/stunnel/archive/5.x/stunnel-5.60.tar.gz

- Download MD5 sum: d68ef1c93a1e44df9455e1185d7b7742

- Download size: 964 KB

- Estimated disk space required: 7.2 MB

- Estimated build time: 0.1 SBU

#### stunnel Dependencies

##### Optional

netcat (required for tests), tcpwrappers, and TOR

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

### Installation of stunnel

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

### Note

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 &&
    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.60 install

Install the included systemd unit by running the following command as the `root` user:

    install -v -m644 tools/stunnel.service /usr/lib/systemd/system

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

### Command Explanations

make docdir=... install: This command installs the package and changes the documentation installation directory to standard naming conventions.

### Configuring stunnel

#### Config Files

`/etc/stunnel/stunnel.conf`

#### Configuration Information

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>

If you use stunnel to encrypt a daemon started from [x]inetd, you may need to disable that daemon in the `/etc/[x]inetd.conf` file and enable a corresponding `<service>`_stunnel service. You may have to add an appropriate entry in `/etc/services` as well.

For a full explanation of the commands and syntax used in the configuration file, issue man stunnel.

#### Systemd Unit

To start the stunnel daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable stunnel

### Contents

Installed Programs: stunnel and stunnel3
Installed Library: libstunnel.so
Installed Directories: /{etc,usr/lib,var/lib}/stunnel and /usr/share/doc/stunnel-5.60

#### Short Descriptions

stunnel | is a program designed to work as an SSL encryption wrapper between remote clients and local ({x}inetd-startable) or remote servers
stunnel3 | is a Perl wrapper script to use stunnel 3.x syntax with stunnel 4.05 or later
`libstunnel.so` | contains the API functions required by stunnel

Last updated on

## Sudo-1.9.7p2

### Introduction to Sudo

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.sudo.ws/dist/sudo-1.9.7p2.tar.gz

- Download (FTP): ftp://ftp.sudo.ws/pub/sudo/sudo-1.9.7p2.tar.gz

- Download MD5 sum: d6f8217bfd16649236e100c49e0a7cc4

- Download size: 4.0 MB

- Estimated disk space required: 43 MB (add 13 MB for tests)

- Estimated build time: 0.4 SBU (add 0.1 SBU for tests)

#### Sudo Dependencies

##### Optional

Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2, OpenLDAP-2.5.7, MTA (that provides a sendmail command), AFS, FWTK, and Opie

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

### Installation of Sudo

Install Sudo by running the following commands:

    ./configure --prefix=/usr              \
                --libexecdir=/usr/lib      \
                --with-secure-path         \
                --with-all-insults         \
                --with-env-editor          \
                --docdir=/usr/share/doc/sudo-1.9.7p2 \
                --with-passprompt="[sudo] password for %p: " &&
    make

To test the results, issue: env LC_ALL=C make check 2>&1 | tee make-check.log. Check the results with grep failed make-check.log.

Now, as the `root` user:

    make install &&
    ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0

### Command Explanations

`--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-all-insults`: This switch includes all the sudo insult sets.

`--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.

### Note

There are many options to sudo's configure command. Check the configure --help output for a complete list.

ln -sfv libsudo_util...: Works around a bug in the installation process, which links to the previously installed version (if there is one) instead of the new one.

### Configuring Sudo

#### Config File

`/etc/sudoers`

#### Configuration Information

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 credientials. Use the following commands to create the `/etc/sudoers.d/sudo` configuration file as the `root` user:

    cat > /etc/sudoers.d/sudo << "EOF"
    Defaults secure_path="/usr/sbin:/usr/bin"
    %wheel ALL=(ALL) ALL
    EOF

For details, see man sudoers.

### Note

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

### Contents

Installed Programs: cvtsudoers, sudo, sudo_logsrvd, sudo_sendlog, sudoedit (symlink), sudoreplay, and visudo
Installed Libraries: audit_json.so, group_file.so, libsudo_util.so, sample_approval.so, sudoers.so, sudo_noexec.so, and system_group.so
Installed Directories: /etc/sudoers.d, /usr/lib/sudo, /usr/share/doc/sudo-1.9.7p2, and /var/lib/sudo

#### Short Descriptions

cvtsudoers | converts between sudoers file formats
sudo | executes a command as another user as permitted by the `/etc/sudoers` configuration file
sudo_logsrvd | is a sudo event and I/O log server
sudo_sendlog | sends sudo I/O logs to the log server
sudoedit | is a symlink to sudo that implies the `-e` option to invoke an editor as another user
sudoreplay | is used to play back or list the output logs created by sudo
visudo | allows for safer editing of the `sudoers` file

Last updated on

## Tripwire-2.4.3.7

### Introduction to Tripwire

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-11.0 platform.

#### Package Information

- 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)

#### Tripwire Dependencies

##### Optional

An MTA

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

### Installation of Tripwire

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

### Note

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

### Note

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

### Command Explanations

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 confict 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

### Configuring Tripwire

#### Config Files

`/etc/tripwire/*`

#### Configuration Information

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.

#### Usage Information

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.

#### Changing the Policy File

If you are unhappy with your policy file and would like to modify it or use a new one, modify the policy file and then execute the following commands as the `root` user:

    twadmin --create-polfile /etc/tripwire/twpol.txt &&
    tripwire --init

### Contents

Installed Programs: siggen, tripwire, twadmin, and twprint
Installed Libraries: None
Installed Directories: /etc/tripwire, /var/lib/tripwire, and /usr/share/doc/tripwire-2.4.3.7

#### Short Descriptions

siggen | is a signature gathering utility that displays the hash function values for the specified files
tripwire | is the main file integrity checking program
twadmin | administrative and utility tool used to perform certain administrative functions related to Tripwire files and configuration options
twprint | prints Tripwire database and report files in clear text format

Last updated on

## volume_key-0.3.12

### Introduction to volume_key

The volume_key package provides a library for manipulating storage volume encryption keys and storing them separately from volumes to handle forgotten passphrases.

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

#### Package Information

- Download (HTTP): https://github.com/felixonmars/volume_key/archive/volume_key-0.3.12.tar.gz

- Download MD5 sum: d1c76f24e08ddd8c1787687d0af5a814

- Download size: 196 KB

- Estimated disk space required: 11 MB

- Estimated build time: 0.2 SBU

#### volume_key Dependencies

##### Required

cryptsetup-2.3.6, GLib-2.68.4, GPGME-1.16.0, and NSS-3.69

##### Recommended

SWIG-4.0.2

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

### Installation of volume_key

Install volume_key by running the following commands:

### Note

This package expands to the directory volume_key-volume_key-0.3.12.

    autoreconf -fiv              &&
    ./configure --prefix=/usr    \
                --without-python &&
    make

This package does not come with a functioning test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--without-python`: This parameter prevents building the Python 2 bindings, if Python-2.7.18 is installed.

`--without-python3`: Use this option if you do not want to build the Python 3 bindings. In this case, SWIG-4.0.2 is not needed.

### Contents

Installed Program: volume_key
Installed Library: libvolume_key.so
Installed Directory: /usr/include/volume_key

#### Short Descriptions

volume_key | manages encrypted volume keys and passphrases
`volume_key.so` | contains API functions for managing encrypted volume keys

Last updated on

## Chapter 5. File Systems and Disk Management

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.

## About initramfs

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.

### Building an initramfs

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,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

      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

### Using an initramfs

#### Required Runtime Dependency

cpio-2.13

#### Other Runtime Dependencies

LVM2-2.03.13 and/or mdadm-4.1 must be installed before generating the initramfs, if the system partition uses them.

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

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.

Last updated on

## btrfs-progs-5.13.1

### Introduction to btrfs-progs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v5.13.1.tar.xz

- Download MD5 sum: 8ca78d6e62179ef177597422e27a58fc

- Download size: 2.1 MB

- Estimated disk space required: 54 MB (up to 2.7 GB are used during tests)

- Estimated build time: 0.2 SBU (add 5.9 SBU for tests, but will be longer on slow disks)

#### Btrfs-progs Dependencies

##### Required

LZO-2.10

##### Recommended

asciidoc-9.1.0 and xmlto-0.0.28 (both required to generate man pages)

##### Optional

LVM2-2.03.13 (dmsetup is used in tests) and reiserfsprogs-3.6.27 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/btrfs-progs

### Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

    File systems --->
      <*/M> Btrfs filesystem support [CONFIG_BTRFS_FS]

In addition to the above and to the options required for LVM2-2.03.13 and reiserfsprogs-3.6.27, the following options must be enabled for running tests:

    File systems  --->
      [*]   Btrfs POSIX Access Control Lists      [CONFIG_BTRFS_FS_POSIX_ACL]
      [*]   ReiserFS extended attributes          [CONFIG_REISERFS_FS_XATTR]
      [*]     ReiserFS POSIX Access Control Lists [CONFIG_REISERFS_FS_POSIX_ACL]

### Installation of btrfs-progs

Install btrfs-progs by running the following commands:

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

### Note

Some tests require grep built with perl regular expressions. To obtain this, rebuild grep with the LFS Chapter 8 instructions after installing PCRE-8.45.

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

### Note

If the above mentioned kernel options are not enabled, some tests fail, and prevent all the remaining tests to run, because the test disk image is not cleanly unmounted.

Install the package as the `root` user:

    make install

### Command Explanations

`--disable-documentation`: This option is needed if the recommended dependencies are not installed.

### Contents

Installed Programs: btrfs, btrfs-convert, btrfs-find-root, btrfs-image, btrfs-map-logical, btrfs-select-super, btrfsck (link to btrfs), btrfstune, fsck.btrfs, and mkfs.btrfs
Installed Libraries: libbtrfs.so and libbtrfsutil.so
Installed Directories: /usr/include/btrfs

#### Short Descriptions

btrfs | is the main interface into btrfs filesystem operations
btrfs-convert | converts from an ext2/3/4 or reiserfs filesystem to btrfs
btrfs-find-root | is a filter to find btrfs root
btrfs-map-logical | maps btrfs logical extent to physical extent
btrfs-select-super | overwrites the primary superblock with a backup copy
btrfstune | tunes various filesystem parameters
fsck.btrfs | does nothing, but is present for consistency with fstab
mkfs.btrfs | creates a btrfs file system

Last updated on

## dosfstools-4.2

### Introduction to dosfstools

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-11.0 platform.

#### Package Information

- 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: 3.5 MB

- Estimated build time: less than 0.1 SBU

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

### Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

    File systems --->
      <DOS/FAT/EXFAT/NT Filesystems --->
        <*/M> MSDOS fs support             [CONFIG_MSDOS_FS]
        <*/M> VFAT (Windows-95) fs support [CONFIG_VFAT_FS]

### Installation of dosfstools

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-compat-symlinks`: This switch creates the dosfsck, dosfslabel, fsck.msdos, fsck.vfat, mkdosfs, mkfs.msdos, and mkfs.vfat symlinks required by some programs.

### Contents

Installed Programs: fatlabel, fsck.fat, and mkfs.fat

#### Short Descriptions

fatlabel | sets or gets a MS-DOS filesystem label from a given device
fsck.fat | checks and repairs MS-DOS filesystems
mkfs.fat | creates an MS-DOS filesystem under Linux

Last updated on

## Fuse-3.10.4

### Introduction to Fuse

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libfuse/libfuse/releases/download/fuse-3.10.4/fuse-3.10.4.tar.xz

- Download MD5 sum: 55b87e9ed691c2fa698e491241985b4a

- Download size: 2.7 MB

- Estimated disk space required: 150 MB

- Estimated build time: 0.1 SBU (add 0.4 SBU for tests)

#### Fuse Dependencies

##### Optional

Doxygen-1.9.2 (to rebuild the API documentation) and pytest (required for tests)

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

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    File systems  --->
      <*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]

Character devices in user space should be enabled too for running the tests:

    File systems  --->
      <*/M> FUSE (Filesystem in Userspace) support  [CONFIG_FUSE_FS]
      <*/M>   Character device in Userspace support [CONFIG_CUSE]

### Installation of Fuse

Install Fuse by running the following commands:

    sed -i '/^udev/,$ s/^/#/' util/meson.build &&

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

The API documentation is included in the package, but if you have Doxygen-1.9.2 installed and wish to rebuild it, issue:

    pushd .. &&
      doxygen doc/Doxyfile &&
    popd

To test the results, run (as the `root` user):

    python3 -m pytest test/

The pytest Python module is required for the tests.

Now, as the `root` user:

    ninja install                                             &&

    chmod u+s /usr/bin/fusermount3                &&

    install -v -m755 -d /usr/share/doc/fuse-3.10.4      &&
    install -v -m644    ../doc/{README.NFS,kernel.txt} \
                        /usr/share/doc/fuse-3.10.4      &&
    cp -Rv ../doc/html  /usr/share/doc/fuse-3.10.4

### Command Explanations

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.

### Configuring fuse

#### Config Files

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.

### Contents

Installed Programs: fusermount3 and mount.fuse3
Installed Libraries: libfuse3.so
Installed Directory: /usr/include/fuse3 and /usr/share/doc/fuse-3.10.4

#### Short Descriptions

fusermount3 | is a suid root program to mount and unmount Fuse filesystems
mount.fuse3 | is the command mount calls to mount a Fuse filesystem
`libfuse3.so` | contains the FUSE API functions

Last updated on

## jfsutils-1.1.15

### Introduction to jfsutils

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-11.0 platform.

#### Package Information

- Download (HTTP): http://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

#### Additional Downloads

- Required patch to fix issues exposed by GCC 10 and later: https://www.linuxfromscratch.org/patches/blfs/11.0/jfsutils-1.1.15-gcc10_fix-1.patch

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

### Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

    File systems  --->
      <*/M> JFS filesystem support [CONFIG_JFS_FS]

### Installation of jfsutils

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

### Command Explanations

sed ...: Fixes building with glibc 2.28.

### Contents

Installed Programs: fsck.jfs, jfs_debugfs, jfs_fsck, jfs_fscklog, jfs_logdump, jfs_mkfs, jfs_tune, mkfs.jfs
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

fsck.jfs | is used to replay the JFS transaction log, check a JFS formatted device for errors, and fix any errors found
jfs_fsck | is a hard link to fsck.jfs
mkfs.jfs | constructs an JFS file system
jfs_mkfs | is a hard link to mkfs.jfs
jfs_debugfs | is a program which can be used to perform various low-level actions on a JFS formatted device
jfs_fscklog | extracts a JFS fsck service log into a file and/or formats and displays the extracted file
jfs_logdump | dumps the contents of the journal log from the specified JFS formatted device into output file ./jfslog.dmp
jfs_tune | adjusts tunable file system parameters on JFS file systems

Last updated on

## LVM2-2.03.13

### Introduction to LVM2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://sourceware.org/ftp/lvm2/LVM2.2.03.13.tgz

- Download (FTP): ftp://sourceware.org/pub/lvm2/LVM2.2.03.13.tgz

- Download MD5 sum: c4be18fcb94c84c26f71ff4235917c28

- Download size: 2.5 MB

- Estimated disk space required: 37 MB (add 18 MB for tests; transient files can grow up to around 800 MB in the /tmp directory during tests)

- Estimated build time: 0.2 SBU (using parallelism=4; add 9 to 48 SBU for tests, depending on disk speed)

#### LVM2 Dependencies

##### Required

libaio-0.3.112

##### Optional

mdadm-4.1, reiserfsprogs-3.6.27, Valgrind-3.17.0, Which-2.21, xfsprogs-5.13.0 (all five may be used, but are not required, for tests), thin-provisioning-tools, and vdo

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

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel:

### Note

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 --->
      [*] Multiple devices driver support (RAID and LVM) ---> [CONFIG_MD]
        <*/M>   Device mapper support                         [CONFIG_BLK_DEV_DM]
        <*/M>   Crypt target support                          [CONFIG_DM_CRYPT]
        <*/M>   Snapshot target                               [CONFIG_DM_SNAPSHOT]
        <*/M>   Thin provisioning target                      [CONFIG_DM_THIN_PROVISIONING]
        <*/M>   Cache target (EXPERIMENTAL)                   [CONFIG_DM_CACHE]
        <*/M>   Mirror target                                 [CONFIG_DM_MIRROR]
        <*/M>   Zero target                                   [CONFIG_DM_ZERO]
        <*/M>   I/O delaying target                           [CONFIG_DM_DELAY]
      [*] Block devices --->
        <*/M>   RAM block device support                      [CONFIG_BLK_DEV_RAM]
    Kernel hacking --->
      Generic Kernel Debugging Instruments --->
        [*] Magic SysRq key                                   [CONFIG_MAGIC_SYSRQ]

### Installation of LVM2

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:

    make S=shell/thin-flags.sh check_local

The S=... option allows to skip tests. The shell/thin-flags.sh test has been reported to freeze the computer. 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).

### Note

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
    make install_systemd_units

### Command Explanations

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.

make install_systemd_units: This is needed to install a unit that activates logical volumes at boot. It is not installed by default.

### Contents

Installed Programs: blkdeactivate, dmeventd (optional), dmsetup, fsadm, lvm, and lvmdump. There are also numerous symbolic links to lvm that implement specific functionalities
Installed Libraries: libdevmapper.so and liblvm2cmd.so; optional: libdevmapper-event.so, libdevmapper-event-lvm2.so, libdevmapper-event-lvm2mirror.so, libdevmapper-event-lvm2raid.so, libdevmapper-event-lvm2snapshot.so, and libdevmapper-event-lvm2thin.so
Installed Directories: /etc/lvm and /lib/device-mapper (optional)

#### Short Descriptions

blkdeactivate | is a utility to deactivate block devices
dmeventd | (optional) is the Device Mapper event daemon
dmsetup | is a low level logical volume management tool
fsadm | is a utility used to resize or check filesystem on a device
lvm | provides the command-line tools for LVM2. Commands are implemented via sympolic links to this program to manage physical devices (pv*), volume groups (vg*) and logical volumes (lv*)
lvmdump | is a tool used to dump various information concerning LVM2
vgimportclone | is used to import a duplicated VG (e.g. hardware snapshot)
`libdevmapper.so` | contains the Device Mapper API functions

Last updated on

## About Logical Volume Management (LVM)

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.13 package must be installed. All commands must be run as the `root` user.

Management of disks with lvm is accomplished using the following concepts:

physical volumes

  These are physical disks or partitions such as /dev/sda3 or /dev/sdb.

volume groups

  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.

logical volumes

  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

### Note

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

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.

If not using an initramfs, there is a race condition in systemd preventing mounting logical volumes through `/etc/fstab`. You must create a “mount” unit (see systemd.mount(5)) as in the following example, which mounts the `/home` directory automatically at boot:

    cat > /etc/systemd/system/home.mount << EOF
    [Unit]
    Description=Mount the lvm volume /dev/lfs-lvm/home to /home

    [Mount]
    What=/dev/lfs-lvm/home
    Where=/home
    Type=ext4
    Options=default

    [Install]
    WantedBy=multi-user.target
    EOF

### Note

The name of the unit must be the name of the mount point with the `/' character replaced by `-', omitting the leading one.

Next the unit must be enabled with:

    systemctl enable home.mount

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.

Last updated on

## About RAID

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.3.

There are three major types of RAID implementation: Hardware RAID, BIOS-based RAID, and Software RAID.

### Hardware 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.

### BIOS-based RAID

Some computers offter a hardware-like RAID implementation in the system BIOS. Sometime this is referred to as 'fake' RAID as the capabilites 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 RAID

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.1.

Configuring a RAID device is straight forward 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.4 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.

### Note

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 formated with the filesystem of choice (e.g. ext3, ext4, xfsprogs-5.13.0, reiserfsprogs-3.6.27, 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`.

### Note

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.

Last updated on

## mdadm-4.1

### Introduction to mdadm

The mdadm package contains administration tools for software RAID.

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

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-4.1.tar.xz

- Download MD5 sum: 51bf3651bd73a06c413a2f964f299598

- Download size: 432 KB

- Estimated disk space required: 4.9 MB (10 MB with tests)

- Estimated build time: 0.1 SBU (tests take about an hour, only partially processor dependent)

#### mdadm Dependencies

##### Optional

A MTA

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

### Caution

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.

### Kernel Configuration

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) ---> [CONFIG_MD]
        <*> RAID support                                      [CONFIG_BLK_DEV_MD]
        [*]   Autodetect RAID arrays during kernel boot       [CONFIG_MD_AUTODETECT]
        <*/M>  Linear (append) mode                           [CONFIG_MD_LINEAR]
        <*/M>  RAID-0 (striping) mode                         [CONFIG_MD_RAID0]
        <*/M>  RAID-1 (mirroring) mode                        [CONFIG_MD_RAID1]
        <*/M>  RAID-10 (mirrored striping) mode               [CONFIG_MD_RAID10]
        <*/M>  RAID-4/RAID-5/RAID-6 mode                      [CONFIG_MD_RAID456]

### Installation of mdadm

Fix a build error introduced by gcc-7.1:

    sed 's@-Werror@@' -i Makefile

Build mdadm by running the following command:

    make

If you wish to run the tests, ensure that your kernel supports RAID and that a version of mdadm is not already running. As many as 9 out of 124 tests may fail.

### Caution

The tests edit values in /proc and run tests on software raid devices. They shouldn't be run on systems with active software RAID devices.

Run the tests as the `root` user:

    ./test --keep-going --logdir=test-logs --save-logs

Now, as the `root` user:

    make BINDIR=/usr/sbin install

### Command Explanations

make everything: This optional target creates extra programs, particularly a statically-linked version of mdadm. This needs to be manually installed.

`--keep-going`: Run the tests to the end, even if one or more tests fail.

`--logdir=test-logs`: Defines the directory where test logs are saved.

`--save-logs`: Instructs the test suite to save the logs.

`--tests=`<test1,test2,...>``: Optional comma separated list of tests to be executed (all tests, if this option is not passed).

### Contents

Installed Programs: mdadm and mdmon
Installed Libraries: None
Installed Directory: None

#### Short Descriptions

mdadm | manages MD devices aka Linux Software RAID
mdmon | monitors MD external metadata arrays

Last updated on

## ntfs-3g-2021.8.22

### Introduction to Ntfs-3g

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 user space. The package also contains various utilities useful for manipulating NTFS partitions.

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

#### Package Information

- Download (HTTP): https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2021.8.22.tgz

- Download MD5 sum: 90da343e78877d388eb34cefae6799ae

- Download size: 1.3 MB

- Estimated disk space required: 22 MB

- Estimated build time: 0.2 SBU

#### Ntfs-3g Dependencies

##### Optional

fuse 2.x (this disables user mounts)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ntfs-3g

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    File systems  --->
      <*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]

### Installation of Ntfs-3g

Install Ntfs-3g by running the following commands:

    ./configure --prefix=/usr        \
                --disable-static     \
                --with-fuse=internal \
                --docdir=/usr/share/doc/ntfs-3g-2021.8.22 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    ln -sv ../bin/ntfs-3g /usr/sbin/mount.ntfs &&
    ln -sv ntfs-3g.8 /usr/share/man/man8/mount.ntfs.8

If you want ordinary users to be able to mount NTFS partitions you'll need to set mount.ntfs with the root user ID. Note: it is probably unsafe to do this on a computer that needs to be secure (like a server). As the `root` user:

    chmod -v 4755 /usr/bin/ntfs-3g

### Command Explanations

`--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.

ln -sv ../bin/ntfs-3g /usr/sbin/mount.ntfs: Creating /sbin/mount.ntfs makes mount default to using Ntfs-3g to mount NTFS partitions.

chmod -v 4755 /usr/bin/ntfs-3g: Making mount.ntfs setuid root allows non root users to mount NTFS partitions.

### Using Ntfs-3g

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

### Contents

Installed Programs: lowntfs-3g, mkfs.ntfs, mkntfs, mount.lowntfs-3g, mount.ntfs, mount.ntfs-3g, ntfs-3g, ntfs-3g.probe, ntfscat, ntfsclone, ntfscluster, ntfscmp, ntfscp, ntfsfix, ntfsinfo, ntfslabel, ntfsls, ntfsresize and ntfsundelete
Installed Library: libntfs-3g.so
Installed Directories: /usr/include/ntfs-3g and /usr/share/doc/ntfs-3g

#### Short Descriptions

lowntfs-3g | is similar to ntfs-3g but uses the Fuse low-level interface
mkfs.ntfs | is a symlink to mkntfs
mkntfs | creates an NTFS file system
mount.lowntfs-3g | is a symlink to lowntfs-3g
mount.ntfs | mounts an NTFS filesystem
mount.ntfs-3g | is a symbolic link to ntfs-3g
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
ntfs-3g.probe | 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
ntfscluster | identifies files in a specified region of an NTFS volume
ntfscp | copies a file to an NTFS volume
ntfsfix | fixes common errors and forces Windows to check an NTFS partition
ntfsls | lists directory contents on an NTFS filesystem
ntfscat | prints NTFS files and streams on the standard output
ntfsclone | clones an NTFS filesystem
ntfscmp | compares two NTFS filesystems and shows the differences
ntfsinfo | dumps a file's attributes
ntfslabel | displays or changes the label on an ntfs file system
ntfsresize | resizes an NTFS filesystem without data loss
ntfsundelete | recovers a deleted file from an NTFS volume
`libntfs-3g.so` | contains the Ntfs-3g API functions

Last updated on

## gptfdisk-1.0.8

### Introduction to gptfdisk

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 inteface similar to the classic fdisk program.

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

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/gptfdisk/gptfdisk-1.0.8.tar.gz

- Download MD5 sum: 74684c4eb0e6d5a1839e4bb0bba36fa2

- Download size: 208 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU (0.2 SBU for tests)

#### Additional Downloads

- Recommended patch: https://www.linuxfromscratch.org/patches/blfs/11.0/gptfdisk-1.0.8-convenience-1.patch

#### gptfdisk Dependencies

##### Required

popt-1.18

##### Optional

ICU-69.1

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

### Installation of gptfdisk

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. Install gptfdisk by running the following commands:

    patch -Np1 -i ../gptfdisk-1.0.8-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

### Command Explanations

patch -Np1 ...: This patch modifies the `Makefile` file so that it provides an “install” target.

### Contents

Installed Programs: cgdisk, gdisk, fixparts, and sgdisk

#### Short Descriptions

cgdisk | is an ncurses-based tool for manipulating GPT partitions
gdisk | is an interactive text-mode tool for manipulating GPT partitions
fixparts | repairs mis-formatted MBR based disk partitions
sgdisk | is a partition manipulation program for GPT partitions similar to sfdisk

Last updated on

## parted-3.4

### Introduction to parted

The Parted package is a disk partitioning and partition resizing tool.

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/parted/parted-3.4.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/parted/parted-3.4.tar.xz

- Download MD5 sum: 357d19387c6e7bc4a8a90fe2d015fe80

- Download size: 1.7 MB

- Estimated disk space required: 34 MB (additional 3 MB for the tests and additional 2 MB for optional PDF and Postscript documentation)

- Estimated build time: 0.3 SBU (additional 2.5 SBU for the tests)

#### Parted Dependencies

##### Recommended

LVM2-2.03.13 (device-mapper, required if building udisks)

##### Optional

dosfstools-4.2, Pth-2.0.7, texlive-20210325 (or install-tl-unx), and Digest::CRC (for tests)

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

### Installation of parted

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-20210325 installed and wish to create PDF and Postcript documentation issue the following commands:

    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

### Note

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.4/html &&
    install -v -m644    doc/html/* \
                        /usr/share/doc/parted-3.4/html &&
    install -v -m644    doc/{FAT,API,parted.{txt,html}} \
                        /usr/share/doc/parted-3.4

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.4

### Command Explanations

`--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.

### Contents

Installed Programs: parted and partprobe
Installed Libraries: libparted.so and libparted-fs-resize.so
Installed Directories: /usr/include/parted and /usr/share/doc/parted-3.4

#### Short Descriptions

parted | is a partition manipulation program
partprobe | informs the OS of partition table changes
`libparted.so` | contains the Parted API functions

Last updated on

## reiserfsprogs-3.6.27

### Introduction to reiserfsprogs

The reiserfsprogs package contains various utilities for use with the Reiser file system.

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

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v3.6.27/reiserfsprogs-3.6.27.tar.xz

- Download MD5 sum: 90c139542725efc6da3a6b1709695395

- Download size: 439 KB

- Estimated disk space required: 13 MB

- Estimated build time: 0.2 SBU

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

### Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

    File systems --->
      <*/M> Reiserfs support [CONFIG_REISERFS_FS]

### Installation of reiserfsprogs

Install reiserfsprogs by running the following commands:

    sed -i '/parse_time.h/i #define _GNU_SOURCE' lib/parse_time.c &&
    autoreconf -fiv           &&

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

sed ...: Ensure a variable is defined for use with recent include files.

### Contents

Installed Programs: debugreiserfs, mkreiserfs, reiserfsck, reiserfstune, and resize_reiserfs
Installed Library: libreiserfscore.so
Installed Directory: /usr/include/reiserfs

#### Short Descriptions

debugreiserfs | can sometimes help to solve problems with ReiserFS file systems. If it is called without options, it prints the super block of any ReiserFS file system found on the device
mkreiserfs | creates a ReiserFS file system
reiserfsck | is used to check or repair a ReiserFS file system
reiserfstune | is used for tuning the ReiserFS journal. WARNING: Don't use this utility without first reading the man page thoroughly
resize_reiserfs | is used to resize an unmounted ReiserFS file system

Last updated on

## smartmontools-7.2

### Introduction to smartmontools

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/smartmontools/smartmontools-7.2.tar.gz

- Download MD5 sum: e8d134c69ae4959a05cb56b31172ffb1

- Download size: 972 KB

- Estimated disk space required: 24 MB

- Estimated build time: 0.2 SBU

#### smartmontools Dependencies

##### Optional (runtime)

cURL-7.78.0 or Lynx-2.8.9rel.1 or Wget-1.21.1 (download tools), and GnuPG-2.2.29 (encrypted hard disks)

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

### Installation of smartmontools

Install smartmontools by running the following commands:

    ./configure --prefix=/usr           \
                --sysconfdir=/etc       \
                --docdir=/usr/share/doc/smartmontools-7.2 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Configuring smartmontools

#### Config File

`/etc/smartd.conf`

#### Configuration Information

See the embedded comments in `/etc/smartd.conf` for detailed instructions on customizing the smartd darmon.

#### Systemd Unit

If you want the smartd daemon to start automatically when the system is booted, enable the systemd unit provided by the package by executing the following command as the `root` user:

    systemctl enable smartd

### Contents

Installed Programs: smartctl, smartd, and update-smart-drivedb
Installed Libraries: None
Installed Directories: /usr/share/smartmontools, /usr/share/doc/smartmontools-6.4, and /etc/smartd_warning.d

#### Short Descriptions

smartctl | is the control and monitor utility for SMART Disks
smartd | is the SMART disk monitoring daemon
update-smart-drivedb | is the update tool for the smartmontools drive database

Last updated on

## sshfs-3.7.2

### Introduction to Sshfs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libfuse/sshfs/releases/download/sshfs-3.7.2/sshfs-3.7.2.tar.xz

- Download MD5 sum: 86dcc81a1381c3e6863c97e684501bb6

- Download size: 52 KB

- Estimated disk space required: 0.9 MB

- Estimated build time: less than 0.1 SBU

#### Sshfs Dependencies

##### Required

Fuse-3.10.4, GLib-2.68.4, and OpenSSH-8.7p1.

##### Optional

docutils-0.17.1 (required to build the man page)

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

### Installation of Sshfs

Install Sshfs by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Using Sshfs

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.

### Contents

Installed Program: sshfs
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

sshfs | mounts an ssh server as a local file system

Last updated on

## xfsprogs-5.13.0

### Introduction to xfsprogs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-5.13.0.tar.xz

- Download MD5 sum: 86777a5762f2e524bb9acfdead5a9045

- Download size: 1.2 MB

- Estimated disk space required: 50 MB

- Estimated build time: 0.3 SBU (Using parallelism=4)

#### xfsprogs Dependencies

##### Required

inih-53

##### Optional

ICU-69.1 (for unicode name scanning in xfs_scrub)

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

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel:

    File systems --->
      <*/M> XFS filesystem support [CONFIG_XFS_FS]

### Installation of xfsprogs

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-5.13.0 install     &&
    make PKG_DOC_DIR=/usr/share/doc/xfsprogs-5.13.0 install-dev &&

    rm -rfv /usr/lib/libhandle.{a,la}

### Command Explanations

make 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.

### Contents

Installed Programs: fsck.xfs, mkfs.xfs, xfs_admin, xfs_bmap, xfs_copy, xfs_db, xfs_estimate, xfs_freeze, xfs_fsr, xfs_growfs, xfs_info, xfs_io, xfs_logprint, xfs_mdrestore, xfs_metadump, xfs_mkfile, xfs_ncheck, xfs_quota, xfs_repair, xfs_rtcp, xfs_scrub, xfs_scrub_all, and xfs_spaceman
Installed Libraries: libhandle.so
Installed Directories: /usr/include/xfs, /usr/lib/xfsprogs, and /usr/share/doc/xfsprogs-5.13.0

#### Short Descriptions

fsck.xfs | simply exits with a zero status, since XFS partitions are checked at mount time
mkfs.xfs | constructs an XFS file system
xfs_admin | changes the parameters of an XFS file system
xfs_bmap | prints block mapping for an XFS file
xfs_copy | copies the contents of an XFS file system to one or more targets in parallel
xfs_estimate | for each directory argument, estimates the space that directory would take if it were copied to an XFS filesystem (does not cross mount points)
xfs_db | is used to debug an XFS file system
xfs_freeze | suspends access to an XFS file system
xfs_fsr | applicable only to XFS filesystems, improves the organization of mounted filesystems, the reorganization algorithm operates on one file at a time, compacting or othewise improving the layout of the file extents (contiguous blocks of file data)
xfs_growfs | expands an XFS file system
xfs_info | is equivalent to invoking xfs_growfs, but specifying that no change to the file system is to be made
xfs_io | 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
xfs_logprint | prints the log of an XFS file system
xfs_mdrestore | restores an XFS metadump image to a filesystem image
xfs_metadump | copies XFS filesystem metadata to a file
xfs_mkfile | creates an XFS file, padded with zeroes by default
xfs_ncheck | generates pathnames from inode numbers for an XFS file system
xfs_quota | is a utility for reporting and editing various aspects of filesystem quotas
xfs_repair | repairs corrupt or damaged XFS file systems
xfs_rtcp | copies a file to the real-time partition on an XFS file system
xfs_scrub | checks and repairs the contents of a mounted XFS file system
xfs_scrub_all | scrubs all mounted XFS file systems
xfs_spaceman | reports and controls free space usage in an XFS file system
`libhandle.so` | contains XFS-specific functions that provide a way to perform certain filesystem operations without using a file descriptor to access filesystem objects

Last updated on

## Packages for UEFI Boot

Last updated on

## efivar-37

### Introduction to efivar

The efivar package provides tools and libraries to manipulate EFI variables.

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

#### Package Information

- Download (HTTP): https://github.com/rhboot/efivar/releases/download/37/efivar-37.tar.bz2

- Download MD5 sum: 9f067275c5f7aafdd75bfb364280ac9c

- Download size: 108 KB

- Estimated disk space required: 2.75 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/efivar-37-gcc_9-1.patch

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

### Installation of efivar

First, apply a patch to fix an issue building with GCC 9 or later:

    patch -Np1 -i ../efivar-37-gcc_9-1.patch

Build efivar with the following commands:

    make CFLAGS="-O2 -Wno-stringop-truncation"

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

### Command Explanations

`CFLAGS="-O2 -Wno-stringop-truncation"`: This option overrides the default compiler flags to avoid a build failure.

`LIBDIR=/usr/lib`: This option overrides the default library directory of the package (`/usr/lib64`, which is not used by LFS.)

### Contents

Installed Programs: efivar
Installed Libraries: libefiboot.so and libefivar.so
Installed Directories: /usr/include/efivar

#### Short Descriptions

efivar | is a tool to manipulate UEFI variables
`libefiboot.so` | is a library used by efibootmgr
`libefivar.so` | is a library for the manipulation of EFI variables

Last updated on

## efibootmgr-17

### Introduction to efibootmgr

The efibootmgr package provides tools and libraries to manipulate EFI variables.

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

#### Package Information

- Download (HTTP): https://github.com/rhboot/efibootmgr/archive/17/efibootmgr-17.tar.gz

- Download MD5 sum: 6ae315936d9bc8613b3a4cb8a4064128

- Download size: 44 KB

- Estimated disk space required: 592 KB

- Estimated build time: less than 0.1 SBU

#### efibootmgr Dependencies

##### Required

efivar-37 and popt-1.18

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

### Installation of efibootmgr

At first, fix an outdated hotfix declaration causing compilation failure:

    sed -e '/extern int efi_set_verbose/d' -i src/efibootmgr.c

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

### Command Explanations

`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 .

### Contents

Installed Programs: efibootdump and efibootmgr

#### Short Descriptions

efibootdump | is a tool to display individual UEFI boot options, from a file or an UEFI variable
efibootmgr | is a tool to manipulate the UEFI Boot Manager

Last updated on

## GRUB-2.06 for EFI

### Introduction to 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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz

- Download MD5 sum: cf0fd928b1e5479c8108ee52cb114363

- Download size: 6.3 MB

- Estimated disk space required: 185 MB

- Estimated build time: 0.9 SBU

#### Additional Downloads

Unicode font data used to display GRUB menu

- Download (HTTP): https://unifoundry.com/pub/unifont/unifont-13.0.06/font-builds/unifont-13.0.06.pcf.gz

- Download MD5 sum: 4fbc33c8d8d25985f1bcdd4d28bc2420

- Download size: 1.3 MB

#### GRUB Dependencies

##### Required (runtime)

efibootmgr-17

##### Recommended

FreeType-2.11.0

##### Optional

LVM2-2.03.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/grub-efi

### Installation of GRUB

First, install font data as the `root` user:

    mkdir -pv /usr/share/fonts/unifont &&
    gunzip -c ../unifont-13.0.06.pcf.gz > /usr/share/fonts/unifont/unifont.pcf

### Warning

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.

Build GRUB with the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --disable-efiemu     \
                --enable-grub-mkfont \
                --with-platform=efi  \
                --disable-werror     &&
    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

### Command Explanations

`--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.

### Warning

If the recommended dependency FreeType-2.11.0 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 avaliable 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 and the early stage of kernel initialization will be in “blind mode” — you can't see any kernel messages before the graphics card driver is initialized. It will be very difficult to diagnose some boot issues, especially if the graphics driver is built as module.

`--with-platform=efi`: Ensures building GRUB with EFI enabled.

### Configuring GRUB

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.

### Contents

See the page for GRUB in LFS book.

Last updated on

## Using GRUB to Set Up the Boot Process with UEFI

### Turn Off Secure Boot

BLFS does not have the essential packages to support Secure Boot. To set up the boot process with GRUB for UEFI installed 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.

### Create an Emergency Boot Disk

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:

### Warning

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 parition 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/sdx

    Welcome to fdisk (util-linux 2.36.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.

    Command (m for help): t
    Selected partition 1
    Hex code or alias (type L to list all): ef
    Changed type of partition 'Linux' to 'EFI (FAT-12/16/32)'.

    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.

Still as the `root` user, create a mount point for the EFI partition on the USB flash drive and mount it:

    mkdir -pv /mnt/rescue &&
    mount -v -t vfat /dev/sdx1 /mnt/rescue

Install GRUB for EFI on the partition:

    grub-install --removable --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue/grub

Unmount the partition:

    umount /mnt/rescue

Now the USB flash drive can be used as a emergency boot disk on x86-64 UEFI platform. It will boot the system and show the GRUB shell. Then you can type commands to boot your operating systems on the hard drive. To learn how to select the boot device, read the manual of your motherboard or laptop.

### Kernel Configuration for UEFI support

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Processor type and features --->
      [*] EFI runtime service support                              [CONFIG_EFI]
      [*]   EFI stub support                                       [CONFIG_EFI_STUB]
    Firmware Drivers --->
      EFI (Extensible Firmware Interface) Support --->
        < > EFI Variable Support via sysfs                         [CONFIG_EFI_VARS]
        [*] Export efi runtime maps to sysfs                       [CONFIG_EFI_RUNTIME_MAP]
    Enable the block layer --->
      Partition Types --->
        [*] Advanced partition selection                           [CONFIG_PARTITION_ADVANCED]
        [*] EFI GUID Partition support                             [CONFIG_EFI_PARTITION]
    Device Drivers --->
      Graphics support --->
        Frame buffer Devices --->
          Support for frame buffer devices --->                    [CONFIG_FB]
            [*] EFI-based Framebuffer support                      [CONFIG_FB_EFI]
        Console display driver support --->
          [*] Framebuffer Console support                          [CONFIG_FRAMEBUFFER_CONSOLE]
    File systems --->
      Pseudo filesystems --->
        <*/M> EFI Variable filesystem                              [CONFIG_EFIVAR_FS]

The meaning of the configure options:

`CONFIG_EFI_STUB`

  Although the EFI stub is designed to boot a kernel directly from the UEFI firmware (without a bootloader like GRUB), GRUB needs the kernel to be loaded to support the EFI handover protocol enabled by this option.

`CONFIG_EFI_VARS`

  Don't use this deprecated option because of a 1024-byte variable size limit. Its function is replaced by `CONFIG_EFIVAR_FS`.

`CONFIG_FB_EFI` and `CONFIG_FRAMEBUFFER_CONSOLE`

  The combination of these two options allows the kernel to print debug messages (along with Tux logos) at the early stage of the boot process with UEFI.

### Find or Create the EFI System Partition

On EFI based system, 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 Linux distribution or Windows is pre-installed, it's likely that the ESP is already 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 a first time install an UEFI booted OS on the system, the ESP may not exist. In that case, 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.

### Warning

Some (old) UEFI implementations may demand 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):

    mkdir -pv /boot/efi &&
    mount -v -t vfat /dev/sda1 /boot/efi

Add an entry for the ESP in `/etc/fstab`, so it will be mounted automatically during system boot:

    cat >> /etc/fstab << EOF
    /dev/sda1 /boot/efi vfat defaults 0 1
    EOF

### Mount the EFI Variable File System

The installation of GRUB on a UEFI platform requires that the EFI Variable file system, `efivarfs`, to be 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

### Note

If the system is booted with UEFI and systemd, `efivarfs` will be mounted automatically. However in the LFS chroot environment it still needs to be mounted manually.

### Warning

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 created as above.

### Setting Up the Configuration

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~rc1) 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` loaded by the firmware, it will load GRUB modules in 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 efibootmgr 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.

### Creating the GRUB Configuration File

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)

    if loadfont /boot/grub/fonts/unicode.pf2; then
      set gfxmode=auto
      insmod all_video
      terminal_output gfxterm
    fi

    menuentry "GNU/Linux, Linux 5.10.17-lfs-10.1"  {
      linux   /boot/vmlinuz-5.10.17-lfs-10.1 root=/dev/sda2 ro
    }

    menuentry "Firmware Setup" {
      fwsetup
    }
    EOF

`(hd0,2)`, `sda2`, and `5.10.17-lfs-10.1` should be replaced to match your configuration.

### Note

From GRUB's perspective, the files are relative to the partition are 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”).

### Dual-booting with Windows

Add a menu entry for Windows into `grub.cfg`:

    cat >> /boot/grub/grub.cfg << EOF
    # Begin Windows addition

    menuentry "Windows 10" {
      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.

Last updated on

## Chapter 6. Editors

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-2.2.12

### Introduction to Bluefish

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.bennewitz.com/bluefish/stable/source/bluefish-2.2.12.tar.bz2

- Download MD5 sum: 33dd8262c4d8a564a517f8c98c0cce19

- Download size: 4.0 MB

- Estimated disk space required: 69 MB

- Estimated build time: 0.4 SBU

#### Bluefish Dependencies

##### Required

GTK+-2.24.33 or GTK+-3.24.30 (If both are installed, configure defaults to using GTK+ 3)

##### Recommended

desktop-file-utils-0.26 (for updating the desktop database)

##### Optional

enchant-2.3.1 (for spell checking), Gucharmap-13.0.8, PCRE-8.45 and Jing

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

### Installation of Bluefish

Install Bluefish by running the following commands:

    ./configure --prefix=/usr --docdir=/usr/share/doc/bluefish-2.2.12 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Note

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.26 (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

### Contents

Installed Program: bluefish
Installed Libraries: several under /usr/lib/bluefish/
Installed Directories: /usr/lib/bluefish, /usr/share/bluefish, /usr/share/doc/bluefish-2.2.12, and /usr/share/xml/bluefish

#### Short Descriptions

bluefish | is a GTK+ text editor for markup and programming

Last updated on

## Ed-1.17

### Introduction to Ed

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/ed/ed-1.17.tar.lz

- Download (FTP): ftp://ftp.gnu.org/gnu/ed/ed-1.17.tar.lz

- Download MD5 sum: 894748c9bbf35cb7c599f5317b1a8cdb

- Download size: 68 KB

- Estimated disk space required: 1.2 MB

- Estimated build time: less than 0.1 SBU

#### Ed Dependencies

##### Required to uncompress the tarball

libarchive-3.5.2 (for bsdtar)

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

### Installation of Ed

Install Ed by running the following commands:

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

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: ed and red
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

ed | is a line-oriented text editor
red | is a restricted ed—it can only edit files in the current directory and cannot execute shell commands

Last updated on

## Emacs-27.2

### Introduction to Emacs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/emacs/emacs-27.2.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/emacs/emacs-27.2.tar.xz

- Download MD5 sum: 4c3d9ff35b2ab2fe518dc7eb3951e128

- Download size: 43 MB

- Estimated disk space required: 620 MB

- Estimated build time: 0.6 SBU (Using parallelism=4)

#### Emacs Dependencies

##### Recommended

HarfBuzz-2.9.0, giflib-5.2.1, GnuTLS-3.7.2, jansson-2.13.1, and libtiff-4.3.0

##### Optional

X Window System, alsa-lib-1.2.5.1, Cairo-1.17.4, dbus-1.12.20, GConf-3.2.6, gobject-introspection-1.68.0, gsettings-desktop-schemas-40.0, GPM-1.20.7, GTK+-2.24.33 or GTK+-3.24.30, ImageMagick-7.1.0-4, Little CMS-2.12, libjpeg-turbo-2.1.1, libpng-1.6.37, librsvg-2.50.7, libxml2-2.9.12, MIT Kerberos V5-1.19.2, Valgrind-3.17.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

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

### Installation of Emacs

First, work around a portability bug in glibc 2.34, which no longer defines SIGSTKSZ.

    sed -e '/SIGSTKSZ/ s|^.*$|static max_align_t sigsegv_stack[\
       (64 * 1024 + sizeof (max_align_t) - 1) / sizeof (max_align_t)];|' \
        -i src/sysdep.c

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/27.2

### Note

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+-2.24.33 or GTK+-3.24.30 installed and issue the following command as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor

### Command Explanations

`--with-imagemagick`: Use this if you have installed ImageMagick-7.1.0-4 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.3.0.

`--with-gnutls=no`: Use this if you have not installed GnuTLS-3.7.2.

`--without-harfbuzz`: Use this if you have not installed HarfBuzz-2.9.0.

`--with-json=no`: Use this if you have not installed jansson-2.13.1.

### Contents

Installed Programs: ctags, ebrowse, emacs (symlink), emacs-27.2, emacsclient, and etags
Installed Libraries: None
Installed Directories: /usr/libexec/emacs and /usr/share/emacs

#### Short Descriptions

ctags | creates cross-reference tagfile database files for source code
ebrowse | permits browsing of C++ class hierarchies from within emacs
emacs | is an editor
emacsclient | attaches an emacs session to an already running emacsserver instance
etags | is another program to generate source code cross-reference tagfiles

Last updated on

## Gedit-40.1

### Introduction to Gedit

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gedit/40/gedit-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gedit/40/gedit-40.1.tar.xz

- Download MD5 sum: e5cacbf3918f74dd2964fa4e174c82f3

- Download size: 6.5 MB

- Estimated disk space required: 55 MB (with tests)

- Estimated build time: 0.3 SBU (using parallelism=4; with tests)

#### Gedit Dependencies

##### Required

git-2.33.0, gsettings-desktop-schemas-40.0, gspell-1.8.4, gtksourceview4-4.8.1, itstool-2.0.6, libpeas-1.30.0, and tepl-6.00.0

##### Recommended

Gvfs-1.48.1 (runtime), ISO Codes-4.7.0, and PyGObject-3.40.1 (Python 3 module)

##### Optional

GTK-Doc-1.33.2, Vala-0.52.5, and zeitgeist

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

### Installation of Gedit

Install Gedit by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Duser_documentation=false`: This switch disables generating the user documentation. Omit this switch if you have GTK-Doc-1.33.2 installed and wish to generate the user documentation.

`-Dgtk_doc=true`: Use this option to build the reference manual (needs GTK-Doc-1.33.2).

### Contents

Installed Program: gedit
Installed Libraries: libgedit-40.0.so
Installed Directories: /usr/include/gedit-40.0 and /usr/{lib,share,share/gtk-doc/html,share/help/*}/gedit

#### Short Descriptions

gedit | is a lightweight text editor integrated with the GNOME Desktop

Last updated on

## JOE-4.6

### Introduction to JOE

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-11.0 platform.

#### Package Information

- 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

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

### Installation of JOE

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

### Configuring JOE

#### Config Files

`/etc/joe/jmacsrc`, `/etc/joe/joerc`, `/etc/joe/jpicorc`, `/etc/joe/jstarrc`, `/etc/joe/rjoerc`, and `~/.joerc`

### Contents

Installed Programs: jmacs, joe, jpico, jstar, rjoe, stringify, termidx, and uniproc
Installed Libraries: None
Installed Directories: /etc/joe, /usr/share/joe, and /usr/share/doc/joe-4.6

#### Short Descriptions

jmacs | is a symbolic link to joe used to launch Emacs emulation mode
joe | is a small text editor capable of emulating WordStar, Pico, and Emacs
jpico | is a symbolic link to joe used to launch Pico emulation mode
jstar | is a symbolic link to joe used to launch WordStar emulation mode
rjoe | is a symbolic link to joe that restricts JOE to editing only files which are specified on the command-line
stringify | 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)
termidx | is a program used by joe to generate the termcap index file (see /usr/share/doc/joe-4.6/util/README)
uniproc | 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)

Last updated on

## Kate-21.08.0

### Introduction to Kate

The Kate package contains an advanced KF5 based graphical text editor.

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

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/kate-21.08.0.tar.xz

- Download MD5 sum: 5c04c4b3f078c08536fed1bd862934bd

- Download size: 6.9 MB

- Estimated disk space required: 99 MB

- Estimated build time: 1.0 SBU (using parallelism=4)

#### Kate Dependencies

##### Required

KDE Frameworks-5.85.0

##### Optional

libgit2

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

### Installation of Kate

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

### Contents

Installed Programs: kate and kwrite
Installed Libraries: Several plugins under $KF5_PREFIX/lib/plugins
Installed Directories: $KF5_PREFIX/lib/plugins/ktexteditor, $KF5_PREFIX/lib/plugins/plasma/dataengine, $KF5_PREFIX/share/doc/HTML/*/{kate,katepart,kwrite}, $KF5_PREFIX/share/{kateproject,katexmltools}, and $KF5_PREFIX/share/plasma/plasmoids/org.kde.plasma.katesessions

#### Short Descriptions

kate | is an advanced text editor for kde
kwrite | is a text editor for KDE, that is a light version of kate

Last updated on

## Mousepad-0.5.6

### Introduction to Mousepad

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-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/mousepad/0.5/mousepad-0.5.6.tar.bz2

- Download MD5 sum: 96fa4d1cb7a522104d7dd41943c8b382

- Download size: 896 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.1 SBU

#### Mousepad Dependencies

##### Required

gtksourceview4-4.8.1

##### Optional

DConf-0.40.0 (runtime) and dbus-glib-0.112

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

### Installation of Mousepad

Install Mousepad by running the following commands:

    ./configure --prefix=/usr --enable-keyfile-settings &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-keyfile-settings`: Use the GSettings keyfile backend rather than the default DConf-0.40.0.

### Contents

Installed Program: mousepad
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

mousepad | is a simple GTK+ 3 text editor

Last updated on

## Nano-5.8

### Introduction to Nano

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.nano-editor.org/dist/v5/nano-5.8.tar.xz

- Download MD5 sum: d2249e3dd108c830df00efd7c1b79d86

- Download size: 1.4 MB

- Estimated disk space required: 23 MB

- Estimated build time: 0.2 SBU

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

### Installation of Nano

Install Nano by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --enable-utf8     \
                --docdir=/usr/share/doc/nano-5.8 &&
    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-5.8

### Command Explanations

`--enable-utf8`: This switch enables unicode support in Nano.

### Configuring nano

#### Config Files

`/etc/nanorc` and `~/.nanorc`

#### Configuration Information

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
    set suspend

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.

### Contents

Installed Programs: nano and rnano (symlink)
Installed Libraries: None
Installed Directories: /usr/share/nano and /usr/share/doc/nano-5.8

#### Short Descriptions

nano | is a small, simple text editor which aims to replace Pico, the default editor in the Pine package
rnano | is a restricted mode for nano

Last updated on

## Vim-8.2.3337

### Introduction to Vim

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.

### Note

The version of vim changes daily. The get the latest version, go to https://github.com/vim/vim/releases.

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

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/vim/vim-8.2.3337.tar.gz

- Download MD5 sum: e0325a4988b1b99b9c2e46fa853c1980

- Download size: 15 MB

- Estimated disk space required: 109 MB (add 61 MB for tests)

- Estimated build time: 0.3 SBU (with parallelism=4; add 2.1 SBU for tests)

#### Vim Dependencies

##### Recommended

X Window System and GTK+-3.24.30

##### Optional

GPM-1.20.7, Lua-5.4.3, rsync-3.2.3, and Ruby-3.0.2

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

### Installation of Vim

### Note

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:

### Note

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

### Note

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.

To test the results, issue: make -j1 test. 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.

### Note

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-8.2.3337`, making it consistent with the location of documentation for other packages:

    ln -snfv ../vim/vim82/doc /usr/share/doc/vim-8.2.3337

If you wish to update the runtime files, issue the following command (requires rsync-3.2.3):

    rsync -avzcP --exclude="/dos/" --exclude="/spell/" \
        ftp.nluug.nl::Vim/runtime/ ./runtime/

To install the runtime files and regenerate the `tags` file, as the `root` user issue:

    make -C src installruntime &&
    vim -c ":helptags /usr/share/doc/vim-8.2.3337" -c ":q"

### Command Explanations

`--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.

### Configuring Vim

#### Config Files

`/etc/vimrc` and `~/.vimrc`

#### Configuration Information

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/vim82/spell/`.

To find out what's new in Vim-8.2.3337 issue the following command:

    :help version-8.2.3337

For additional information on setting up Vim configuration files, see The vimrc Files and http://vim.wikia.com/wiki/Example_vimrc.

### Contents

A list of the reinstalled files, along with their short descriptions can be found in the LFS Vim Installation Instructions.

Installed Programs: gview, gvim, gvimdiff, gvimtutor, rgview, and rgvim
Installed Libraries: None
Installed Directory: /usr/share/vim

#### Short Descriptions

gview | starts gvim in read-only mode
gvim | is the editor that runs under X and includes a GUI
gvimdiff | edits two or three versions of a file with gvim and shows the differences
gvimtutor | teaches the basic keys and commands of gvim
rgview | is a restricted version of gview
rgvim | is a restricted version of gvim

Last updated on

## Chapter 7. Shells

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-0.5.11.4

### Introduction to Dash

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-11.0 platform.

#### Package Information

- Download (HTTP): http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.11.4.tar.gz

- Download MD5 sum: 39d6fb8ab465be82a2276060bc3759d3

- Download size: 236 KB

- Estimated disk space required: 2.7 MB

- Estimated build time: less than 0.1 SBU

#### Dash Dependencies

##### Optional

libedit (command line editor library)

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

### Installation of Dash

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:

### Note

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

### Command Explanations

`--bindir=/bin`: This parameter places the dash binary into the root filesystem.

`--with-libedit`: To compile Dash with libedit support.

### Configuring Dash

#### Config Files

Dash sources `/etc/profile` and `~/.profile`

#### Configuration Information

Update `/etc/shells` to include the Dash shell by issuing the following command as the `root` user:

    cat >> /etc/shells << "EOF"
    /bin/dash
    EOF

### Contents

Installed Program: dash
Installed Libraries: None
Installed Directories: None

#### Short Description

dash | is a POSIX compliant shell

Last updated on

## Tcsh-6.22.04

### Introduction to Tcsh

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-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.astron.com/pub/tcsh/tcsh-6.22.04.tar.gz

- Download MD5 sum: fa2b347fa9ae866eb036e6e4bb85fe1a

- Download size: 992 KB

- Estimated disk space required: 12 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

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

### Installation of Tcsh

Install Tcsh by running the following commands:

    ./configure --prefix=/usr --bindir=/bin &&

    make &&
    sh ./tcsh.man2html

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 &&

    install -v -m755 -d          /usr/share/doc/tcsh-6.22.04/html &&
    install -v -m644 tcsh.html/* /usr/share/doc/tcsh-6.22.04/html &&
    install -v -m644 FAQ         /usr/share/doc/tcsh-6.22.04

### Command Explanations

`--bindir=/bin`: This installs the tcsh program in `/bin` instead of `/usr/bin`.

sh ./tcsh.man2html: This creates HTML documentation from the formatted man page.

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.

### Configuring Tcsh

#### Config Files

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.

#### Configuration Information

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

### Contents

Installed Program: tcsh
Installed Libraries: None
Installed Directory: /usr/share/doc/tcsh-6.22.04

#### Short Descriptions

tcsh | is an enhanced but completely compatible version of the Berkeley Unix C shell, csh. It is usable as both an interactive shell and a script processor

Last updated on

## zsh-5.8

### Introduction to zsh

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.zsh.org/pub/zsh-5.8.tar.xz

- Download MD5 sum: e02a5428620b3dd268800c7843b3dd4d

- Download size: 3.0 MB

- Estimated disk space required: 72 MB (includes documentation and tests)

- Estimated build time: 1.3 SBU (Using parallelism=4; includes documentation and tests)

#### Additional Downloads

- Optional Documentation: https://www.zsh.org/pub/zsh-5.8-doc.tar.xz

- Documentation MD5 sum: ef8514401a81bb1a4c4b655ebda8a1a2

- Documentation download size: 3.0 MB

### Note

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/.

#### zsh Dependencies

##### Optional

libcap-2.53 with PAM, PCRE-8.45, and Valgrind-3.17.0,

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

### Installation of zsh

If you downloaded the optional documentation, unpack it with the following command:

    tar --strip-components=1 -xvf ../zsh-5.8-doc.tar.xz

Install zsh by running the following commands:

    ./configure --prefix=/usr         \
                --sysconfdir=/etc/zsh \
                --enable-etcdir=/etc/zsh                  &&
    make                                                  &&

    makeinfo  Doc/zsh.texi --plaintext -o Doc/zsh.txt     &&
    makeinfo  Doc/zsh.texi --html      -o Doc/html        &&
    makeinfo  Doc/zsh.texi --html --no-split --no-headers -o Doc/zsh.html

If you have texlive-20210325 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 &&

    install -v -m755 -d                 /usr/share/doc/zsh-5.8/html &&
    install -v -m644 Doc/html/*         /usr/share/doc/zsh-5.8/html &&
    install -v -m644 Doc/zsh.{html,txt} /usr/share/doc/zsh-5.8

If you downloaded the optional documentation, install it by issuing the following commands as the `root` user:

    make htmldir=/usr/share/doc/zsh-5.8/html install.html &&
    install -v -m644 Doc/zsh.dvi /usr/share/doc/zsh-5.8

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.8

### Command Explanations

`--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.

`--disable-gdbm`: This option disables the use of the GDBM library.

`--enable-pcre`: This option allows zsh to use the PCRE regular expression library in shell builtins.

### Configuring zsh

#### Config Files

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.8/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.

#### Configuration Information

Update `/etc/shells` to include the zsh shell program names (as the `root` user):

    cat >> /etc/shells << "EOF"
    /bin/zsh
    EOF

### Contents

Installed Programs: zsh and zsh-5.8 (hardlinked to each other)
Installed Libraries: Numerous plugin helper modules under /usr/lib/zsh/5.8/
Installed Directories: /usr/{lib,share}/zsh and /usr/share/doc/zsh-5.8

#### Short Description

zsh | is a shell which has command-line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and a host of other features

Last updated on

## Chapter 8. Virtualization

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-6.1.0

### Introduction to qemu

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.qemu-project.org/qemu-6.1.0.tar.xz

- Download MD5 sum: 47f776c276a24f42108ba512a2aa3013

- Download size: 106 MB

- Estimated disk space required: 1.9 GB

- Estimated build time: 1.2 SBU (using parallelism=4; add 0.3 SBU for tests)

#### Qemu Dependencies

##### Required

GLib-2.68.4, and X Window System

##### Recommended

alsa-lib-1.2.5.1 and SDL2-2.0.16

##### Optional

Depending on the sound system, various packages in ALSA-1.2.5, Python-3.9.6, PulseAudio-15.0, BlueZ-5.61, cURL-7.78.0, Cyrus SASL-2.1.27, GnuTLS-3.7.2, GTK+-2.24.33, GTK+-3.24.30, libusb-1.0.24, libgcrypt-1.9.4, libssh2-1.9.0, LZO-2.10, Nettle-3.7.3, Mesa-21.2.1, SDL-1.2.15, VTE-0.64.2 or Vte-0.28.2, and libcacard

##### Optional dependencies for installing the documentation

sphinx with the sphinx-rtd-theme theme

### Note

This optional dependencies list is not comprehensive. See the output of ./configure --help for a more complete list.

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

### KVM Prerequisites

Before building qemu, check to see if your processor supports Virtualization Technology (VT):

    egrep '^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 enabing, reboot back to your LFS instance.

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    [*] Virtualization:  --->                                             [CONFIG_VIRTUALIZATION]
      <*/M>   Kernel-based Virtual Machine (KVM) support [CONFIG_KVM]
      <*/M>     KVM for Intel (and compatible) processors support         [CONFIG_KVM_INTEL]
      <*/M>     KVM for AMD processors support                            [CONFIG_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  --->                         [CONFIG_NET]
      Networking options  --->
        <*/M> 802.1d Ethernet Bridging                   [CONFIG_BRIDGE]
    Device Drivers  --->
      [*] Network device support  --->                   [CONFIG_NETDEVICES]
        <*/M>    Universal TUN/TAP device driver support [CONFIG_TUN]

### Installation of qemu

Add any users that might use the KVM device to that group:

    usermod -a -G kvm <username>

Install qemu by running the following commands:

### Note

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       \
                 --docdir=/usr/share/doc/qemu-6.1.0 &&

    unset QEMU_ARCH &&

    make

qemu uses ninja as a subprocess when building. To run the tests, issue: ninja test.

Now, as the `root` user:

    make install

You will also need to add an Udev rule so that the KVM device gets correct permissions:

    cat > /lib/udev/rules.d/65-kvm.rules << "EOF"
    KERNEL=="kvm", GROUP="kvm", MODE="0660"
    EOF

Change the permissions and ownership of a helper script, which is needed when using the “bridge” network device (see below):

    chgrp kvm  /usr/libexec/qemu-bridge-helper &&
    chmod 4750 /usr/libexec/qemu-bridge-helper

### Note

For convenience you may want to create a symbolic link to run the installed program. For instance:

    ln -sv qemu-system-`uname -m` /usr/bin/qemu

### Command Explanations

`--audio-drv-list=alsa`: This switch sets the audio driver to ALSA. See below for enabling other audio drivers.

`--audio-drv-list=pa`: This switch sets the audio driver to pulseaudio. For other drivers see the --audio-drv-list list in configure's help output. The default audio driver is OSS. To enable support for both alsa and pulseaudio, use `--audio-drv-list=alsa,pa`.

### Using Qemu

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-6.1.0/qemu-doc.html`.

### Note

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.

### Note

The following instructions assume the optional symbolic link, `qemu`, has been created. Additionally, qemu must be run from an X Window System based terminal (either locally or over ssh).

#### Disk

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.

#### Operating System

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.

#### Defining the virtual hardware

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"

#### Meaning of the command line options

`-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 formated 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.

`-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.

#### Controlling the Emulated Display

It may happen that the guest window displayed by qemu does not correspond to the full capability of the emulated vga card. For example, the vmware card is 1600x900 capable, but only 1024x768 is displayed by default. A suitable Xorg configuration on the guest allows to use the full size (Note that the Xorg video driver to use is Xorg VMware Driver-13.3.0):

    cat > /usr/share/X11/xorg.conf.d/20-vmware.conf << "EOF"
    Section         "Monitor"
      Identifier    "Monitor0"
      # cvt 1600 900
      # 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz
      Modeline      "1600x900"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync
      Option        "PreferredMode" "1600x900"
      HorizSync     1-200
      VertRefresh   1-200
    EndSection

    Section         "Device"
      Identifier    "VMware SVGA II Adapter"
      Option        "Monitor" "default"
      Driver        "vmware"
    EndSection

    Section         "Screen"
      Identifier    "Default Screen"
      Device        "VMware SVGA II Adapter"
      Monitor       "Monitor0"

      SubSection    "Display"
        Depth       24
        Modes       "1600x900" "1440x900" "1366x768" "1280x720" "800x480"
      EndSubSection

    EndSection
    EOF

New sizes will be available besides the native ones. You need to restart X in order to have the new sizes available.

#### Networking

The below 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.

Allow the host to forward IP packets:

    sysctl -w net.ipv4.ip_forward=1

To make this permanent, add the command to `/etc/sysctl.d/60-net-forward.conf:`

    cat >> /etc/sysctl.d/60-net-forward.conf << EOF
    net.ipv4.ip_forward=1
    EOF

Set up a required configuration file:

    install -vdm 755 /etc/qemu &&
    echo allow br0 > /etc/qemu/bridge.conf

In the command above, replace the switch `-netdev user,...` with `-netdev bridge,id=net0`.

### Contents

Installed Programs: elf2dmp, qemu (symlink), qemu-edid, qemu-ga, qemu-img, qemu-io, qemu-keymap, qemu-nbd, qemu-pr-helper, qemu-storage-daemon, and qemu-system-<arch>
Installed Library: None
Installed Directories: /usr/share/qemu and /usr/share/doc/qemu-6.1.0 (optional)

#### Short Description

elf2dmp | Converts files from elf to dmp format
qemu-edid | is a test tool for the qemu EDID generator
qemu-ga | 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
qemu-img | provides commands to manage QEMU disk images
qemu-io | is a diagnostic and manipulation program for (virtual) memory media. It is still at an early stage of development
qemu-keymap | generates qemu reverse keymaps from xkb keymaps, which can be used with the qemu "-k" command line switch
qemu-nbd | exports Qemu disk images using the QEMU Disk Network Block Device (NBD) protocol
qemu-pr-helper | Implements the persistent reservation helper for QEMU
qemu-storage-daemon | allows to modify disk images using the QEMU Monitor Protocol (QMP) without running a VM
qemu-system-x86_64 | is the QEMU PC System emulator

Last updated on

# Part III. General Libraries and Utilities

## Chapter 9. General Libraries

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.

## Apr-1.7.0

### Introduction to Apr

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-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/apr/apr-1.7.0.tar.bz2

- Download (FTP): ftp://ftp.mirrorservice.org/sites/ftp.apache.org/apr/apr-1.7.0.tar.bz2

- Download MD5 sum: 7a14a83d664e87599ea25ff4432e48a7

- Download size: 852 KB

- Estimated disk space required: 11 MB (additional 4 MB for the tests)

- Estimated build time: 0.2 SBU (add 1.7 SBU for tests)

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

### Installation of Apr

First, fix a security issue:

    sed -e "/shift/i \
    \    if (xt->tm_mon < 0 || xt->tm_mon >= 12) return APR_EBADDATE;" \
        -i time/unix/time.c

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

### Command Explanations

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

### Contents

Installed Program: apr-1-config
Installed Library: libapr-1.so
Installed Directories: /usr/include/apr-1 and /usr/share/apr-1

#### Short Descriptions

apr-1-config | is a shell script used to retrieve information about the apr library in the system. It is typically used to compile and link against the library
`libapr-1.so` | is the Apache Portable Runtime library

Last updated on

## Apr-Util-1.6.1

### Introduction to Apr Util

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 behaviour regardless of which libraries are available on a given platform.

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

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.bz2

- Download (FTP): ftp://ftp.mirrorservice.org/sites/ftp.apache.org/apr/apr-util-1.6.1.tar.bz2

- Download MD5 sum: 8ff5dc36fa39a2a3db1df196d3ed6086

- Download size: 420 KB

- Estimated disk space required: 6.5 MB (add 1.4 MB for tests)

- Estimated build time: less than 0.1 SBU (add 0.3 SBU for tests)

#### Apr Util Dependencies

##### Required

Apr-1.7.0

##### Optional

Berkeley DB-5.3.28, FreeTDS, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, PostgreSQL-13.4, SQLite-3.36.0 and unixODBC-2.3.9

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/apr-util

### Installation of Apr Util

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

### Command Explanations

`--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-5.3.28, use this switch to compile the `apr_dbm_db-1.so` plugin.

`--with-ldap`: If you have installed OpenLDAP-2.5.7, use this switch to compile the `apr_ldap.so` plugin.

### Contents

Installed Program: apu-1-config
Installed Library: libaprutil-1.so
Installed Directory: /usr/lib/apr-util-1

#### Short Descriptions

apu-1-config | is an APR-util script designed to allow easy command line access to APR-util configuration parameters
`libaprutil-1.so` | contains functions that provide a predictable and consistent interface to underlying client library interfaces

Last updated on

## Aspell-0.60.8

### Introduction to Aspell

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/aspell/aspell-0.60.8.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/aspell/aspell-0.60.8.tar.gz

- Download MD5 sum: 012fa9209203ae4e5a61c2a668fd10e3

- Download size: 3.3 MB

- Estimated disk space required: 51 MB (Additional 8 MB for EN dictionary)

- Estimated build time: 0.4 SBU

#### Additional Downloads

You'll need to download at least one dictionary. The link below will take you to a page containing links to dictionaries in many languages.

- Aspell dictionaries: https://ftp.gnu.org/gnu/aspell/dict

#### Aspell Dependencies

##### Required

Which-2.21 (for the dictionaries)

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

### Installation of Aspell

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/aspell{,-dev}.html &&

    install -v -m644 manual/aspell.html/* \
        /usr/share/doc/aspell-0.60.8/aspell.html &&

    install -v -m644 manual/aspell-dev.html/* \
        /usr/share/doc/aspell-0.60.8/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/

### Command Explanations

ln -svfn aspell-0.60 /usr/lib/aspell: This command is useful for configuration of other applications, such as enchant-2.3.1.

### Configuring Aspell

#### Configuration Information

After Aspell is installed, you must set up at least one dictionary. Install one or more dictionaries by running the following commands:

    ./configure &&
    make

Now, as the `root` user:

    make install

### Contents

Installed Programs: aspell, aspell-import, precat, preunzip, prezip, prezip-bin, pspell-config, run-with-aspell, word-list-compress and optionally, ispell and spell.
Installed Libraries: libaspell.so and libpspell.so
Installed Directories: /usr/include/pspell and /usr/lib/aspell-0.60

#### Short Descriptions

aspell | 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
ispell | is a wrapper around aspell to invoke it in ispell compatible mode
spell | is a wrapper around aspell to invoke it in spell compatible mode
aspell-import | imports old personal dictionaries into Aspell
precat | decompresses a prezipped file to stdout
preunzip | decompresses a prezipped file
prezip | is a prefix delta compressor, used to compress sorted word lists or other similar text files
prezip-bin | is called by the various wrapper scripts to perform the actual compressing and decompressing
pspell-config | displays information about the `libpspell` installation, mostly for use in build scripts
run-with-aspell | is a script to help use Aspell as an ispell replacement
word-list-compress | compresses or decompresses sorted word lists for use with the Aspell spell checker
`libaspell.so` | contains spell checking API functions
`libpspell.so` | is an interface to the `libaspell` library. All the spell checking functionality is now in `libaspell` but this library is included for backward compatibility

Last updated on

## Boost-1.77.0

### Introduction to Boost

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-11.0 platform.

#### Package Information

- Download (HTTP): https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2

- Download MD5 sum: 09dc857466718f27237144c6f2432d86

- Download size: 105 MB

- Estimated disk space required: 1.0 GB (189 MB installed)

- Estimated build time: 1.7 SBU (Using parallelism=4; add 1.3 SBU for tests)

#### Boost Dependencies

##### Recommended

Which-2.21

##### Optional

ICU-69.1 and Open MPI

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

### Installation of 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 the Boost.Build's regression test, issue pushd tools/build/test; python3 test_all.py; popd. All 154 tests should pass.

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.

Now, as the `root` user:

    ./b2 install threading=multi link=shared

### Command Explanations

`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.

`-jN`: This switch may be added to the b2 command lines, to run up to N processes in parallel.

`--with-python=python3`: Add this switch to the bootstrap command, if you want Boost to use Python3 instead of Python2. Using Python3 is known to cause the installation to fail on some systems.

### Contents

Installed Programs: None
Installed Libraries: libboost_atomic.so, libboost_chrono.so, libboost_container.so, libboost_context.so, libboost_contract.so, libboost_coroutine.so, libboost_date_time.so, libboost_exception.a, libboost_fiber.so, libboost_filesystem.so, libboost_graph.so, libboost_iostreams.so, libboost_json.so, libboost_locale.so, libboost_log_setup.so, libboost_log.so, libboost_math_c99.so, libboost_math_c99f.so, libboost_math_c99l.so, libboost_math_tr1.so, libboost_math_tr1f.so, libboost_math_tr1l.so, libboost_nowide.so, libboost_numpy39.so, libboost_prg_exec_monitor.so, libboost_program_options.so, libboost_python39.so, libboost_random.so, libboost_regex.so, libboost_serialization.so, libboost_stacktrace_addr2line.so, libboost_stacktrace_basic.so, libboost_stacktrace_noop.so, libboost_system.so, libboost_test_exec_monitor.a, libboost_thread.so, libboost_timer.so, libboost_type_erasure.so, libboost_unit_test_framework.so, libboost_wave.so, and libboost_wserialization.so
Installed Directory: /usr/include/boost

Last updated on

## brotli-1.0.9

### Introduction to Brotli

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/google/brotli/archive/v1.0.9/brotli-1.0.9.tar.gz

- Download MD5 sum: c2274f0c7af8470ad514637c35bcee7d

- Download size: 476 KB

- Estimated disk space required: 24 MB (with python3 bindings)

- Estimated build time: 0.4 SBU (with python3 bindings)

#### Brotli Dependencies

##### Required

CMake-3.21.2

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

### Installation of Brotli

At first, fix an issue in pkg-config files:

    sed -i 's@-R..libdir.@@' scripts/*.pc.in

Install brotli by running the following commands:

    mkdir out &&
    cd    out &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          ..  &&
    make

To test the results, issue: make test.

If desired, build the Python3 bindings:

    pushd ..               &&
    python3 setup.py build &&
    popd

The python tests are missing most of the necessary testdata files and therefore 240 of 311 tests fail. If you nevertheless wish to test the bindings, go back to the top-level directory and issue: python3 setup.py test.

Now, as the `root` user:

    make install &&
    cd ..

If you have built the python bindings, install them as the `root` user:

    python3 setup.py install --optimize=1

### Contents

Installed Programs: brotli
Installed Libraries: libbrotlicommon{-static.a,.so}, libbrotlidec{,-static.a,.so}, and libbrotlienc{,-static.a,.so}
Installed Directory: /usr/include/brotli

#### Short Descriptions

brotli | can compress or decompress files, or test the integrity of compressed files
`libbrotlicommon{-static.a,.so}` | is the Brotli common dictionary library
`libbrotlidec{-static.a,.so}` | is the Brotli decoder library
`libbrotlienc{-static.a,.so}` | is the Brotli common encoder library

Last updated on

## CLucene-2.3.3.4

### Introduction to CLucene

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-11.0 platform.

#### Package Information

- 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

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/clucene-2.3.3.4-contribs_lib-1.patch

#### CLucene Dependencies

##### Required

CMake-3.21.2

##### Recommended

Boost-1.77.0

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

### Installation of CLucene

Install CLucene by running the following commands:

    patch -Np1 -i ../clucene-2.3.3.4-contribs_lib-1.patch &&

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DBUILD_CONTRIBS_LIB=ON .. &&
    make

Now, as the `root` user:

    make install

### Command Explanations

`-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.

### Contents

Installed Programs: None
Installed Libraries: libclucene-contribs-lib.so, libclucene-core.so, and libclucene-shared.so
Installed Directories: /usr/include/CLucene and /usr/lib/CLuceneConfig.cmake

Last updated on

## dbus-glib-0.112

### Introduction to D-Bus GLib

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-11.0 platform.

#### Package Information

- 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)

#### D-Bus GLib Dependencies

##### Required

dbus-1.12.20 and GLib-2.68.4

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dbus-glib

### Installation of D-Bus GLib

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

### Command Explanations

`--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.

### Contents

Installed Program: dbus-binding-tool
Installed Library: libdbus-glib-1.so
Installed Directories: /usr/share/gtk-doc/html/dbus-glib

#### Short Descriptions

dbus-binding-tool | is a tool used to interface with the D-Bus API
`libdbus-glib-1.so` | contains GLib interface functions to the D-Bus API

Last updated on

## Double-conversion-3.1.5

### Introduction to Double-conversion

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/google/double-conversion/archive/v3.1.5/double-conversion-3.1.5.tar.gz

- Download MD5 sum: e94d3a33a417e692e5600e75019f0272

- Download size: 6.7 MB

- Estimated disk space required: 54 MB

- Estimated build time: 0.1 SBU

#### Double-conversion Dependencies

##### Required

CMake-3.21.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/double-conversion

### Installation of Double-conversion

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

### Command Explanations

`-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.

### Contents

Installed Programs: None
Installed Libraries: libdouble-conversion.so
Installed Directories: /usr/include/double-conversion

#### Short Descriptions

`libdouble-conversion.so` | provides binary-to-decimal and decimal-to-binary routines for IEEE doubles

Last updated on

## enchant-2.3.1

### Introduction to enchant

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/AbiWord/enchant/releases/download/v2.3.1/enchant-2.3.1.tar.gz

- Download MD5 sum: 0b9b60da3bf595ff07547c40668a7373

- Download size: 968 KB

- Estimated disk space required: 7.3 MB (add 100 MB for tests)

- Estimated build time: 0.2 SBU (add 0.5 SBU for tests)

#### enchant Dependencies

##### Required

GLib-2.68.4

##### Recommended

Aspell-0.60.8

##### Optional

dbus-glib-0.112, Doxygen-1.9.2, Hspell, Hunspell, Nuspell, Voikko, and unittest-cpp (required for tests)

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

### Installation of enchant

Install enchant by running the following commands:

    ./configure --prefix=/usr --disable-static &&
    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

### Command Explanations

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

### Configuring enchant

#### Config Files

`~/.enchant` and `/usr/share/enchant/enchant.ordering`

#### Configuration Information

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):

    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.

### Contents

Installed Programs: enchant-2 and enchant-lsmod-2
Installed Libraries: libenchant-2.so
Installed Directories: /usr/include/enchant-2, /usr/lib/enchant-2, and /usr/share/enchant

#### Short Descriptions

enchant-2 | is a spellchecker
enchant-lsmod-2 | lists available backends, languages, and dictionaries
`libenchant-2.so` | contains spell checking interface API functions

Last updated on

## Exempi-2.5.2

### Introduction to Exempi

Exempi is an implementation of XMP (Adobe's Extensible Metadata Platform).

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

#### Package Information

- Download (HTTP): https://libopenraw.freedesktop.org/download/exempi-2.5.2.tar.bz2

- Download MD5 sum: 96e82c244a5659a9b07ae07ca8773ad9

- Download size: 3.5 MB

- Estimated disk space required: 372 MB (add 31 MB for tests)

- Estimated build time: 0.5 SBU (using parallelism=4; add 0.3 SBU for tests)

#### Exempi Dependencies

##### Required

Boost-1.77.0

##### Optional

Valgrind-3.17.0

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

### Installation of Exempi

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

### Command Explanations

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

### Contents

Installed Program: exempi
Installed Library: libexempi.so
Installed Directory: /usr/include/exempi-2.0

#### Short Descriptions

exempi | is a command line tool to manipulate XMP metadata
`libexempi.so` | is a library used to parse XMP metadata

Last updated on

## fftw-3.3.9

### Introduction to fftw

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-11.0 platform.

#### Package Information

- Download (HTTP): http://www.fftw.org/fftw-3.3.9.tar.gz

- Download (FTP): ftp://ftp.fftw.org/pub/fftw/fftw-3.3.9.tar.gz

- Download MD5 sum: 50145bb68a8510b5d77605f11cadf8dc

- Download size: 4.0 MB

- Estimated disk space required: 60 MB

- Estimated build time: 1.4 SBU (using parallelism=4; add 2.2 SBU for tests)

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

### Installation of fftw

### Note

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     &&
    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-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

### Command Explanations

`--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-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-15.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`.

### Contents

Installed Programs: fftw-wisdom and fftw-wisdom-to-conf
Installed Libraries: libfftw3.so, libfftw3_threads.so, libfftw3f.so, libfftw3f_threads.so, libfftw3l.so and libfftw3l_threads.so
Installed Directories: None

#### Short Descriptions

fftw-wisdom | is a utility to generate FFTW wisdom files, which contain saved information about how to optimally compute (Fourier) transforms of various sizes
fftw-wisdom-to-conf | 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
`libfftw3.so` | is the Fast Fourier Transform library
`libfftw3_threads.so` | is the threaded Fast Fourier Transform library
`libfftw3f.so` | is the single-precision Fast Fourier Transform library, described as “float” for historic reasons
`libfftw3f_threads.so` | is the threaded single-precision Fast Fourier Transform library
`libfftw3l.so` | is the long double Fast Fourier Transform library
`libfftw3l_threads.so` | is the threaded long double Fast Fourier Transform library

Last updated on

## GLib-2.68.4

### Introduction to GLib

The GLib package contains low-level libraries useful for providing data structure handling for C, portability wrappers and interfaces for such runtime functionality as an event loop, threads, dynamic loading and an object system.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/glib/2.68/glib-2.68.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/glib/2.68/glib-2.68.4.tar.xz

- Download MD5 sum: 07ba0e946bf6dcad36388675d2f2876f

- Download size: 4.8 MB

- Estimated disk space required: 104 MB (add 6 MB for tests)

- Estimated build time: 0.6 SBU (add 1.0 SBU for tests; both using parallelism=4)

#### Additional Downloads

- Optional patch: https://www.linuxfromscratch.org/patches/blfs/11.0/glib-2.68.4-skip_warnings-1.patch

#### GLib Dependencies

##### Recommended

libxslt-1.1.34 and PCRE-8.45 (built with Unicode properties)

##### Optional

dbus-1.12.20 and bindfs (both may be used in some tests), GDB-10.2 (for bindings), docbook-xml-4.5, docbook-xsl-1.79.2, GTK-Doc-1.33.2 (to build API documentation), glib-networking-2.68.2 (for some tests, but this is a circular dependency), and sysprof-3.40.1

##### Additional Runtime Dependencies

gobject-introspection-1.68.0 (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.1 and desktop-file-utils-0.26, respectively. These two utilities are also needed for some tests.

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

### Installation of GLib

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.30, output numerous warnings when run from the command line. This patch enables the use of an environment variable, `GLIB_LOG_LEVEL`, that supresses 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-2.68.4-skip_warnings-1.patch

### Warning

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 --prefix=/usr       \
          --buildtype=release \
          -Dman=true          \
          ..                  &&
    ninja

### Note

If libxslt-1.1.34 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.68.4 &&
    cp -r ../docs/reference/{NEWS,gio,glib,gobject} /usr/share/doc/glib-2.68.4

You should now install desktop-file-utils-0.26 and shared-mime-info-2.1 and proceed to run the test suite.

To test the results, after having installed the package, issue: ninja test. One test named `gio / file` is known to fail if the test is ran as the `root` user.

Finally, if this is a reinstall from glib2-2.64.x or earlier, remove (as the `root` user) an obsolete header file that interferes with some packages:

    rm -f /usr/include/glib-2.0/glib/gurifuncs.h

### Command Explanations

`--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.

### Contents

Installed Programs: gapplication, gdbus, gdbus-codegen, gio, gio-querymodules, glib-compile-resources, glib-compile-schemas, glib-genmarshal, glib-gettextize, glib-mkenums, gobject-query, gresource, gsettings, gtester, and gtester-report
Installed Libraries: libgio-2.0.so, libglib-2.0.so, libgmodule-2.0.so, libgobject-2.0.so, and libgthread-2.0.so
Installed Directories: /usr/include/gio-unix-2.0, /usr/include/glib-2.0, /usr/lib/glib-2.0, /usr/share/glib-2.0, /usr/share/doc/glib-2.68.4, and /usr/share/gtk-doc/html/{gio,glib,gobject}

#### Short Descriptions

gapplication | can be used to start applications and to send messages to already-running instances of other applications
gdbus | is a simple tool used for working with D-Bus objects
gdbus-codegen | is used to generate code and/or documentation for one or more D-Bus interfaces
gio | is a utility that makes many GIO features available from the command line
gio-querymodules | is used to create a `giomodule.cache` file in the listed directories. This file lists the implemented extension points for each module that has been found
glib-compile-resources | 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
glib-compile-schemas | is used to compile all the GSettings XML schema files in a directory into a binary file with the name `gschemas.compiled` that can be used by GSettings
glib-genmarshal | is a C code marshaller generation utility for GLib closures
glib-gettextize | is a variant of the gettext internationalization utility
glib-mkenums | is a C language enum description generation utility
gobject-query | is a small utility that draws a tree of types
gresource | offers a simple command line interface to GResource
gsettings | offers a simple command line interface to GSettings
gtester | is a test running utility
gtester-report | is a test report formatting utility
GLib libraries | contain low-level core libraries for the GIMP Toolkit

Last updated on

## GLibmm-2.66.1

### Introduction to GLibmm

The GLibmm package is a set of C++ bindings for GLib.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/glibmm/2.66/glibmm-2.66.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/glibmm/2.66/glibmm-2.66.1.tar.xz

- Download MD5 sum: ee8c00fd7f08ae59f6af38dfa599194a

- Download size: 7.2 MB

- Estimated disk space required: 88 MB (with tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with tests)

#### GLibmm Dependencies

##### Required

GLib-2.68.4 and libsigc++-2.10.7

##### Optional

Doxygen-1.9.2, glib-networking-2.68.2 (for tests), GnuTLS-3.7.2 (for tests), libxslt-1.1.34, and mm-common

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

### Installation of GLibmm

Install GLibmm by running the following commands:

    mkdir bld &&
    cd    bld &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Libraries: libgiomm-2.4.so, libglibmm-2.4.so and libglibmm_generate_extra_defs-2.4.so
Installed Directories: /usr/lib/g{io,lib}mm-2.4 and /usr/include/g{io,lib}mm-2.4

#### Short Descriptions

`libgiomm-2.4.so` | contains the GIO API classes
`libglibmm-2.4.so` | contains the GLib API classes

Last updated on

## GMime-3.2.7

### Introduction to GMime

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gmime/3.2/gmime-3.2.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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)

#### GMime Dependencies

##### Required

GLib-2.68.4 and libgpg-error-1.42

##### Recommended

gobject-introspection-1.68.0 and libidn2-2.3.2

##### Optional

DocBook-utils-0.6.14, GPGME-1.16.0, GTK-Doc-1.33.2, Vala-0.52.5, and Gtk# (requires Mono)

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

### Installation of GMime

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

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Library: libgmime-3.0.so
Installed Directories: /usr/include/gmime-3.0 and /usr/share/gtk-doc/html/gmime-3.0

#### Short Descriptions

`libgmime-3.0.so` | contains API functions used by programs that need to comply to the MIME standards

Last updated on

## gobject-introspection-1.68.0

### Introduction to GObject Introspection

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gobject-introspection/1.68/gobject-introspection-1.68.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gobject-introspection/1.68/gobject-introspection-1.68.0.tar.xz

- Download MD5 sum: b106680b153bebb67c8987e64bbafcc6

- Download size: 996 KB

- Estimated disk space required: 64 MB (with tests)

- Estimated build time: 0.2 SBU (Using parallelism=4; with tests)

##### Required

GLib-2.68.4

##### Optional

Cairo-1.17.4 (required for the tests), Gjs-1.68.3 (to satisfy one test), GTK-Doc-1.33.2, Mako-1.1.5, and Markdown (to satisfy one test)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gobject-introspection

### Installation of GObject Introspection

Install GObject Introspection by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. If Mako-1.1.5 is installed but the Python 3 module named Markdown (not in BLFS) is not, one test named test_docwriter.py will fail.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Build and install the documentation.

`-Dcairo=enabled`: Use cairo for tests.

`-Ddoctool=enabled`: Install g-ir-doc-tool and run related tests.

### Contents

Installed Program: g-ir-annotation-tool, g-ir-compiler, g-ir-doc-tool, g-ir-generate, g-ir-inspect, and g-ir-scanner
Installed Libraries: libgirepository-1.0.so and _giscanner.cpython-39-<arch>-linux-gnu.so
Installed Directories: /usr/include/gobject-introspection-1.0, /usr/lib/girepository-1.0, /usr/lib/gobject-introspection, /usr/share/gir-1.0, and /usr/share/gobject-introspection-1.0

#### Short Descriptions

g-ir-annotation-tool | creates or extracts annotation data from GI typelibs
g-ir-compiler | converts one or more GIR files into one or more typelib
g-ir-doc-tool | generates Mallard files that can be viewed with yelp or rendered to HTML with yelp-build from yelp-tools
g-ir-inspect | is a utility that gives information about a GI typelib
g-ir-generate | is a GIR generator that uses the repository API
g-ir-scanner | is a tool which generates GIR XML files by parsing headers and introspecting GObject based libraries
`libgirepository-1.0.so` | provides an API to access the typelib metadata

Last updated on

## Grantlee-5.2.0

### Introduction to grantlee

Grantlee is a set of free software libraries written using the Qt framework. Currently two libraries are shipped with Grantlee: Grantlee Templates and Grantlee TextDocument. The goal of Grantlee Templates is to make it easier for application developers to separate the structure of documents from the data they contain, opening the door for theming.

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

#### Package Information

- Download (HTTP): http://downloads.grantlee.org/grantlee-5.2.0.tar.gz

- Download MD5 sum: 6239b3703674f88b2236d30d0ed67eea

- Download size: 1.1 MB

- Estimated disk space required: 22 MB

- Estimated build time: 0.6 SBU (Using parallelism=4)

#### Grantlee Dependencies

##### Required

CMake-3.21.2 and Qt-5.15.2

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

### Installation of Grantlee

Install Grantlee by running the following commands:

    mkdir build &&
    cd    build &&

    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

### Contents

Installed Programs: none
Installed Libraries: libgrantlee_core.so and libgrantlee_gui.so
Installed Directories: /usr/lib/cmake/grantlee, /usr/lib/grantlee/0.4, and /usr/include/grantlee

Last updated on

## Gsl-2.7

### Introduction to Gsl

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/gsl/gsl-2.7.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/gsl/gsl-2.7.tar.gz

- Download MD5 sum: 9e47e81caaebcd92b7aca27a5348df74

- Download size: 7.2 MB

- Estimated disk space required: 256 MB (with tests, without docs)

- Estimated build time: 1.4 SBU (Using parallelism=4; with tests, without docs)

#### Gsl Dependencies

##### Optional

Sphinx with sphinx_rtd_theme

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

### Installation of Gsl

Install Gsl by running the following commands:

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

If you have the optional Sphinx package installed, buid 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 &&
    cp -R doc/_build/html/* /usr/share/doc/gsl-2.7

### Command Explanations

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

### Contents

Installed Programs: gsl-config, gsl-histogram, and gsl-randist
Installed Libraries: libgslcblas.so and libgsl.so
Installed Directory: /usr/include/gsl and /usr/share/doc/gsl-2.7

#### Short Descriptions

gsl-config | is a shell script to get the version number and compiler flags of the installed Gsl library
gsl-histogram | is a demonstration program for the GNU Scientific Library that computes a histogram from data taken from stdin
gsl-randist | is a demonstration program for the GNU Scientific Library that generates random samples from various distributions
`libgslcblas.so` | contains functions that implement a C interface to Basic Linear Algebra Subprograms
`libgsl.so` | contains functions that provide a collection of numerical routines for scientific computing

Last updated on

## gspell-1.8.4

### Introduction to gspell

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gspell/1.8/gspell-1.8.4.tar.xz

- Download MD5 sum: 378dee938c08c24b559953cbcad83942

- Download size: 414 KB

- Estimated disk space required: 13 MB (with tests)

- Estimated build time: 0.1 SBU (using parallelism=4; with tests)

#### gspell Dependencies

##### Required

enchant-2.3.1 and GTK+-3.24.30

##### Optional

gobject-introspection-1.68.0, GTK-Doc-1.33.2, ISO Codes-4.7.0, Vala-0.52.5, and Valgrind-3.17.0

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

### Installation of gspell

Install gspell by running the following commands:

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

To test the results, issue: make check. One test, test-checker, is known to fail if the external package Hunspell is not installed. The tests also must be run in an X session.

Now, as the `root` user:

    make install

### Contents

Installed Programs: gspell-app1
Installed Libraries: libgspell-1.so
Installed Directories: /usr/include/gspell-1 and /usr/share/gtk-doc/html/gspell-1.0

#### Short Descriptions

gspell-app1 | checks the spelling of a text entered in a window
`libgspell-1.so` | is the gspell API library

Last updated on

## ICU-69.1

### Introduction to ICU

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.

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

#### Package Information

- Download (HTTP): https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz

- Download MD5 sum: 9403db682507369d0f60a25ea67014c4

- Download size: 24 MB

- Estimated disk space required: 354 MB (add 36 MB for tests)

- Estimated build time: 0.9 SBU (Using parallelism=4; add 2.0 SBU for tests)

#### ICU Dependencies

##### Optional

LLVM-12.0.1 (with Clang), and Doxygen-1.9.2 (for documentation)

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

### Installation of ICU

### Note

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

### Contents

Installed Programs: derb, escapesrc, genbrk, genccode, gencfu, gencmn, gencnval, gendict, gennorm2, genrb, gensprep, icu-config, icuinfo, icupkg, makeconv, pkgdata, and uconv
Installed Libraries: libicudata.so, libicui18n.so, libicuio.so, libicutest.so, libicutu.so, and libicuuc.so
Installed Directories: /usr/include/unicode, /usr/lib/icu, and /usr/share/icu

#### Short Descriptions

derb | disassembles a resource bundle
escapesrc | converts “\u” escaped characters into unicode characters
genbrk | compiles ICU break iteration rules source files into binary data files
genccode | generates C or platform specific assembly code from an ICU data file
gencfu | reads in Unicode confusable character definitions and writes out the binary data
gencmn | generates an ICU memory-mappable data file
gencnval | compiles the converter's aliases file
gendict | compiles word lists into ICU string trie dictionaries
gennorm2 | builds binary data files with Unicode normalization data
genrb | compiles a resource bundle
gensprep | compiles StringPrep data from filtered RFC 3454 files
icu-config | outputs ICU build options
icuinfo | outputs configuration information about the current ICU
icupkg | extracts or modifies an ICU .dat archive
makeconv | compiles a converter table
pkgdata | packages data for use by ICU
uconv | converts data from one encoding to another
`libicudata.so` | is the data library
`libicui18n.so` | is the internationalization (i18n) library
`libicuio.so` | is the ICU I/O (unicode stdio) library
`libicutest.so` | is the test library
`libicutu.so` | is the tool utility library
`libicuuc.so` | is the common library

Last updated on

## inih-53

### Introduction to inih

This package is a simple .INI file parser written in C.

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

#### Package Information

- Download (HTTP): https://github.com/benhoyt/inih/archive/r53/inih-r53.tar.gz

- Download MD5 sum: 8b52bf308de2ad1eab94fad64c116610

- Download size: 17 KB

- Estimated disk space required: 0.6 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of inih

Install inih by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Program: None
Installed Libraries: libinih.so, libINIReader.so
Installed Directories: None

Last updated on

## Jansson-2.13.1

### Introduction to Jansson

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-11.0 platform.

#### Package Information

- Download (HTTP): https://digip.org/jansson/releases/jansson-2.13.1.tar.gz

- Download MD5 sum: 570af45b8203e95876d71fecd56cee20

- Download size: 520 KB

- Estimated disk space required: 7.8 MB

- Estimated build time: 0.1 SBU

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

### Installation of Jansson

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

### Contents

Installed Programs: None
Installed Library: libjansson.so
Installed Directories: None

#### Short Descriptions

`libjansson.so` | contains an API for encoding, decoding, and manipulating JSON data

Last updated on

## JS-78.13.0

### Introduction to JS

JS is Mozilla's JavaScript engine written in C. JS78 is taken from Firefox.

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

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/firefox/releases/78.13.0esr/source/firefox-78.13.0esr.source.tar.xz

- Download MD5 sum: 872623fc9f93ea8d3f3290024f0c0925

- Download size: 319 MB

- Estimated disk space required: 3.0 GB (36 MB installed after removing 34MB static lib)

- Estimated build time: 2.4 SBU (on a 4-core machine with parallelism=4)

#### JS78 Dependencies

##### Required

Autoconf-2.13, ICU-69.1, rustc-1.52.0, and Which-2.21

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

### Installation of JS

### Note

Unlike most other packages in BLFS, the instructions below require you to untar `firefox-78.13.0esr.tar.xz` and change into the `firefox-78.13.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.

Install JS by running the following commands:

### Note

If you are compiling this package in chroot you must do two things. First, as the `root` user, ensure that `/dev/shm` is mounted. If you do not do this, the Python configury will fail with a traceback report referencing `/usr/lib/pythonN.N/multiprocessing/synchronize.py`. Run:

    mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm

Second, either as the `root` user export the `$SHELL` environment variable using export SHELL=/bin/sh or else prepend `SHELL=/bin/sh` when running the configure command.

Compiling the C++ code respects $MAKEFLAGS and defaults to 'j1', the rust code will use all processors.

    mkdir obj &&
    cd    obj &&

    CC=gcc CXX=g++ \
    ../js/src/configure --prefix=/usr            \
                        --with-intl-api          \
                        --with-system-zlib       \
                        --with-system-icu        \
                        --disable-jemalloc       \
                        --disable-debug-symbols  \
                        --enable-readline        &&
    make

To run the JS 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. Depending on the machine, either ten or fourteen JS tests related to locale and timezone fail, because of an issue with recent versions of ICU-69.1.

To run the JIT test suite, issue: make -C js/src check-jit-test JITTEST_EXTRA_ARGS="--timeout 300". One test may fail.

### Caution

An issue in the installation process causes any running program which links to JS78 shared library (for example, GNOME Shell) to crash if JS78 is upgraded or reinstalled. To work around this issue, remove the old version of the JS78 shared library before installation:

    rm -fv /usr/lib/libmozjs-78.so

Now, as the `root` user:

    make install &&
    rm -v /usr/lib/libjs_static.ajs &&
    sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js78-config

### Command Explanations

`CC=gcc CXX=g++`: Upstream now prefers clang, override it like other Mozilla packages in BLFS book.

`--with-*`: These parameters allow the build system to use system versions of the above libraries. These are required for stability.

`--enable-readline`: This switch enables Readline support in the JS shell.

`--disable-jemalloc`: This switch disables the internal memory allocator used in JS78. jemalloc is only intended for the Firefox browser environment. For other applications using JS78, if JS78 uses jemalloc, the application may crash as items allocated in jemalloc allocator are freed on system (glibc) allocator.

`--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 JS78.

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/js78-config: Prevent js78-config from using buggy CFLAGS.

### Contents

Installed Programs: js78 and js78-config
Installed Libraries: libmozjs-78.so
Installed Directories: /usr/include/mozjs-78

#### Short Descriptions

js78 | provides a command line interface to the JavaScript engine
js78-config | is used to find the JS compiler and linker flags
`libmozjs-78.so` | contains the Mozilla JavaScript API functions

Last updated on

## JSON-C-0.15

### Introduction to JSON-C

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-11.0 platform.

#### Package Information

- Download (HTTP): https://s3.amazonaws.com/json-c_releases/releases/json-c-0.15.tar.gz

- Download MD5 sum: 55f395745ee1cb3a4a39b41636087501

- Download size: 353 KB

- Estimated disk space required: 336 KB

- Estimated build time: less than 0.1 SBU

#### JSON-C Dependencies

##### Required

CMake-3.21.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/json-c

### Installation of JSON-C

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

To test the results, issue: make test.

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply a higher level of compiler optimizations.

### Contents

Installed Programs: None
Installed Libraries: libjson-c.so
Installed Directories: /usr/include/json-c

#### Short Descriptions

`libjson-c.so` | contains the JSON-C API functions

Last updated on

## JSON-GLib-1.6.6

### Introduction to JSON GLib

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/json-glib/1.6/json-glib-1.6.6.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/json-glib/1.6/json-glib-1.6.6.tar.xz

- Download MD5 sum: 9c40fcd8cdbf484dd1704480afefae14

- Download size: 1.2 MB

- Estimated disk space required: 6.6 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### JSON-GLib Dependencies

##### Required

GLib-2.68.4

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/json-glib

### Installation of JSON GLib

Install JSON GLib by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: json-glib-format and json-glib-validate
Installed Library: libjson-glib-1.0.so
Installed Directories: /usr/{include,share/installed-tests}/json-glib-1.0, /usr/libexec/installed-tests/json-glib-1.6.6, and /usr/share/gtk-doc/html/json-glib

#### Short Descriptions

json-glib-format | is a simple command line interface to format JSON data
json-glib-validate | is a simple command line interface to validate JSON data
`libjson-glib-1.0.so` | contains the JSON GLib API functions

Last updated on

## keyutils-1.6.1

### Introduction to keyutils

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-11.0 platform.

#### Package Information

- Download (HTTP): https://people.redhat.com/~dhowells/keyutils/keyutils-1.6.1.tar.bz2

- Download MD5 sum: 919af7f33576816b423d537f8a8692e8

- Download size: 96 KB

- Estimated disk space required: 1.9 MB (with tests)

- Estimated build time: less than 0.1 SBU (add 0.6 SBU for tests)

#### keyutils Dependencies

##### Required

MIT Kerberos V5-1.19.2

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

### Installation of keyutils

Install keyutils by running the following commands:

    sed -i 's:$(LIBDIR)/$(PKGCONFIG_DIR):/usr/lib/pkgconfig:' Makefile &&
    make

To test the results, issue, as the `root` user:

    make -k test

Note that several tests will fail if certain uncommon kernel options were not used when the kernel was built. These include CONFIG_BIG_KEYS, CONFIG_KEY_DH_OPERATIONS, and CONFIG_CRYPTO_DH.

Now, as the `root` user:

    make NO_ARLIB=1 LIBDIR=/usr/lib BINDIR=/usr/bin SBINDIR=/usr/sbin install

### Command Explanations

sed ... Makefile: This command ensures the pkgconfig file is placed in the correct directory.

`NO_ARLIB=1`: This make flag disables installing the static library.

### Configuring keyutils

#### Config Files

`/etc/request-key.conf` and `/etc/request-key.d/*`

### Contents

Installed Programs: keyctl, key.dns_resolver, and request-key
Installed Library: libkeyutils.so
Installed Directory: /etc/request-key.d and /usr/share/keyutils

#### Short Descriptions

keyctl | controls the key management facility with a variety of subcommands
key.dns_resolver | 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
request-key | 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
`libkeyutils.so` | contains the keyutils library API instantiation

Last updated on

## libaio-0.3.112

### Introduction to libaio

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.debian.org/debian/pool/main/liba/libaio/libaio_0.3.112.orig.tar.xz

- Download MD5 sum: 66e3b7dd255581a73542ee851f8cd737

- Download size: 40 KB

- Estimated disk space required: 1.0 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of libaio

First, disable the installation of the static library:

    sed -i '/install.*libaio.a/s/^/#/' src/Makefile

Build libaio by running the following command:

    make

If you want to run the testsuite, fix an issue with Glibc-2.34 or later:

    sed 's/-Werror//' -i harness/Makefile

To test the results, issue: make partcheck.

Now, install the package as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libaio.so
Installed Directories: None

#### Short Descriptions

`libaio.so` | is the libaio library

Last updated on

## libarchive-3.5.2

### Introduction to libarchive

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libarchive/libarchive/releases/download/v3.5.2/libarchive-3.5.2.tar.xz

- Download MD5 sum: 2ba9f1f8c169aa9caf8e2d34dde323be

- Download size: 4.7 MB

- Estimated disk space required: 40 MB (add 28 MB for tests)

- Estimated build time: 0.3 SBU (add 1.0 SBU for tests)

#### libarchive Dependencies

##### Optional

libxml2-2.9.12, LZO-2.10, and Nettle-3.7.3

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

### Installation of libarchive

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

### Command Explanations

`--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.

### Contents

Installed Programs: bsdcat, bsdcpio, and bsdtar
Installed Libraries: libarchive.so
Installed Directories: None

#### Short Descriptions

bsdcat | expands files to standard output
bsdcpio | is a tool similar to cpio
bsdtar | is a tool similar to GNU tar
`libarchive.so` | is a library that can create and read several streaming archive formats

Last updated on

## libassuan-2.5.5

### Introduction to libassuan

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.5.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/libassuan/libassuan-2.5.5.tar.bz2

- Download MD5 sum: 7194453152bb67e3d45da698762b5d6f

- Download size: 559 KB

- Estimated disk space required: 7.4 MB (with tests, add 3.4 MB for documentation)

- Estimated build time: 0.1 SBU (with tests and documentation)

#### libassuan Dependencies

##### Required

libgpg-error-1.42

##### Optional

texlive-20210325 (or install-tl-unx)

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

### Installation of libassuan

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-20210325 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.5/html &&
    install -v -m644 doc/assuan.html/* \
                        /usr/share/doc/libassuan-2.5.5/html &&
    install -v -m644 doc/assuan_nochunks.html \
                        /usr/share/doc/libassuan-2.5.5      &&
    install -v -m644 doc/assuan.{txt,texi} \
                        /usr/share/doc/libassuan-2.5.5

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.5

### Contents

Installed Program: libassuan-config
Installed Library: libassuan.so
Installed Directory: /usr/share/doc/libassuan-2.5.5

#### Short Descriptions

libassuan-config | is a `libassuan` build information script
`libassuan.so` | is an inter process communication library which implements the Assuan protocol

Last updated on

## libatasmart-0.19

### Introduction to libatasmart

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-11.0 platform.

#### Package Information

- Download (HTTP): http://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

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

### Installation of 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

### Command Explanations

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

### Contents

Installed Programs: skdump and sktest
Installed Library: libatasmart.so
Installed Directory: /usr/share/doc/libatasmart-0.19

#### Short Descriptions

skdump | is a utility that reports on the status of the disk
sktest | is a utility to issue disks tests
`libatasmart.so` | contains the ATA S.M.A.R.T API functions

Last updated on

## libatomic_ops-7.6.10

### Introduction to libatomic_ops

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/ivmai/libatomic_ops/releases/download/v7.6.10/libatomic_ops-7.6.10.tar.gz

- Download MD5 sum: 90a78a84d9c28ce11f331c25289bfbd0

- Download size: 492 KB

- Estimated disk space required: 7.0 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

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

### Installation of libatomic_ops

Install libatomic_ops by running the following commands:

    ./configure --prefix=/usr    \
                --enable-shared  \
                --disable-static \
                --docdir=/usr/share/doc/libatomic_ops-7.6.10 &&
    make

To check the results, issue make check.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-shared`: This switch enables building of the `libatomic_ops` shared libraries.

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

### Contents

Installed Programs: None
Installed Libraries: libatomic_ops.so and libatomic_ops_gpl.so
Installed Directory: /usr/include/libatomic_ops and /usr/share/doc/libatomic_ops-7.6.10

#### Short Descriptions

`libatomic_ops.so` | contains functions for atomic memory operations

Last updated on

## libblockdev-2.26

### Introduction to libblockdev

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/storaged-project/libblockdev/releases/download/2.26-1/libblockdev-2.26.tar.gz

- Download MD5 sum: d022c1ebb9b9a838c1a8c8b2b781b69d

- Download size: 912 KB

- Estimated disk space required: 12 MB

- Estimated build time: 0.2 SBU

#### libblockdev Dependencies

##### Required

gobject-introspection-1.68.0, libbytesize-2.6, libyaml-0.2.5, parted-3.4, and volume_key-0.3.12

##### Optional

btrfs-progs-5.13.1, GTK-Doc-1.33.2, mdadm-4.1, dmraid, bcachefs, and ndctl

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

### Installation of libblockdev

Install libblockdev by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --with-python3    \
                --without-gtk-doc \
                --without-nvdimm  \
                --without-dm      &&
    make

This package does not come with a working test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: lvm-cache-stats
Installed Libraries: libbd_btrfs.so, libbd_crypto.so, libbd_fs.so, libbd_kbd.so, libbd_loop.so, libbd_lvm.so, libbd_lvm-dbus.so, libbd_mdraid.so, libbd_mpath.so, libbd_part.so, libbd_part_err.so, libbd_swap.so, libbd_utils.so, libbd_vdo.so, and libblockdev.so
Installed Directories: /etc/libblockdev, /usr/include/blockdev, and /usr/share/gtk-doc/html/libblockdev

#### Short Descriptions

lvm-cache-stats | prints statistics on caches on LVM Logical Volumes

Last updated on

## libbytesize-2.6

### Introduction to libbytesize

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/storaged-project/libbytesize/releases/download/2.6/libbytesize-2.6.tar.gz

- Download MD5 sum: 2c1d253452fd6610b5857add0195698f

- Download size: 436 KB

- Estimated disk space required: 3.4 MB

- Estimated build time: less than 0.1 SBU (including tests)

#### libbytesize Dependencies

##### Required

pcre2-10.37

##### Optional

GTK-Doc-1.33.2, six-1.16.0 (needed for tests and python bindings), pocketlint (python module for one test), and polib (python module for one test)

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

### Installation of libbytesize

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

### Contents

Installed Programs: bscalc
Installed Library: libbytesize.so
Installed Directories: /usr/include/bytesize, /usr/share/gtk-doc/html/libbytesize, and /usr/lib/python3.9/site-packages/bytesize

#### Short Descriptions

bscalc | converts from a larger unit, such as MB or TB, back to a value in bytes
`libbytesize.so` | contains functions used to handle common read/write operations with sizes in bytes

Last updated on

## libdaemon-0.14

### Introduction to libdaemon

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-11.0 platform.

#### Package Information

- Download (HTTP): http://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

#### libdaemon Dependencies

##### Optional

Doxygen-1.9.2 and Lynx-2.8.9rel.1

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

### Installation of libdaemon

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

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libdaemon.so
Installed Directories: /usr/include/libdaemon and /usr/share/doc/libdaemon-0.14

#### Short Descriptions

`libdaemon.so` | contains the libdaemon API functions

Last updated on

## libgcrypt-1.9.4

### Introduction to libgcrypt

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.9.4.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.9.4.tar.bz2

- Download MD5 sum: edc7becfe09c75d8f95ff7623e40c52e

- Download size: 3.1 MB

- Estimated disk space required: 135 MB (with tests and pdf documentation)

- Estimated build time: 0.4 SBU (with documentation; add 0.5 SBU for tests)

#### libgcrypt Dependencies

##### Required

libgpg-error-1.42

##### Optional

Pth-2.0.7 and texlive-20210325 (or install-tl-unx)

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

### Installation of libgcrypt

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

The above commands build the documentation in html and plaintext formats. If you wish to build alternate formats of the documentation, you need texlive-20210325 (or install-tl-unx). Issue the following command:

    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/libgcrypt-1.9.4 &&
    install -v -m644    README doc/{README.apichanges,fips*,libgcrypt*} \
                        /usr/share/doc/libgcrypt-1.9.4 &&

    install -v -dm755   /usr/share/doc/libgcrypt-1.9.4/html &&
    install -v -m644 doc/gcrypt.html/* \
                        /usr/share/doc/libgcrypt-1.9.4/html &&
    install -v -m644 doc/gcrypt_nochunks.html \
                        /usr/share/doc/libgcrypt-1.9.4      &&
    install -v -m644 doc/gcrypt.{txt,texi} \
                        /usr/share/doc/libgcrypt-1.9.4

If you built alternate formats of the documentation, install them by issuing the following command as the `root` user:

    install -v -m644 doc/gcrypt.{pdf,ps,dvi} \
                        /usr/share/doc/libgcrypt-1.9.4

### Command Explanations

`--with-capabilities`: This option enables libcap2 support. Note that this breaks cryptsetup-2.3.6

### Contents

Installed Programs: dumpsexp, hmac256, libgcrypt-config, and mpicalc
Installed Library: libgcrypt.so
Installed Directory: /usr/share/doc/libgcrypt-1.9.4

#### Short Descriptions

dumpsexp | is a debug tool for S-expressions
hmac256 | is a standalone HMAC-SHA-256 implementation used to compute an HMAC-SHA-256 authentication code
libgcrypt-config | determines the compile and linker flags that should be used to compile and link programs that use `libgcrypt`
mpicalc | is a RPN (Reverse Polish Notation) calculator
`libgcrypt.so` | contains the cryptographic API functions

Last updated on

## libgpg-error-1.42

### Introduction to libgpg-error

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.42.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.42.tar.bz2

- Download MD5 sum: 133fed221ba8f63f5842858a1ff67cb3

- Download size: 951 KB

- Estimated disk space required: 13 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libgpg-error

### Installation of libgpg-error

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.42/README

### Contents

Installed Programs: gpg-error, gpg-error-config, gpgrt-config, and yat2m
Installed Library: libgpg-error.so
Installed Directories: /usr/share/common-lisp/source/gpg-error, /usr/share/libgpg-error, and /usr/share/doc/libgpg-error-1.42

#### Short Descriptions

gpg-error | is used to determine libgpg-error error codes
gpg-error-config | is a utility used to configure and build applications based on the libgpg-error 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 libgpg-error library
gpgrt-config | is the same script as gpg-error-config
yat2m | extracts man pages from a Texinfo source
`libgpg-error.so` | contains the libgpg-error API functions

Last updated on

## libgrss-0.7.0

### Introduction to libgrss

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgrss/0.7/libgrss-0.7.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libgrss-0.7.0-bugfixes-1.patch

#### libgrss Dependencies

##### Required

libsoup-2.74.0

##### Optional

GTK-Doc-1.33.2

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

### Installation of libgrss

Install libgrss by running the following commands:

    patch -Np1 -i ../libgrss-0.7.0-bugfixes-1.patch &&
    autoreconf -fv &&
    ./configure --prefix=/usr --disable-static &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Library: libgrss.so
Installed Directories: /usr/include/libgrss and /usr/share/doc/libgrss-0.7.0

#### Short Descriptions

`libgrss.so` | provides API functions for handling RSS feeds

Last updated on

## libgsf-1.14.47

### Introduction to libgsf

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgsf/1.14/libgsf-1.14.47.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgsf/1.14/libgsf-1.14.47.tar.xz

- Download MD5 sum: 20bf9933128210d7a9f920a34198d22f

- Download size: 676 KB

- Estimated disk space required: 15 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### libgsf Dependencies

##### Required

GLib-2.68.4 and libxml2-2.9.12

##### Recommended

gdk-pixbuf-2.42.6 (To build gsf-office-thumbnailer)

##### Optional

gobject-introspection-1.68.0 and GTK-Doc-1.33.2

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

### Installation of libgsf

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

### Command Explanations

`--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.

### Contents

Installed Programs: gsf, gsf-office-thumbnailer, and gsf-vba-dump
Installed Library: libgsf-1.so
Installed Directories: /usr/include/libgsf-1, /usr/share/gtk-doc/html/gsf and /usr/share/thumbnailers

#### Short Descriptions

gsf | is a simple archive utility, somewhat similar to tar(1)
gsf-office-thumbnailer | is used internally by GNOME applications such as Nautilus to generate thumbnails of several types of office application files
gsf-vba-dump | is used to extract Visual Basic for Applications macros from files
`libgsf-1.so` | contains the libgsf API functions

Last updated on

## libgudev-237

### Introduction to libgudev

The libgudev package contains GObject bindings for libudev.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgudev/237/libgudev-237.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgudev/237/libgudev-237.tar.xz

- Download MD5 sum: a7783083cd74957d3a727ddc4737ee84

- Download size: 32 KB

- Estimated disk space required: 1.8 MB

- Estimated build time: less than 0.1 SBU

##### Required

GLib-2.68.4

##### Optional

gobject-introspection-1.68.0 (for gir-data, needed for GNOME), GTK-Doc-1.33.2, and umockdev-0.16.2 (for testing)

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

### Installation of libgudev

Install libgudev by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this option if GTK-Doc is installed and you wish to build and install the API documentation.

### Contents

Installed Program: None
Installed Libraries: libgudev-1.0.so
Installed Directories: /usr/include/gudev-1.0 and /usr/share/gtk-doc/html/gudev

#### Short Descriptions

`libgudev-1.0.so` | is a GObject-based wrapper library for libudev

Last updated on

## libgusb-0.3.7

### Introduction to libgusb

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/hughsie/libgusb/archive/0.3.7/libgusb-0.3.7.tar.gz

- Download MD5 sum: b980fe26244b108db6692b00865af1b4

- Download size: 52 KB

- Estimated disk space required: 1.9 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### libgusb Dependencies

##### Required

libusb-1.0.24

##### Recommended

GTK-Doc-1.33.2, gobject-introspection-1.68.0, usbutils-014 (for `usb.ids` data file, which is also required for the tests), and Vala-0.52.5

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

### Installation of libgusb

Install libgusb by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Ddocs=false .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddocs=true`: Use this option if GTK-Doc is installed and you wish to install the documentation.

### Contents

Installed Programs: gusbcmd
Installed Library: libgusb.so
Installed Directories: /usr/include/gusb-1 and /usr/share/gtk-doc/html/gusb (if gtk-doc is used)

#### Short Descriptions

gusbcmd | is a debugging tool for the libgusb library
`libgusb.so` | contains the libgusb API functions

Last updated on

## libical-3.0.10

### Introduction to libical

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libical/libical/releases/download/v3.0.10/libical-3.0.10.tar.gz

- Download MD5 sum: 0992e55d8408783a3c63d6000ed802d2

- Download size: 872 KB

- Estimated disk space required: 22 MB (with tests)

- Estimated build time: 0.1 SBU (Using parallelism=4; with tests)

#### libical Dependencies

##### Required

CMake-3.21.2

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5 (both required for GNOME)

##### Optional

Berkeley DB-5.3.28, Doxygen-1.9.2 (for the API documentation), GTK-Doc-1.33.2 (for the API documentation), ICU-69.1, and PyGObject-3.40.1 (for some tests)

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

### Installation of libical

Install libical by running the following commands:

### Note

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

If you have Doxygen-1.9.2 and GTK-Doc-1.33.2 installed and wish to build the API documentation, 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.10/html &&
    cp -vr apidocs/html/* /usr/share/doc/libical-3.0.10/html

### Command Explanations

`-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.

`-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.52.5.

`-DUSE_BUILTIN_TZDATA=yes`: This switch is used in order to build using your own timezone data.

### Contents

Installed Programs: None
Installed Libraries: libical_cxx.so, libical.so, libical-glib.so, libicalss_cxx.so, libicalss.so, and libicalvcal.so
Installed Directory: /usr/include/libical, /usr/include/libical-glib, /usr/lib/cmake/LibIcal, /usr/libexec/libical, and /usr/share/doc/libical-3.0.10/html

#### Short Descriptions

`libical.so` | contains the libical API functions
`libical_cxx.so` | contains the libical C++ bindings
`libical-glib.so` | contains the libical glib bindings
`libicalss.so` | is a library that allows you to store iCal component data to disk in a variety of ways
`libicalss_cxx.so` | contains the libicalss C++ bindings
`libicalvcal.so` | is a vCard/vCalendar C interface

Last updated on

## libidn-1.38

### Introduction to libidn

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn-1.38.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/libidn/libidn-1.38.tar.gz

- Download MD5 sum: 718ff3700dd71f830c592ebe97249193

- Download size: 2.6 MB

- Estimated disk space required: 18 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libidn Dependencies

##### Optional

Pth-2.0.7, Emacs-27.2, GTK-Doc-1.33.2, OpenJDK-16.0.2, Valgrind-3.17.0, and Mono

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

### Installation of libidn

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.38     &&
    cp -r -v doc/* /usr/share/doc/libidn-1.38

### Command Explanations

`--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.

### Contents

Installed Program: idn
Installed Library: libidn.so
Installed Directories: /usr/share/doc/libidn-1.38 and /usr/share/gtk-doc/html/libidn

#### Short Descriptions

idn | is a command line interface to the internationalized domain name library
`libidn.so` | 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

Last updated on

## libidn2-2.3.2

### Introduction to libidn2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn2-2.3.2.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/libidn/libidn2-2.3.2.tar.gz

- Download MD5 sum: fb54962eb68cf22d47a4ae61f0aba993

- Download size: 2.1 MB

- Estimated disk space required: 21 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libidn2 Dependencies

##### Required

libunistring-0.9.10

##### Optional

git-2.33.0 and GTK-Doc-1.33.2

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

### Installation of libidn2

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

### Command Explanations

`--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.

### Contents

Installed Program: idn2
Installed Library: libidn2.so
Installed Directory: /usr/share/gtk-doc/html/libidn2

#### Short Descriptions

idn2 | is a command line interface to the internationalized domain library
`libidn2.so` | contains a generic Stringprep implementation used for internationalized string handling

Last updated on

## libiodbc-3.52.15

### Introduction to libiodbc

libiodbc is an API to ODBC compatible databases.

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

#### Package Information

- 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

#### libiodbc Dependencies

##### Recommended

GTK+-2.24.33 (to create the GUI admin tool)

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

### Installation of libiodbc

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

### Command Explanations

`--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.

### Contents

Installed Programs: iodbc-config, iodbctest, iodbctestw, and iodbcadm-gtk
Installed Libraries: libdrvproxy.so, libiodbc.so, libiodbcinst.so, and libiodbcadm.so
Installed Directory: /usr/include/iodbc, /usr/share/libiodbc, and /etc/iodbc

#### Short Descriptions

iodbc-config | is a utility for retrieving the installation options of libiodbc
iodbctest{,w} | are interactive SQL processors
iodbcadm-gtk | is a graphical administration utility

Last updated on

## libksba-1.6.0

### Introduction to Libksba

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/libksba/libksba-1.6.0.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/libksba/libksba-1.6.0.tar.bz2

- Download MD5 sum: d333b2e1381068d4f9a328240f062f0f

- Download size: 648 KB

- Estimated disk space required: 9.3 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Libksba Dependencies

##### Required

libgpg-error-1.42

##### Optional

Valgrind-3.17.0

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

### Installation of Libksba

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

### Contents

Installed Program: ksba-config
Installed Library: libksba.so
Installed Directory: None

#### Short Descriptions

ksba-config | is a utility used to configure and build applications based on the libksba(3) 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 libksba(3) library
`libksba.{so,a}` | contains the cryptographic API functions

Last updated on

## liblinear-243

### Introduction to liblinear

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-11.0 platform.

### Note

After updating this package from liblinear-1.96 or earlier, you need to reinstall Nmap-7.92, in order to link to the new library.

#### Package Information

- Download (HTTP): https://github.com/cjlin1/liblinear/archive/v243/liblinear-243.tar.gz

- Download MD5 sum: 7f42a8b5656aeb9209c04b8840206825

- Download size: 556 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of liblinear

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.4 /usr/lib &&
    ln -sfv liblinear.so.4 /usr/lib/liblinear.so

### Contents

Installed Programs: None
Installed Library: liblinear.so
Installed Directories: None

#### Short Descriptions

`liblinear.so` | is a large linear classification library

Last updated on

## libmbim-1.26.0

### Introduction to libmbim

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/libmbim/libmbim-1.26.0.tar.xz

- Download MD5 sum: 552d498d891c93ee9ed2684a8a6a723e

- Download size: 544 KB

- Estimated disk space required: 32 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libmbim Dependencies

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 and help2man

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

### Installation of libmbim

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

### Command Explanations

`--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.

### Contents

Installed Programs: mbimcli and mbim-network
Installed Libraries: libmbim-glib.so
Installed Directories: /usr/include/libmbim-glib and /usr/share/gtk-doc/html/libmbim-glib

#### Short Descriptions

mbimcli | is an utility used to control MBIM devices
mbim-network | is an utility used for simple network management of MBIM devices
`libmbim-glib.so` | contains API functions for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol

Last updated on

## libpaper-1.1.24+nmu5

### Introduction to libpaper

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.debian.org/debian/pool/main/libp/libpaper/libpaper_1.1.24+nmu5.tar.gz

- Download MD5 sum: 38bc55688c0fc5544edaa5a951a45fbd

- Download size: 48 KB

- Estimated disk space required: 3.5 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of libpaper

Install libpaper by running the following commands:

    autoreconf -fi                &&
    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    mkdir -vp /etc/libpaper.d

The /etc/libpaper.d directory contains scripts to run after the paper size has been changed. This package puts no scripts here, but other packages may. If the fcron package has not been installed, create the run-parts script as shown in the Fcron Configuration Information section.

### Command Explanations

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

mkdir -pv /etc/libpaper.d: libpaper expects that packages will install files into this directory.

### Configuring libpaper

#### Configuration Information

Create `/etc/papersize` to set the default system paper size. Issue the following command as the `root` user to set this to 'A4' (libpaper prefers the lowercase form). You may wish to use a different size, such as letter.

    cat > /etc/papersize << "EOF"
    a4
    EOF

### Contents

Installed Programs: paperconf, paperconfig, run-parts
Installed Library: libpaper.so
Installed Directories: /etc/libpaper.d

#### Short Descriptions

paperconf | prints paper configuration information
paperconfig | configures the system default paper size
`libpaper.so` | contains functions for interrogating the paper library

Last updated on

## libportal-0.4

### Introduction to libportal

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/flatpak/libportal/releases/download/0.4/libportal-0.4.tar.xz

- Download MD5 sum: 2ca3806e18e2197dd87d22379405a624

- Download size: 52 KB

- Estimated disk space required: 3.6 MB

- Estimated build time: 0.1 SBU

#### libportal Dependencies

##### Required

GLib-2.68.4

##### Optional

GTK-Doc-1.33.2

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

### Installation of libportal

Install libportal by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dgtk_doc=false .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: Remove this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libportal.so
Installed Directories: /usr/include/libportal and /usr/share/gtk-doc/html/libportal

#### Short Descriptions

`libportal.so` | provides GIO-style async APIs for most Flatpak portals

Last updated on

## libqmi-1.30.0

### Introduction to libqmi

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/libqmi/libqmi-1.30.0.tar.xz

- Download MD5 sum: 1a30e5304d01e72845bd3e9c353c8ded

- Download size: 1.2 MB

- Estimated disk space required: 150 MB (with tests)

- Estimated build time: 0.3 SBU (Using parallelism=4; with tests)

#### libqmi Dependencies

##### Required

GLib-2.68.4 and libgudev-237

##### Recommended

gobject-introspection-1.68.0 and libmbim-1.26.0

##### Optional

GTK-Doc-1.33.2, help2man, and libqrtr-glib

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

### Installation of libqmi

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

### Command Explanations

`--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.

### Contents

Installed Programs: qmicli, qmi-firmware-update, and qmi-network
Installed Libraries: libqmi-glib.so
Installed Directories: /usr/include/libqmi-glib and /usr/share/gtk-doc/html/libqmi-glib

#### Short Descriptions

qmicli | is an utility used to control QMI devices
qmi-firmware-update | is an utility used to perform firmware updates on QMI devices
qmi-network | is an utility used for simple network management of QMI devices
`libqmi-glib.so` | contains API functions for talking to WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol

Last updated on

## libseccomp-2.5.1

### Introduction to libseccomp

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/seccomp/libseccomp/releases/download/v2.5.1/libseccomp-2.5.1.tar.gz

- Download MD5 sum: 59f5563c532d3fa1df9db0516b36b1cd

- Download size: 624 KB

- Estimated disk space required: 6.7 MB (additional 5.2 MB for tests)

- Estimated build time: less than 0.1 SBU (additional 2.2 SBU for tests)

#### libseccomp Dependencies

##### Optional

Which-2.21 (needed for tests), Valgrind-3.17.0, Cython, and LCOV

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

### Installation of libseccomp

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

### Command Explanations

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

### Contents

Installed Program: scmp_sys_resolver
Installed Library: libseccomp.so
Installed Directories: None

#### Short Descriptions

scmp_sys_resolver | is used to resolve system calls for applications
`libseccomp.so` | contains API functions for translating syscalls

Last updated on

## libsigc++-2.10.7

### Introduction to libsigc++

The libsigc++ package implements a typesafe callback system for standard C++.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libsigc++/2.10/libsigc++-2.10.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libsigc++/2.10/libsigc++-2.10.7.tar.xz

- Download MD5 sum: 9e1e9a9796987cbbbc6563c732c723d1

- Download size: 4.6 MB

- Estimated disk space required: 25 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libsigc++ Dependencies

##### Recommended

Boost-1.77.0 and libxslt-1.1.34

##### Optional

DocBook-utils-0.6.14, Doxygen-1.9.2, and mm-common

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsigc++

### Installation of libsigc++

Install libsigc++ by running the following commands:

    mkdir bld &&
    cd    bld &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dbuild_documentation=true`: Use this switch if Doxygen-1.9.2 is installed and you wish to build and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libsigc-2.0.so
Installed Directories: /usr/{include,lib}/sigc++-2.0 and /usr/share/{devhelp/books,doc}/libsigc++-2.0 (if the documentation is enabled)

#### Short Descriptions

`libsigc-2.0.so` | contains the libsigc++ API functions

Last updated on

## libsigc++-3.0.7

### Introduction to libsigc++3

The libsigc++3 package implements a typesafe callback system for standard C++.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libsigc++/3.0/libsigc++-3.0.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libsigc++/3.0/libsigc++-3.0.7.tar.xz

- Download MD5 sum: 7eda63038a9b2073cb5b1c9adf2187b2

- Download size: 776 KB

- Estimated disk space required: 9.2 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### libsigc3++ Dependencies

##### Recommended

Boost-1.77.0 and libxslt-1.1.34

##### Optional

DocBook-utils-0.6.14, Doxygen-1.9.2, dblatex, and mm-common

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsigc++3

### Installation of libsigc++3

Install libsigc++3 by running the following commands:

    mkdir bld &&
    cd    bld &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dbuild_documentation=true`: Use this switch if Doxygen-1.9.2 is installed and you wish to build and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libsigc-3.0.so
Installed Directories: /usr/{include,lib}/sigc++-3.0 and /usr/share/{devhelp/books,doc}/libsigc++-3.0 (if the documentation is enabled)

#### Short Descriptions

`libsigc-3.0.so` | contains the libsigc++3 API functions

Last updated on

## libsigsegv-2.13

### Introduction to libsigsegv

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.13.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.13.tar.gz

- Download MD5 sum: cf4a5fdc95e5494eaa190825af11f3be

- Download size: 452 KB

- Estimated disk space required: 3.8 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

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

### Installation of libsigsegv

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

### Command Explanations

`--enable-shared`: This switch ensures that shared libraries are compiled.

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

### Contents

Installed Programs: None
Installed Library: libsigsegv.so
Installed Directories: None

#### Short Descriptions

`libsigsegv.so` | is a library for handling page faults in user mode

Last updated on

## libssh2-1.9.0

### Introduction to libssh2

Libssh2 package is a client-side C library implementing the SSH2 protocol.

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

#### Package Information

- Download (HTTP): https://www.libssh2.org/download/libssh2-1.9.0.tar.gz

- Download MD5 sum: 1beefafe8963982adc84b408b2959927

- Download size: 868 KB

- Estimated disk space required: 13 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libssh2-1.9.0-security_fixes-1.patch

#### libssh2 Dependencies

##### Optional

GnuPG-2.2.29, libgcrypt-1.9.4, and OpenSSH-8.7p1 (all three required for the testsuite)

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

### Installation of libssh2

Install libssh2 by running the following commands:

    patch -Np1 -i ../libssh2-1.9.0-security_fixes-1.patch &&
    ./configure --prefix=/usr --disable-static            &&
    make

To test the results, issue: make check. One test, using gnupg, may fail for unknown reasons.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libssh2.so
Installed Directories: None

#### Short Descriptions

`libssh2.so` | contains functions to use the SSH2 protocol

Last updated on

## libstatgrab-0.92.1

### Introduction to libstatgrab

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.mirrorservice.org/sites/ftp.i-scream.org/pub/i-scream/libstatgrab/libstatgrab-0.92.1.tar.gz

- Download (FTP): ftp://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)

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

### Installation of libstatgrab

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

### Command Explanations

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

### Contents

Installed Programs: saidar, statgrab, statgrab-make-mrtg-config, and statgrab-make-mrtg-index
Installed Library: libstatgrab.so
Installed Directories: /usr/share/doc/libstatgrab-0.92.1

#### Short Descriptions

saidar | is a curses-based tool for viewing system statistics
statgrab | is a sysctl-style interface to system statistics
statgrab-make-mrtg-config | generates MRTG configuration
statgrab-make-mrtg-index | generates an XHTML index page from MRTG configuration files or stdin
`libstatgrab.so` | contains the libstatgrab API functions

Last updated on

## libtasn1-4.17.0

### Introduction to libtasn1

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.17.0.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-4.17.0.tar.gz

- Download MD5 sum: c46f6eb3bd1287031ae5d36465094402

- Download size: 1.8 MB

- Estimated disk space required: 12 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### libtasn1 Dependencies

##### Optional

GTK-Doc-1.33.2 and Valgrind-3.17.0

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

### Installation of libtasn1

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

### Command Explanations

`--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.

### Contents

Installed Programs: asn1Coding, asn1Decoding and asn1Parser
Installed Library: libtasn1.so
Installed Directory: /usr/share/gtk-doc/html/libtasn1

#### Short Descriptions

asn1Coding | is an ASN.1 DER encoder
asn1Decoding | is an ASN.1 DER decoder
asn1Parser | is an ASN.1 syntax tree generator for libtasn1
`libtasn1.so` | is a library for Abstract Syntax Notation One (ASN.1) and Distinguish Encoding Rules (DER) manipulation

Last updated on

## libuninameslist-20210626

### Introduction to libuninameslist

Libuninameslist provides a Library of Unicode names and annotation data

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

#### Package Information

- Download (HTTP): https://github.com/fontforge/libuninameslist/releases/download/20210626/libuninameslist-dist-20210626.tar.gz

- Download MD5 sum: d4fa781488763c7d5623a59da0e99452

- Download size: 1.2 MB

- Estimated disk space required: 14 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

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

### Installation of libuninameslist

Install libuninameslist by running the following commands:

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

To test the results, issue: make check.

    make install

### Command Explanations

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

`--enable-frenchlib`: This option adds a library of french translations of the names and attributes, libuninameslist-fr.so.

### Contents

Installed Programs: None
Installed Library: libuninameslist.so
Installed Directories: None

#### Short Descriptions

`libuninameslist.so` | provides a library of Unicode names and annotation data

Last updated on

## libunique-1.1.6

### Introduction to libunique

The libunique package contains a library for writing single instance applications.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libunique/1.1/libunique-1.1.6.tar.bz2

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libunique/1.1/libunique-1.1.6.tar.bz2

- Download MD5 sum: 7955769ef31f1bc4f83446dbb3625e6d

- Download size: 328 KB

- Estimated disk space required: 7.0 MB

- Estimated build time: 0.2 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libunique-1.1.6-upstream_fixes-1.patch

#### libunique Dependencies

##### Required

GTK+-2.24.33, also GTK-Doc-1.33.2 (for autoreconf)

##### Optional

gobject-introspection-1.68.0

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

### Installation of libunique

Install libunique by running the following commands:

    patch -Np1 -i ../libunique-1.1.6-upstream_fixes-1.patch &&
    autoreconf -fi &&

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-dbus`: This switch disables D-Bus backend in favor of the GDBus backend.

`--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.

### Contents

Installed Programs: None
Installed Library: libunique-1.0.so
Installed Directories: /usr/include/unique-1.0 and /usr/share/gtk-doc/html/unique

#### Short Descriptions

`libunique-1.0.so` | contains the libunique API functions for single instance support

Last updated on

## libunistring-0.9.10

### Introduction to libunistring

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libunistring/libunistring-0.9.10.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/libunistring/libunistring-0.9.10.tar.xz

- Download MD5 sum: db08bb384e81968957f997ec9808926e

- Download size: 2.0 MB

- Estimated disk space required: 49 MB (add 43 MB for tests)

- Estimated build time: 0.9 SBU (add 1.0 SBU for tests)

#### libunistring Dependencies

##### Optional

texlive-20210325 (or install-tl-unx) (to rebuild the documentation)

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

### Installation of libunistring

Install libunistring by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libunistring-0.9.10 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: None
Installed Libraries: libunistring.so
Installed Directory: /usr/include/unistring and /usr/share/doc/libunistring-0.9.10

#### Short Descriptions

libunistring.so | provides the unicode string library API

Last updated on

## libusb-1.0.24

### Introduction to libusb

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libusb/libusb/releases/download/v1.0.24/libusb-1.0.24.tar.bz2

- Download MD5 sum: 5bc27df16155302f308d409e73589872

- Download size: 596 KB

- Estimated disk space required: 5.8 MB

- Estimated build time: less than 0.1 SBU

#### libusb Dependencies

##### Optional

Doxygen-1.9.2

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

### Installation of libusb

### Note

This package does not support parallel build.

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 command:

    sed -i "s/^TCL_SUBST/#&/; s/wide//" doc/doxygen.cfg &&
    make -C doc docs

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.24/apidocs &&
    install -v -m644    doc/api-1.0/* \
                        /usr/share/doc/libusb-1.0.24/apidocs

### Command Explanations

sed -i ...: This sed prevents some warnings when building the documentation.

### Configuring Libusb

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 --->                   [CONFIG_USB_SUPPORT]
        <*/M> Support for Host-side USB      [CONFIG_USB]
        (Select any USB hardware device drivers you may need on the same page)

For more details on setting up USB devices, see the section called “USB Device Issues”.

### Contents

Installed Programs: None
Installed Library: libusb-1.0.so
Installed Directories: /usr/include/libusb-1.0 and /usr/share/doc/libusb-1.0.24

#### Short Descriptions

`libusb-1.0.so` | contains API functions used for accessing USB hardware

Last updated on

## libuv-1.42.0

### Introduction to libuv

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-11.0 platform.

#### Package Information

- Download (HTTP): https://dist.libuv.org/dist/v1.42.0/libuv-v1.42.0.tar.gz

- Download MD5 sum: 484dec4a06e183c20be815019ce9ddd0

- Download size: 1.2 MB

- Estimated disk space required: 13 MB (add 12 MB for tests)

- Estimated build time: less than 0.1 SBU (Using parallelism=4; add 0.5 SBU for tests)

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

### Installation of libuv

Install libuv by running the following commands:

### Caution

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 want to run the tests, run: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libuv.so
Installed Directory: /usr/include/uv

#### Short Descriptions

`libuv.so` | contains API functions for asynchronous I/O operations

Last updated on

## libxkbcommon-1.3.0

### Introduction to libxkbcommon

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-11.0 platform.

#### Package Information

- Download (HTTP): https://xkbcommon.org/download/libxkbcommon-1.3.0.tar.xz

- Download MD5 sum: 00b5275ec1309a1d427a645de5861605

- Download size: 444 KB

- Estimated disk space required: 27 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### libxkbcommon Dependencies

##### Required

xkeyboard-config-2.33

##### Recommended

libxcb-1.14, Wayland-1.19.0, and wayland-protocols-1.21

##### Optional

Doxygen-1.9.2

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

### Installation of libxkbcommon

Install libxkbcommon by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Denable-docs=false .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Denable-docs=false`: This switch disables documentation generation. Remove it if Doxygen-1.9.2 is installed.

mv -v /usr/share/doc/libxkbcommon{,-1.3.0}: If you removed -Denable-docs=false, use this command to install the documentation in a versioned directory.

### Contents

Installed Programs: xkbcli
Installed Libraries: libxkbcommon.so, libxkbcommon-x11.so, and libxkbregistry.so
Installed Directories: /usr/include/xkbcommon, /usr/libexec/xkbcommon, and /usr/share/doc/libxkbcommon-1.3.0

#### Short Descriptions

xkbcli | provides a debugger and compiler for XKB keymaps
`libxkbcommon.so` | contains the libxkbcommon API functions
`libxkbcommon-x11.so` | contains the libxkbcommon X11 specific API functions
`libxkbregistry.so` | contains a list of available XKB models, layouts, and variants for a given ruleset

Last updated on

## libxml2-2.9.12

### Introduction to libxml2

The libxml2 package contains libraries and utilities used for parsing XML files.

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

#### Package Information

- Download (HTTP): http://xmlsoft.org/sources/libxml2-2.9.12.tar.gz

- Download (FTP): ftp://xmlsoft.org/libxml2/libxml2-2.9.12.tar.gz

- Download MD5 sum: f433a39be087a9f0b197eb2307ad9f75

- Download size: 5.4 MB

- Estimated disk space required: 116 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### Additional Downloads

- Optional Testsuite: https://www.w3.org/XML/Test/xmlts20130923.tar.gz - This enables make check to do complete testing.

#### libxml2 Dependencies

##### Optional

ICU-69.1 (see below) and Valgrind-3.17.0 (may be used in the tests)

### Note

The old Python2 module can be built after `libxml2.so` has been installed, see Python2 libxml2-2.9.12 module.

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

### Installation of libxml2

Install libxml2 by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --with-history   \
                --with-python=/usr/bin/python3 &&
    make

If you downloaded the testsuite, issue the following command:

    tar xf ../xmlts20130923.tar.gz

To test the results, issue: make check > check.log. A summary of the results can be obtained with grep -E '^Total|expected' check.log. If Valgrind-3.17.0 is installed and you want to check for memory leaks, replace check with check-valgrind.

### Note

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:

    systemctl stop httpd.service

Now, as the `root` user:

    make install

### Command Explanations

`--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-python=/usr/bin/python3`: Allows building the libxml2 module with Python3 instead of Python2.

`--with-icu`: Add this switch if you have built ICU-69.1, for better unicode support.

`--with-threads`: Add this switch to enable multithread support.

### Contents

Installed Programs: xml2-config, xmlcatalog, and xmllint
Installed Libraries: libxml2.so and libxml2mod.so (Python3 module)
Installed Directories: /usr/include/libxml2, /usr/lib/cmake/libxml2, /usr/share/doc/libxml2-2.9.12, /usr/share/doc/libxml2-python-2.9.12, and /usr/share/gtk-doc/html/libxml2

#### Short Descriptions

xml2-config | determines the compile and linker flags that should be used to compile and link programs that use `libxml2`
xmlcatalog | is used to monitor and manipulate XML and SGML catalogs
xmllint | parses XML files and outputs reports (based upon options) to detect errors in XML coding
`libxml2.so` | provides functions for programs to parse files that use the XML format
`libxml2mod.so` | is the interface for Python3 to use `libxml2.so`

Last updated on

## libxslt-1.1.34

### Introduction to libxslt

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-11.0 platform.

#### Package Information

- Download (HTTP): http://xmlsoft.org/sources/libxslt-1.1.34.tar.gz

- Download (FTP): ftp://xmlsoft.org/libxslt/libxslt-1.1.34.tar.gz

- Download MD5 sum: db8765c8d076f1b6caafd9f2542a304a

- Download size: 3.4 MB

- Estimated disk space required: 36 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### libxslt Dependencies

##### Required

libxml2-2.9.12

##### Recommended

docbook-xml-4.5 and docbook-xsl-1.79.2

### Note

Although it is not a direct dependency, many applications using libxslt will expect docbook-xml-4.5 and docbook-xsl-1.79.2 to be present.

##### Optional

libgcrypt-1.9.4 and Python2 libxml2-2.9.12 module

### Note

The Python2 libxml2-2.9.12 module dependency is only appropriate if the Python2 module for this package is needed. The libxslt Python2 module is not needed for any package in BLFS but various non-BLFS packages may install Python2 modules which reference it.

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

### Installation of libxslt

Install libxslt by running the following commands:

    sed -i s/3000/5000/ libxslt/transform.c doc/xsltproc.{1,xml} &&
    sed -i -r '/max(Parser)?Depth/d' ./tests/fuzz/fuzz.c &&
    ./configure --prefix=/usr --disable-static --without-python  &&
    make

A shipped man page is glitched. If the recommended dependencies are installed, regenerate it by running the following commands:

    sed -e 's@http://cdn.docbook.org/release/xsl@https://cdn.docbook.org/release/xsl-nons@' \
        -e 's@\$Date\$@31 October 2019@' -i doc/xsltproc.xml &&
    xsltproc/xsltproc --nonet doc/xsltproc.xml -o doc/xsltproc.1

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

sed -i s/3000/5000/ ...: this increases the recursion limit in libxslt. This is needed by some packages for their documentation.

sed -i -r '/max(Parser)?Depth/d' ...: this works around an issue running test suite of libxslt with libxml-2.9.12.

`--without-python`: This parameter disables the libxslt python module since it does not support Python3. If you wish to enable this module, make sure that Python2 libxml2-2.9.12 module is installed, and remove this parameter.

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

### Contents

Installed Programs: xslt-config and xsltproc
Installed Libraries: libexslt.so, libxslt.so and optionally, libxsltmod.so Python module
Installed Directories: /usr/include/libexslt, /usr/include/libxslt, /usr/lib/libxslt-plugins, /usr/share/doc/libxslt-1.1.34, and /usr/share/doc/libxslt-python-1.1.34

#### Short Descriptions

xslt-config | is used to find out the pre-processor, linking and compiling flags necessary to use the libxslt libraries in 3rd-party programs
xsltproc | is used to apply XSLT stylesheets to XML documents
`libexslt.so` | is used to provide extensions to XSLT functions
`libxslt.so` | provides extensions to the `libxml2` libraries to parse files that use the XSLT format

Last updated on

## libwacom-1.11

### Introduction to libwacom

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/linuxwacom/libwacom/releases/download/libwacom-1.11/libwacom-1.11.tar.bz2

- Download MD5 sum: 03a360811b094ab97b3e2c1feb1db599

- Download size: 507 KB

- Estimated disk space required: 6.2 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### libwacom Dependencies

##### Required

libgudev-237

##### Recommended

libxml2-2.9.12

##### Optional

Doxygen-1.9.2, git-2.33.0, librsvg-2.50.7, Valgrind-3.17.0 (optional for some tests), and pytest

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

### Installation of libwacom

Install libwacom by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dtests=disabled .. &&
    ninja

To test the results, issue: ninja test. To run additional tests, install pytest and remove the "-Dtests=disabled" option from the meson line above.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dtests=disabled`: This parameter disables some of the more advanced tests because they require pytest to work properly.

### Contents

Installed Programs: libwacom-list-devices, libwacom-list-local-devices, libwacom-show-stylus, and libwacom-update-db
Installed Libraries: libwacom.so
Installed Directories: /usr/include/libwacom-1.0 and /usr/share/libwacom

#### Short Descriptions

libwacom-list-devices | lists all tablet devices that are supported by libwacom
libwacom-list-local-devices | lists tablet devices that are connected to the system
libwacom-show-stylus | lists tablet stylus IDs
libwacom-update-db | updates the system according to the current set of tablet data files
`libwacom.so` | contains functions used for accessing Wacom information

Last updated on

## libwpe-1.10.1

### Introduction to libwpe

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-11.0 platform.

#### Package Information

- Download (HTTP): https://wpewebkit.org/releases/libwpe-1.10.1.tar.xz

- Download MD5 sum: f60fc13b519a66d262afb76c77441870

- Download size: 52 KB

- Estimated disk space required: 2.0 MB

- Estimated build time: less than 0.1 SBU

#### libwpe Dependencies

##### Required

libxkbcommon-1.3.0 and Mesa-21.2.1

##### Optional

hotdoc

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

### Installation of libwpe

Install libwpe by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libwpe-1.0.so
Installed Directories: /usr/include/wpe-1.0

#### Short Descriptions

`libwpe-1.0.so` | contains functions that provide a general purpose library for WPEWebKit and the WPE Renderer

Last updated on

## libyaml-0.2.5

### Introduction to libyaml

The libyaml 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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/yaml/libyaml/archive/0.2.5/libyaml-0.2.5.tar.gz

- Download MD5 sum: 163fc1e22153d3e2cebfe5cbb43a1769

- Download size: 84 KB

- Estimated disk space required: 6.7 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### libyaml Dependencies

##### Optional

Doxygen-1.9.2

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

### Installation of libyaml

Install libyaml by running the following commands:

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

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: None
Installed Libraries: libyaml.so
Installed Directories: None

#### Short Descriptions

`libyaml.so` | contains API functions for parsing and emitting YAML code

Last updated on

## LZO-2.10

### Introduction to LZO

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-11.0 platform.

#### Package Information

- 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)

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

### Installation of LZO

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

### Command Explanations

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

### Contents

Installed Programs: None
Installed Libraries: liblzo2.so
Installed Directories: /usr/include/lzo and /usr/share/doc/lzo

#### Short Descriptions

`liblzo2.so` | is a data compression and decompression library

Last updated on

## mtdev-1.1.6

### Introduction to mtdev

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-11.0 platform.

#### Package Information

- 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

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

### Installation of mtdev

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

### Command Explanations

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

### Contents

Installed Program: mtdev-test
Installed Library: libmtdev.so
Installed Directories: None

#### Short Descriptions

mtdev-test | is a tool to test `libmtdev`
`libmtdev.so` | contains Multitouch Protocol Translation API functions

Last updated on

## Node.js-14.17.5

### Introduction to Node.js

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-11.0 platform.

#### Package Information

- Download (HTTP): https://nodejs.org/dist/v14.17.5/node-v14.17.5.tar.xz

- Download MD5 sum: 8ec7b05141efe9de286a78506e116735

- Download size: 32 MB

- Estimated disk space required: 751 MB

- Estimated build time: 11 SBU (using parallelism=4; add 2.6 SBU for tests)

#### Node.js Dependencies

##### Required

Which-2.21

##### Recommended

c-ares-1.17.2, ICU-69.1, libuv-1.42.0, and nghttp2-1.44.0

##### Optional

http-parser and npm (an internal copy of npm will be installed if not present)

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

### Installation of Node.js

Build Node.js by running the following commands:

    sed -i 's|ares_nameser.h|arpa/nameser.h|' src/cares_wrap.h &&
    ./configure --prefix=/usr                  \
                --shared-cares                 \
                --shared-libuv                 \
                --shared-openssl               \
                --shared-nghttp2               \
                --shared-zlib                  \
                --with-intl=system-icu         &&
    make

To test the results, issue: make test-only. One test in test/parallel/test-uv-errno.js is known to fail with libuv-1.42.0.

Now, as the `root` user:

    make install &&
    ln -sf node /usr/share/doc/node-14.17.5

### Command Explanations

`sed -i 's%ares_\(nameser.h\)%arpa/\1%' ...`: This fixes building with the system version of c-ares.

`--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-{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.

### Contents

Installed Programs: node, npm, and npx
Installed Library: None
Installed Directories: /usr/include/node, /usr/lib/node_modules/npm, /usr/share/doc/{node,node-14.17.5}, and /usr/share/systemtap/tapset

#### Short Descriptions

node | is the server-side JavaScript runtime
npm | is the Node.js package manager
`/usr/lib/node_modules/npm/` | is the installation root for Node.js executables and libraries

Last updated on

## npth-1.6

### Introduction to NPth

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/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)

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

### Installation of NPth

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

### Contents

Installed Program: npth-config
Installed Library: libnpth.so
Installed Directory: None

#### Short Descriptions

npth-config | 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
`libnpth.so` | contains the API functions used by the New Portable Threads Library

Last updated on

## NSPR-4.32

### Introduction to NSPR

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-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/nspr/releases/v4.32/src/nspr-4.32.tar.gz

- Download MD5 sum: 493d0e2284f873681c089cd503b99bf0

- Download size: 1.0 MB

- Estimated disk space required: 11 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of NSPR

Install NSPR by running the following commands:

    cd nspr                                                     &&
    sed -ri '/^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 testsuite 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 User Notes for nss at https://wiki.linuxfromscratch.org/blfs/wiki/nss

Now, as the `root` user:

    make install

### Command Explanations

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.

`$([ $(uname -m) = x86_64 ] && echo --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.

### Contents

Installed Programs: nspr-config
Installed Libraries: libnspr4.so, libplc4.so and libplds4.so
Installed Directories: /usr/include/nspr

#### Short Descriptions

nspr-config | provides compiler and linker options to other packages that use NSPR
`libnspr4.so` | 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
`libplc4.so` | contains functions that implement many of the features offered by libnspr4
`libplds4.so` | contains functions that provide data structures

Last updated on

## PCRE-8.45

### Introduction to PCRE

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.pcre.org/pub/pcre/pcre-8.45.tar.bz2

- Download (FTP): ftp://ftp.pcre.org/pub/pcre/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)

#### PCRE Dependencies

##### Optional

Valgrind-3.17.0

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

### Installation of PCRE

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

### Command Explanations

`--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.68.4 with the `--with-pcre=system` switch.

`--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.

### Contents

Installed Programs: pcregrep, pcretest, and pcre-config
Installed Libraries: libpcre.so, libpcre16.so, libpcre32.so, libpcrecpp.so and libpcreposix.so
Installed Directory: /usr/share/doc/pcre-8.45

#### Short Descriptions

pcregrep | is a grep that understands Perl compatible regular expressions
pcretest | can test a Perl compatible regular expression
pcre-config | is used during the compile process of programs linking to the PCRE libraries

Last updated on

## PCRE2-10.37

### Introduction to PCRE2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.pcre.org/pub/pcre/pcre2-10.37.tar.bz2

- Download (FTP): ftp://ftp.pcre.org/pub/pcre/pcre2-10.37.tar.bz2

- Download MD5 sum: 85dc7f2233491b4b6ec6115220da99c6

- Download size: 1.7 MB

- Estimated disk space required: 18 MB (with tests)

- Estimated build time: 0.5 SBU (with tests)

#### PCRE2 Dependencies

##### Optional

Valgrind-3.17.0 and libedit

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

### Installation of PCRE2

Install PCRE2 by running the following commands:

    ./configure --prefix=/usr                       \
                --docdir=/usr/share/doc/pcre2-10.37 \
                --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

### Command Explanations

`--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.

### Contents

Installed Programs: pcre2-config, pcre2grep, and pcre2test.
Installed Libraries: libpcre2-8.so, libpcre2-16.so, libpcre2-32.so, and libpcre2-posix.so
Installed Directory: /usr/share/doc/pcre2-10.37

#### Short Descriptions

pcre2grep | is a version of grep that understands Perl compatible regular expressions.
pcre2test | can test a Perl compatible regular expression.
pcre2-config | outputs compilation information to programs linking against the PCRE2 libraries

Last updated on

## Popt-1.18

### Introduction to Popt

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-11.0 platform.

#### Package Information

- Download (HTTP): http://ftp.rpm.org/popt/releases/popt-1.x/popt-1.18.tar.gz

- Download (FTP): ftp://ftp.rpm.org/pub/rpm/popt/releases/popt-1.x/popt-1.18.tar.gz

- Download MD5 sum: 450f2f636e6a3aa527de803d0ae76c5a

- Download size: 567 kB

- Estimated disk space required: 8.7 MB (includes installing documentation)

- Estimated build time: 0.1 SBU

#### popt Dependencies

##### Optional

Doxygen-1.9.2 (for generating documentation)

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

### Installation of Popt

Install popt by running the following commands:

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

If you have Doxygen-1.9.2 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.18 &&
    install -v -m644 doxygen/html/* /usr/share/doc/popt-1.18

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libpopt.so
Installed Directories: /usr/share/doc/popt-1.18

#### Short Descriptions

`libpopt.so` | is used to parse command-line options

Last updated on

## Pth-2.0.7

### Introduction to Pth

The Pth 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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/pth/pth-2.0.7.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/pth/pth-2.0.7.tar.gz

- Download MD5 sum: 9cb4a25331a4c4db866a31cbe507c793

- Download size: 652 KB

- Estimated disk space required: 5 MB

- Estimated build time: 0.2 SBU

#### Pth Dependencies

GCC-11.2.0 (for gfortran)

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

### Installation of Pth

### Caution

Don't add the `--enable-pthread` parameter to the configure command below else you will overwrite the pthread library and interface header installed by the Glibc package in LFS.

Install Pth by running the following commands:

    sed -i 's#$(LOBJS): Makefile#$(LOBJS): pth_p.h Makefile#' Makefile.in &&
    ./configure --prefix=/usr           \
                --disable-static        \
                --mandir=/usr/share/man &&
    make

To test the results, issue: make test.

Now, as the `root` user:

    make install &&
    install -v -m755 -d /usr/share/doc/pth-2.0.7 &&
    install -v -m644    README PORTING SUPPORT TESTS \
                        /usr/share/doc/pth-2.0.7

### Command Explanations

sed -i 's#$(LOBJS) ...: This sed fixes a race condition in the `Makefile`. It allows running make with multiple jobs (e.g., make -j4).

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

`--mandir=/usr/share/man`: This switch puts the man pages in `/usr/share/man` instead of `/usr/man`.

### Contents

Installed Program: pth-config
Installed Library: libpth.so
Installed Directory: /usr/share/doc/pth-2.0.7

#### Short Descriptions

pth-config | is a utility used to configure and build applications based on the pth(3) 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 pth(3) library
`libpth.so` | contains the API functions used by the GNU Portable Threads Library

Last updated on

## Qca-2.3.3

### Introduction to Qca

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/qca/2.3.3/qca-2.3.3.tar.xz

- Download MD5 sum: 22d9aad50442168911d442792c047266

- Download size: 720 KB

- Estimated disk space required: 42 MB

- Estimated build time: 0.5 SBU (using parallelism=4; add 0.7 SBU for tests)

#### Qca Dependencies

##### Required

make-ca-1.7, CMake-3.21.2, Qt-5.15.2, and Which-2.21

##### Optional

Cyrus SASL-2.1.27, GnuPG-2.2.29, libgcrypt-1.9.4, libgpg-error-1.42, NSS-3.69, NSPR-4.32, p11-kit-0.24.0, Doxygen-1.9.2, Which-2.21, and Botan

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

### Installation of Qca

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

### Command Explanations

`-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.

### Contents

Installed Programs: mozcerts-qt5 and qcatool-qt5
Installed Libraries: libqca-qt5.so, libqca-cyrus-sasl.so, libqca-gcrypt.so, libqca-gnupg.so, libqca-logger.so, libqca-nss.so, libqca-ossl.so, and libqca-softstore.so
Installed Directories: $QT5DIR/include/Qca-qt5, $QT5DIR/lib/cmake/Qca-qt5, and $QT5DIR/lib/qca-qt5

#### Short Descriptions

mozcerts-qt5 | is a command line tool for converting certdata.txt into outfile.pem files
qcatool-qt5 | is a command line tool for performing various cryptographic operations with Qca
`libqca-qt5.so` | is the Qt Cryptography Architecture (Qca) library

Last updated on

## Talloc-2.3.3

### Introduction to Talloc

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.samba.org/ftp/talloc/talloc-2.3.3.tar.gz

- Download MD5 sum: b9a334039dd24bed8ea546c71cb3d196

- Download size: 636 KB

- Estimated disk space required: 9.9 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### Talloc Dependencies

##### Optional

docbook-xml-4.5, docbook-xsl-1.79.2 and libxslt-1.1.34 (To generate man pages), GDB-10.2, git-2.33.0, libnsl-1.3.0, libtirpc-1.3.2, Valgrind-3.17.0, and xfsprogs-5.13.0

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

### Installation of Talloc

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

### Contents

Installed Programs: None
Installed Libraries: libpytalloc-util.cpython-39-<arch>-linux-gnu.so, libtalloc.so, talloc.so (Python-2 Module) and talloc.cpython-39-<arch>-linux-gnu.so (Python-3 Module)
Installed Directories: None

#### Short Descriptions

`libtalloc.so` | contains a replacement for the Glibc malloc function

Last updated on

## telepathy-glib-0.24.2

### Introduction to Telepathy GLib

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-11.0 platform.

#### Package Information

- Download (HTTP): https://telepathy.freedesktop.org/releases/telepathy-glib/telepathy-glib-0.24.2.tar.gz

- Download MD5 sum: 7be2e1fc78f932a215f177994fe37d67

- Download size: 3.7 MB

- Estimated disk space required: 256 MB

- Estimated build time: 1.2 SBU

#### Telepathy GLib Dependencies

##### Required

dbus-glib-0.112, GTK-Doc-1.33.2 (required for autoreconf) and libxslt-1.1.34

##### Recommended

gobject-introspection-1.68.0, and Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/telepathy-glib

### Installation of Telepathy Glib

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

### Command Explanations

`--enable-vala-bindings`: This switch enables building of the Vala bindings. Remove if you don't have Vala-0.52.5 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.

### Contents

Installed Programs: None
Installed Libraries: libtelepathy-glib.so
Installed Directories: /usr/include/telepathy-1.0 and /usr/share/gtk-doc/html/telepathy-glib

#### Short Descriptions

`libtelepathy-glib.so` | contains the Telepathy GLib API functions

Last updated on

## Uchardet-0.0.7

### Introduction to Uchardet

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/uchardet/releases/uchardet-0.0.7.tar.xz

- Download MD5 sum: 623406dac5c5ad89e40eedd7f279efae

- Download size: 212 KB

- Estimated disk space required: 4.2 MB

- Estimated build time: less than 0.1 SBU

#### Uchardet Dependencies

##### Required

CMake-3.21.2

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

### Installation of Uchardet

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

### Command Explanations

`-DBUILD_STATIC=OFF`: This switch disables building the static version of the library.

### Contents

Installed Programs: uchardet
Installed Libraries: libuchardet.so
Installed Directories: /usr/include/uchardet

#### Short Descriptions

uchardet | detects what character set is used inside of a file
`libuchardet.so` | provides an API for detecting the encoding of text in a file

Last updated on

## Umockdev-0.16.2

### Introduction to Umockdev

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/martinpitt/umockdev/releases/download/0.16.2/umockdev-0.16.2.tar.xz

- Download MD5 sum: 2470fe134b1ae4c6dde5c93e88f51596

- Download size: 468 KB

- Estimated disk space required: 6.3 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Umockdev Dependencies

##### Required

libgudev-237, libpcap-1.10.1, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and libgphoto2 (optional for tests)

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

### Installation of Umockdev

Install Umockdev by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: PATH=$PATH:/usr/sbin ninja test. The addition to `PATH` is needed if you use the starting scripts in The Bash Shell Startup Files, because some tests need to run udevadm. One test needs to be run in an X session.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dgtk_doc=true`: Use this switch if you have GTK-Doc-1.33.2 installed and wish to rebuild and install the API documentation.

### Contents

Installed Programs: umockdev-record, umockdev-run, and umockdev-wrapper
Installed Libraries: libumockdev-preload.so.0 and libumockdev.so
Installed Directories: /usr/include/umockdev-1.0

#### Short Descriptions

umockdev-record | records Linux devices and their ancestors from sysfs/udev or records ioctls for a device
umockdev-run | runs a program under an umockdev testbed
umockdev-wrapper | wraps a program around `libumockdev-preload.so.0` through LD_PRELOAD
`libumockdev.so` | provides API functions that allow mocking hardware devices for unit testing

Last updated on

## Wayland-1.19.0

### Introduction to Wayland

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-11.0 platform.

#### Package Information

- Download (HTTP): https://wayland.freedesktop.org/releases/wayland-1.19.0.tar.xz

- Download MD5 sum: 5d59ac3d8a8f4e42de2ceb8bb19dfca9

- Download size: 448 KB

- Estimated disk space required: 15 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### Wayland Dependencies

##### Required

libxml2-2.9.12

##### Optional

Doxygen-1.9.2, Graphviz-2.48.0 and xmlto-0.0.28 (to build the API documentation) and docbook-xml-4.5, docbook-xsl-1.79.2 and libxslt-1.1.34 (to build the manual pages)

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

### Installation of Wayland

Install Wayland by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Ddocumentation=false &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

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

`--disable-documentation`: This switch is used to disable building of the API documentation. Remove it if you have installed optional dependencies.

### Contents

Installed Programs: wayland-scanner
Installed Libraries: libwayland-client.so, libwayland-cursor.so, libwayland-egl.so, and libwayland-server.so
Installed Directories: /usr/share/wayland

#### Short Descriptions

wayland-scanner | is a tool to generate proxy methods in wayland-client-protocol.h and wayland-server-protocol.h
`libwayland-client.so` | contains API functions for writing Wayland applications
`libwayland-cursor.so` | contains API functions for managing cursors in Wayland applications
`libwayland-egl.so` | contains API functions for handling OpenGL calls in Wayland applications
`libwayland-server.so` | contains API functions for writing Wayland compositors

Last updated on

## Wayland-Protocols-1.21

### Introduction to Wayland-Protocols

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-11.0 platform.

#### Package Information

- Download (HTTP): https://wayland.freedesktop.org/releases/wayland-protocols-1.21.tar.xz

- Download MD5 sum: 8196416baac07cd833bcb86b69da41a7

- Download size: 116 KB

- Estimated disk space required: 1.2 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### Wayland-protocols Dependencies

##### Required

Wayland-1.19.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/wayland-protocols

### Installation of Wayland-protocols

Install Wayland-protocols by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/wayland-protocols

Last updated on

## wpebackend-fdo-1.10.0

### Introduction to wpebackend-fdo

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-11.0 platform.

#### Package Information

- Download (HTTP): https://wpewebkit.org/releases/wpebackend-fdo-1.10.0.tar.xz

- Download MD5 sum: 306adbb0c66dc753e1794c83b7a2682b

- Download size: 40 KB

- Estimated disk space required: 6.7 MB

- Estimated build time: 0.1 SBU

#### wpebackend-fdo Dependencies

##### Required

libepoxy-1.5.9, libwpe-1.10.1, and wayland-protocols-1.21

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/wpebackend-fdo

### Installation of wpebackend-fdo

Install wpebackend-fdo by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release ..
    ninja

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libWPEBackend-fdo-1.0.so
Installed Directories: /usr/include/wpe-fdo-1.0

#### Short Descriptions

`libWPEBackend-fdo-1.0.so` | contains functions that provide the freedesktop.org backend for WPE WebKit and the WPE renderer

Last updated on

## wv-1.2.9

### Introduction to wv

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.abisource.com/downloads/wv/1.2.9/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

#### wv Dependencies

##### Required

libgsf-1.14.47 and libpng-1.6.37

##### Optional

libwmf

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

### Installation of wv

Install wv by running the following commands:

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

This package does not have a testsuite.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: wvSummary and several other wv* programs which are deprecated in favour of abiword: see http://wvware.sourceforge.net/
Installed Library: libwv-1.2.so
Installed Directory: /usr/share/wv

#### Short Descriptions

wvSummary | displays the summary information from an MS Word document
`libwv-1.2.so` | provides functions to access MS Word documents

Last updated on

## Xapian-1.4.18

### Introduction to xapian

Xapian is an open source search engine library.

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

#### Package Information

- Download (HTTP): https://oligarchy.co.uk/xapian/1.4.18/xapian-core-1.4.18.tar.xz

- Download MD5 sum: dd1b30f9b307b06fab319d3258fe65ee

- Download size: 2.8 MB

- Estimated disk space required: 232 MB (add 188 MB for tests)

- Estimated build time: 0.5 SBU (using parallelism=4; add 35 SBU for tests)

#### Xapian Dependencies

##### Optional

Valgrind-3.17.0 (for tests)

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

### Installation of Xapian

Install Xapian by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/xapian-core-1.4.18 &&
    make

To run the test suite, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: copydatabase, quest, simpleexpand, simpleindex, simplesearch, xapian-check, xapian-compact, xapian-config, xapian-delve, xapian-metadata, xapian-pos, xapian-progsrv, xapian-replicate, xapian-replicate-server and xapian-tcpsrv
Installed Libraries: libxapian.so
Installed Directories: /usr/include/xapian, /usr/lib/cmake/xapian, /usr/share/doc/xapian-core-1.4.18, and /usr/share/xapian-core

#### Short Descriptions

copydatabase | performs a document-by-document copy of one or more Xapian databases
quest | is a command line tool to search through a database
simpleexpand | is a simple example program demonstrating query expansion
simpleindex | indexes each paragraph of a text file as a Xapian document
simplesearch | is a simple command line search utility
xapian-check | checks the consistency of a database or table
xapian-compact | compacts a database, or merges and compacts several databases
xapian-config | reports information about the installed xapian
xapian-delve | inspects the contents of a Xapian database
xapian-metadata | reads and writes user metadata
xapian-pos | inspects the contents of a flint table for development or debugging
xapian-progsrv | is a remote server for use with ProgClient
xapian-replicate | replicates a database from a master server to a local copy
xapian-replicate-server | services database replication requests from clients
xapian-tcpsrv | is the TCP daemon for use with Xapian's remote backend

Last updated on

## Chapter 10. Graphics and Font Libraries

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-1.4rc5

### Introduction to AAlib

AAlib is a library to render any graphic into ASCII Art.

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

#### Package Information

- 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

#### AAlib Dependencies

##### Optional

X Window System, slang-2.3.2, and GPM-1.20.7

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

### Installation of AAlib

Fix a minor problem with the included m4 file:

    sed -i -e '/AM_PATH_AALIB,/s/AM_PATH_AALIB/[&]/' aalib.m4

Install AAlib by running the following commands:

    ./configure --prefix=/usr             \
                --infodir=/usr/share/info \
                --mandir=/usr/share/man   \
                --disable-static          &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: aafire, aainfo, aalib-config, aasavefont, and aatest
Installed Library: libaa.so
Installed Directories: None

#### Short Descriptions

aafire | is a demo of AAlib, rendering an animated fire in ASCII Art
aainfo | provides information for your current settings related to AAlib
aalib-config | provides configuration info for AAlib
aasavefont | saves a font to a file
aatest | shows the abilities of AAlib in a little test
`libaa.{so,a}` | 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

Last updated on

## babl-0.1.88

### Introduction to Babl

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gimp.org/pub/babl/0.1/babl-0.1.88.tar.xz

- Download MD5 sum: bda974863edb0fd31fb7715575906c65

- Download size: 296 KB

- Estimated disk space required: 9.4 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Babl Dependencies

##### Recommended

gobject-introspection-1.68.0 and librsvg-2.50.7

##### Optional

Little CMS-2.12 and w3m

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

### Installation of Babl

Install Babl by running the following commands:

    mkdir bld &&
    cd    bld &&

    meson --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

### Command Explanations

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.

### Contents

Installed Programs: None
Installed Libraries: libbabl-0.1.so and libraries in /usr/lib/babl-0.1
Installed Directories: /usr/{include,lib}/babl-0.1 and /usr/share/gtk-doc/html/babl

#### Short Descriptions

`libbabl-0.1.so` | contains functions to access BablFishes to convert between formats

Last updated on

## Exiv2-0.27.4

### Introduction to Exiv2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.exiv2.org/builds/exiv2-0.27.4-Source.tar.gz

- Download MD5 sum: 15c24498a7d6abd171ae525574f98efb

- Download size: 31 MB

- Estimated disk space required: 86 MB

- Estimated build time: 0.3 SBU (Using parallelism=4)

#### Exiv2 dependencies

##### Required

CMake-3.21.2

##### Recommended

cURL-7.78.0

##### Optional

libssh

##### Optional for documentation

Doxygen-1.9.2, Graphviz-2.48.0, and libxslt-1.1.34

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

### Installation of Exiv2

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-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.

### Contents

Installed Program: exiv2
Installed Library: libexiv2.so and libexiv2-xmp.a
Installed Directories: /usr/include/exiv2

#### Short Descriptions

exiv2 | is a utility used to dump Exif data

Last updated on

## FreeType-2.11.0

### Introduction to FreeType2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/freetype/freetype-2.11.0.tar.xz

- Download MD5 sum: f931582653774e310ed3a7e49b7167a3

- Download size: 2.2 MB

- Estimated disk space required: 30 MB (with additional documentation)

- Estimated build time: 0.2 SBU (with additional documentation)

#### Additional Downloads

Additional Documentation

- Download (HTTP): https://downloads.sourceforge.net/freetype/freetype-doc-2.11.0.tar.xz

- Download MD5 sum: c61af913d48e89566c99cddfb8e4c158

- Download size: 2.0 MB

#### FreeType2 Dependencies

##### Recommended

HarfBuzz-2.9.0 (first, install without it, after it is installed, reinstall FreeType-2.11.0), libpng-1.6.37, and Which-2.21

##### Optional

Brotli-1.0.9

##### Optional (for documentation)

docwriter

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

### Installation of FreeType2

If you downloaded the additional documentation, unpack it into the source tree using the following command:

    tar -xf ../freetype-doc-2.11.0.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:

    install -v -m755 -d /usr/share/doc/freetype-2.11.0 &&
    cp -v -R docs/*     /usr/share/doc/freetype-2.11.0 &&
    rm -v /usr/share/doc/freetype-2.11.0/freetype-config.1

### Command Explanations

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 http://www.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.

### Contents

Installed Program: freetype-config
Installed Library: libfreetype.so
Installed Directories: /usr/include/freetype2 and /usr/share/doc/freetype-2.11.0

#### Short Descriptions

freetype-config | is used to get FreeType compilation and linking information
`libfreetype.so` | contains functions for rendering various font types, such as TrueType and Type1

Last updated on

## Fontconfig-2.13.1

### Introduction to Fontconfig

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.13.1.tar.bz2

- Download MD5 sum: 36cdea1058ef13cbbfdabe6cb019dc1c

- Download size: 1.6 MB

- Estimated disk space required: 16 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### Fontconfig Dependencies

##### Required

FreeType-2.11.0

##### Optional

JSON-C-0.15, DocBook-utils-0.6.14 and libxml2-2.9.12, texlive-20210325 (or install-tl-unx)

### Note

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-20210325 installed also, or the Fontconfig build will fail.

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

### Installation of Fontconfig

Install Fontconfig by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --disable-docs       \
                --docdir=/usr/share/doc/fontconfig-2.13.1 &&
    make

To test the results, issue: make check.

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.13.1/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.13.1/fontconfig-devel &&
    install -v -m644 doc/*.{pdf,sgml,txt,html} \
                                      /usr/share/doc/fontconfig-2.13.1

### Command Explanations

`--disable-docs`: This switch avoids building the documentation (the release tarball includes pre-generated documentation).

### Configuring Fontconfig

#### Config Files

`/etc/fonts/*, /etc/fonts/conf.d/* and /usr/share/fontconfig/conf.avail/*`

#### Configuration Information

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.13.1/fontconfig-user.html.

### Contents

Installed Programs: fc-cache, fc-cat, fc-conflist, fc-list, fc-match, fc-pattern, fc-query, fc-scan, and fc-validate
Installed Library: libfontconfig.so
Installed Directories: /etc/fonts, /usr/include/fontconfig, /usr/share/doc/fontconfig-2.13.1, /usr/share/fontconfig, /usr/share/xml/fontconfig, and /var/cache/fontconfig

#### Short Descriptions

fc-cache | is used to create font information caches
fc-cat | is used to read font information caches
fc-conflist | shows the ruleset files' information on the system
fc-list | is used to create font lists
fc-match | is used to match available fonts, or find fonts that match a given pattern
fc-pattern | is used to parse pattern (empty pattern by default) and show the parsed result
fc-query | is used to query fonts files and print resulting patterns
fc-scan | is used to scan font files and directories, and print resulting patterns
fc-validate | is used to validate font files
`libfontconfig.so` | contains functions used by the Fontconfig programs and also by other programs to configure or customize font access

Last updated on

## FriBidi-1.0.9

### Introduction to FriBidi

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/fribidi/fribidi/releases/download/v1.0.9/fribidi-1.0.9.tar.xz

- Download MD5 sum: 1b767c259c3cd8e0c8496970f63c22dc

- Download size: 1.1 MB

- Estimated disk space required: 21 MB

- Estimated build time: less than 0.1 SBU

#### FriBidi Dependencies

##### Optional

c2man (to build man pages)

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

### Installation of FriBidi

Install FriBidi by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Program: fribidi
Installed Library: libfribidi.so
Installed Directory: /usr/include/fribidi

#### Short Descriptions

fribidi | is a command-line interface to the `libfribidi` library and can be used to convert a logical string to visual output
`libfribidi.so` | contains functions used to implement the Unicode Bidirectional Algorithm

Last updated on

## gegl-0.4.30

### Introduction to gegl

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gimp.org/pub/gegl/0.4/gegl-0.4.30.tar.xz

- Download MD5 sum: 6ae601b8c7cab8af5a36406df0b95ebf

- Download size: 5.2 MB

- Estimated disk space required: 60 MB (with tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with tests)

#### gegl Dependencies

##### Required

babl-0.1.88, JSON-GLib-1.6.6, libjpeg-turbo-2.1.1, and libpng-1.6.37

##### Recommended

gobject-introspection-1.68.0, Graphviz-2.48.0, Pygments-2.10.0, and PyGObject-3.40.1

##### Optional

asciidoc-9.1.0, Cairo-1.17.4, Exiv2-0.27.4, FFmpeg-4.4, gdk-pixbuf-2.42.6, gexiv2-0.12.3, GTK-Doc-1.33.2, JasPer-2.0.33, Little CMS-2.12, librsvg-2.50.7, libtiff-4.3.0, libwebp-1.2.1, Pango-1.48.9, Ruby-3.0.2, SDL2-2.0.16, v4l-utils-1.20.0, Vala-0.52.5, libspiro-20200505, lensfun, libopenraw, libumfpack, LuaJIT, MRG, and OpenEXR

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

### Installation of gegl

Install gegl by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Ddocs=true`: Build and install documentation (requires GTK-Doc-1.33.2,).

### Contents

Installed Programs: gegl and gegl-imgcmp
Installed Libraries: libgegl-0.4.so, libgegl-npd-0.4.so, libgegl-sc-0.4.so, and modules in /usr/lib/gegl-0.4
Installed Directories: /usr/lib/gegl-0.4 and /usr/include/gegl-0.4

#### Short Descriptions

gegl | is a commandline tool for working with the XML data model
gegl-imgcmp | is a simple image difference detection tool for use in regression testing
`libgegl-0.4.so` | provides infrastructure to do demand based cached non destructive image editing on larger than RAM buffers
`libgegl-npd-0.4.so` | is the GEGL N-point image deformation library
`libgegl-sc-0.4.so` | is the GEGL Seamless Cloning library

Last updated on

## giflib-5.2.1

### Introduction to giflib

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-11.0 platform.

#### Package Information

- Download (HTTP): https://sourceforge.net/projects/giflib/files/giflib-5.2.1.tar.gz

- Download (HTTP) MD5 sum: 6f03aee4ebe54ac2cc1ab3e4b0a049e5

- Download (HTTP) size: 436 KB

- Estimated disk space required: 3.2 MB (with documentation)

- Estimated build time: less than 0.1 SBU (with documentation)

#### giflib Dependencies

##### Required

xmlto-0.0.28

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

### Installation of giflib

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

### Command Explanations

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.

### Contents

Installed Programs: gif2rgb, gifbuild, gifclrmp, giffix, giftext, and giftool
Installed Library: libgif.so
Installed Directory: /usr/share/doc/giflib-5.2.1

#### Short Descriptions

gif2rgb | converts images saved as GIF to 24-bit RGB images
gifbuild | dumps GIF data in a textual format, or undumps it to a GIF
gifclrmp | modifies GIF image colormaps
giffix | clumsily attempts to fix truncated GIF images
giftext | prints (text only) general information about a GIF file
giftool | is a GIF transformation tool
`libgif.so` | contains API functions required by the giflib programs and any other programs needing library functionality to read, write and manipulate GIF images

Last updated on

## GLM-0.9.9.8

### Introduction to GLM

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/g-truc/glm/archive/0.9.9.8/glm-0.9.9.8.tar.gz

- Download MD5 sum: 0e83d4a33c7d4044a2c35c8d6aba4671

- Download size: 4.2 MB

- Estimated disk space required: 23 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of GLM

### Note

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-0.9.9.8

### Contents

Installed Program: None
Installed Library: None
Installed Directory: /usr/include/glm

Last updated on

## Graphite2-1.3.14

### Introduction to Graphite2

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-11.0 platform.

#### Package Information

- 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: 28 MB (with tests add docs)

- Estimated build time: 0.2 SBU (with tests and docs)

#### Graphite2 Dependencies

##### Required

CMake-3.21.2

##### Optional

FreeType-2.11.0, silgraphite to build the comparerender test and benchmarking tool, and if that is present, and HarfBuzz-2.9.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-9.1.0, Doxygen-1.9.2, texlive-20210325 (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.

##### Optional (at runtime)

You will need at least one suitable graphite font for the package to be useful.

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

### Installation of Graphite2

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.

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

### Command Explanations

`-DCMAKE_VERBOSE_MAKEFILE=ON`: This switch turns on build verbose mode.

### Contents

Installed Programs: gr2fonttest, and optionally comparerender
Installed Libraries: libgraphite2.so
Installed Directories: /usr/{include,share}/graphite2 and optionally /usr/share/doc/graphite2-1.3.14

#### Short Descriptions

comparerender | is a test and benchmarking tool
gr2fonttest | is a diagnostic console tool for graphite fonts
`libgraphite2.so` | is a rendering engine for graphite fonts

Last updated on

## HarfBuzz-2.9.0

### Introduction to Harfbuzz

The HarfBuzz package contains an OpenType text shaping engine.

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

#### Package Information

- Download (HTTP): https://github.com/harfbuzz/harfbuzz/releases/download/2.9.0/harfbuzz-2.9.0.tar.xz

- Download MD5 sum: b1977caae59978c2fea28a4b66a60da0

- Download size: 11 MB

- Estimated disk space required: 86 MB (add 6 MB for tests)

- Estimated build time: 0.4 SBU (Using parallelism=4; add 0.4 SBU for tests)

#### HarfBuzz Dependencies

##### Recommended

gobject-introspection-1.68.0 (required if building GNOME), GLib-2.68.4 (required for Pango), Graphite2-1.3.14 (required for building texlive-20210325 or LibreOffice-7.2.0.4 with system harfbuzz), ICU-69.1, and FreeType-2.11.0 (after HarfBuzz-2.9.0 is installed, reinstall FreeType-2.11.0)

##### Optional

Cairo-1.17.4 (circular: build cairo and all its recommended dependencies, including harfbuzz, first, then rebuild harfbuzz if the cairo backend is needed), git-2.33.0, GTK-Doc-1.33.2, FontTools (Python 3 module, for the testsuite), and ragel

### Warning

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.

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

### Installation of HarfBuzz

Install HarfBuzz by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr        \
          --buildtype=release  \
          -Dgraphite=enabled   \
          -Dbenchmark=disabled &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgraphite=enabled`: This switch enables Graphite2 support, which is required for building texlive-20210325 or LibreOffice-7.2.0.4 with system harfbuzz.

`-Dbenchmark=disabled`: This switch disables downloading and building the google-benchmark subproject, which requires git-2.33.0, and is of no use for non developpers.

`-Ddocs=false`: If GTK-Doc-1.33.2 is installed, the documentation is built and installed. This switch prevents that.

### Contents

Installed Programs: hb-ot-shape-closure, hb-shape, hb-subset, and hb-view (only if cairo is installed)
Installed Libraries: libharfbuzz.so, libharfbuzz-gobject.so, libharfbuzz-icu.so, and libharfbuzz-subset.so
Installed Directories: /usr/{include,lib/cmake,share/gtk-doc/html}/harfbuzz

#### Short Descriptions

hb-ot-shape-closure | 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."
hb-shape | is used for the conversion of text strings into positioned glyphs
hb-subset | is used to create subsets of fonts, and display text using them
hb-view | 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."
`libharfbuzz.so` | is the HarfBuzz text shaping library
`libharfbuzz-gobject.so` | provides GObject integration for the HarfBuzz text shaping library
`libharfbuzz-icu.so` | provides ICU integration for the HarfBuzz text shaping library

Last updated on

## JasPer-2.0.33

### Introduction to JasPer

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/jasper-software/jasper/archive/version-2.0.33/jasper-2.0.33.tar.gz

- Download MD5 sum: e98c3e1b3cb07bfa3d5ea94abd163bc1

- Download size: 1.9 MB

- Estimated disk space required: 7.9 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### JasPer Dependencies

##### Required

CMake-3.21.2

##### Recommended

libjpeg-turbo-2.1.1

##### Optional

Freeglut-3.2.1 (required for jiv), Doxygen-1.9.2 (needed for generating html documentation), and texlive-20210325 (needed to regnerate the pdf documentation)

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

### Installation of JasPer

### Note

The tarball jasper-2.0.33.tar.gz will extract to jasper-version-2.0.33.

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            \
          -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-2.0.33 \
          ..  &&
    make

To test the results, issue: make test.

Now, as the `root` user:

    make install

### Command Explanations

`-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-20210325 is installed.

### Contents

Installed Programs: imgcmp, imginfo, jasper, and jiv
Installed Library: libjasper.so
Installed Directories: /usr/include/jasper and /usr/share/doc/jasper-2.0.33

#### Short Descriptions

imgcmp | compares two images of the same geometry
imginfo | displays information about an image
jasper | converts images between formats (BMP, JPS, JPC, JPG, PGX, PNM, MIF, and RAS)
jiv | displays images
`libjasper.so` | is a library used by programs for reading and writing JPEG2000 format files

Last updated on

## Little CMS-1.19

### Introduction to Little CMS

The Little CMS library is used by other programs to provide color management facilities.

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

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lcms/lcms-1.19.tar.gz

- Download MD5 sum: 8af94611baf20d9646c7c2c285859818

- Download size: 927 KB

- Estimated disk space required: 27 MB

- Estimated build time: 0.5 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/lcms-1.19-cve_2013_4276-1.patch

#### Little CMS Dependencies

##### Optional

libtiff-4.3.0, libjpeg-turbo-2.1.1, and Python-2.7.18 (with SWIG-4.0.2 also)

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

### Installation of Little CMS

Install Little CMS by running the following commands:

    patch -Np1 -i ../lcms-1.19-cve_2013_4276-1.patch &&

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

To test the results, issue: make check.

Now, as the `root` user:

    make install &&
    install -v -m755 -d /usr/share/doc/lcms-1.19 &&
    install -v -m644    README.1ST doc/* \
                        /usr/share/doc/lcms-1.19

### Command Explanations

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

`--with-python`: Use this parameter if Python and SWIG are installed.

### Contents

Installed Programs: icc2ps, icclink, icctrans, wtpt and optionally, jpegicc, tiffdiff and tifficc
Installed Libraries: liblcms.so and the optional _lcms.so Python module
Installed Directory: /usr/share/doc/lcms-1.19

#### Short Descriptions

icc2ps | generates PostScript CRD or CSA from ICC profiles
icclink | links two or more profiles into a single device link profile
icctrans | is a color space conversion calculator
jpegicc | is an ICC profile applier for JPEG files
tifficc | is an ICC profile applier for TIFF files
tiffdiff | is a TIFF compare utility
wtpt | shows media white of profiles, identifying black body locus
`liblcms.so` | is used by the lcms programs as well as other programs to provide color management facilities

Last updated on

## Little CMS-2.12

### Introduction to Little CMS2

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lcms/lcms2-2.12.tar.gz

- Download MD5 sum: 8cb583c8447461896320b43ea9a688e0

- Download size: 7.1 MB

- Estimated disk space required: 22 MB (with the tests)

- Estimated build time: 0.2 SBU (with the tests)

#### Little CMS2 Dependencies

##### Optional

libjpeg-turbo-2.1.1 and libtiff-4.3.0

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

### Installation of Little CMS2

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

### Command Explanations

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

### Contents

Installed Programs: jpgicc, linkicc, psicc, tificc, and transicc
Installed Library: liblcms2.so
Installed Directories: None

#### Short Descriptions

jpgicc | is the Little CMS ICC profile applier for JPEG
linkicc | is the Little CMS ICC device link generator
psicc | is the Little CMS ICC PostScript generator
tificc | is the Little CMS ICC tiff generator
transicc | is the Little CMS ColorSpace conversion calculator
`liblcms2.so` | contains functions that implement the lcms2 API

Last updated on

## libexif-0.6.22

### Introduction to libexif

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libexif/libexif/releases/download/libexif-0_6_22-release/libexif-0.6.22.tar.xz

- Download MD5 sum: 1070601438443fdd5b8635565693cf99

- Download size: 1.3 MB

- Estimated disk space required: 21 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libexif-0.6.22-security_fixes-1.patch

#### libexif Dependencies

##### Optional (to Build Documentation)

Doxygen-1.9.2 and Graphviz-2.48.0

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

### Installation of libexif

First, apply a patch to fix a security issue (integer overflow leading to Out Of Buffer write):

    patch -Np1 -i ../libexif-0.6.22-security_fixes-1.patch

Install libexif by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --with-doc-dir=/usr/share/doc/libexif-0.6.22 &&
    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.22.

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libexif.so
Installed Directories: /usr/include/libexif and /usr/share/doc/libexif-0.6.22

#### Short Descriptions

`libexif.so` | contains functions used for parsing, editing, and saving EXIF data

Last updated on

## Libgxps-0.3.2

### Introduction to libgxps

The libgxps package provides an interface to manipulate XPS documents.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgxps/0.3/libgxps-0.3.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

#### Libgxps Dependencies

##### Required

GTK+-3.24.30, Little CMS-2.12, libarchive-3.5.2, libjpeg-turbo-2.1.1, libtiff-4.3.0, and libxslt-1.1.34

##### Optional

git-2.33.0 and GTK-Doc-1.33.2

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

### Installation of Libgxps

Install Libgxps by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: xpstojpeg, xpstopdf, xpstopng, xpstops, and xpstosvg
Installed Library: libgxps.so
Installed Directories: /usr/include/libgxps

#### Short Descriptions

xpstojpeg | converts XPS documents to a JPEG image
xpstopdf | converts XPS documents to PDF format
xpstopng | converts XPS documents to a PNG image
xpstops | converts XPS documents to PostScript
xpstosvg | converts XPS documents to SVG images
`libgxps.so` | contains API functions for manipulating XPS documents

Last updated on

## libjpeg-turbo-2.1.1

### Introduction to libjpeg-turbo

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-2.1.1.tar.gz

- Download MD5 sum: cf16866976ab31cd6fc478eac8c2c54e

- Download size: 2.2 MB

- Estimated disk space required: 33 MB (with tests)

- Estimated build time: 0.3 SBU (using parallelism=4; with tests)

#### libjpeg-turbo Dependencies

##### Required

CMake-3.21.2 and NASM-2.15.05 or yasm-1.3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libjpeg-turbo

### Installation of libjpeg-turbo

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_DOCDIR=/usr/share/doc/libjpeg-turbo-2.1.1 \
          -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib  \
          .. &&
    make

To test the results, issue: make test.

### Note

If installing libjpeg-turbo over an older jpeg installation, not all library symbolic links are updated properly. To fix this before installation, run the following as the `root` user:

    rm -f /usr/lib/libjpeg.so*

Now, as the `root` user:

    make install

### Command Explanations

`-DWITH_JPEG8=ON`: This switch enables compatibility with libjpeg version 8.

### Contents

Installed Programs: cjpeg, djpeg, jpegtran, rdjpgcom, tjbench, and wrjpgcom
Installed Libraries: libjpeg.so and libturbojpeg.so
Installed Directories: /usr/share/doc/libjpeg-turbo-2.1.1

#### Short Descriptions

cjpeg | 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
djpeg | decompresses image files from JPEG/JFIF format to either PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, or Targa format
jpegtran | is used for lossless transformation of JPEG files
rdjpgcom | displays text comments from within a JPEG file
tjbench | is used to benchmark the performance of libjpeg-turbo
wrjpgcom | inserts text comments into a JPEG file
`libjpeg.so` | contains functions used for reading and writing JPEG images

Last updated on

## libmng-2.0.3

### Introduction to libmng

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-11.0 platform.

#### Package Information

- 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

#### libmng Dependencies

##### Required

libjpeg-turbo-2.1.1 and Little CMS-2.12

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

### Installation of libmng

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

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libmng.so
Installed Directory: /usr/share/doc/libmng-2.0.3

#### Short Descriptions

`libmng.so` | provides functions for programs wishing to read and write MNG files which are animation files without the patent problems associated with certain other formats

Last updated on

## libmypaint-1.6.1

### Introduction to libmypaint

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-11.0 platform.

#### Package Information

- 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)

#### libmypaint Dependencies

##### Required

JSON-C-0.15

##### Recommended

GLib-2.68.4 and gobject-introspection-1.68.0

##### Optional

Doxygen-1.9.2 (to create XML docs), gegl (0.3 versions only) and gperftools

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

### Installation of libmypaint

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

### Contents

Installed Programs: None.
Installed Libraries: libmypaint.so (and optionally libmypaint-gegl.so which is not used by any packages in this book).
Installed Directory: /usr/include/libmypaint

#### Short Descriptions

`libmypaint.so` | contains functions for making brushstrokes

Last updated on

## libpng-1.6.37

### Introduction to libpng

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libpng/libpng-1.6.37.tar.xz

- Download MD5 sum: 015e8e15db1eecde5f2eb9eb5b6e59e9

- Download size: 992 KB

- Estimated disk space required: 14 MB (with tests)

- Estimated build time: less than 0.1 SBU (using parallelism=4; add 0.7 SBU for tests)

#### Additional Downloads

- 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.37-apng.patch.gz

- Patch md5sum: f02073fd96816b184c79b297775e37dc

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

### Installation of libpng

If you want to patch libpng to support apng files, apply it here:

    gzip -cd ../libpng-1.6.37-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.37 &&
    cp -v README libpng-manual.txt /usr/share/doc/libpng-1.6.37

### Command Explanations

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

### Contents

Installed Programs: libpng-config (symlink), libpng16-config, pngfix and png-fix-itxt
Installed Libraries: libpng.so
Installed Directories: /usr/include/libpng16 and /usr/share/doc/libpng-1.6.37

#### Short Descriptions

pngfix | tests, optimizes and optionally fixes the zlib header in PNG files. Optionally, when fixing, strips ancillary chunks from the file
png-fix-itxt | fixes PNG files that have an incorrect length field in the iTXt chunks
libpng-config | is a shell script that provides configuration information for applications wanting to use libpng
`libpng.so` | contain routines used to create and manipulate PNG format graphics files

Last updated on

## libraw-0.20.2

### Introduction to libraw

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.libraw.org/data/LibRaw-0.20.2.tar.gz

- Download MD5 sum: 2e5bedb59ea433e2d2ef6bbbe5253179

- Download size: 1.4 MB

- Estimated disk space required: 29 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### libraw Dependencies

##### Recommended

libjpeg-turbo-2.1.1, JasPer-2.0.33, and Little CMS-2.12

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

### Installation of libraw

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.20.2 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-jpeg`: This switch enables support for jpeg. Remove if you don't have libjpeg-turbo-2.1.1 installed.

`--enable-jasper`: This switch enables support for jasper. Remove if you don't have JasPer-2.0.33 installed.

`--enable-lcms`: This switch enables support for Little CMS2. Remove if you don't have Little CMS-2.12 installed.

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

### Contents

### Note

All the installed programs are examples of using libraw.

Installed Programs: 4channels, dcraw_emu, dcraw_half, half_mt, mem_image, multirender_test, postprocessing_benchmark, raw-identify, simple_dcraw, and unprocessed_raw
Installed Library: libraw.so and libraw_r.so
Installed Directories: /usr/include/libraw and /usr/share/doc/libraw-0.20.2

#### Short Descriptions

4channels | generates four TIFF files from RAW data, one file per channel
dcraw_half | emulates "dcraw -h" (see DCRAW manpage)
mem_image | emulates "dcraw [-4] [-6] [-e]" (see DCRAW manpage)
postprocessing_benchmark | creates eight different renderings from one source file. The first and fourth one should be identical
simple_dcraw | emulates call to "dcraw [-D] [-T] [-v] [-e] [-4]" (see DCRAW manpage)
dcraw_emu | is an almost complete dcraw emulator (see DCRAW manpage)
half_mt | emulates call to "dcraw -h [-w] [-a] [-v]" (see DCRAW manpage)
multirender_test | creates eight different renderings from one source file. The first and fourth one should be identical
raw-identify | emulates call to "dcraw -i [-v]" (see DCRAW manpage)
unprocessed_raw | generates unprocessed raw image: with masked pixels and without black subtraction

Last updated on

## librsvg-2.50.7

### Introduction to librsvg

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/librsvg/2.50/librsvg-2.50.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/librsvg/2.50/librsvg-2.50.7.tar.xz

- Download MD5 sum: e6ac4051ef7653cd8b1e27a4da051600

- Download size: 21 MB

- Estimated disk space required: 1.2 GB (96 MB installed), add 1.0 GB for tests

- Estimated build time: 1.0 SBU (Using parallelism=4), add 0.7 SBU for tests

#### librsvg Dependencies

##### Required

gdk-pixbuf-2.42.6, Cairo-1.17.4, Pango-1.48.9, and rustc-1.52.0

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2

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

### Installation of librsvg

Install librsvg by running the following commands:

    ./configure --prefix=/usr    \
                --enable-vala    \
                --disable-static \
                --docdir=/usr/share/doc/librsvg-2.50.7 &&
    make

Many of the tests in 'reftests' may fail (over half in May 2021) because they produce, and then diff, graphic files with text and the details such as spacing vary when the system versions of cairo, freetype, pixman, pango and perhaps harfbuzz differ from the versions on the system where the reference files were created. For this reason, running the tests is not recommended. To test the results anyway, issue: make check.

Now, as the `root` user:

    make install

### Note

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

### Command Explanations

`--enable-vala`: This switch enables building of the Vala bindings. Remove this switch if you don't have Vala-0.52.5 installed.

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

`--disable-introspection`: Use this switch if you have not installed Gobject Introspection.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: rsvg-convert
Installed Library: librsvg-2.so and libpixbufloader-svg.so
Installed Directories: /usr/include/librsvg-2.0, /usr/share/doc/librsvg-2.50.7, and /usr/share/gtk-doc/html/rsvg-2.0

#### Short Descriptions

rsvg-convert | is used to convert images into PNG, PDF, PS, SVG and other formats
`librsvg-2.so` | provides the functions to render Scalable Vector Graphics
`libpixbufloader-svg.so` | is the Gdk Pixbuf plugin that allows GTK+ applications to render Scalable Vector Graphics images

Last updated on

## Libspiro-20200505

### Introduction to libspiro

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/fontforge/libspiro/releases/download/20200505/libspiro-dist-20200505.tar.gz

- Download MD5 sum: d2d3eef9381c05a9a0268c0863ec9f9d

- Download size: 413 KB

- Estimated disk space required: 5.3 MB (add 1.2 MB if running the tests)

- Estimated build time: 0.1 SBU

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

### Installation of libspiro

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

### Command Explanations

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

### Contents

Installed Programs: None
Installed Library: libspiro.so
Installed Directories: None

#### Short Descriptions

`libspiro.so` | is a shareable library that can be used by programs to do the Spiro computations for you

Last updated on

## libtiff-4.3.0

### Introduction to libtiff

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.osgeo.org/libtiff/tiff-4.3.0.tar.gz

- Download MD5 sum: 0a2e4744d1426a8fc8211c0cdbc3a1b3

- Download size: 2.7 MB

- Estimated disk space required: 16 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### libtiff Dependencies

##### Recommended

CMake-3.21.2

##### Optional

Freeglut-3.2.1 (required for tiffgt), libjpeg-turbo-2.1.1, libwebp-1.2.1, and JBIG-KIT

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

### Installation of libtiff

Install libtiff by running the following commands:

    mkdir -p libtiff-build &&
    cd       libtiff-build &&

    cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.3.0 \
          -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install
    sed -i /Version/s/\$/$(cat ../VERSION)/ /usr/lib/pkgconfig/libtiff-4.pc

### Command Explanations

sed -i /Version/...: When building with cmake/ninja, the Version field in the pkgconfig file is empty. This command fixes that field.

### Contents

Installed Programs: fax2ps, fax2tiff, pal2rgb, ppm2tiff, raw2tiff, tiff2bw, tiff2pdf, tiff2ps, tiff2rgba, tiffcmp, tiffcp, tiffcrop, tiffdither, tiffdump, tiffgt, tiffinfo, tiffmedian, tiffset and tiffsplit
Installed Libraries: libtiff.so and libtiffxx.so
Installed Directory: /usr/share/doc/tiff-4.3.0

#### Short Descriptions

fax2ps | converts a TIFF facsimile to compressed PostScript file
fax2tiff | creates a TIFF Class F fax file from raw fax data
pal2rgb | converts a palette color TIFF image to a full color image
ppm2tiff | creates a TIFF file from a PPM image file
raw2tiff | converts a raw byte sequence into TIFF
tiff2bw | converts a color TIFF image to grayscale
tiff2pdf | converts a TIFF image to a PDF document
tiff2ps | converts a TIFF image to a PostScript file
tiff2rgba | converts a wide variety of TIFF images into an RGBA TIFF image
tiffcmp | compares two TIFF files
tiffcp | copies (and possibly converts) a TIFF file
tiffcrop | selects, copies, crops, converts, extracts and/or processes one or more TIFF files
tiffdither | converts a grayscale image to bilevel using dithering
tiffdump | prints verbatim information about TIFF files
tiffgt | displays an image stored in a TIFF file
tiffinfo | prints information about TIFF files
tiffmedian | applies the median cut algorithm to data in a TIFF file
tiffset | sets the value of a TIFF header to a specified value
tiffsplit | splits a multi-image TIFF into single-image TIFF files
`libtiff.so` | contains the API functions used by the libtiff programs as well as other programs to read and write TIFF files
`libtiffxx.so` | contains the C++ API functions used by programs to read and write TIFF files

Last updated on

## libwebp-1.2.1

### Introduction to libwebp

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-11.0 platform.

#### Package Information

- Download (HTTP): http://downloads.webmproject.org/releases/webp/libwebp-1.2.1.tar.gz

- Download MD5 sum: f30c738034faa13d6255604ed46b6158

- Download size: 3.9 MB

- Estimated disk space required: 41 MB

- Estimated build time: 0.3 SBU

#### libwebp Dependencies

##### Recommended

libjpeg-turbo-2.1.1, libpng-1.6.37, libtiff-4.3.0, and SDL-1.2.15 (for improved 3D Acceleration)

##### Optional

Freeglut-3.2.1 and giflib-5.2.1

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

### Installation of libwebp

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

### Command Explanations

`--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.

### Contents

Installed Programs: cwebp, dwebp, gif2webp, img2webp, vwebp, webpinfo, and webpmux
Installed Library: libwebpdecoder.so, libwebpdemux.so, libwebpmux.so, and libwebp.so
Installed Directory: /usr/include/webp

#### Short Descriptions

cwebp | compresses an image using the WebP format
dwebp | decompresses WebP files into PNG, PAM, PPM or PGM images
gif2webp | converts a GIF image to a WebP image
img2webp | creates an animated WebP file from a sequence of input images
vwebp | decompresses a WebP file and displays it in a window
webpinfo | prints out the cunk level structure of WebP files along with performing basic integrity checks
webpmux | creates animated WebP files from non-animated WebP images, extracts frames from animated WebP images, and manages XMP/EXIF metadata and ICC profile
`libwebp.so` | contains the API functions for WebP encoding and decoding

Last updated on

## mypaint-brushes-1.3.0

### Introduction to mypaint-brushes

The mypaint-brushes package contains brushes used by packages which use libmypaint.

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

#### Package Information

- Download (HTTP): https://github.com/Jehan/mypaint-brushes/archive/v1.3.0/mypaint-brushes-v1.3.0.tar.gz

- Download MD5 sum: 679190d88f67a94db57ac99017f966f5

- Download size: 2.4 MB

- Estimated disk space required: 8.8 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/mypaint-brushes-1.3.0-automake_1.16-1.patch

#### mypaint-brushes Dependencies

##### Required at runtime

libmypaint-1.6.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mypaint-brushes

### Installation of mypaint-brushes

Install mypaint-brushes by running the following commands:

    patch -Np1 -i ../mypaint-brushes-1.3.0-automake_1.16-1.patch &&
    ./autogen.sh                                                 &&
    ./configure --prefix=/usr                                    &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None.
Installed Libraries: None.
Installed Directories: /usr/share/mypaint-data.

Last updated on

## newt-0.52.21

### Introduction to newt

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-11.0 platform.

#### Package Information

- Download (HTTP): https://releases.pagure.org/newt/newt-0.52.21.tar.gz

- Download MD5 sum: a0a5fd6b53bb167a65e15996b249ebb5

- Download size: 172 KB

- Estimated disk space required: 6.4 MB

- Estimated build time: less than 0.1 SBU

#### Newt Dependencies

##### Required

popt-1.18 and slang-2.3.2

##### Recommended

GPM-1.20.7 (runtime)

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

### Installation of newt

Install newt by running the following command:

    sed -e 's/^LIBNEWT =/#&/'                   \
        -e '/install -m 644 $(LIBNEWT)/ s/^/#/' \
        -e 's/$(LIBNEWT)/$(LIBNEWTSONAME)/g'    \
        -i Makefile.in                          &&

    ./configure --prefix=/usr           \
                --with-gpm-support      \
                --with-python=python3.9 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

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.9`: By giving explicitly the name of the directory where python modules reside, this switch prevents building the python2 module.

### Contents

Installed Programs: whiptail
Installed Library: libnewt.so, whiptcl.so, and /usr/lib/python3.9/site-packages/_snack.so
Installed Directories: None

#### Short Descriptions

whiptail | displays dialog boxes from shell scripts
`libnewt.so` | is the library for color text mode, widget based user interfaces

Last updated on

## opencv-4.5.3

### Introduction to opencv

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/opencv/opencv/archive/4.5.3/opencv-4.5.3.tar.gz

- Download MD5 sum: 1fe94553bcc8c8723b47c1a72f9f768f

- Download size: 85 MB

- Estimated disk space required: 769 MB

- Estimated build time: 4.3 SBU (using parallelism=4)

#### Additional Downloads

- Optional additional modules: https://github.com/opencv/opencv_contrib/archive/4.5.3/opencv_contrib-4.5.3.tar.gz

### Note

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.

#### opencv Dependencies

##### Required

CMake-3.21.2 and UnZip-6.0

##### Recommended

FFmpeg-4.4, gst-plugins-base-1.18.4, GTK+-3.24.30, JasPer-2.0.33, libexif-0.6.22, libjpeg-turbo-2.1.1, libpng-1.6.37, libtiff-4.3.0, libwebp-1.2.1, v4l-utils-1.20.0, and xine-lib-1.2.11

##### Optional

apache-ant-1.10.11, Doxygen-1.9.2, Java-16.0.2, Python-2.7.18, blas, Cuda, Eigen, OpenEXR, GDAL, lapack, libdc1394, NumPy, Threading Building Blocks (TBB), and VTK - The Visualization Toolkit,

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

### Installation of opencv

If needed, unpack the additional modules package:

    tar xf ../opencv_contrib-4.5.3.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 an operable test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DWITH_XINE=ON`: This option instructs the make procedure to use xine-lib-1.2.11.

`-DENABLE_PRECOMPILED_HEADERS=OFF`: This option is needed for compatibiiity with gcc-6.1 and later.

`-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.3/modules`: instructs the build system to build additional modules.

### Contents

Installed Programs: opencv_annotation, opencv_interactive-calibration, opencv_model_diagnostics, opencv_version, opencv_visualisation, and setup_vars_opencv4.sh
Installed Libraries: libopencv_calib3d.so, libopencv_core.so, libopencv_dnn.so, libopencv_features2d.so, libopencv_flann.so, libopencv_gapi.so, libopencv_highgui.so, libopencv_imgcodecs.so, libopencv_imgproc.so, libopencv_ml.so, libopencv_objdetect.so, libopencv_photo.so, libopencv_stitching.so, libopencv_video.so, and libopencv_videoio.so
Installed Directories: /usr/include/opencv4 /usr/lib/cmake/opencv4, /usr/lib/python3.9/site-packages/cv2, /usr/share/licenses/opencv4, /usr/share/opencv4, and /usr/share/java/opencv4

Last updated on

## OpenJPEG-2.4.0

### Introduction to OpenJPEG

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/uclouvain/openjpeg/archive/v2.4.0/openjpeg-2.4.0.tar.gz

- Download MD5 sum: 4d388298335947367e91f1d100468af1

- Download size: 2.1 MB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### OpenJPEG Dependencies

##### Required

CMake-3.21.2

##### Optional

Little CMS-2.12, libpng-1.6.37, libtiff-4.3.0, and Doxygen-1.9.2 (to build the API documentation)

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

### Installation of OpenJPEG

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 working test suite.

Now, as the `root` user:

    make install &&

    pushd ../doc &&
      for man in man/man?/* ; do
          install -v -D -m 644 $man /usr/share/$man
      done
    popd

### Contents

Installed Programs: opj_compress, opj_decompress, and opj_dump
Installed Libraries: libopenjp2.so
Installed Directories: /usr/include/openjpeg-2.4 and /usr/lib/openjpeg-2.4

#### Short Descriptions

opj_compress | converts various image formats to the jpeg2000 format
opj_decompress | converts jpeg2000 images to other image types
opj_dump | reads in a jpeg2000 image and dumps the contents to stdout

Last updated on

## Pixman-0.40.0

### Introduction to Pixman

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.cairographics.org/releases/pixman-0.40.0.tar.gz

- Download MD5 sum: 73858c0862dd9896fb5f62ae267084a4

- Download size: 892 KB

- Estimated disk space required: 55 MB (with tests)

- Estimated build time: 0.8 SBU (with tests)

#### Pixman Dependencies

##### Optional

GTK+-2.24.33 and libpng-1.6.37 (for tests and demos)

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

### Installation of Pixman

Install Pixman by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Library: libpixman-1.so
Installed Directory: /usr/include/pixman-1

#### Short Descriptions

`libpixman-1.so` | contains functions that provide low-level pixel manipulation features

Last updated on

## Poppler-21.08.0

### Introduction to Poppler

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-11.0 platform.

#### Package Information

- Download (HTTP): https://poppler.freedesktop.org/poppler-21.08.0.tar.xz

- Download MD5 sum: 60d5be55cc080d602bf58daf6825b124

- Download size: 1.6 MB

- Estimated disk space required: 105 MB (with Qt5 library and tests)

- Estimated build time: 0.7 SBU (with parallelism=4, Qt5 library, and tests)

#### Additional Downloads

Poppler Encoding Data

- Download (HTTP): https://poppler.freedesktop.org/poppler-data-0.4.10.tar.gz

- Download MD5 sum: a7f15fb2f26c60a7a92093cfdf2378d5

- Download size: 4.3 MB

- Estimated disk space required: 25 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.

#### Poppler Dependencies

##### Required

CMake-3.21.2 and Fontconfig-2.13.1

##### Recommended

Boost-1.77.0, Cairo-1.17.4, Little CMS-2.12, libjpeg-turbo-2.1.1, libpng-1.6.37, NSS-3.69, and OpenJPEG-2.4.0

##### Optional

cURL-7.78.0, gdk-pixbuf-2.42.6, git-2.33.0 (for downloading test files), gobject-introspection-1.68.0, GTK-Doc-1.33.2, Pygments-2.10.0, GTK+-3.24.30, libtiff-4.3.0, and Qt-5.15.2 (required for PDF support in Okular-21.08.0)

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

### Installation of Poppler

Install Poppler by running the following commands:

    mkdir build                         &&
    cd    build                         &&

    cmake  -DCMAKE_BUILD_TYPE=Release   \
           -DCMAKE_INSTALL_PREFIX=/usr  \
           -DTESTDATADIR=$PWD/testfiles \
           -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 git://git.freedesktop.org/git/poppler/test testfiles. Then issue: LC_ALL=en_US.UTF-8 make test.

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-21.08.0 &&
    cp -vr ../glib/reference/html /usr/share/doc/poppler-21.08.0

#### Poppler Data

If you downloaded the additional encoding data package, install it by issuing the following commands:

    tar -xf ../../poppler-data-0.4.10.tar.gz &&
    cd poppler-data-0.4.10

Now, as the `root` user:

    make prefix=/usr install

### Command Explanations

`-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_UNSTABLE_API_ABI_HEADERS=ON`: Installs some old Xpdf headers required by certain programs.

`-DENABLE_GTK_DOC=ON`: Use this parameter if GTK-Doc and Pygments is installed and you wish to rebuild and install the API documentation.

`-DENABLE_BOOST=OFF`: Use this parameter if you have not installed boost (the Splash backend for Qt5 recommends boost).

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.

### Contents

Installed Programs: pdfattach, pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdfsig, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, and pdfunite
Installed Libraries: libpoppler.so, libpoppler-cpp.so, libpoppler-glib.so, and libpoppler-qt5.so
Installed Directories: /usr/include/poppler, /usr/share/poppler, and /usr/share/doc/poppler-21.08.0

#### Short Descriptions

pdfattach | adds a new embedded file to an existing PDF file
pdfdetach | lists or extracts embedded files from PDF files
pdffonts | lists the fonts used in a PDF file along with various information for each font
pdfimages | saves images from a PDF file as PPM, PBM, or JPEG files
pdfinfo | prints the contents of the 'Info' dictionary (plus some other useful information) from a PDF file
pdfseparate | extracts single pages from a PDF file
pdfsig | verifies the digital signatures in a PDF document
pdftocairo | converts a PDF file to one of several formats (PNG, JPEG, PDF, PS, EPS, SVG) using the cairo output device of the poppler library
pdftohtml | converts a PDF file to HTML
pdftoppm | converts PDF files to PBM, PGM and PPM formats
pdftops | converts PDF files to Postscript format
pdftotext | converts PDF files to plain text
pdfunite | merges several PDF files, in the order of their occurrence on the command line, to one PDF output file
`libpoppler.so` | contains the API functions to render PDF files
`libpoppler-cpp.so` | is a C++ backend for rendering PDF files
`libpoppler-glib.so` | is a wrapper library used to interface the PDF rendering functions with GTK+
`libpoppler-qt5.so` | is a wrapper library used to interface the PDF rendering functions with Qt5

Last updated on

## Potrace-1.16

### Introduction to Potrace

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-11.0 platform.

#### Package Information

- 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)

#### Potrace Dependencies

##### Recommended

LLVM-12.0.1 (including clang)

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

### Installation of Potrace

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

### Command Explanations

`--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.

### Contents

Installed Programs: mkbitmap, potrace
Installed Libraries: libpotrace.so
Installed Directories: /usr/share/doc/potrace-1.16

#### Short Descriptions

mkbitmap | transforms images into bitmaps with scaling and filtering
potrace | transforms bitmaps into vector graphics
`libpotrace.so` | is a library for transforming bitmaps into vector graphics

Last updated on

## Qpdf-10.3.2

### Introduction to Qpdf

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/qpdf/qpdf/releases/download/release-qpdf-10.3.2/qpdf-10.3.2.tar.gz

- Download MD5 sum: 29aaaf03e0f83b3527d1470f8391c876

- Download size: 18 MB

- Estimated disk space required: 271 MB (add 50 MB for tests)

- Estimated build time: 0.5 SBU (using parallelism=4; add 2.0 SBU for tests)

#### Qpdf Dependencies

##### Required

libjpeg-turbo-2.1.1

##### Optional

fop-2.6, GnuTLS-3.7.2, and libxslt-1.1.34

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

### Installation of Qpdf

Install Qpdf by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/qpdf-10.3.2 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: fix-qdf, qpdf, and zlib-flate
Installed Library: libqpdf.so
Installed Directories: /usr/include/qpdf and /usr/share/doc/qpdf-10.3.2

#### Short Descriptions

fix-qdf | is used to repair PDF files in QDF form after editing
qpdf | is used to convert one PDF file to another equivalent PDF file
zlib-flate | is a raw zlib compression program
`libqpdf.so` | contains the Qpdf API functions

Last updated on

## qrencode-4.1.1

### Introduction to qrencode

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-11.0 platform.

#### Package Information

- 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

#### Qrencode Dependencies

##### Recommended

libpng-1.6.37

##### Optional

Doxygen-1.9.2 for generating documentation, and SDL2-2.0.16 for tests

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

### Installation of qrencode

Install libqrencode by running the following commands:

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

If you have installed Doxygen-1.9.2, 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.

### Command Explanations

`--with-tests`: This option allows building the test programs. It requires SDL2-2.0.16.

`--without-tools`: This option prevents building the qrencode executable, removing the need for libpng-1.6.37.

### Contents

Installed Program: qrencode
Installed Library: libqrencode.so
Installed Directory: /usr/share/doc/qrencode-4.1.1 (optional)

#### Short Descriptions

qrencode | encodes input data in a QR Code and saves it as a PNG or EPS image
`libqrencode.so` | contains functions for encoding data in a QR code symbol

Last updated on

## sassc-3.6.2

### Introduction to sassc

SassC is a wrapper around libsass, a CSS pre-processor language.

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

#### Package Information

- 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

#### Additional Downloads

- Download (HTTP): https://github.com/sass/libsass/archive/3.6.5/libsass-3.6.5.tar.gz

- Download MD5 sum: c49765b9b3824dcd4a7423225ca28bad

- Download size: 336 KB

- Estimated disk space required: 139 MB

- Estimated build time: 0.4 SBU (Using parallelism=4)

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

### Installation of sassc

First, build the library:

    tar -xf ../libsass-3.6.5.tar.gz &&
    pushd libsass-3.6.5 &&

    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

### Contents

Installed Programs: sassc
Installed Libraries: libsass.so
Installed Directories: /usr/include/sass

#### Short Descriptions

sassc | provides a command line interface to the libsass library

Last updated on

## woff2-1.0.2

### Introduction to WOFF2

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-11.0 platform.

#### Package Information

- 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

#### WOFF2 Dependencies

##### Required

Brotli-1.0.9 and CMake-3.21.2

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

### Installation of WOFF2

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

### Contents

Installed Program: None
Installed Libraries: libwoff2common.so, libwoff2dec.so and libwoff2enc.so
Installed Directory: /usr/include/woff2

#### Short Descriptions

`libwoff2common.so` | provides shared data used by the libwoff2dec and libwoff2enc libraries
`libwoff2dec.so` | is the WOFF2 decoder library
`libwoff2enc.so` | is the WOFF2 encoder library

Last updated on

## Chapter 11. General Utilities

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.

## Asciidoc-9.1.0

### Introduction to Asciidoc

The Asciidoc package is a text document format for writing notes, documentation, articles, books, ebooks, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including HTML, PDF, EPUB, and man page.

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

#### Package Information

- Download (HTTP): https://github.com/asciidoc/asciidoc-py3/releases/download/9.1.0/asciidoc-9.1.0.tar.gz

- Download MD5 sum: 6b0700c602a926325d71f7681dde5c6e

- Download size: 1.2 MB

- Estimated disk space required: 8.6 MB

- Estimated build time: less than 0.1 SBU

#### Asciidoc Dependencies

##### Optional (tests and runtime)

docbook-xsl-1.79.2, fop-2.6, libxslt-1.1.34, Lynx-2.8.9rel.1, dblatex, and W3m

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

### Installation of Asciidoc

First, fix a build problem if the optional dependencies are not installed:

    sed -i 's:doc/testasciidoc.1::' Makefile.in &&
    rm doc/testasciidoc.1.txt

Install Asciidoc by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --docdir=/usr/share/doc/asciidoc-9.1.0 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    make docs

### Contents

Installed Programs: a2x (symlink to a2x.py), a2x.py, asciidoc (symlink to asciidoc.py), and asciidoc.py
Installed Libraries: None
Installed Directories: /etc/asciidoc and /usr/share/doc/asciidoc-9.1.0

#### Short Descriptions

a2x | is a toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats)
asciidoc | converts an AsciiDoc text file to HTML or DocBook

Last updated on

## Asciidoctor-2.0.16

### Introduction to Asciidoctor

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/asciidoctor/asciidoctor/archive/v2.0.16/asciidoctor-2.0.16.tar.gz

- Download MD5 sum: 5fb5891fd8d653e65e950bb194f768bc

- Download size: 1.6 MB

- Estimated disk space required: 5.2 MB

- Estimated build time: less than 0.1 SBU

#### Asciidoctor Dependencies

##### Required

Ruby-3.0.2

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

### Installation of Asciidoctor

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.16.gem &&
    install -vm644 man/asciidoctor.1 /usr/share/man/man1

### Contents

Installed Programs: asciidoctor
Installed Libraries: None
Installed Directories: /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.16 and /usr/lib/ruby/gems/3.0.0/doc/asciidoctor-2.0.16

#### Short Descriptions

asciidoctor | converts AsciiDoc source files to HTML, DocBook, and other formats

Last updated on

## Bogofilter-1.2.5

### Introduction to Bogofilter

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-11.0 platform.

#### Package Information

- 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

#### Bogofilter Dependencies

##### Required

Berkeley DB-5.3.28

##### Recommended

Gsl-2.7 and libxml2-2.9.12

##### Optional

lmdb-0.9.29, SQLite-3.36.0, xmlto-0.0.28, QDBM and TokyoCabinet

### Note

If you do not install the recommended Gsl-2.7 package then a statically linked shipped version will be used instead.

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

### Installation of Bogofilter

### Note

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 &&
    make

To test the results, issue make check.

Now, as the `root` user:

    make install

### Command Explanations

`--with-database=`: This switch allows you to change the default database from db to either qdbm, sqlite3 or tokyocabinet.

### Contents

Installed Programs: bf_compact, bf_copy, bf_tar, bogofilter, bogolexer, bogotune, bogoupgrade and bogoutil
Installed Libraries: None
Installed Directories: /etc/bogofilter

#### Short Descriptions

bf_compact | creates a more compact bogofilter working directory with a dump/load cycle
bf_copy | copies a bogofilter working directory to another directory
bf_tar | bundles a bogofilter working directory in tar format and copies it to standard output
bogofilter | is a fast Bayesian spam filter
bogolexer | is used to separate messages into tokens and to test new versions of the lexer.l code
bogotune | attempts to find optimum parameter settings for bogofilter
bogoupgrade | upgrades the bogofilter database to the current version
bogoutil | dumps, loads, and maintains bogofilter database files

Last updated on

## Compface-1.5.2

### Introduction to Compface

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-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/compface/compface-1.5.2.tar.gz

- Download (FTP): ftp://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

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

### Installation of Compface

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

### Contents

Installed Programs: compface, uncompface and xbm2xface.pl
Installed Library: libcompface.{so,a}
Installed Directories: None

#### Short Descriptions

compface | is a filter for generating highly compressed representations of 48x48x1 face image files
uncompface | is an inverse filter which performs an inverse transformation with no loss of data
xbm2xface.pl | is a script to generate xfaces
`libcompface.{so,a}` | allows the compression and decompression algorithms to be used in other programs such as MTAs

Last updated on

## desktop-file-utils-0.26

### Introduction to Desktop File Utils

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/desktop-file-utils/releases/desktop-file-utils-0.26.tar.xz

- Download MD5 sum: 29739e005f5887cf41639b8450f3c23f

- Download size: 84 KB

- Estimated disk space required: 1.8 MB

- Estimated build time: less than 0.1 SBU

#### Desktop File Utils Dependencies

##### Required

GLib-2.68.4

##### Optional

Emacs-27.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/desktop-file-utils

### Installation of Desktop File Utils

### Warning

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 --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Configuring Desktop File Utils

#### Configuration Information

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

### Contents

Installed Programs: desktop-file-edit, desktop-file-install, desktop-file-validate and update-desktop-database
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

desktop-file-edit | is used to modify an existing desktop file entry
desktop-file-install | is used to install a new desktop file entry. It is also used to rebuild or modify the MIME-types application database
desktop-file-validate | is used to verify the integrity of a desktop file
update-desktop-database | is used to update the MIME-types application database

Last updated on

## Graphviz-2.48.0

### Introduction to Graphviz

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-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.com/graphviz/graphviz/-/archive/2.48.0/graphviz-2.48.0.tar.gz

- Download MD5 sum: f9dd7caf4785f47f5fd40f5407d9d7ce

- Download size: 29 MB

- Estimated disk space required: 204 MB

- Estimated build time: 0.7 SBU (using parallelism=4)

#### Graphviz Dependencies

### Note

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, using for example tools from ImageMagick-7.1.0-4. 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 seeing directly the result image, 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.

##### Optional, for various bitmap outputs

Pango-1.48.9, with Cairo-1.17.4, Xorg Libraries, Fontconfig-2.13.1, and libpng-1.6.37, to generate images in bitmap SVG, postscript, PNG, and PDF formats, or displaying the image on screen

Adding GTK+-2.24.33 with libjpeg-turbo-2.1.1 allows to add JPEG, BMP, TIF, and ICO formats, and to display 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.2.1 (WebP support is considered experimental), DevIL, libLASi, glitz, and libming (Adobe Flash)

##### Optional, to load graphic images that may be displayed inside the nodes of a graph

`libgs.so` from ghostscript-9.54.0, librsvg-2.50.7, and Poppler-21.08.0

##### Optional, to build more tools

Freeglut-3.2.1 (with libglade-2.6.4, GtkGLExt, and libGTS, for building the smyrna large graph viewer, which is considered experimental), Qt-5.15.2, for building the gvedit graph editor. Another graph editor, dotty needs only Xorg Libraries

##### Optional (To Build Language Bindings)

SWIG-4.0.2 (SWIG must be installed or no bindings will be built), GCC-11.2.0 (for the go language), Guile-3.0.7, OpenJDK-16.0.2, Lua-5.4.3, PHP-8.0.10, Ruby-3.0.2, Tk-8.6.11.1, Io, Mono, OCaml, and R

##### Optional (building tools)

Criterion (framework for tests) and Electric Fence

##### Optional (for building the pdf documentation)

ghostscript-9.54.0 (for the ps2pdf command)

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

### Installation of Graphviz

Install Graphviz by running the following commands:

    sed -i '/LIBPOSTFIX="64"/s/64//' configure.ac &&

    ./autogen.sh              &&
    ./configure --prefix=/usr \
                --disable-php \
                PS2PDF=true   &&
    make

This package does not come with a test suite that provides meaningful results.

Now, as the `root` user:

    make install

If desired, create a symbolic link in the system documents directory to the documentation installed in `/usr/share/graphviz/doc` using the following command as the `root` user:

    ln -svr /usr/share/graphviz/doc /usr/share/doc/graphviz-2.48.0

### Command Explanations

sed ... configure.ac: This command is needed to avoid installing files in /usr/lib64.

`--disable-php`: This version of graphviz does not support php version 8.

`PS2PDF=true`: This is needed if ghostscript-9.54.0 is not installed. Otherwise, the build system tries to run false, which generates an error.

`--with-javaincludedir="$JAVA_HOME/include -I$JAVA_HOME/include/linux"`: If you have built OpenJDK-16.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.2.1 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.

### Configuring Graphviz

#### Config Files

`/usr/lib/graphviz/config`

#### Configuration Information

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`.

### Contents

Installed Programs: acyclic, bcomps, ccomps, circo, cluster, diffimg, dijkstra, dot, dot2gxl, dot_builtins, dotty, edgepaint, fdp, gc, gml2gv, graphml2gv, gv2gml, gv2gxl, gvcolor, gvedit, gvgen, gvmap, gvmap.sh, gvpack, gvpr, gxl2dot, gxl2gv, lefty, lneato, mm2gv, neato, nop, osage, patchwork, prune, sccmap, sfdp, tred, twopi, unflatten, and vimdot
Installed Libraries: libcdt.so, libcgraph.so, libgvc.so, libgvpr.so, liblab_gamut.so, libpathplan.so, libxdot.so, and several plugins in /usr/lib/graphviz. There are also several in subdirectories of /usr/lib/{lua,perl5,php,,python3.9,tcl8.6}. Unfortunately, some libraries are duplicated.
Installed Directories: /usr/include/graphviz, /usr/lib/graphviz, /usr/lib/tcl8.6/graphviz, /usr/share/doc/graphviz-2.48.0, and /usr/share/graphviz

#### Short Descriptions

acyclic | 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
bcomps | decomposes graphs into their biconnected components, printing the components to standard output
ccomps | decomposes graphs into their connected components, printing the components to standard output
circo | draws graphs using a circular layout
cluster | takes as input a graph in DOT format, finds node clusters and augments the graph with this information
diffimg | (needs GD Library) generates an image where each pixel is the difference between the corresponding pixel in each of the two source images
dijkstra | reads a stream of graphs and for each computes the distance of every node from sourcenode
dot | 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
dot2gxl | 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 `.dot` suffix causing a conversion from DOT to GXL, and a `.gxl` suffix causing a conversion from GXL to DOT
dotty | is a graph editor for the X Window System. It may be run as a standalone editor, or as a front end for applications that use graphs. It can control multiple windows viewing different graphs
edgepaint | performs edge coloring to disambiguate crossing edges
fdp | draws undirected graphs using a “spring” model. It relies on a force-directed approach in the spirit of Fruchterman and Reingold
gc | 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
gml2gv | converts a graph specified in the GML format to a graph in the GV (formerly DOT) format
graphml2gv | converts a graph specified in the GRAPHML format to a graph in the GV (formerly DOT) format
gv2gml | converts a graph specified in the GV format to a graph in the GML format
gv2gxl | converts a graph specified in the GV format to a graph in the GXL format
gvcolor | 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
gvedit | 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
gvgen | generates a variety of simple, regularly-structured abstract graphs
gvmap | 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
gvmap.sh | is a pipeline for running gvmap
gvpack | 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
gvpr | 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
gxl2dot | 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 `.dot` suffix causing a conversion from DOT to GXL, and a `.gxl` suffix causing a conversion from GXL to DOT
gxl2gv | converts between graphs represented in GXL and in the GV language
lefty | is a two-view graphics editor for technical pictures
lneato | is a graph editor for the X Window System. It may be run as a standalone editor, or as a front end for applications that use graphs. It can control multiple windows viewing different graphs
mm2gv | converts a sparse matrix of the Matrix Market format to a graph in the GV (formerly DOT) format
neato | 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
nop | reads a stream of graphs and prints each in pretty-printed (canonical) format on stdout. If no files are given, it reads from stdin
osage | draws clustered graphs. As input, it takes any graph in the DOT format
patchwork | draws clustered graphs using a squarified treemap layout. As input, it takes any graph in the DOT format
prune | reads directed graphs in the same format used by dot and removes subgraphs rooted at nodes specified on the command line via options
sccmap | 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
sfdp | 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
tred | 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
twopi | 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
unflatten | 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
vimdot | is a simple script which launches the gvim or vim editor along with a GUI window showing the dot output of the edited file
`libcdt.so` | manages run-time dictionaries using standard container data types: unordered set/multiset, ordered set/multiset, list, stack, and queue
`libcgraph.so` | supports graph programming by maintaining graphs in memory and reading and writing graph files. Graphs are composed of nodes, edges, and nested subgraphs
`libgvc.so` | provides a context for applications wishing to manipulate and render graphs. It provides a command line parsing, common rendering code, and a plugin mechanism for renderers
`libpathplan.so` | contains functions to find the shortest path between two points in a simple polygon
`libxdot.so` | provides support for parsing and deparsing graphical operations specificed by the xdot language

Last updated on

## GTK-Doc-1.33.2

### Introduction to GTK-Doc

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk-doc/1.33/gtk-doc-1.33.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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)

#### GTK-Doc Dependencies

##### Required

docbook-xml-4.5, docbook-xsl-1.79.2, itstool-2.0.6, and libxslt-1.1.34

##### Recommended

Pygments-2.10.0 at run time

##### Optional

For tests: dblatex or fop-2.6 (XML PDF support), GLib-2.68.4, Which-2.21, and Python modules lxml-4.6.3, parameterized, and yelp-tools

### Note

The optional python modules above can be easily installed with the pip3 command.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk-doc

### Installation of GTK-Doc

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.

### Contents

Installed Programs: gtkdocize, gtkdoc-check, gtkdoc-depscan, gtkdoc-fixxref, gtkdoc-mkdb, gtkdoc-mkhtml, gtkdoc-mkhtml2, gtkdoc-mkman, gtkdoc-mkpdf, gtkdoc-rebase, gtkdoc-scan, and gtkdoc-scangobj
Installed Libraries: None
Installed Directories: /usr/share/gtk-doc and /usr/share/cmake/GtkDoc

#### Short Descriptions

gtkdoc* | these are all shell, or Python scripts used by package `Makefile` scripts to generate documentation for the package being built

Last updated on

## Hd2u-1.0.4

### Introduction to Hd2u

The hd2u package contains an any to any text format converter.

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

#### Package Information

- Download (HTTP): https://hany.sk/~hany/_data/hd2u/hd2u-1.0.4.tgz

- Download MD5 sum: d516d794deb42ee95bd4e96af94088de

- Download size: 64 KB

- Estimated disk space required: 364 KB

- Estimated build time: less than 0.1 SBU

#### Hd2u Dependencies

##### Required

popt-1.18

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

### Installation of Hd2u

Install hd2u 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

### Contents

Installed Program: dos2unix
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

dos2unix | converts text between various OS formats (such as converting from DOS format to Unix)

Last updated on

## Highlight-4.1

### Introduction to Highlight

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-11.0 platform.

#### Package Information

- Download (HTTP): http://www.andre-simon.de/zip/highlight-4.1.tar.bz2

- Download MD5 sum: 65caf60e800bb8badf42aac523d48858

- Download size: 1.4 MB

- Estimated disk space required: 24 MB (with gui)

- Estimated build time: 0.3 SBU (Using paralllelism=4; with gui)

#### Highlight Dependencies

##### Required

Boost-1.77.0 and Lua-5.4.3

##### Optional

Qt-5.15.2 (to build the GUI front-end)

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

### Installation of Highlight

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.1/ 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.1/ install

To install the GUI program, run the following command as the `root` user:

    make install-gui

### Command Explanations

`doc_dir=/usr/share/doc/highlight-4.1/`: 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.

### Contents

Installed Programs: highlight and highlight-gui (optional)
Installed Libraries: None
Installed Directories: /etc/highlight, /usr/share/doc/highlight/4.1, and /usr/share/highlight

#### Short Descriptions

highlight | is a universal source code to formatted text converter
highlight-gui | is the Qt5 interface to highlight.

Last updated on

## ibus-1.5.25

### Introduction to ibus

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/ibus/ibus/releases/download/1.5.25/ibus-1.5.25.tar.gz

- Download MD5 sum: c1670d622c555aca804b0d6a074ce93e

- Download size: 3.5 MB

- Estimated disk space required: 55 MB (with tests)

- Estimated build time: 1.0 SBU (Using parallelism=4; with tests)

#### Optional Download

##### Unicode Character Database

- Download: https://www.unicode.org/Public/zipped/13.0.0/UCD.zip (Unicode Character Database)

#### ibus Dependencies

##### Required

DConf-0.40.0, ISO Codes-4.7.0, and Vala-0.52.5

##### Recommended

gobject-introspection-1.68.0, GTK+-2.24.33, and libnotify-0.7.9

##### Optional

GTK+-3.24.30 (to build IM module for it), GTK-4.4.0 (to build IM module for it), D-Bus Python-1.2.18 and PyGObject-3.40.1 (both to build the Python support library), GTK-Doc-1.33.2, PyXDG-0.27 (runtime, for the ibus-setup), and libxkbcommon-1.3.0, Wayland-1.19.0 (both to build the Wayland support programs), and EmojiOne

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

### Installation of ibus

If the optional Unicode Character Database was downloaded, install it now as the `root` user:

    mkdir -p                /usr/share/unicode/ucd &&
    unzip -uo ../UCD.zip -d /usr/share/unicode/ucd

### Note

Be sure to also remove the --disable-unicode-dict in the configure step below.

Fix an issue with deprecated schema entries:

    sed -i 's@/desktop/ibus@/org/freedesktop/ibus@g' \
        data/dconf/org.freedesktop.ibus.gschema.xml

Install ibus by running the following commands:

    ./configure --prefix=/usr             \
                --sysconfdir=/etc         \
                --disable-unicode-dict    \
                --disable-emoji-dict      &&
    rm -f tools/main.c                    &&
    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 is known to fail in Wayland based desktop environment.

Now, as the `root` user:

    make install &&
    gzip -dfv /usr/share/man/man{{1,5}/ibus*.gz,5/00-upstream-settings.5.gz}

### Command Explanations

`--disable-emoji-dict`: This switch disables the use of emoticon dictionaries. Omit if you installed the optional package.

`--disable-unicode-dict`: This switch disables the use of unicode dictionaries. Omit if you installed the optional Unicode Character Database.

rm -f tools/main.c: This command removes a generated file that was not removed when packaging.

`--disable-gtk2`: This switch disables building the GTK+ 2 immodule. Use it if you have not installed 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 dependencies.

`--enable-wayland`: This switch enables building the Wayland support programs. Use it if you have installed the optional dependencies.

`--with-python=python3`: This switch makes the configure script look for Python 3. Use it if you want to build the Python 3 support library alongside the Python 2 one.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

gzip -dfv ...: Decompress installed man pages in accordance with other man pages.

### Contents

Installed Programs: ibus, ibus-daemon, and ibus-setup
Installed Library: libibus-1.0.so and im-ibus.so (GTK+ Immodule)
Installed Directories: /etc/dconf/db/ibus.d, /usr/include/ibus-1.0, /usr/share/gtk-doc/html/ibus, and /usr/share/ibus

#### Short Descriptions

ibus-daemon | is the Intelligent Input Bus Daemon
ibus-setup | is the GTK+ program used to configure the ibus-daemon
`libibus-1.0.so` | contains the ibus API functions

Last updated on

## ImageMagick-7.1.0-4

### Introduction to ImageMagick

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.imagemagick.org/download/releases/ImageMagick-7.1.0-4.tar.xz

- Download MD5 sum: d69d22a78d493afdc0c2edd7931f707c

- Download size: 9.9 MB

- Estimated disk space required: 193 MB (with typical dependencies; add 20 MB for checks)

- Estimated build time: 0.9 SBU (with typical dependencies; add 0.6 SBU for checks, both using parallelism=4)

### Note

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, or from the `legacy/` directory at `ftp.ImageMagick.org/pub/ImageMagick` you can download it from the BLFS package server at Oregon State University: ftp://ftp.osuosl.org/pub/blfs/conglomeration/ImageMagick/.

#### ImageMagick Dependencies

##### Recommended

Xorg Libraries

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.

##### Optional System Utilities

Clang from LLVM-12.0.1, Cups-2.3.3op2, cURL-7.78.0, FFmpeg-4.4, fftw-3.3.9, p7zip-17.04 (LZMA), SANE-1.0.29, Wget-1.21.1, xdg-utils-1.1.3, xterm-368, Dmalloc, Electric Fence, PGP or GnuPG-2.2.29 (you'll have to do some hacking to use GnuPG), Profiles, and ufraw (for raw formats listed in https://imagemagick.org/script/formats.php)

##### Optional Graphics Libraries

JasPer-2.0.33, Little CMS-1.19 or Little CMS-2.12, libgxps-0.3.2, libjpeg-turbo-2.1.1, libpng-1.6.37, libraw-0.20.2 (RAW_R), librsvg-2.50.7, libtiff-4.3.0, libwebp-1.2.1, OpenJPEG-2.4.0, Pango-1.48.9, 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)

##### Optional Graphics Utilities

Dejavu fonts, ghostscript-9.54.0, Gimp-2.10.24, Graphviz-2.48.0, Inkscape-1.1, Blender, corefonts, GhostPCL, Gnuplot, POV-Ray, and Radiance

##### Optional Conversion Tools

Enscript-1.6.6, texlive-20210325 (or install-tl-unx) AutoTrace, GeoExpress Command Line Utilities, AKA MrSID Utilities (binary package), hp2xx, html2ps, libwmf, UniConvertor, and Utah Raster Toolkit (or URT-3.1b)

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

### Installation of ImageMagick

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.0 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-9.54.0 - that test, and one other, might fail, but all the validation can still pass.

### Command Explanations

`--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-gslib`: Enables support to use the Ghostscript shared library.

`--with-rsvg`: Enables support to use the librsvg library.

`--with-autotrace`: Enables support to use the Autotrace library.

`--with-wmf`: Enables support to use the libwmf library.

`--with-gvc`: Enables support to use GraphViz.

`--with-windows-font-dir= `<Some/Directory>``: This option specifies the directory where the Windows CoreFonts are installed.

`--with-dejavu-font-dir= `<Some/Directory>``: This option specifies the directory where the DejaVu fonts are installed.

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.

### Contents

Installed Programs: magick, Magick++-config, MagickCore-config, and MagickWand-config. (animate, compare, composite, conjure, convert, display, identify, import, magick-script, mogrify, montage, and stream are all symbolic links to magick)
Installed Libraries: libMagickCore-7.Q16HDRI.so, libMagickWand-7.Q16HDRI.so and libMagick++-7.Q16HDRI.so
Installed Directories: /etc/ImageMagick-7, /usr/include/ImageMagick-7, /usr/lib/ImageMagick-7.1.0, /usr/lib/perl5/site_perl/5.34/{,auto}/Image/Magick, /usr/share/doc/ImageMagick-7.1.0, and /usr/share/ImageMagick-7

#### Short Descriptions

animate | animates a sequence of images
compare | compares an image to a reconstructed image
composite | composites various images into the given base image
conjure | processes a MSL script to create an image
convert | converts image(s) from one format to another
display | displays an image
identify | describes the format and characteristics of an image file
import | captures an X window
magick | convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample and much more
Magick{++,Core,Wand}-config | show information about the installed versions of the ImageMagick libraries
mogrify | transforms an image
montage | composites various images into a new image
stream | streams one or more pixel components of an image or portion of the image to your choice of storage formats
`Image::Magick` | allows the reading, manipulation and writing of a large number of image file formats using the ImageMagick library. Run make in the `PerlMagick/demo` directory of the package source tree after the package is installed to see a nice demo of the module's capabilities
`libMagickCore-7.Q16HDRI.so` | provides the C API for ImageMagick
`libMagickWand-7.Q16HDRI.so` | is the recommended C API for ImageMagick. Unlike the MagickCore API it uses only a few opaque types
`libMagick++-7.Q16HDRI.so` | provides the C++ API for ImageMagick

Last updated on

## ISO Codes-4.7.0

### Introduction to ISO Codes

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-11.0 platform.

#### Package Information

- Download (HTTP): http://ftp.debian.org/debian/pool/main/i/iso-codes//iso-codes_4.7.0.orig.tar.xz

- Download MD5 sum: 3b29445663cd01922dcea24a02228c69

- Download size: 3.8 MB

- Estimated disk space required: 111 MB

- Estimated build time: 0.2 SBU (with tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/iso-codes

### Installation of ISO Codes

The directory is called iso-codes-4.7.0.

Install ISO Codes by running the following commands:

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

To test the results, issue: make check.

### Note

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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/iso-codes, /usr/share/xml/iso-codes

Last updated on

## lsof-4.91

### Introduction to lsof

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_4.91.tar.gz

- Download MD5 sum: 10e1353aa4bf2fd5bbed65db9ef6fd47

- Download size: 1.1 MB

- Estimated disk space required: 9.6 MB

- Estimated build time: less than 0.1 SBU

#### lsof Dependencies

##### Required

libtirpc-1.3.2

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

### Installation of lsof

The contents of the lsof tarball include another tarball with the source code, which needs, in turn, to be unpacked. Install lsof by running the following commands:

    tar -xf lsof_4.91_src.tar  &&
    cd lsof_4.91_src           &&
    ./Configure -n linux       &&
    make CFGL="-L./lib -ltirpc"

This package does not come with a working test suite.

Now, as the `root` user:

    install -v -m0755 -o root -g root lsof /usr/bin &&
    install -v lsof.8 /usr/share/man/man8

### Command Explanations

./Configure -n linux: Avoid AFS, customization, and inventory checks, and use the linux dialect.

make CFGL="-L./lib -ltirpc": Add the libtirpc libraries location to the make command.

### Contents

Installed Program: lsof
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

lsof | lists open files for running processes

Last updated on

## pinentry-1.2.0

### Introduction to PIN-Entry

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.2.0.tar.bz2

- Download (FTP): ftp://ftp.gnupg.org/gcrypt/pinentry/pinentry-1.2.0.tar.bz2

- Download MD5 sum: 32e09a982711d6e705f9d89020424c2d

- Download size: 488 KB

- Estimated disk space required: 6.3 MB

- Estimated build time: less than 0.1 SBU

#### PIN-Entry Dependencies

##### Required

Libassuan-2.5.5 and libgpg-error-1.42

##### Optional

Emacs-27.2, FLTK-1.3.7, Gcr-3.40.0, GTK+-2.24.33, libsecret-0.20.4, Qt-5.15.2, and efl

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

### Installation of PIN-Entry

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

### Command Explanations

`--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'.

### Contents

Installed Programs: pinentry (symlink), pinentry-curses, pinentry-emacs, pinentry-fltk, pinentry-gnome3, pinentry-gtk-2, pinentry-qt, and pinentry-tty
Installed Libraries: None
Installed Directory: None

#### Short Descriptions

pinentry | is a symbolic link to the default PIN-Entry program
pinentry-curses | is an Ncurses text-based PIN-Entry helper program
pinentry-emacs | is an Emacs version of the PIN-Entry helper program
pinentry-fltk | is a FLTK PIN-Entry helper program
pinentry-gnome3 | is a GNOME-3 PIN-Entry helper program
pinentry-gtk-2 | is a GTK+2 PIN-Entry program program
pinentry-qt | is a Qt4 or 5 PIN-Entry helper program
pinentry-tty | is a tty PIN-Entry helper program

Last updated on

## Rarian-0.8.1

### Introduction to Rarian

The Rarian package is a documentation metadata library based on the proposed Freedesktop.org spec. Rarian is designed to be a replacement for ScrollKeeper.

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

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/rarian/0.8/rarian-0.8.1.tar.bz2

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/rarian/0.8/rarian-0.8.1.tar.bz2

- Download MD5 sum: 75091185e13da67a0ff4279de1757b94

- Download size: 317 KB

- Estimated disk space required: 6 MB

- Estimated build time: 0.2 SBU

#### Rarian Dependencies

##### Recommended

libxslt-1.1.34 (rarian-sk-extract will not be built without this) and docbook-xml-4.5 (without this, Rarian scripts source DTDs from the net)

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

### Installation of Rarian

Install Rarian by running the following commands:

    ./configure --prefix=/usr        \
                --disable-static     \
                --localstatedir=/var &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

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

### Contents

Installed Programs: rarian-example, rarian-sk-config, rarian-sk-extract, rarian-sk-gen-uuid, rarian-sk-get-cl, rarian-sk-get-content-list, rarian-sk-get-extended-content-list, rarian-sk-get-scripts, rarian-sk-install, rarian-sk-migrate, rarian-sk-preinstall, rarian-sk-rebuild, and rarian-sk-update
Installed Library: librarian.so
Installed Directories: /usr/include/rarian, /usr/share/help, /usr/share/librarian/manual, /usr/share/librarian/Templates/C, and /var/lib/rarian

#### Short Descriptions

rarian-example | prints a nice list of all available documents found by the library
rarian-sk-config | emulates scrollkeeper-config
rarian-sk-extract | is a wrapper around xsltproc to mimic scrollkeeper-extract
rarian-sk-gen-uuid | generates a unique (random) uuid
rarian-sk-get-cl | gets a content list (category tree)
rarian-sk-get-content-list | is a simple wrapper to make calling scrollkeeper-get-cl easier
rarian-sk-get-extended-content-list | is a simple wrapper to make calling scrollkeeper-get-cl (extended) easier
rarian-sk-get-scripts | emulates scrollkeeper-get-index-from-index-from-docpath, scrollkeeper-get-toc-from-docpath, and scrollkeeper-get-toc-from-id
rarian-sk-install | emulates scrollkeeper-install and scrollkeeper-uninstall
rarian-sk-migrate | takes in a directory full of omf's, reads and parses them and spews out an equivalent scroll file
rarian-sk-preinstall | creates the omf file by reading an existing omf file and replacing the url for a resource with the url
rarian-sk-rebuild | is a simple wrapper script to emulate scrollkeeper-rebuilddb
rarian-sk-update | is compatible with the scrollkeeper-update script that's required to be run when installing new omf files. It converts the omf files into new-style scrolls
`librarian.{so,a}` | is the API to build a list of available meta data files and allows access to these

Last updated on

## Rep-gtk-0.90.8.3

### Introduction to Rep-gtk

The rep-gtk package contains a Lisp and GTK binding. This is useful for extending GTK-2 and GDK libraries with Lisp. Starting at rep-gtk-0.15, the package contains the bindings to GTK and uses the same instructions. Both can be installed, if needed.

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

#### Package Information

- Download (HTTP): https://download.tuxfamily.org/librep/rep-gtk/rep-gtk_0.90.8.3.tar.xz

- Download MD5 sum: b20f72cf00d316d35fa7f84a6e7532af

- Download size: 120 KB

- Estimated disk space required: 13 MB

- Estimated build time: 0.1 SBU

#### Rep-gtk Dependencies

##### Required

GTK+-2.24.33 and librep-0.92.7

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rep-gtk

### Installation of Rep-gtk

Install rep-gtk by running the following commands:

    ./autogen.sh --prefix=/usr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: Lisp bindings
Installed Directory: /usr/include/rep-gtk and /usr/lib/rep/gui

#### Short Descriptions

`Lisp bindings` | are libraries stored in `/usr/lib/rep/gui/` that assist communication between Lisp and the GTK libraries

Last updated on

## Screen-4.8.0

### Introduction to Screen

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/screen/screen-4.8.0.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/screen/screen-4.8.0.tar.gz

- Download MD5 sum: d276213d3acd10339cd37848b8c4ab1e

- Download size: 836 KB

- Estimated disk space required: 7.4 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/screen-4.8.0-upstream_fixes-1.patch

#### Screen Dependencies

##### Optional

Linux-PAM-1.5.1

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

### Installation of Screen

First, apply a patch from upstream that fixes a security vulnerability:

    patch -Np1 -i ../screen-4.8.0-upstream_fixes-1.patch

Install Screen by running the following commands:

    ./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

### Command Explanations

`--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.

### Configuring Screen

#### Config Files

`/etc/screenrc` and `~/.screenrc`

#### Configuration Information

You may want to look at the example configuration file that was installed and customize it for your needs.

### Contents

Installed Program: screen (symlink) and screen-4.8.0
Installed Libraries: None
Installed Directory: /usr/share/screen and /run/screen

#### Short Descriptions

screen | is a terminal multiplexor with VT100/ANSI terminal emulation

Last updated on

## shared-mime-info-2.1

### Introduction to Shared Mime Info

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-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.1/shared-mime-info-2.1.tar.gz

- Download MD5 sum: 8d059fb2d34062a67fd9ca63fab1fb91

- Download size: 5.0 MB

- Estimated disk space required: 26 MB

- Estimated build time: less than 0.1 SBU

#### Shared Mime Info Dependencies

##### Required

GLib-2.68.4, itstool-2.0.6, libxml2-2.9.12, and xmlto-0.0.28

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/shared-mime-info

### Installation of Shared Mime Info

Install Shared Mime Info by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dupdate-mimedb=true .. &&
    ninja

To test the result, issue ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-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.

### Contents

Installed Program: update-mime-database
Installed Library: None
Installed Directory: /usr/share/mime

#### Short Descriptions

update-mime-database | assists in adding MIME data to the database

Last updated on

## Sharutils-4.15.2

### Introduction to Sharutils

The Sharutils package contains utilities that can create 'shell' archives.

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/sharutils/sharutils-4.15.2.tar.xz

- Download (FTP): ftp://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)

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

### Installation of Sharutils

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

### Contents

Installed Programs: shar, unshar, uudecode and uuencode
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

shar | creates "shell archives" (or shar files) which are in text format and can be mailed
unshar | unpacks a shar file
uudecode | 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
uuencode | reads a file (or by default the standard input) and decodes the uuencoded version to the standard output

Last updated on

## telepathy-logger-0.8.2

### Introduction to Telepathy Logger

The Telepathy Logger package is a headless observer client that logs information received by the Telepathy framework. It features pluggable backends to log different sorts of messages in different formats.

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

#### Package Information

- Download (HTTP): https://telepathy.freedesktop.org/releases/telepathy-logger/telepathy-logger-0.8.2.tar.bz2

- Download MD5 sum: c2f6a31c76cbdf8790500cf4f872ba71

- Download size: 552 KB

- Estimated disk space required: 17 MB

- Estimated build time: 0.2 SBU

#### Telepathy Logger Dependencies

##### Required

Python-2.7.18 (only during build), SQLite-3.36.0, and telepathy-glib-0.24.2

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/telepathy-logger

### Installation of Telepathy Logger

Fix a deprecated schema entry:

    sed 's@/apps/@/org/freedesktop/@' \
        -i data/org.freedesktop.Telepathy.Logger.gschema.xml.in

Install Telepathy Logger 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

### Command Explanations

`--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.

### Contents

Installed Programs: telepathy-logger
Installed Libraries: libtelepathy-logger.so
Installed Directories: /usr/include/telepathy-logger-0.2, /usr/share/gtk-doc/html/telepathy-logger and /usr/share/telepathy

#### Short Descriptions

telepathy-logger | is the Telepathy Logger D-Bus service
`libtelepathy-logger.so` | contains the Telepathy Logger API functions

Last updated on

## telepathy-mission-control-5.16.6

### Introduction to Telepathy Mission Control

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-11.0 platform.

#### Package Information

- 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

#### Telepathy Mission Control Dependencies

##### Required

telepathy-glib-0.24.2

##### Recommended

NetworkManager-1.32.10

##### Optional

D-Bus Python-1.2.18 (for the “twisted” tests), GTK-Doc-1.33.2, UPower-0_99_13, and Twisted (for the “twisted” tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/telepathy-mission-control

### Installation of Telepathy Mission Control

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

### Command Explanations

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.

### Contents

Installed Programs: mc-tool, mc-wait-for-name and mission-control-5 (library executable)
Installed Libraries: libmission-control-plugins.so
Installed Directories: /usr/include/mission-control-5.5 and /usr/share/gtk-doc/html/mission-control-plugins

#### Short Descriptions

mc-tool | is a command line tool used to manipulate Mission Control accounts
mc-wait-for-name | waits for a D-Bus bus name that will be provided automatically by the desktop session
mission-control-5 | is a D-Bus service which runs on the session bus to implement AccountManager and ChannelDispatcher services described in the Telepathy D-Bus specification
`libmission-control-plugins.so` | contains Telepathy Mission Control plugin API functions

Last updated on

## tidy-html5-5.8.0

### Introduction to Tidy HTML5

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-11.0 platform.

#### Package Information

- 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

#### Tidy HTML5 Dependencies

##### Required

CMake-3.21.2

##### Recommended

libxslt-1.1.34

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

### Installation of Tidy HTML5

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

### Command Explanations

`-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.

### Configuring Tidy HTML5

#### Config Files

The absolute path of the file specified in `HTML_TIDY`.

#### Configuration Information

The default configuration options can be set in the file defined in `HTML_TIDY`. Additional configuration options can be passed to tidy via command line parameters or the `-config <file>` parameter.

### Contents

Installed Programs: tab2space and tidy
Installed Library: libtidy.so
Installed Directory: /usr/share/doc/tidy-5.8.0

#### Short Descriptions

tab2space | is a utility to expand tabs and ensure consistent line endings
tidy | validates, corrects, and pretty-prints HTML files
`libtidy.so` | library provides the Tidy HTML5 API functions to tidy and can also be called by other programs

Last updated on

## Time-1.9

### Introduction to Time

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-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/time/time-1.9.tar.gz

- Download (FTP): ftp://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)

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

### Installation of Time

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

### Contents

Installed Program: time
Installed Library: None
Installed Directory: None

#### Short Descriptions

time | reports various statistics about an executed command

Last updated on

## tree-1.8.0

### Introduction to tree

The tree application, as the name suggests, is useful to display, in a terminal, directory contents, including directories, files, links.

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

#### Package Information

- Download (HTTP): http://mama.indstate.edu/users/ice/tree/src/tree-1.8.0.tgz

- Download (FTP): ftp://mama.indstate.edu/linux/tree/tree-1.8.0.tgz

- Download MD5 sum: 715191c7f369be377fc7cc8ce0ccd835

- Download size: 52 KB

- Estimated disk space required: 656 KB

- Estimated build time: less than 0.1 SBU

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

### Installation of tree

Install tree by running the following commands:

    make

This package does not come with a test suite.

Now, as the `root` user:

    make MANDIR=/usr/share/man/man1 install &&
    chmod -v 644 /usr/share/man/man1/tree.1

### Contents

Installed Program: tree
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

tree | displays a directory tree in a terminal

Last updated on

## unixODBC-2.3.9

### Introduction to unixODBC

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-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.9.tar.gz

- Download MD5 sum: 06f76e034bb41df5233554abe961a16f

- Download size: 1.6 MB

- Estimated disk space required: 28 MB

- Estimated build time: 0.2 SBU (using parallelism=4)

#### unixODBC Dependencies

##### Optional

Mini SQL and Pth-2.0.7

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

### Installation of unixODBC

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.9 &&
    cp      -v -R doc/* /usr/share/doc/unixODBC-2.3.9

### Command Explanations

`--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.

### Configuring unixODBC

#### Config Files

`/etc/unixODBC/*`

#### Configuration Information

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.9`, 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.

### Contents

Installed Programs: dltest, isql, iusql, odbc_config, odbcinst, and slencheck
Installed Libraries: libodbc.so, libodbccr.so, and libodbcinst.so
Installed Directories: /etc/unixODBC and /usr/share/doc/unixODBC-2.3.9

#### Short Descriptions

dltest | is a utility used to check a shared library to see if it can be loaded and if a given symbol exists in it
isql | 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
iusql | provides the same functionality as the isql program
odbc_config | is used to find out details about the installation of the unixODBC package
odbcinst | is a utility created for install script/RPM writers. It is a command line interface to key functionality in the `libodbcinst` library. It does not copy any files (i.e., libraries) but it will modify the ODBC System Information for the user
slencheck | is a utility which attempts to check whether an ODBC driver was built with 32-bit or 64-bit SQLLEN types

Last updated on

## Xdg-user-dirs-0.17

### Introduction to Xdg-user-dirs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://user-dirs.freedesktop.org/releases/xdg-user-dirs-0.17.tar.gz

- Download MD5 sum: e0564ec6d838e6e41864d872a29b3575

- Download size: 251 KB

- Estimated disk space required: 3.0 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xdg-user-dirs

### Installation of Xdg-user-dirs

Install xdg-user-dirs by running the following commands:

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Configuring Xdg-user-dirs

#### Config Files

`~/.config/user-dirs.dirs`, `/etc/xdg/user-dirs.conf`, and `/etc/xdg/user-dirs.defaults`. Those default locations can be overriden by `XDG_CONFIG_HOME` and `XDG_CONFIG_DIRS`

### Contents

Installed Programs: xdg-user-dir and xdg-user-dirs-update
Installed Library: None
Installed Directory: None

#### Short Descriptions

xdg-user-dir | looks up the current path for one of the XDG user directories
xdg-user-dirs-update | creates localized versions of the user directories

Last updated on

## Chapter 12. System Utilities

This chapter contains mainly hardware utilities. It also contains some applications used by other applications in the book for installation or configuration purposes.

## AccountsService-0.6.55

### Introduction to AccountsService

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/accountsservice/accountsservice-0.6.55.tar.xz

- Download MD5 sum: 6e4c6fbd490260cfe17de2e76f5d803a

- Download size: 96 KB

- Estimated disk space required: 10 MB

- Estimated build time: 0.1 SBU

#### AccountsService Dependencies

##### Required

libgcrypt-1.9.4 and Polkit-0.119

##### Recommended

gobject-introspection-1.68.0 and Systemd-249

##### Optional

GTK-Doc-1.33.2 and xmlto-0.0.28

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

### Installation of AccountsService

Install AccountsService by running the following commands:

    mkdir build &&
    cd build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dadmin_group=adm   \
          -Dsystemd=true      \
          .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dadmin_group=adm`: This switch sets the group for administrator accounts.

`-Ddocbook=true`: This switch enables building the D-Bus interface API documentation.

### Configuring AccountsService

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

#### Systemd Unit

To start the accounts-daemon daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable accounts-daemon

### Contents

Installed Programs: accounts-daemon (library executable)
Installed Libraries: libaccountsservice.so
Installed Directories: /usr/include/accountsservice-1.0, /usr/share/doc/accountsservice, /usr/share/gtk-doc/html/libaccountsservice, and /var/lib/AccountsService

#### Short Descriptions

accounts-daemon | is the AccountsService daemon
`libaccountsservice.so` | contains the AccountsService API functions

Last updated on

## acpid-2.0.32

### Introduction to acpid

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.

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

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/acpid2/acpid-2.0.32.tar.xz

- Download MD5 sum: 248995264b9d1cd8bdb923d5b190fd44

- Download size: 156 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of acpid

Install acpid by running the following commands:

    ./configure --prefix=/usr \
                --docdir=/usr/share/doc/acpid-2.0.32 &&
    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.32

### Configuring acpid

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):

    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

Unfortunately, not every computer labels ACPI events in the same way. 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.32` for more examples.

#### Systemd Socket

To start the acpid daemon at boot, install the systemd unit from the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-acpid

### Note

This package uses socket based activation and will be started when something needs it. No standalone unit file is provided for this package.

### Contents

Installed Programs: acpid, acpi_listen, and kacpimon
Installed Libraries: None
Installed Directories: /etc/acpi and /usr/share/doc/acpid-2.0.32

#### Short Descriptions

acpid | is a program that listens for ACPI events and executes the rules that match the received event
acpi_listen | is a simple tool which connects to acpid and listens for events
kacpimon | 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

Last updated on

## at-3.2.2

### Introduction to at

The at package provide 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-11.0 platform.

#### Package Information

- Download (HTTP): http://software.calhariz.com/at/at_3.2.2.orig.tar.gz

- Download MD5 sum: 34c379193bb020f39efa021ac651d475

- Download size: 128 KB

- Estimated disk space required: 2.3 MB including tests

- Estimated build time: less than 0.1 SBU

#### at Dependencies

##### Required

An MTA

##### Optional

Linux-PAM-1.5.1

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

### Installation of at

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       \
                SENDMAIL=/usr/sbin/sendmail       \
                --with-jobdir=/var/spool/atjobs   \
                --with-atspool=/var/spool/atspool \
                --with-systemdsystemunitdir=/lib/systemd/system &&
    make -j1

To test the results, issue: make test.

Now, as the `root` user:

    make install docdir=/usr/share/doc/at-3.2.2 \
                 atdocdir=/usr/share/doc/at-3.2.2

### Configuring at

#### Config Files

`/etc/at.allow` and `/etc/at.deny` determines who can submit jobs via at or batch.

#### Linux PAM Configuration

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

#### Systemd Unit

To start the atd daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable atd

### Contents

Installed Programs: at, atd, atq (symlink), atrm (symlink), atrun, and batch
Installed Libraries: None
Installed Directories: /usr/share/doc/at-3.2.2

#### Short Descriptions

at | queues, examines or deletes jobs for later execution
atd | is the daemon that runs jobs queued for later execution
atq | lists the user's pending jobs, or all jobs, if superuser
atrm | deletes jobs, identified by their job number
atrun | runs jobs queued for later execution
batch | is a script that executes commands when system load levels permit

Last updated on

## autofs-5.1.7

### Introduction to Autofs

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/daemons/autofs/v5/autofs-5.1.7.tar.xz

- Download MD5 sum: 6bd1ea8a9e5dc3a7dc95119e3bbaf52c

- Download size: 324 KB

- Estimated disk space required: 6.7 MB

- Estimated build time: 0.1 SBU

#### Autofs Dependencies

##### Required

libtirpc-1.3.2 and rpcsvc-proto-1.4.2

##### Optional

nfs-utils-2.5.4, libnsl-1.3.0, libxml2-2.9.12, MIT Kerberos V5-1.19.2, OpenLDAP-2.5.7 (client only), and Cyrus SASL-2.1.27

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

### Kernel Configuration

Verify that automounter kernel support has been enabled:

    File systems --->
      <*/M> Kernel automounter support (supports v3, v4, and v5) [CONFIG_AUTOFS_FS]

Optionally, enable the following options in the kernel configuration:

    File systems  --->
      [*] Network File Systems  --->                                      [CONFIG_NETWORK_FILESYSTEMS]
        <*/M> NFS client support                                          [CONFIG_NFS_FS]
        <*/M> SMB3 and CIFS support (advanced network filesystem)         [CONFIG_CIFS]

Recompile and install the new kernel, if necessary.

### Installation of Autofs

Some lines of code need to be removed for this package to be consistent with glibc-2.34. We will remove these lines with some sed commands by line numbers showing slightly different methods.

    sed -e '87d'        \
        -e '2618,2644d' \
        -i daemon/automount.c &&

    sed -i '1178,1180d' daemon/state.c &&
    sed -i '275,+2 d'   lib/alarm.c

Install Autofs by running the following commands:

    ./configure --prefix=/usr             \
                --with-mapdir=/etc/autofs \
                --with-libtirpc           \
                --with-systemd            \
                --without-openldap        \
                --mandir=/usr/share/man &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Caution

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

### Command Explanations

`--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.

`--with-systemd`: This switch enables installation of the bundled systemd units.

`--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.19.2.

### Configuring Autofs

#### Config Files

`/etc/sysconfig/autofs.conf`, `/etc/autofs/auto.master`, `/etc/autofs/auto.misc`, and `/etc/autofs/auto.net`

#### Configuration Information

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.

### Note

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.

#### Systemd Unit

To start Autofs at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable autofs

### Note

You can also specify `OPTIONS` variable in the `/etc/sysconfig/autofs` file with any additional parameters that you might want to pass to the automount daemon.

### Contents

Installed Program: automount
Installed Libraries: lookup_dir.so, lookup_file.so, lookup_files.so, lookup_hosts.so, lookup_ldap.so, lookup_multi.so, lookup_nis.so, lookup_nisplus.so, lookup_program.so, lookup_userhome.so, lookup_yp.so, mount_afs.so, mount_autofs.so, mount_bind.so, mount_changer.so, mount_ext2.so, mount_ext3.so, mount_ext4.so, mount_generic.so, mount_nfs.so, mount_nfs4.so, parse_amd.so, and parse_sun.so
Installed Directories: /usr/lib/autofs, /etc/autofs

#### Short Descriptions

automount | is the daemon that performs the mounting when a request is made for the device

Last updated on

## BlueZ-5.61

### Introduction to BlueZ

The BlueZ package contains the Bluetooth protocol stack for Linux.

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

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/bluetooth/bluez-5.61.tar.xz

- Download MD5 sum: a4c98b6bd2411880cba5930e7f10a1c4

- Download size: 2.0 MB

- Estimated disk space required: 64 MB (add 76 MB for tests)

- Estimated build time: 0.1 SBU (using parallelism=4; add 0.2 SBU for tests)

#### BlueZ Dependencies

##### Required

dbus-1.12.20, GLib-2.68.4, and libical-3.0.10

##### Optional

docutils-0.17.1 (to generate man pages)

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

### Kernel Configuration

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 below the next paragraph if you intend to run the tests, and recompile the kernel if necessary:

    General Setup --->
      [*] Configure standard kernel features (expert users)               [CONFIG_EXPERT]
        [*] Enable timerfd() system call               [CONFIG_TIMERFD]
        [*] Enable eventfd() system call               [CONFIG_EVENTFD]

    [*] Networking support --->                [CONFIG_NET]
      <*/M> Bluetooth subsystem support --->    [CONFIG_BT]
        <*/M> RFCOMM protocol support          [CONFIG_BT_RFCOMM]
        [*]   RFCOMM TTY support               [CONFIG_BT_RFCOMM_TTY]
        <*/M> BNEP protocol support            [CONFIG_BT_BNEP]
        [*]   Multicast filter support         [CONFIG_BT_BNEP_MC_FILTER]
        [*]   Protocol filter support          [CONFIG_BT_BNEP_PROTO_FILTER]
        <*/M> HIDP protocol support            [CONFIG_BT_HIDP]
            Bluetooth device drivers --->
              (Select the appropriate drivers for your Bluetooth hardware)

       <*/M> RF switch subsystem support ----   [CONFIG_RFKILL]

    -*- Cryptographic API --->
       <*/M*> User-space cryptographic algorithm configuration         [CONFIG_CRYPTO_USER]
       <*/M*> User-space interface for hash algorithms                 [CONFIG_CRYPTO_USER_API_HASH]
       <*/M*> User-space interface for symmetric key cipher algorithms [CONFIG_CRYPTO_USER_API_SKCIPHER]
       <*/M*> MD5 digest algorithm                                     [CONFIG_CRYPTO_MD5]
       <*/M*> SHA1 digest algorithm                                    [CONFIG_CRYPTO_SHA1]

    Security Options --->
      <*/M*> Diffie-Hellman operations on retained keys [CONFIG_KEY_DH_OPERATIONS]

### Installation of BlueZ

At first, fix an issue building the package with Glibc-2.34 or later:

    sed 's/pause(/bluez_&/' -i profiles/audio/media.c

Install BlueZ by running the following commands:

    ./configure --prefix=/usr         \
                --sysconfdir=/etc     \
                --localstatedir=/var  \
                --disable-manpages    \
                --enable-library      &&
    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.61 &&
    install -v -m644 doc/*.txt /usr/share/doc/bluez-5.61

### Command Explanations

`--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.17.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.

ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin: This command makes access to the bluetooth daemon more convenient.

### Configuring BlueZ

#### Configuration Files

`/etc/bluetooth/mail.conf` is installed automatically during the installation. Additionally, there are two supplementary configuration files. In addition, you can optionally install the following files, 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

#### Systemd Bluez Services

To start the bluetoothd daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable bluetooth

To start the obexd daemon for a user session (to support some Bluetooth programs using it), enable the previously installed systemd unit for all users by running the following command as the `root` user:

    systemctl enable --global obex

### Note

Systemd will start the Bluetooth daemon only when a bluetooth device is detected on the system.

### Contents

Installed Programs: bluemoon, bluetoothctl, bluetoothd (symlink), btattach, btmon, hex2hcd, l2ping, l2test, mpris-proxy, and rctest
Installed Library: libbluetooth.so
Installed Directories: /etc/bluetooth, /usr/{include,libexec}/bluetooth, and /usr/share/doc/bluez-5.61

#### Short Descriptions

bluemoon | is a Bluemoon configuration utility
bluetoothctl | is the interactive Bluetooth control program
bluetoothd | is the Bluetooth daemon
btmon | provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces
hex2hcd | is used to convert a file needed by Broadcom devices to hcd (Broadcom bluetooth firmware) format
l2ping | is used to send a L2CAP echo request to the Bluetooth MAC address given in dotted hex notation
l2test | is a L2CAP testing program
rctest | is used to test RFCOMM communications on the Bluetooth stack
`libbluetooth.so` | contains the BlueZ 4 API functions

Last updated on

## Bubblewrap-0.5.0

### Introduction to Bubblewrap

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/projectatomic/bubblewrap/releases/download/v0.5.0/bubblewrap-0.5.0.tar.xz

- Download MD5 sum: a1b802c8381527bf6acbeed7e5ceac3a

- Download size: 136 KB

- Estimated disk space required: 2.2 MB

- Estimated build time: 0.1 SBU

#### Bubblewrap Dependencies

##### Optional (to generate manual pages)

libxslt-1.1.34

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

### Installation of Bubblewrap

Install Bubblewrap by running the following commands:

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

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: make check

Now, as the `root` user:

    make install

### Contents

Installed Program: bwrap
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

bwrap | generates a sandbox for a program to run in

Last updated on

## Colord-1.4.5

### Introduction to Colord

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/colord/releases/colord-1.4.5.tar.xz

- Download MD5 sum: adc4501b54fb8667ee99f64cff87e12d

- Download size: 1.8 MB

- Estimated disk space required: 31 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### Colord Dependencies

##### Required

dbus-1.12.20, GLib-2.68.4, Little CMS-2.12, Polkit-0.119, and SQLite-3.36.0

##### Recommended

gobject-introspection-1.68.0, libgudev-237, libgusb-0.3.7, Systemd-249, and Vala-0.52.5

##### Optional

gnome-desktop-40.4 and colord-gtk-0.2.0 (to build the example tools), DocBook-utils-0.6.14, GTK-Doc-1.33.2, libxslt-1.1.34, SANE-1.0.29, ArgyllCMS, and Bash Completion

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

### Installation of Colord

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

First, clean up about 100 warnings:

    mv po/fur.po po/ur.po &&
    sed -i 's/fur/ur/' po/LINGUAS

Install Colord by running the following commands:

    mkdir build &&
    cd build &&

    meson --prefix=/usr            \
          --buildtype=release      \
          -Ddaemon_user=colord     \
          -Dvapi=true              \
          -Dsystemd=true           \
          -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 -k 2 test. One test, `colord-self-test-daemon`, will fail. The test suite must be run after the package is installed, and the system-wide D-Bus Daemon must be running.

### Command Explanations

`--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.52.5 installed.

`-Dsystemd=true`: This switch enables installation of the systemd service.

`-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.

### Contents

Installed Programs: cd-create-profile, cd-fix-profile, cd-iccdump, cd-it8, and colormgr
Installed Libraries: libcolord.so, libcolordcompat.so, libcolordprivate.so, and libcolorhug.so
Installed Directories: /usr/include/colord-1, /usr/lib/colord-{plugins,sensors}, /usr/share/color{d}, /usr/share/gtk-doc/html/colord, and /var/lib/colord

#### Short Descriptions

cd-create-profile | is the Color Manager Profile Creation Tool
cd-fix-profile | is a tool used to fix metadata in ICC profiles
cd-iccdump | dumps the contents of an ICC profile as human readable text
cd-it8 | is the Color Manager Testing Tool
colormgr | is a text-mode program that allows you to interact with colord on the command line
`libcolord.so` | contains the Colord API functions
`libcolordcompat.so` | contains legacy API functions for compatibility with older applications
`libcolordprivate.so` | contains internal API functions for the programs included with Colord
`libcolorhug.so` | contains a simple display hardware colorimiter

Last updated on

## cpio-2.13

### Introduction to cpio

The cpio package contains tools for archiving.

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.bz2

- Download (FTP): ftp://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.bz2

- Download MD5 sum: f3438e672e3fa273a7dc26339dd1eed6

- Download size: 1.3 MB

- Estimated disk space required: 17 MB (with tests and docs)

- Estimated build time: 0.3 SBU (with tests and docs)

#### CPIO Dependencies

##### Optional

texlive-20210325 (or install-tl-unx)

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

### Installation of cpio

First, fix a build issue when using GCC-10 and higher:

    sed -i '/The name/,+2 d' src/global.c

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-20210325 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.13/html &&
    install -v -m644    doc/html/* \
                        /usr/share/doc/cpio-2.13/html &&
    install -v -m644    doc/cpio.{html,txt} \
                        /usr/share/doc/cpio-2.13

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.13

### Command Explanations

`--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.

### Contents

Installed Programs: cpio and mt
Installed Libraries: None
Installed Directories: /usr/share/doc/cpio-2.13

#### Short Descriptions

cpio | copies files to and from archives
mt | controls magnetic tape drive operations

Last updated on

## cups-pk-helper-0.2.6

### Introduction to cups-pk-helper

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/cups-pk-helper/releases/cups-pk-helper-0.2.6.tar.xz

- Download MD5 sum: a9045c7db6e502d6496da8fc71d8820e

- Download size: 160 KB

- Estimated disk space required: 5.9 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/cups-pk-helper-0.2.6-consolidated_fixes-1.patch

#### cups-pk-helper Dependencies

##### Required

Cups-2.3.3op2 and Polkit-0.119

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cups-pk-helper

### Installation of cups-pk-helper

First, fix some deprecated syntax that will prevent cups-pk-helper from building on future versions of CUPS:

    patch -Np1 -i ../cups-pk-helper-0.2.6-consolidated_fixes-1.patch

Install cups-pk-helper by running the following commands:

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

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: cups-pk-helper-mechanism (library executable)
Installed Libraries: None
Installed Directories: None

Last updated on

## dbus-1.12.20

### Introduction to D-Bus

Even though D-Bus was built in LFS, there are some features provided by the package that other BLFS packages need, but their dependencies didn't fit into LFS.

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

#### Package Information

- Download (HTTP): https://dbus.freedesktop.org/releases/dbus/dbus-1.12.20.tar.gz

- Download MD5 sum: dfe8a71f412e0b53be26ed4fbfdc91c4

- Download size: 2.0 MB

- Estimated disk space required: 21 MB (add 18 MB for the tests)

- Estimated build time: 0.3 SBU (add 8.0 SBU for the tests)

#### D-Bus Dependencies

##### Required

Systemd-249

##### Recommended

Xorg Libraries (for dbus-launch program)

##### Optional

For the tests: dbus-glib-0.112, D-Bus Python-1.2.18, PyGObject-3.40.1, and Valgrind-3.17.0; for documentation: Doxygen-1.9.2, xmlto-0.0.28, Ducktype, and Yelp Tools

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

### Installation of D-Bus

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                 \
                --enable-user-session                \
                --disable-doxygen-docs               \
                --disable-xml-docs                   \
                --disable-static                     \
                --docdir=/usr/share/doc/dbus-1.12.20 \
                --with-console-auth-dir=/run/console \
                --with-system-pid-file=/run/dbus/pid \
                --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

The dbus tests cannot be run until after dbus-glib-0.112 has 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

There have 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.

### Command Explanations

`--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.

`--enable-user-session`: This parameter enables per-user DBus sessions with systemd.

`--with-console-auth-dir=/run/console`: This parameter specifies the directory to check for console ownership.

`--with-system-pid-file=/run/dbus/pid`: This parameter specifies the location of the PID file.

`--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.

### Configuring D-Bus

#### Config Files

`/etc/dbus-1/session.conf`, `/etc/dbus-1/system.conf` and `/etc/dbus-1/system.d/*`

#### Configuration Information

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

#### D-Bus Session Daemon

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-session` 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

### Contents

A list of the installed files, along with their short descriptions can be found at ../../../../lfs/view/11.0-systemd/chapter08/dbus.html#contents-dbus.

Last updated on

## Fcron-3.2.1

### Introduction to Fcron

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-11.0 platform.

#### Package Information

- 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

#### Fcron Dependencies

##### Optional

An MTA, text editor (default is vi from the Vim-8.2.3337 package), Linux-PAM-1.5.1, and DocBook-utils-0.6.14

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

### Installation of Fcron

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

Install Fcron by running the following commands:

    ./configure --prefix=/usr          \
                --sysconfdir=/etc      \
                --localstatedir=/var   \
                --without-sendmail     \
                --with-piddir=/run     \
                --with-boot-install=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.

### Command Explanations

`--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=`</path/to/MTA command>`` to use a different mailer command.

`--with-boot-install=no`: This prevents installation of the bootscript included with the package.

`--with-piddir=/run`: This fixes the systemd unit to use the proper directory for PID files so that systemctl does not hang and the unit starts correctly.

`--with-editor=`</path/to/editor>``: This switch allows you to set the default text editor.

`--with-dsssl-dir=`</path/to/dsssl-stylesheets>``: May be used if you have DocBook-utils-0.6.14 installed. Currently, the dsssl stylesheets are located at `/usr/share/sgml/docbook/dsssl-stylesheets-1.79`.

### Configuring Fcron

#### Config Files

`/etc/fcron.conf`, `/etc/fcron.allow`, and `/etc/fcron.deny`

#### Configuration Information

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.

##### Periodic Jobs

If you would like to setup 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

#### Systemd Unit

Enable fcron to start at boot using the previously installed systemd unit.

    systemctl enable fcron

Finally, again as the `root` user, start fcron and generate the `/var/spool/fcron/systab` file:

    systemctl start fcron &&
    fcrontab -z -u systab

### Contents

Installed Programs: fcron, fcrondyn, fcronsighup, and fcrontab
Installed Libraries: None
Installed Directories: /usr/share/doc/fcron-3.2.1 and /var/spool/fcron

#### Short Descriptions

fcron | is the scheduling daemon
fcrondyn | is a user tool intended to interact with a running fcron daemon
fcronsighup | instructs fcron to reread the Fcron tables
fcrontab | is a program used to install, edit, list and remove the tables used by fcron

Last updated on

## GPM-1.20.7

### Introduction to GPM

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-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/gpm/gpm-1.20.7.tar.bz2

- Download (FTP): ftp://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

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/gpm-1.20.7-consolidated-1.patch

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

### Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Input device support ---> [CONFIG_INPUT]
        <*/M> Mouse interface   [CONFIG_INPUT_MOUSEDEV]

### Installation of GPM

Install GPM by running the following commands:

    patch -Np1 -i ../gpm-1.20.7-consolidated-1.patch &&
    ./autogen.sh                                     &&
    ./configure --prefix=/usr --sysconfdir=/etc      &&
    make

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

### Command Explanations

./autogen.sh: This command creates the missing configure script.

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.

### Configuring GPM

#### Systemd Unit

To start the gpm daemon at boot, install the systemd unit from the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-gpm

#### Config Files

`/etc/gpm-root.conf` and `~/.gpm-root`: The default and individual user gpm-root configuration files.

#### Configuration Information

GPM is by default started with the following parameters: `-m /dev/input/mice -t imps2`. If the mentioned parameters don't suit your needs, you can override them by running the following commands as the `root` user:

    install -v -dm755 /etc/systemd/system/gpm.service.d &&
    cat > /etc/systemd/system/gpm.service.d/99-user.conf << EOF
    [Service]
    ExecStart=/usr/sbin/gpm <list of parameters>
    EOF

### Contents

Installed Programs: disable-paste, display-buttons, display-coords, get-versions, gpm, gpm-root, hltest, mev, and mouse-test
Installed Library: libgpm.so
Installed Directory: /usr/share/doc/gpm-1.20.7

#### Short Descriptions

disable-paste | is a security mechanism used to disable the paste buffer
display-buttons | is a simple program that reports the mouse buttons being pressed and released
display-coords | is a simple program that reports the mouse coordinates
get-versions | is used to report the GPM library and server versions
gpm | is a cut and paste utility and mouse server for virtual consoles
gpm-root | is a default handler for gpm. It is used to draw menus on the root window
hltest | is a simple sample application using the high-level library, meant to be read by programmers trying to use the high-level library
mev | is a program to report mouse events
mouse-test | is a tool for determining the mouse type and device it's attached to
`libgpm.so` | contains the API functions to access the GPM daemon

Last updated on

## Hdparm-9.62

### Introduction to Hdparm

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-11.0 platform.

### Warning

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.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/hdparm/hdparm-9.62.tar.gz

- Download MD5 sum: 601ebcf88a24d012bf85ffc47640319a

- Download size: 140 KB

- Estimated disk space required: 1.0 MB

- Estimated build time: less than 0.1 SBU

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

### Installation of Hdparm

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

### Contents

Installed Program: hdparm
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

hdparm | provides a command-line interface to various hard disk ioctls supported by the stock Linux ATA/IDE device driver subsystem

Last updated on

## LSB-Tools-0.9

### Introduction to LSB-Tools

The LSB-Tools package includes tools for Linux Standards Base (LSB) conformance.

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

#### Package Information

- Download (HTTP): https://github.com/djlucas/LSB-Tools/releases/download/v0.9/LSB-Tools-0.9.tar.gz

- Download MD5 sum: 9e55d4b465bc9fd2b8c715f0fa62aa58

- Download size: 16 KB

- Estimated disk space required: 180 KB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/LSB-Tools

### Installation of LSB-Tools

Install LSB-Tools by running the following commands:

    python3 setup.py build

Now, as the `root` user:

    python3 setup.py install --optimize=1

### Configuration Information

The configuration for this package was done in LFS and Systemd. The file `/etc/lsb-release` should already exist. Be sure that the DISTRIB_CODENAME entry has been set properly.

### Contents

Installed Programs: lsb_release, install_initd, and remove_initd
Installed Library: LSB_Tools-0.9-py3.9.egg-info
Installed Directories: /usr/lib/lsb and /usr/lib/python3.9/site-packages/lsbtools

#### Short Descriptions

lsb_release | is a script to give LSB data
install_initd | is a script to activate SysV startup scripts
remove_initd | is a script to deactivate SysV startup scripts

Last updated on

## lm-sensors-3-6-0

### Introduction to lm_sensors

The lm_sensors package provides user-space 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-11.0 platform.

#### Package Information

- 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

#### lm_sensors Dependencies

##### Required

Which-2.21

##### Optional

RRDtool (required to build the sensord program)

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

### Kernel Configuration

Getting your kernel config right is an iterative process that may require that you recompile your kernel a couple of times. The simplest way to go about it is to start by enabling modules and then compile everything that may be needed by Lm Sensors as a module:

    Bus options (PCI etc.)  --->
      [*] PCI support                         [CONFIG_PCI]

    [*] Enable loadable module support  --->  [CONFIG_MODULES]

    Device Drivers  --->
      I2C support --->
        <*/M> I2C device interface            [CONFIG_I2C_CHARDEV]
        I2C Hardware Bus support  --->
          <M> (configure all of them as modules)
      <*/M> Hardware Monitoring support  ---> [CONFIG_HWMON]
        <M> (configure all of them as modules)

Recompile your kernel and reboot into the new kernel. Don't forget to make modules_install We will come back to the kernel in the Configuring section below.

### Installation of lm_sensors

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

### Command Explanations

`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. Compiling RRDtool 1.4.6 requires a sed: sed -i '/ sv_undef/d' bindings/perl-shared/RRDs.xs.

### Configuring lm_sensors

#### Config File

`/etc/sensors3.conf`

#### Configuration Information

To find out what hardware sensors your system has, issue the following command as the `root` user:

    sensors-detect

The appropriate modules should have been loaded and a summary is displayed at the end. Now you know what is needed and you can recompile your kernel to enable just the options you need (i.e., don't enable the modules you cannot use).

### Contents

Installed Programs: fancontrol, isadump, isaset, pwmconfig, sensors, sensors-conf-convert, sensors-detect, and optionally, sensord
Installed Library: libsensors.so
Installed Directories: /etc/sensors.d, /usr/include/sensors and /usr/share/doc/lm_sensors-3-6-0

#### Short Descriptions

fancontrol | 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
isadump | 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)
isaset | is a small helper program to set registers visible through the ISA bus
pwmconfig | tests the pulse width modulation (PWM) outputs of sensors and configures fancontrol
sensors | prints the current readings of all sensor chips
sensors-conf-convert | is a Perl script to convert lm-sensors version 2 configuration files to work with version 3
sensors-detect | is a Perl script that will walk you through the process of scanning your system for various hardware monitoring chips (sensors) supported by `libsensors`, or more generally by the lm_sensors tool suite
sensord | (optional) is a daemon that can be used to periodically log sensor readings
`libsensors.so` | contains the lm_sensors API functions

Last updated on

## Logrotate-3.18.1

### Introduction to Logrotate

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/logrotate/logrotate/releases/download/3.18.1/logrotate-3.18.1.tar.xz

- Download MD5 sum: 07d5aba26c350f9ab5730c25a7277751

- Download size: 160 KB

- Estimated disk space required: 39 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Logrotate Dependencies

##### Required

popt-1.18

##### Optional

An MTA (runtime)

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

### Installation of Logrotate

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

### Configuring Logrotate

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 http://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, execute the following commands, as the `root` user, to create a systemd timer to run daily at 3:00 A.M. (local time):

    cat > /usr/lib/systemd/system/logrotate.service << "EOF" &&
    [Unit]
    Description=Runs the logrotate command
    Documentation=man:logrotate(8)
    DefaultDependencies=no
    After=local-fs.target
    Before=shutdown.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/sbin/logrotate /etc/logrotate.conf
    EOF
    cat > /usr/lib/systemd/system/logrotate.timer << "EOF" &&
    [Unit]
    Description=Runs the logrotate command daily at 3:00 AM

    [Timer]
    OnCalendar=*-*-* 3:00:00
    Persistent=true

    [Install]
    WantedBy=timers.target
    EOF
    systemctl enable logrotate.timer

### Contents

Installed Programs: logrotate
Installed Library: None
Installed Directories: None

#### Short Descriptions

logrotate | performs the log maintenance functions defined in the configuration files

Last updated on

## MC-4.8.27

### Introduction to MC

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-11.0 platform.

#### Package Information

- Download (HTTP): http://ftp.midnight-commander.org/mc-4.8.27.tar.xz

- Download (FTP): ftp://ftp.osuosl.org/pub/midnightcommander/mc-4.8.27.tar.xz

- Download MD5 sum: e51cd40a897d9aa01af251d191637ca4

- Download size: 2.4 MB

- Estimated disk space required: 68 MB (add 85 MB for tests)

- Estimated build time: 0.3 SBU (using parallelism=4; add 0.2 SBU for tests)

#### MC Dependencies

##### Required

GLib-2.68.4 and PCRE-8.45

##### Recommended

slang-2.3.2

##### Optional

Doxygen-1.9.2, GPM-1.20.7, libssh2-1.9.0, Ruby-3.0.2, Samba-4.14.7, UnZip-6.0, X Window System, and Zip-3.0

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

### Installation of MC

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

### Command Explanations

`--sysconfdir=/etc`: This switch places the global configureation 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.

### Configuring MC

#### Config Files

`~/.config/mc/*`

#### Configuration Information

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.

### Contents

Installed Programs: mc and the symlinks mcdiff, mcedit and mcview
Installed Libraries: None
Installed Directories: /etc/mc and /usr/{libexec,share}/mc

#### Short Descriptions

cons.saver | is used internally by mc for saving and restoring the text behind the panels on Linux text console
mc | is a visual shell
mcdiff | is an internal visual diff tool
mcedit | is an internal file editor
mcview | is an internal file viewer

Last updated on

## ModemManager-1.16.10

### Introduction to ModemManager

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/ModemManager/ModemManager-1.16.10.tar.xz

- Download MD5 sum: 88a9fd4373fedd5c9faa83d82a195767

- Download size: 2.2 MB

- Estimated disk space required: 115 MB (with tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with tests)

#### ModemManager Dependencies

##### Required

libgudev-237

##### Recommended

gobject-introspection-1.68.0, libmbim-1.26.0, libqmi-1.30.0, Polkit-0.119, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2

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

### Installation of ModemManager

Install ModemManager by running the following commands:

    ./configure --prefix=/usr                 \
                --sysconfdir=/etc             \
                --localstatedir=/var          \
                --with-systemd-journal        \
                --with-systemd-suspend-resume \
                --disable-static &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--with-systemd-suspend-resume`: This switch forces ModemManager to use the systemd power management facilities.

`--with-systemd-journal` : This switch forces ModemManager 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.

### Configuring ModemManager

#### Systemd Units

To start the ModemManager daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable ModemManager

### Contents

Installed Programs: mmcli and ModemManager
Installed Libraries: libmm-glib.so
Installed Directories: /usr/include/libmm-glib, /usr/include/ModemManager, /usr/lib/ModemManager, /usr/share/ModemManager, /usr/share/gtk-doc/html/libmm-glib, and /usr/share/gtk-doc/html/ModemManager

#### Short Descriptions

mmcli | is an utility used to control and monitor the ModemManager
ModemManager | is a D-Bus service used to communicate with modems
`libmm-glib.so` | contains API functions for communicating with mobile broadband modems, regardless of the protocol used to communicate with the actual device

Last updated on

## notification-daemon-3.20.0

### Introduction to Notification Daemon

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/notification-daemon/3.20/notification-daemon-3.20.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

#### Notification Daemon Dependencies

##### Required

GTK+-3.24.30 and libcanberra-0.30 (Built with GTK+-3.24.30 support).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/notification-daemon

### Installation of Notification Daemon

Install Notification Daemon by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  &&
    make

This package does not come with a testsuite.

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.6.2.

### Contents

Installed Program: none
Installed Libraries: none
Installed Directory: none

Last updated on

## p7zip-17.04

### Introduction to p7zip

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/jinfeihan57/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)

#### p7zip Dependencies

##### Optional

wxWidgets

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

### Installation of p7zip

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

### Note

If using DESTDIR techniques, use DEST_DIR instead.

### Contents

Installed Programs: 7z, 7za, and 7zr
Installed Libraries: None
Installed Directory: /usr/lib/p7zip and /usr/share/doc/p7zip-17.04

#### Short Descriptions

7z | is a file archiver utility
7za | is a stand-alone executable handling less archive formats than 7z
7zr | is a minimal version of 7za that handles only 7z archives

Last updated on

## Pax-20201030

### Introduction to Pax

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-11.0 platform.

#### Package Information

- Download (HTTP): https://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

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

### Installation of Pax

Install pax by running the following commands:.

### Note

This package expands to the directory pax.

    bash Build.sh

This package does not come with a test suite.

Now, as the `root` user:

### Note

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

### Contents

Installed Program: pax

#### Short Descriptions

pax | copies files to and from archives in several formats

Last updated on

## pciutils-3.7.0

### Introduction to PCI Utils

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.7.0.tar.xz

- Download MD5 sum: e6e20482b4f25c5186e6a753c5edc361

- Download size: 364 KB

- Estimated disk space required: 3.8 MB

- Estimated build time: less than 0.1 SBU

#### pciutils Dependencies

##### Recommended

cURL-7.78.0, Wget-1.21.1, or Lynx-2.8.9rel.1 (for the update-pciids script to function correctly).

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

### Installation of PCI Utils

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

### Command Explanations

`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.

### Configuring PCI Utils

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-7.78.0, Lynx-2.8.9rel.1 or Wget-1.21.1 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. Execute the following commands, as the `root` user, to create a systemd timer to update it weekly on Sundays at 2:30 A.M. (local time):

    cat > /usr/lib/systemd/system/update-pciids.service << "EOF" &&
    [Unit]
    Description=Update pci.ids file
    Documentation=man:update-pciids(8)
    DefaultDependencies=no
    After=local-fs.target network-online.target
    Before=shutdown.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/sbin/update-pciids
    EOF
    cat > /usr/lib/systemd/system/update-pciids.timer << "EOF" &&
    [Unit]
    Description=Update pci.ids file weekly

    [Timer]
    OnCalendar=Sun 02:30:00
    Persistent=true

    [Install]
    WantedBy=timers.target
    EOF
    systemctl enable update-pciids.timer

### Contents

Installed Programs: lspci, setpci, and update-pciids
Installed Library: libpci.so
Installed Directory: /usr/include/pci and /usr/share/hwdata

#### Short Descriptions

lspci | is a utility for displaying information about all PCI buses in the system and all devices connected to them
setpci | is a utility for querying and configuring PCI devices
update-pciids | fetches the current version of the PCI ID list.
`libpci.so` | is library that allows applications to access the PCI subsystem

Last updated on

## pm-utils-1.4.1

### Introduction to Power Management Utilities

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-11.0 platform.

#### Package Information

- 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

#### Power Management Utilities Dependencies

##### Optional

xmlto-0.0.28 (to generate man pages)

##### Optional (runtime)

Hdparm-9.62, Wireless Tools-29, ethtool, and vbetool

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pm-utils

### Kernel Configuration

If needed, enable the following options in the kernel configuration and recompile the kernel:

    Power management and ACPI options --->
        <*> Suspend to RAM and standby            [CONFIG_SUSPEND]
        <*> Hibernation (aka 'suspend to disk')   [CONFIG_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.

### Installation of Power Management Utilities

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

### Configuring Power Management Utilities

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=`swap_partition`` (e.g. `resume=/dev/sda1`) to the kernel line in the `/boot/grub/grub.cfg` configuration file.

### Contents

Installed Programs: on_ac_power, pm-hibernate, pm-is-supported, pm-powersave, pm-suspend and pm-suspend-hybrid
Installed Libraries: None
Installed Directories: /etc/pm, /usr/lib/pm-utils and /usr/share/doc/pm-utils-1.4.1

#### Short Descriptions

on_ac_power | is a script that determines whether the system is running on AC power (rather than a battery)
pm-hibernate | 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)
pm-is-supported | is a script that checks whether power management features such as suspend and hibernate are supported
pm-powersave | is a script that puts the computer into powersaving (low power) mode
pm-suspend | 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)
pm-suspend-hybrid | 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)

Last updated on

## Raptor-2.0.15

### Introduction to Raptor

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-11.0 platform.

#### Package Information

- Download (HTTP): https://download.librdf.org/source/raptor2-2.0.15.tar.gz

- Download MD5 sum: a39f6c07ddb20d7dd2ff1f95fa21e2cd

- Download size: 1.9 MB

- Estimated disk space required: 28 MB (additional 1 MB for the tests)

- Estimated build time: 0.2 SBU (additional 0.5 SBU for the tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/raptor-2.0.15-security_fixes-1.patch

#### Raptor Dependencies

##### Required

cURL-7.78.0 and libxslt-1.1.34

##### Optional

GTK-Doc-1.33.2, ICU-69.1 and libyajl

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

### Installation of Raptor

First, apply a patch that fixes a couple of security issues:

    patch -Np1 -i ../raptor-2.0.15-security_fixes-1.patch

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

### Command Explanations

`--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-69.1 and wish to build Raptor with its support.

### Contents

Installed Programs: rapper
Installed Libraries: libraptor2.so
Installed Directories: /usr/include/raptor2 and /usr/share/gtk-doc/html/raptor2

#### Short Descriptions

rapper | is a RDF parsing and serializing utility
`libraptor2.so` | contains the Raptor API functions

Last updated on

## Rasqal-0.9.33

### Introduction to Rasqal

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-11.0 platform.

#### Package Information

- 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)

#### Rasqal Dependencies

##### Required

Raptor-2.0.15

##### Optional

PCRE-8.45 and libgcrypt-1.9.4

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

### Installation of Rasqal

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

### Command Explanations

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

### Contents

Installed Programs: rasqal-config and roqet
Installed Library: librasqal.so
Installed Directories: /usr/include/rasqal and /usr/share/gtk-doc/html/rasqal

#### Short Descriptions

rasqal-config | is an utility for retrieving the installation options of Rasqal
roqet | is an RDF query utility

Last updated on

## Redland-1.0.17

### Introduction to Redland

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-11.0 platform.

#### Package Information

- 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

#### Redland Dependencies

##### Required

Rasqal-0.9.33

##### Optional

Berkeley DB-5.3.28, libiodbc-3.52.15, SQLite-3.36.0, MariaDB-10.6.4 or MySQL, PostgreSQL-13.4, virtuoso, and 3store

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

### Installation of Redland

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

### Command Explanations

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

### Contents

Installed Programs: rdfproc, redland-config and redland-db-upgrade
Installed Libraries: librdf.so and /usr/lib/redland/librdf_storage_*.so
Installed Directories: /usr/lib/redland, /usr/share/gtk-doc/html/redland and /usr/share/redland

#### Short Descriptions

rdfproc | is the Redland RDF processor utility
redland-config | is a script to get information about the installed version of Redland
redland-db-upgrade | upgrades older Redland databases to 0.9.12 format

Last updated on

## sg3_utils-1.46

### Introduction to sg3_utils

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-11.0 platform.

#### Package Information

- Download (HTTP): https://sg.danny.cz/sg/p/sg3_utils-1.46.tar.xz

- Download MD5 sum: 11854fedf831adfd39438dc5ac9202e9

- Download size: 1008 KB

- Estimated disk space required: 31 MB

- Estimated build time: 0.2 SBU

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

### Installation of sg3_utils

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

### Command Explanations

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

### Contents

Installed Programs: rescan-scsi-bus.sh, scsi_logging_level, scsi_mandat, scsi_readcap, scsi_ready, scsi_satl, scsi_start, scsi_stop, scsi_temperature, sg_bg_ctl, sg_compare_and_write, sg_copy_results, sg_dd, sg_decode_sense, sg_emc_trespass, sg_format, sg_get_config, sg_get_lba_status, sg_ident, sg_inq, sg_logs, sg_luns, sg_map, sg_map26, sg_modes, sg_opcodes, sg_persist, sg_prevent, sg_raw, sg_rbuf, sg_rdac, sg_read, sg_read_attr, sg_read_block_limits, sg_read_buffer, sg_read_long, sg_readcap, sg_reassign, sg_referrals, sg_rep_pip, sg_rep_zones, sg_requests, sg_reset, sg_reset_wp, sg_rmsn, sg_rtpg, sg_safte, sg_sanitize, sg_sat_identify, sg_sat_phy_event, sg_sat_read_gplog, sg_sat_set_features, sg_scan, sg_seek, sg_senddiag, sg_ses, sg_ses_microcode, sg_start, sg_stpg, sg_stream_ctl, sg_sync, sg_test_rwbuf, sg_timestamp, sg_turs, sg_unmap, sg_verify, sg_vpd, sg_wr_mode, sg_write_buffer, sg_write_long, sg_write_same, sg_write_verify, sg_write_x, sg_xcopy, sg_zone, sginfo, sgm_dd, and sgp_dd
Installed Library: libsgutils2.so
Installed Directories: None

#### Short Descriptions

rescan-scsi-bus.sh | adds or removes SCSI devices without having to reboot
scsi_logging_level | accesses Linux SCSI logging level information
scsi_mandat | checks SCSI device support for mandatory commands
scsi_readcap | does the SCSI READ CAPACITY command on disks
scsi_ready | does the SCSI TEST UNIT READY on devices
scsi_satl | checks for SCSI to ATA Translation (SAT) device support
scsi_start | starts one or more SCSI disks
scsi_stop | stops one or more SCSI disks
scsi_temperature | fetches the temperature of a SCSI device
sg_bg_ctl | performs a SCSI BACKGROUND CONTROL command on a device to perform "advanced background operations"
sg_compare_and_write | sends the SCSI COMPARE AND WRITE command to device
sg_copy_results | sends the SCSI RECEIVE COPY RESULTS command (XCOPY related)
sg_dd | copies data to and from files and devices. Specialised for devices that understand the SCSI command set
sg_decode_sense | takes SCSI sense data in binary or as a sequence of ASCII hexadecimal bytes and decodes it
sg_emc_trespass | changes ownership of a LUN from another Service-Processor to this one
sg_format | formats or resizes a SCSI disk (perhaps changes its block size)
sg_get_config | sends a SCSI GET CONFIGURATION command (MMC-4 +)
sg_get_elem_status | sends a SCSI GET PHYSICAL ELEMENT STATUS command to a device
sg_get_lba_status | sends the SCSI GET LBA STATUS command
sg_ident | sends a SCSI REPORT or SET IDENTIFYING INFORMATION command
sginfo | access mode page information for a SCSI (or ATAPI) device
sg_inq | sends a SCSI INQUIRY or ATA IDENTIFY (PACKET) DEVICE command and outputs the response
sg_logs | access log pages with SCSI LOG SENSE command
sg_luns | sends the SCSI REPORT LUNS command
sg_map | displays mapping between linux sg and other SCSI devices
sg_map26 | maps a special file to a SCSI generic (sg) device (or vice versa)
sgm_dd | 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
sg_modes | reads mode pages with the SCSI MODE SENSE command
sg_opcodes | reports information on supported SCSI commands or task management functions
sgp_dd | copies data to and from files and devices. Specialized for devices that understand the SCSI command set
sg_persist | sends a SCSI PERSISTENT RESERVE (IN or OUT) command to manipulate registrations and reservations
sg_prevent | sends a SCSI PREVENT ALLOW MEDIUM REMOVAL command
sg_raw | sends an arbitrary SCSI command to a device
sg_rbuf | reads data using the SCSI READ BUFFER command
sg_rdac | displays or modifies the RDAC Redundant Controller Page
sg_read | reads blocks of data continually from the same offset
sg_read_attr | performs a SCSI READ ATTRIBUTE command on a device
sg_read_block_limits | sends a SCSI READ BLOCK LIMITS command
sg_read_buffer | sends a SCSI READ BUFFER command
sg_readcap | sends a SCSI READ CAPACITY command
sg_read_long | sends a SCSI READ LONG command
sg_reassign | sends a SCSI REASSIGN BLOCKS command
sg_referrals | sends a SCSI REPORT REFERRALS command
sg_rep_pip | sends a SCSI REPORT PROVISIONING INITIALIZATION PATTERN command
sg_rep_zones | sends a SCSI REPORT ZONES command
sg_requests | sends one or more SCSI REQUEST SENSE commands
sg_reset | sends a SCSI device, target, bus or host reset; or checks reset state
sg_reset_wp | sends a SCSI RESET WRITE POINTER command
sg_rmsn | sends a SCSI READ MEDIA SERIAL NUMBER command
sg_rtpg | sends a SCSI REPORT TARGET PORT GROUPS command
sg_safte | fetches status information from a SCSI Accessed Fault-Tolerant Enclosure (SAF-TE) device
sg_sanitize | sends a SCSI SANITIZE command
sg_sat_identify | sends an ATA IDENTIFY (PACKET) DEVICE command via a SCSI to ATA Translation (SAT) layer
sg_sat_phy_event | sends an ATA READ LOG EXT command via a SAT pass through to fetch log page 11h which contains SATA phy event counters
sg_sat_read_gplog | sends an ATA READ LOG EXT command via a SCSI to ATA Translation (SAT) layer
sg_sat_set_features | sends an ATA SET FEATURES command via a SCSI to ATA Translation (SAT) layer
sg_scan | does a scan of sg devices (or given SCSI/ATAPI/ATA devices) and prints the results
sg_seek | performs a SCSI SEEK or PRE-FETCH command on a device and it's cache
sg_senddiag | performs a SCSI SEND DIAGNOSTIC command
sg_ses | sends controls and fetches the current status from a SCSI Enclosure Services (SES) device
sg_ses_microcode | sends microcode to a SCSI enclosure
sg_start | sends a SCSI START STOP UNIT command to start, stop, load or eject medium
sg_stpg | sends a SCSI SET TARGET PORT GROUPS command
sg_stream_ctl | performs a SCSI STREAM CONTROL or GET STREAM STATUS command on a device to open or close an I/O stream
sg_sync | sends a SCSI command to synchronize the cache
sg_test_rwbuf | tests the SCSI host adapter by issuing write and read operations on a device's buffer and calculating checksums
sg_timestamp | reports or sets the timestamp on a SCSI device
sg_turs | sends one or more SCSI TEST UNIT READY commands
sg_unmap | sends a SCSI UNMAP command
sg_verify | invokes SCSI VERIFY command(s) on a block device
sg_vpd | fetches Vital Product Data (VPD) pages using a SCSI INQUIRY command
sg_write_buffer | sends a SCSI WRITE BUFFER command
sg_write_long | sends a SCSI WRITE LONG command
sg_write_same | sends a SCSI WRITE SAME command
sg_write_verify | sends a SCSI WRITE AND VERIFY command
sg_write_x | performs SCSI WRITE commands on a device
sg_wr_mode | writes mode pages
sg_xcopy | copies data to and from files and devices using SCSI EXTENDED COPY (XCOPY)
sg_zone | performs SCSI ZONE commands on a device, such as OPEN, CLOSE, FINISH or SEQUENTIALIZE
`libsgutils2.so` | contains the sg3_utils API functions

Last updated on

## Sysstat-12.5.4

### Introduction to Sysstat

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-11.0 platform.

#### Package Information

- Download (HTTP): http://sebastien.godard.pagesperso-orange.fr/sysstat-12.5.4.tar.xz

- Download MD5 sum: 697890a0fe72be4afe1dcdfff802bde1

- Download size: 836 KB

- Estimated disk space required: 29 MB

- Estimated build time: 0.1 SBU

#### Sysstat Dependencies

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.

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

### Installation of Sysstat

Install Sysstat by running the following commands:

    sa_lib_dir=/usr/lib/sa    \
    sa_dir=/var/log/sa        \
    conf_dir=/etc/sysconfig   \
    ./configure --prefix=/usr \
                --disable-file-attr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

Install the systemd unit by running the following command as the `root` user:

    install -v -m644 sysstat.service /usr/lib/systemd/system/sysstat.service

Fix the systemd unit by running the following command as the `root` user:

    sed -i "/^Also=/d" /usr/lib/systemd/system/sysstat.service

### Command Explanations

`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.

### Note

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.

### Configuring Sysstat

#### Config Files

`/etc/sysconfig/sysstat` and `/etc/sysconfig/sysstat.ioconf`

#### Cron Information

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.

#### System Startup Information

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 enabling the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable sysstat

### Contents

Installed Programs: cifsiostat, iostat, mpstat, pidstat, sadf, sar, and tapestat
Installed Libraries: None
Installed Directories: /usr/lib/sa, /usr/share/doc/sysstat-12.5.4 and /var/log/sa

#### Short Descriptions

cifsiostat | displays statistics about read and write operations on CIFS filesystems
iostat | reports CPU statistics and input/output statistics for devices and partitions
mpstat | writes activities for each available processor
pidstat | is used for monitoring individual tasks currently being managed by the Linux kernel
sadf | 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
sar | is used for displaying the contents of elected cumulative activity counters in the operating system
tapestat | is used for monitoring the activity of tape drives connected to a system

Last updated on

## Systemd-249

### Introduction to systemd

While systemd was installed when building LFS, there are many features provided by the package that were not included in the initial installation because Linux-PAM was not yet installed. The systemd package needs to be rebuilt to provide a working systemd-logind service, which provides many additional features for dependent packages.

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

#### Package Information

- Download (HTTP): https://github.com/systemd/systemd/archive/v249/systemd-249.tar.gz

- Download MD5 sum: 8e8adf909c255914dfc10709bd372e69

- Download size: 10 MB

- Estimated disk space required: 287 MB (with tests)

- Estimated build time: 2.5 SBU (with tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/systemd-249-upstream_fixes-1.patch

#### systemd Dependencies

##### Required

Jinja2-3.0.1 and Linux-PAM-1.5.1

##### Recommended Runtime Dependencies

Polkit-0.119

##### Optional

btrfs-progs-5.13.1, cURL-7.78.0, cryptsetup-2.3.6, git-2.33.0, GnuTLS-3.7.2, iptables-1.8.7, libgcrypt-1.9.4, libidn2-2.3.2, libpwquality-1.4.4, libseccomp-2.5.1, libxkbcommon-1.3.0, make-ca-1.7, p11-kit-0.24.0, pcre2-10.37, qemu-6.1.0, qrencode-4.1.1, rsync-3.2.3, Valgrind-3.17.0, zsh-5.8 (for the zsh completions), gnu-efi, kexec-tools, libdw, libfido2, libmicrohttpd, lz4, quota-tools, Sphinx, and tpm2-tss

##### Optional (to rebuild the manual pages)

docbook-xml-4.5, docbook-xsl-1.79.2, libxslt-1.1.34, and lxml-4.6.3 (to build the index of systemd manual pages)

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

### Installation of systemd

Apply a patch to fix a security vulnerability:

    patch -Np1 -i ../systemd-249-upstream_fixes-1.patch

Remove two unneeded groups, `render` and `sgx`, from the default udev rules:

    sed -i -e 's/GROUP="render"/GROUP="video"/' \
           -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in

Rebuild systemd by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr                 \
          --buildtype=release           \
          -Dblkid=true                  \
          -Ddefault-dnssec=no           \
          -Dfirstboot=false             \
          -Dinstall-tests=false         \
          -Dldconfig=false              \
          -Dman=auto                    \
          -Dsysusers=false              \
          -Drpmmacrosdir=no             \
          -Db_lto=false                 \
          -Dhomed=false                 \
          -Duserdb=false                \
          -Dmode=release                \
          -Dpamconfdir=/etc/pam.d       \
          -Ddocdir=/usr/share/doc/systemd-249 \
          ..                            &&

    ninja

### Note

For the best test results, make sure you run the testsuite from a system that is booted by the same systemd version you are rebuilding.

To test the results, issue: PATH+=:/usr/sbin ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dpamconfdir=/etc/pam.d`: Forces the PAM files to be installed in /etc/pam.d rather than /usr/lib/pam.d.

`-Duserdb=false`: Removes a daemon that does not offer any use under a BLFS configuration. If you wish to enable the userdbd daemon, replace "false" with "true" in the above meson command.

`-Dhomed=false`: Removes a daemon that does not offer any use under a traditional BLFS configuration, especially using accounts created with useradd. To enable systemd-homed, first ensure that you have cryptsetup-2.3.6 and libpwquality-1.4.4, and then change "false" to "true" in the above meson command.

### Configuring systemd

The `/etc/pam.d/system-session` file needs to be modified and a new file needs to be created in order for systemd-logind to work correctly. Run the following commands as the `root` user:

    cat >> /etc/pam.d/system-session << "EOF"
    # Begin Systemd addition

    session  required    pam_loginuid.so
    session  optional    pam_systemd.so

    # End Systemd addition
    EOF

    cat > /etc/pam.d/systemd-user << "EOF"
    # Begin /etc/pam.d/systemd-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_systemd.so

    auth     required    pam_deny.so
    password required    pam_deny.so

    # End /etc/pam.d/systemd-user
    EOF

### Warning

If upgrading from a previous version of systemd and an initrd is used for system boot, you should generate a new initrd before rebooting the system.

### Contents

A list of the installed files, along with their short descriptions can be found at ../../../../lfs/view/11.0/chapter08/systemd.html#contents-systemd.

Listed below are the newly installed libraries and directories along with short descriptions.

Installed Programs: homectl (if cryptsetup-2.3.6 is installed) and userdbctl (optionally)
Installed Libraries: pam_systemd.so (in `/lib/security`)
Installed Directories: None

#### Short Descriptions

homectl | is a tool to create, remove, change, or inspect a home directory managed by systemd-homed; note that it's useless for the classic UNIX users and home directories which we are using in LFS/BLFS book
userdbctl | inspects users, groups, and group memberships
`pam_systemd.so` | is a PAM module used to register user sessions with the systemd login manager, systemd-logind

Last updated on

## UDisks-2.9.3

### Introduction to UDisks

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-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/storaged-project/udisks/releases/download/udisks-2.9.3/udisks-2.9.3.tar.bz2

- Download MD5 sum: 63e18a47069000cb31d5f98cc3c83be0

- Download size: 1.7 MB

- Estimated disk space required: 38 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### UDisks Dependencies

##### Required

libatasmart-0.19, libblockdev-2.26, libgudev-237, libxslt-1.1.34, and Polkit-0.119

##### Required at runtime

btrfs-progs-5.13.1, dosfstools-4.2, gptfdisk-1.0.8, mdadm-4.1, and xfsprogs-5.13.0

##### Recommended

Systemd-249

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

D-Bus Python-1.2.18 (for the integration tests), GTK-Doc-1.33.2, LVM2-2.03.13, ntfs-3g-2021.8.22, PyGObject-3.40.1 (for the integration tests), exFAT, and libiscsi

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

### Installation of UDisks

Install UDisks by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --disable-static     &&
    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

### Command Explanations

`--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.

### Contents

Installed Programs: udisksctl and umount.udisks2
Installed Library: libudisks2.so
Installed Directories: /etc/udisks2, /usr/include/udisks2, /usr/libexec/udisks2, /usr/share/gtk-doc/html/udisks2, and /var/{lib,run}/udisks2

#### Short Descriptions

udisksctl | is a command-line program used to interact with the udisksd daemon
umount.udisks2 | is a command-line program used to unmount file systems that have been mounted by the UDisks daemon
`libudisks2.so` | contains the UDisks API functions

Last updated on

## UnRar-6.0.7

### Introduction to UnRar

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.rarlab.com/rar/unrarsrc-6.0.7.tar.gz

- Download MD5 sum: de5017a63a610cb82dba7d33bd826fb6

- Download size: 228 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: 0.1 SBU

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

### Installation of UnRar

### Note

This package extracts the tarball to the unversioned directory `unrar` and not the expected directory `unrar-6.0.7`.

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

### Contents

Installed Program: unrar
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

unrar | uncompresses a `RAR` archive

Last updated on

## UnZip-6.0

### Introduction to UnZip

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-11.0 platform.

### Caution

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.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/infozip/unzip60.tar.gz

- Download (FTP): ftp://ftp.info-zip.org/pub/infozip/src/unzip60.tgz

- Download MD5 sum: 62b490407489521db863b523a7f86375

- Download size: 1.3 MB

- Estimated disk space required: 9 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/unzip-6.0-consolidated_fixes-1.patch

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

### UnZip Locale Issues

### Note

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.5.2 to unpack the ZIP archive. Then fix the damage made to the filenames using the convmv tool (http://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>

### Installation of UnZip

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

### Command Explanations

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 which are larger than 2GB when extracted.

### Contents

Installed Programs: funzip, unzip, unzipfsx, zipgrep, and zipinfo
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

funzip | allows the output of unzip commands to be redirected
unzip | lists, tests or extracts files from a `ZIP` archive
unzipfsx | is a self-extracting stub that can be prepended to a `ZIP` archive. Files in this format allow the recipient to decompress the archive without installing UnZip
zipgrep | searches files in a `ZIP` archive for lines matching a pattern
zipinfo | produces technical information about the files in a `ZIP` archive, including file access permissions, encryption status, type of compression, etc

Last updated on

## UPower-0_99_13

### Introduction to UPower

The UPower package provides an interface to 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-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.freedesktop.org/upower/upower/-/archive/UPOWER_0_99_13/upower-UPOWER_0_99_13.tar.bz2

- Download MD5 sum: d58b028211aee6050c26c99b777ba60f

- Download size: 144 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.1 SBU (using parallelism=4)

#### UPower Dependencies

##### Required

libgudev-237, libusb-1.0.24, and Polkit-0.119

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2, PyGObject-3.40.1, dbusmock-0.23.1, umockdev-0.16.2 (for part of the test suite), and libimobiledevice

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

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    General Setup --->
        [*] Namespaces support --->     [CONFIG_NAMESPACES]
           [*] User namespace           [CONFIG_USER_NS]

### Installation of UPower

Install UPower by running the following commands:

    ./autogen.sh --prefix=/usr        \
                 --sysconfdir=/etc    \
                 --localstatedir=/var \
                 --enable-deprecated  \
                 --disable-static     &&
    make

To test the results, issue: make check. Some checks may not pass due to missing files. Test suite should be run from a local GUI session started with dbus-launch.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-deprecated`: This switch enables deprecated functionality which is still needed by some applications.

`--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.

### Configuring UPower

#### Systemd Unit

To start the UPower service at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable upower

### Contents

Installed Program: upower
Installed Libraries: libupower-glib.so
Installed Directories: /etc/UPower, /usr/include/libupower-glib, and /var/lib/upower

#### Short Descriptions

upower | is the UPower command line tool
`libupower-glib.so` | contains the UPower API functions

Last updated on

## usbutils-014

### Introduction to USB Utils

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-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/usb/usbutils/usbutils-014.tar.xz

- Download MD5 sum: f21aa68ee7870b161921a590be7765e6

- Download size: 162 KB

- Estimated disk space required: 3.0 MB

- Estimated build time: 0.1 SBU

#### USB Utils Dependencies

##### Required

libusb-1.0.24 and Wget-1.21.1

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

### Installation of USB Utils

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.1, 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.

### Configuring USB Utils

You should update the `/usr/share/hwdata/usb.ids` file periodically. Execute the following commands, as the `root` user, to create a systemd timer to update it weekly on Sundays at 2:30 A.M. (local time):

    cat > /usr/lib/systemd/system/update-usbids.service << "EOF" &&
    [Unit]
    Description=Update usb.ids file
    Documentation=man:lsusb(8)
    DefaultDependencies=no
    After=local-fs.target network-online.target
    Before=shutdown.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids
    EOF
    cat > /usr/lib/systemd/system/update-usbids.timer << "EOF" &&
    [Unit]
    Description=Update usb.ids file weekly

    [Timer]
    OnCalendar=Sun 03:00:00
    Persistent=true

    [Install]
    WantedBy=timers.target
    EOF
    systemctl enable update-usbids.timer

### Contents

Installed Programs: lsusb, lsusb.py, usb-devices, and usbhid-dump
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

lsusb | 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
lsusb.py | displays information about all USB buses in the system and all devices connected to them in reasonable human friendly form
usb-devices | 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
usbhid-dump | is used to dump report descriptors and streams from HID (human interface device) interfaces of USB devices

Last updated on

## Which-2.21 and Alternatives

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.

### Introduction to GNU Which

The first option is to install the actual GNU which package.

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/which/which-2.21.tar.gz

- Download (FTP): ftp://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

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

### Installation of Which

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

### Contents

Installed Program: which
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

which | shows the full path of (shell) commands installed in your `PATH`

### The 'which' Script

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.

Last updated on

## Zip-3.0

### Introduction to Zip

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-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/infozip/zip30.tar.gz

- Download (FTP): ftp://ftp.info-zip.org/pub/infozip/src/zip30.tgz

- Download MD5 sum: 7b74551e63f8ee6aab6fbc86676c0d37

- Download size: 1.1 MB

- Estimated disk space required: 6.4 MB

- Estimated build time: 0.1 SBU

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

### Installation of Zip

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

### Command Explanations

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.

### Contents

Installed Programs: zip, zipcloak, zipnote, and zipsplit
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

zip | compresses files into a `ZIP` archive
zipcloak | is a utility to encrypt and decrypt a `ZIP` archive
zipnote | reads or writes comments stored in a `ZIP` file
zipsplit | is a utility to split `ZIP` files into smaller files

Last updated on

## Chapter 13. Programming

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

## Autoconf2.13

### Introduction to Autoconf2.13

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

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz

- Download MD5 sum: 9de56d4a161a723228220b0f425dc711

- Download size: 434 KB

- Estimated disk space required: 2.8 MB

- Estimated build time: less than 0.1 SBU (additional 0.1 SBU for the tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/autoconf-2.13-consolidated_fixes-1.patch

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

### Installation of Autoconf2.13

Install Autoconf by running the following commands:

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

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

Now, as the `root` user:

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

### Command Explanations

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

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

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

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

### Contents

Installed Programs: autoconf2.13, autoheader2.13, autoreconf2.13, autoscan2.13, autoupdate2.13, and ifnames2.13
Installed Library: None
Installed Directory: /usr/share/autoconf-2.13

#### Short Descriptions

autoconf2.13 | Produces shell scripts that automatically configure software source code packages to adapt to many kinds of Unix-like systems
autoheader2.13 | is a tool for creating template files of C #define statements for configure to use
autoreconf2.13 | This automatically runs autoconf2.13, autoheader2.13, aclocal, automake, gettextize and libtoolize in the right order when changes have been made to autoconf or automake template files
autoscan2.13 | Can be used as a preliminary step in creating a `configure.in` file
autoupdate2.13 | Modifies a `configure.in` file that still calls autoconf macros by their old names to use the current macro names
ifnames2.13 | Prints the identifiers that the package uses in C preprocessor conditionals [If a package has already been set up to have some portability, this program can help determine what configure needs to check for. It can also fill in gaps in a configure.in file generated by autoscan]

Last updated on

## Cbindgen-0.20.0

### Introduction to Cbindgen

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

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

#### Package Information

- Download (HTTP): https://github.com/eqrion/cbindgen/archive/v0.20.0/cbindgen-0.20.0.tar.gz

- Download MD5 sum: 19e6e9bc319f689ef433eb59090e3f3c

- Download size: 192 KB

- Estimated disk space required: 124 MB (add 568 MB for tests)

- Estimated build time: 0.8 SBU (add 0.4 SBU for tests), both on a 4-core machine

#### cbindgen Dependencies

##### Required

rustc-1.52.0

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

### Installation of cbindgen

### Note

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

Install cbindgen by running the following commands:

    cargo build --release

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

Now, as the `root` user:

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

### Contents

Installed Program: cbindgen
Installed Library: none
Installed Directory: none

#### Short Descriptions

cbindgen | generates C bindings for Rust code

Last updated on

## Clisp-2.49

### Introduction to Clisp

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

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/clisp/latest/clisp-2.49.tar.bz2

- Download (FTP): ftp://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)

#### Additional Downloads

- Optional patch: https://www.linuxfromscratch.org/patches/blfs/11.0/clisp-2.49-readline7_fixes-1.patch (required if building against libffcall)

#### Clisp Dependencies

##### Recommended

libsigsegv-2.13

##### Optional

libffcall

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

### Installation of Clisp

### Note

This package does not support parallel build.

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

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

Remove two tests, which fail for unknown reasons:

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

Install Clisp by running the following commands:

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

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

Install Clisp by running the following commands:

    mkdir build &&
    cd    build &&

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

    ulimit -s 16384 &&
    make -j1

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

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

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

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

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

### Contents

Installed Programs: clisp, clisp-link
Installed Libraries: various static libraries in `/usr/lib/clisp-2.49/base/`
Installed Directories: /usr/lib/clisp-2.49 /usr/share/doc/clisp-2.49 /usr/share/emacs/site-lisp;

#### Short Descriptions

clisp | is an ANSI Common Lisp compiler, interpreter, and debugger
clisp-link | is used to link an external module to clisp

Last updated on

## CMake-3.21.2

### Introduction to CMake

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

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

#### Package Information

- Download (HTTP): https://cmake.org/files/v3.21/cmake-3.21.2.tar.gz

- Download MD5 sum: 2ecc4091021c44f400bfbb25dcc77e97

- Download size: 9.2 MB

- Estimated disk space required: 319 MB (add 881 MB for tests)

- Estimated build time: 2.0 SBU (add 3.2 SBU for tests, both using parallelism=4)

#### CMake Dependencies

##### Required

libuv-1.42.0

##### Recommended

cURL-7.78.0, libarchive-3.5.2, and nghttp2-1.44.0

##### Optional

GCC-11.2.0 (for gfortran), git-2.33.0 (for use during tests), Mercurial-5.9 (for use during tests), Qt-5.15.2 (for the Qt-based GUI), Subversion-1.14.1 (for testing), rhash, and Sphinx (for building documents)

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

### Installation of CMake

Install CMake by running the following commands:

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

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

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

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

Now, as the `root` user:

    make install

### Command Explanations

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

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

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

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

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

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

### Contents

Installed Programs: ccmake, cmake, cmake-gui (optional), cpack, and ctest
Installed Libraries: None
Installed Directories: /usr/share/cmake-3.21 and /usr/share/doc/cmake-3.21.2

#### Short Descriptions

ccmake | is a curses based interactive frontend to cmake
cmake | is the makefile generator
cmake-gui | (optional) is the Qt-based frontend to cmake
cpack | is the CMake packaging program
ctest | is a testing utility for cmake-generated build trees

Last updated on

## Doxygen-1.9.2

### Introduction to Doxygen

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

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

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

#### Package Information

- Download (HTTP): https://doxygen.nl/files/doxygen-1.9.2.src.tar.gz

- Download MD5 sum: 84c0522bb65d17f9127896268b72ea2a

- Download size: 4.8 MB

- Estimated disk space required: 165 MB (with tests)

- Estimated build time: 1.2 SBU (using parallelism=4; with tests)

#### Doxygen Dependencies

##### Required

CMake-3.21.2 and git-2.33.0

##### Optional

Graphviz-2.48.0, ghostscript-9.54.0, libxml2-2.9.12 (required for the tests), LLVM-12.0.1 (with clang), Python-2.7.18, Qt-5.15.2 (for doxywizard), texlive-20210325 (or install-tl-unx), xapian-1.4.18 (for doxyindexer), and javacc

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

### Installation of Doxygen

Install Doxygen by running the following commands:

    mkdir -v build &&
    cd       build &&

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

    make

To test the results, issue: make tests. One test, 012_cite.dox, is known to fail.

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

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

    make docs

Now, as the `root` user:

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

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

### Command Explanations

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

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

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

### Configuring Doxygen

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

### Contents

Installed Programs: doxygen and optionally, doxywizard, doxyindexer and doxysearch.cgi
Installed Libraries: None
Installed Directory: /usr/share/doc/doxygen-1.9.2

#### Short Descriptions

doxygen | is a command-line based utility used to generate template configuration files and then generate documentation from these templates. Use doxygen --help for an explanation of the command-line parameters
doxywizard | is a GUI front-end for configuring and running doxygen
doxyindexer | generates a search index called `doxysearch.db` from one or more search data files produced by doxygen. See, e.g. https://javacc.github.io/javacc/
doxysearch.cgi | is a CGI program to search the data indexed by doxyindexer

Last updated on

## GCC-11.2.0

### Introduction to GCC

The GCC package contains the GNU Compiler Collection. This page describes the installation of compilers for the following languages: C, C++, D, Fortran, Objective C, Objective C++, and Go.

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

### Caution

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

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz

- Download MD5 sum: 31c86f2ced76acac66992eeedce2fce2

- Download size: 77 MB

- Estimated disk space required: 8.0 GB (2.4 GB installed with all listed languages; add 1.0 GB for tests)

- Estimated build time: 26 SBU (add 56 SBU for tests; both with parallelism=4)

#### GCC Dependencies

##### Optional

GDB-10.2, Valgrind-3.17.0 (for tests), and ISL (to enable graphite optimization)

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

### Installation of GCC

### Important

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

Do not continue with the make install command until you are confident the build was successful. You can compare your test results with those found at https://gcc.gnu.org/ml/gcc-testresults/. You may also want to refer to the information found in the GCC section of Chapter 8 in the LFS book (../../../../lfs/view/11.0/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 anyways, add `--disable-bootstrap` to the ./configure options below.

As in LFS fix an issue breaking libasan.a identified upstream:

    sed -e '/static.*SIGSTKSZ/d' \
        -e 's/return kAltStackSize/return SIGSTKSZ * 4/' \
        -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp

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-languages=c,c++,d,fortran,go,objc,obj-c++ &&
    make

If you have installed additional packages such as Valgrind and GDB, the GCC part of the testsuite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). As of gcc-11.1.0, about 90 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 around 102 unexpected failures out of over 481,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

A few tests, less than 20 out of about 450,000, will fail, but unless the failures are excessive, they can be ignored.

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/11.2.0/include{,-fixed}

    rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/11.2.0/include-fixed/bits/

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

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

### Command Explanations

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

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

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

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

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

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

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

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

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

rm -rf .../include-fixed/bits/: Remove an erroneous file in gcc added by the fixincludes process.

### Contents

Some program and library names and descriptions are not listed here, but can be found at ../../../../lfs/view/11.0/chapter08/gcc.html#contents-gcc as they were initially installed during the building of LFS.

Installed Programs: gccgo, gdc, gfortran, go, and gofmt, hard-linked to architecture specific names
Installed Libraries: libgfortran.{so,a}, libgdruntime.{so,a}, libgphobos.{so,a} libgo.{so,a}, libgobegin.a, libgolibbegin.a, libobjc.{so,a}, and numerous other run-time libraries and executables
Installed Directories: /usr/lib/go

#### Short Descriptions

gccgo | is a GCC-based compiler for the Go language
go | is a tool for managing Go source code
gofmt | is a tool for formatting Go source code
gdc | is a GCC-based compiler for the D language
gfortran | is a GCC-based compiler for the Fortran language

Last updated on

## GC-8.0.4

### Introduction to GC

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

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

#### Package Information

- Download (HTTP): https://www.hboehm.info/gc/gc_source/gc-8.0.4.tar.gz

- Download MD5 sum: 67a5093e2f9f381bd550aa891d00b54b

- Download size: 1.1 MB

- Estimated disk space required: 11 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

##### Optional

libatomic_ops-7.6.10

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

### Installation of GC

Install GC by running the following commands:

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

To test the results, issue: make check.

Now, as the `root` user:

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

### Command Explanations

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

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

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

### Contents

Installed Programs: None
Installed Libraries: libcord.so, libgc.so, and libgccpp.so
Installed Directories: /usr/include/gc and /usr/share/doc/gc-8.0.4

#### Short Descriptions

`libcord.so` | contains a tree-based string library
`libgc.so` | contains a C interface to the conservative garbage collector, primarily designed to replace the C malloc function
`libgccpp.so` | contains a C++ interface to the conservative garbage collector

Last updated on

## GDB-10.2

### Introduction to GDB

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

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.xz

- Download MD5 sum: c044b7146903ec51c9d2337a29aee93b

- Download size: 21 MB

- Estimated disk space required: 761 MB (add 750 MB for docs; add 633 MB for tests)

- Estimated build time: 1.7 SBU (Using parallelism=4; add 30 SBU for tests; add 0.5 SBU for docs)

#### GDB Dependencies

##### Recommended Runtime Dependency

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

##### Optional

Doxygen-1.9.2, GCC-11.2.0 (ada, gfortran, and go are used for tests), Guile-3.0.7, Python-2.7.18, rustc-1.52.0 (used for some tests), Valgrind-3.17.0, and SystemTap (run-time, used for tests)

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

### Installation of GDB

Install GDB by running the following commands:

    mkdir build &&
    cd    build &&

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

Optionally, to build the API documentation using Doxygen-1.9.2, 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 few tests assume that the header file `<sys/sdt.h>`, part of SystemTap, is present.

- A test run of the test suite had 230 unexpected failures (out of over 70000 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

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-10.2 &&
    rm -rf gdb/doc/doxy/xml &&
    cp -Rv gdb/doc/doxy /usr/share/doc/gdb-10.2

### Command Explanations

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

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

### Contents

Installed Programs: gcore, gdb and gdbserver
Installed Library: None
Installed Directories: /usr/{include,share}/gdb and /usr/share/doc/gdb-10.2

#### Short Descriptions

gcore | generates a core dump of a running program
gdb | is the GNU Debugger
gdbserver | is a remote server for the GNU debugger (it allows programs to be debugged from a different machine)

Last updated on

## Git-2.33.0

### Introduction to Git

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

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

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/software/scm/git/git-2.33.0.tar.xz

- Download MD5 sum: 0990ff97af1511be0d9f0d3223dd4359

- Download size: 6.2 MB

- Estimated disk space required: 332 MB (with downloaded documentation, add 16 MB to build documentation)

- Estimated build time: 0.4 SBU (with parallelism=4; add 0.4 SBU for building documentation and 2.1 SBU for tests, both with parallelism=4)

#### Additional Downloads

- https://www.kernel.org/pub/software/scm/git/git-manpages-2.33.0.tar.xz (not needed if you've installed asciidoc-9.1.0, xmlto-0.0.28, and prefer to rebuild them)

- https://www.kernel.org/pub/software/scm/git/git-htmldocs-2.33.0.tar.xz and other docs (not needed if you've installed asciidoc-9.1.0 and want to rebuild the documentation).

#### Git Dependencies

##### Recommended

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

##### Optional

GnuPG-2.2.29 (runtime, may be used to sign Git commits or tags, or verify the signatures of them), OpenSSH-8.7p1 (runtime, needed to use Git over ssh), pcre2-10.37 (or the deprecated PCRE-8.45), in either case configured with `--enable-jit`, Subversion-1.14.1 with Perl bindings (runtime, for git svn), Tk-8.6.11.1 (gitk, a simple Git repository viewer, uses Tk at runtime), Valgrind-3.17.0, Authen::SASL and MIME::Base64 (both runtime, for git send-email)

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

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

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

### Installation of Git

Install Git by running the following commands:

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

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

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

    make html

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

    make man

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

Now, as the `root` user:

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

#### If you created the man pages and/or html docs

Install the man pages as the `root` user:

    make install-man

Install the html docs as the `root` user:

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

#### If you downloaded the man pages and/or html docs

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

    tar -xf ../git-manpages-2.33.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.33.0 &&
    tar   -xf   ../git-htmldocs-2.33.0.tar.xz \
          -C    /usr/share/doc/git-2.33.0 --no-same-owner --no-overwrite-dir &&

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

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

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

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

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

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

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

### Command Explanations

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

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

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

`--with-libpcre`: 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.33.0.tar.gz -C /usr/share/man --no-same-owner: This untars `git-manpages-2.33.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.33.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.

### Configuring Git

#### Config Files

`~/.gitconfig` and `/etc/gitconfig`

### Contents

Installed Programs: git, git-receive-pack, git-upload-archive, and git-upload-pack (hardlinked to each other), git-cvsserver, git-shell, and gitk
Installed Libraries: None
Installed Directories: /usr/libexec/git-core, and /usr/share/{doc/git-2.33.0,git-core,git-gui,gitk,gitweb}

#### Short Descriptions

git | is the stupid content tracker
git-cvsserver | is a CVS server emulator for Git
gitk | is a graphical Git repository browser (needs Tk-8.6.11.1)
git-receive-pack | is invoked by git send-pack and updates the repository with the information fed from the remote end
git-shell | is a login shell for SSH accounts to provide restricted Git access
git-upload-archive | is invoked by git archive --remote and sends a generated archive to the other end over the git protocol
git-upload-pack | is invoked by git fetch-pack, it discovers what objects the other side is missing, and sends them after packing

Last updated on

## Running a Git Server

### Introduction

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

#### Server Dependencies

##### Required

git-2.33.0 and OpenSSH-8.7p1

### Setting up a Git Server

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

Configuration of the server consists of the following steps:

#### 1. Setup Users, Groups, and Permissions

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

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

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

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

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

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

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

    git config --system init.defaultBranch trunk

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

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

#### 2. Create a git repository

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

### Note

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

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

#### 3. Populate the repository from a client system

### Note

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

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

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

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

On the developer's machine, setup some files to be pushed to the repository as the initial content:

### Note

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

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

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

    git push

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

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

### Note

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

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

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

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

Now, the repository can be cloned using

    git clone git@gitserver:project1.git

#### 4. Configure the Server

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

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

### Note

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

To start the server at boot time, install the `git-daemon.service` unit from the blfs-systemd-units-20210819 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 existance enables, its absence disables the export of that repository.

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

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

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

- 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.

Last updated on

## Guile-3.0.7

### Introduction to Guile

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

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

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/guile/guile-3.0.7.tar.xz

- Download (FTP): ftp://ftp.gnu.org/gnu/guile/guile-3.0.7.tar.xz

- Download MD5 sum: eb7d26dae3a2fc85a36511a68d76f7d1

- Download size: 13 MB

- Estimated disk space required: 202 MB (add 4 MB for tests)

- Estimated build time: 1.8 SBU (Using parallelism=4; add 0.4 SBU for tests)

#### Guile Dependencies

##### Required

GC-8.0.4 and libunistring-0.9.10

##### Optional

Emacs-27.2 and GDB-10.2 (run-time only dependencies).

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

### Installation of Guile

First, fix a build failure with glibc-2.34 installed:

    sed -e 's/#ifndef __attribute_maybe_unused__//' \
        -e '174d'                                   \
        -i lib/libc-config.h

Install Guile by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/guile-3.0.7 &&
    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.

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.7/{guile.html,ref} &&
    mv /usr/share/doc/guile-3.0.7/r5rs{.html,}     &&

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

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

### Command Explanations

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

### Contents

Installed Programs: guild, guile, guile-config, guile-snarf and guile-tools
Installed Libraries: libguile-3.0.so and guile-readline.so
Installed Directories: /usr/include/guile, /usr/lib/guile, /usr/share/doc/guile-3.0.7 and /usr/share/guile

#### Short Descriptions

guile | is a stand-alone Scheme interpreter for Guile
guile-config | is a Guile script which provides the information necessary to link your programs against the Guile library, in much the same way PkgConfig does
guile-snarf | is a script to parse declarations in your C code for Scheme visible C functions
guild | is a wrapper program installed along with guile, which knows where a particular module is installed and calls it, passing its arguments to the program
guile-tools | is a symlink to guild

Last updated on

## Librep-0.92.7

### Introduction to Librep

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

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

#### Package Information

- Download (HTTP): https://download.tuxfamily.org/librep/librep_0.92.7.tar.xz

- Download MD5 sum: 036195b371006848e29ed6f50ddc8475

- Download size: 840 KB

- Estimated disk space required: 10 MB

- Estimated build time: 0.3 SBU

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

### Installation of Librep

Install librep by running the following commands:

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

This package does not come with a test suite.

Now, as the `root` user:

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

### Contents

Installed Programs: rep, rep-remote, rep-xgettext, and repdoc
Installed Libraries: librep.so and numerous modules installed in the /usr/lib/rep hierarchy
Installed Directories: /usr/lib/rep, /usr/share/emacs/site-lisp, and /usr/share/rep

#### Short Descriptions

rep | is the Lisp interpreter
`librep.so` | contains the functions necessary for the Lisp interpreter

Last updated on

## LLVM-12.0.1

### Introduction to LLVM

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

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

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

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

#### Package Information

- Download (HTTP): https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-12.0.1.src.tar.xz

- Download MD5 sum: 72a257604efa1d32ef85a37cd9c66873

- Download size: 41 MB

- Estimated disk space required: 2.5 GB (715 MB installed, add 11 GB for tests)

- Estimated build time: 29 SBU (with parallelism=4, add 38 SBU for tests)

#### Recommended Download

##### Clang

- Download: https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/clang-12.0.1.src.tar.xz

- Download MD5 sum: 03d77af27fcbeeae4414fb4713b9fd7e

- Download size: 15 MB

#### Optional Download

##### Compiler RT

- Download: https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/compiler-rt-12.0.1.src.tar.xz

- Download MD5 sum: 40095daa9070b20eef9bdd32fdc53db5

- Download size: 2.1 MB

#### LLVM Dependencies

##### Required

CMake-3.21.2

##### Optional

Doxygen-1.9.2, git-2.33.0, Graphviz-2.48.0, libxml2-2.9.12, Pygments-2.10.0, rsync-3.2.3 (for tests), texlive-20210325 (or install-tl-unx), Valgrind-3.17.0, PyYAML-5.3.1, Zip-3.0, OCaml, psutil, recommonmark, Sphinx, and Z3

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

### Installation of LLVM

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

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

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

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

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

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

Install LLVM by running the following commands:

    mkdir -v build &&
    cd       build &&

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

If you have installed Sphinx and recommonmark and wish to generate the html documentation and manual pages, issue the following commands:

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

The clang documentation can be built too:

    ninja docs-clang-html docs-clang-man

To test the results, issue: ninja check-all. Tests are built with all available cores, but run using the number of online processors. (The difference is that available cores can be limited using taskset, but taking them offline requires echoing 0 to `/sys/devices/system/cpu/cpu<N>/online` by the `root` user and makes them temporarily unusable by all jobs on the machine.) Note that a few of the compiler-rt Sanitizer based tests (16 of more than 48000 tests run) are known to fail. Some of the LLVM-Unit IR tests are known to fail as well.

Now, as the `root` user:

    ninja install

If you have built the the llvm documentation, install it by running the following commands as the `root` user:

    install -v -m644 docs/man/* /usr/share/man/man1             &&
    install -v -d -m755 /usr/share/doc/llvm-12.0.1/llvm-html     &&
    cp -Rv docs/html/* /usr/share/doc/llvm-12.0.1/llvm-html

If you have built the clang documentation, it can be installed in the same way (again as the `root` user):

    install -v -m644 tools/clang/docs/man/* /usr/share/man/man1 &&
    install -v -d -m755 /usr/share/doc/llvm-12.0.1/clang-html    &&
    cp -Rv tools/clang/docs/html/* /usr/share/doc/llvm-12.0.1/clang-html

### Command Explanations

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

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

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

`-DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF"`: This switch enables building for the same target as the host, and also for the r600 AMD GPU used by the Mesa r600 and radeonsi drivers. The BPF target is required to build v4l-utils-1.20.0. 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 also slightly reduces their size and also ensures that llvm-config will correctly use libLLVM-12.0.so.

`-DLLVM_ENABLE_RTTI=ON`: This switch is used to build LLVM with run-time type information. This is required for building Mesa-21.2.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).

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

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

### Contents

Installed Programs: bugpoint, c-index-test, clang, clang++ (symlinks to clang-<version>), clang-<version>, clang-check, clang-cl, clang-cpp (last two symlinks to clang), clang-extdef-mapping, clang-format, clang-offload-bundler, clang-offload-wrapper, clang-refactor, clang-rename, clang-scan-deps, diagtool, dsymutil, git-clang-format, hmaptool, llc, lli, llvm-addr2line, llvm-ar, llvm-as, llvm-bcanalyzer, llvm-bitcode-strip (symlink to llvm-objcopy), llvm-cat, llvm-cfi-verify, llvm-config, llvm-cov, llvm-c-test, llvm-cvtres, llvm-cxxdump, llvm-cxxfilt, llvm-cxxmap, llvm-diff, llvm-dis, llvm-dlltool (symlink to llvm-ar), llvm-dwarfdump, llvm-dwp, llvm-elfabi, llvm-exegenesis, llvm-extract, llvm-gsymutil, llvm-ifs, llvm-install-name-tool (symlink to llvm-objcopy), llvm-jitlink, llvm-lib (symlink to llvm-ar), llvm-libtool-darwin, llvm-link, llvm-lipo, llvm-lto, llvm-lto2, llvm-mc, llvm-mca, llvm-ml, llvm-modextract, llvm-mt, llvm-nm, llvm-objcopy, llvm-objdump, llvm-opt-report, llvm-pdbutil, llvm-profdata, llvm-profgen, llvm-ranlib (symlink to llvm-ar), llvm-rc, llvm-readelf (symlink to llvm-readobj), llvm-readobj, llvm-reduce, llvm-rtdyld, llvm-size, llvm-split, llvm-stress, llvm-strings, llvm-strip (symlink to llvm-objcopy), llvm-symbolizer, llvm-tblgen, llvm-undname, llvm-xray, opt, sancov, sanstats, scan-build, scan-view, split-file, and verify-uselistorder
Installed Libraries: libLLVM.so, libLLVM*.a (84 libraries), libLTO.so, libRemarks.so, libclang.so, libclang-cpp.so, libclang*.a (37 libraries), and LLVMgold.so
Installed Directories: /usr/include/{clang,clang-c,llvm,llvm-c}, /usr/lib/{clang,cmake/{clang,llvm}}, /usr/share/{clang,opt-viewer,scan-build,scan-view}, and /usr/share/doc/llvm-12.0.1

#### Short Descriptions

bugpoint | is the automatic test case reduction tool
c-index-test | is used to test the libclang API and demonstrate its usage
clang | is the Clang C, C++, and Objective-C compiler
clang-check | is a tool to perform static code analysis and display Abstract Syntax Trees (AST)
clang-extdef-mapping | is a tool to collect the USR name and location of external definitions in a source file
clang-format | is a tool to format C/C++/Java/JavaScript/Objective-C/Protobuf code
clang-offload-bundler | is a tool to bundle/unbundle OpenMP offloaded files associated with a common source file
clang-offload-wrapper | is a tool to create wrapper bitcode for offload target binaries
clang-refactor | is a Clang-based refactoring tool for C, C++ and Objective-C
clang-rename | is a tool to rename symbols in C/C++ programs
clang-scan-deps | is a tool to scan for dependencies in a source file
diagtool | is a combination of tools for dealing with diagnostics in clang
dsymutil | is a tool used to manipulate archived DWARF debug symbol files, compatible with the Darwin command dsymutil
git-clang-format | runs clang-format on git generated patches (requires git-2.33.0)
hmaptool | is a Python tool to dump and construct header maps
llc | is the LLVM static compiler
lli | is used to directly execute programs from LLVM bitcode
llvm-addr2line | is a tool used to convert addresses into file names and line numbers
llvm-ar | is the LLVM archiver
llvm-as | is the LLVM assembler
llvm-bcanalyzer | is the LLVM bitcode analyzer
llvm-bitcode-strip | strips LLVM bitcode from an object
llvm-cat | is a tool to concatenate llvm modules
llvm-cfi-verify | identifies whether Control Flow Integrity protects all indirect control flow instructions in the provided object file, DSO, or binary
llvm-config | Prints LLVM compilation options
llvm-cov | is used to emit coverage information
llvm-c-test | is a bytecode disassembler
llvm-cvtres | is a tool to convert Microsoft resource files to COFF
llvm-cxxdump | is used as a C++ ABI Data Dumper
llvm-cxxfilt | is used to demangle C++ symbols in llvm code
llvm-cxxmap | is used to remap C++ mangled symbols
llvm-diff | is the LLVM structural 'diff'
llvm-dis | is the LLVM disassembler
llvm-dwarfdump | prints the content of DWARF sections in object files
llvm-dwp | merges split DWARF files
llvm-elfabi | is used to read information about an ELF binary's ABI
llvm-exegesis | is a benchmarking tool that uses information available in LLVM to measure host machine instruction characteristics like latency or port decomposition
llvm-extract | is used to extract a function from an LLVM module
llvm-gsymutil | is used to process GSYM Symbolication Format files which convert memory addresses to function name and source file line. These files are smaller than DWARF or Breakpad files
llvm-ifs | is used to merge interface stubs with object files
llvm-install-name-tool | is used to rewrite load commands into MachO binary format
llvm-jitlink | is used to parse relocatable object files to make their contents executable in a target process
llvm-libtool-darwin | provides basic libtool functionality on Darwin-based systems. This is mostly useful if you are generating binaries for macOS systems
llvm-link | is the LLVM linker
llvm-lipo | is used to create universal binaries from MachO files
llvm-lto | is the LLVM LTO (link time optimization) linker
llvm-lto2 | is a test harness for the resolution based LTO interface
llvm-mc | is a standalone machine code assembler/disassembler
llvm-mca | is a performance analysis tool to statically measure the performance of machine code
llvm-ml | is a playground for machine code provided by LLVM
llvm-modextract | is a tool to extract one module from multimodule bitcode files
llvm-mt | is a tool to generate signed files and catalogs from a side-by-side assembly manifest (used for Microsoft SDK)
llvm-nm | is used to list LLVM bitcode and object file's symbol table
llvm-objcopy | is LLVM's version of an objcopy tool
llvm-objdump | is an LLVM object file dumper
llvm-opt-report | is a tool to generate an optimization report from YAML optimization record files
llvm-pdbutil | is a PDB (Program Database) dumper. PDB is a Microsoft format
llvm-profdata | is a small tool to manipulate and print profile data files
llvm-profgen | generates LLVM SPGO profiling information
llvm-ranlib | is used to generate an index for a LLVM archive
llvm-rc | is a platform-independent tool to compile resource scripts into binary resource files
llvm-readobj | displays low-level format-specific information about object files
llvm-reduce | is used to automatically reduce testcases when running a test suite
llvm-rtdyld | is the LLVM MC-JIT tool
llvm-size | is the LLVM object size dumper
llvm-split | is the LLVM module splitter
llvm-stress | is used to generate random `.ll` files
llvm-strings | print strings found in a binary (object file, executable, or archive library)
llvm-symbolizer | converts adresses into source code locations
llvm-tblgen | is the LLVM Target Description To C++ Code Generator
llvm-undname | is a tool to demangle names
llvm-xray | is an implementation of Google's XRay function call tracing system
opt | is the LLVM optimizer
sancov | is the sanitizer coverage processing tool
sanstats | is the sanitizer statistics processing tool
scan-build | is a Perl script that invokes the Clang static analyzer
scan-view | is a viewer for Clang static analyzer results
split-file | splits an input file into multiple parts separated by regex
verify-uselistorder | is the LLVM tool to verify use-list order

Last updated on

## Lua-5.4.3

### Introduction to Lua

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

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

#### Package Information

- Download (HTTP): https://www.lua.org/ftp/lua-5.4.3.tar.gz

- Download MD5 sum: ef63ed2ecfb713646a7fcc583cf5f352

- Download size: 352 KB

- Estimated disk space required: 5.8 MB (with Basic tests)

- Estimated build time: less than 0.1 SBU (with Basic tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/lua-5.4.3-shared_library-1.patch

- Optional Test Suite Download (HTTP): https://www.lua.org/tests/lua-5.4.3-tests.tar.gz

- Optional Test Suite Download MD5 sum: 4afc92b7e45fc0687c686a470bc8072a

- Optional Test Suite Download size: 132 KB

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

### Installation of Lua

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

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

    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.3-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.3" \
         install &&

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

    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.3-tests` directory, then issue lua -e "_U=true" all.lua. If the tests finish without error, you will see a message containing the string "final OK".

### Contents

Installed Programs: lua and luac
Installed Library: liblua.so
Installed Directories: /usr/{lib,share}/lua and /usr/share/doc/lua-5.4.3

#### Short Descriptions

lua | is the standalone Lua interpreter
luac | is the Lua compiler
`liblua.so` | contains the Lua API functions

Last updated on

## Lua-5.2.4

### Introduction to Lua 5.2

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

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

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

#### Package Information

- 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

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/lua-5.2.4-shared_library-1.patch

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

### Installation of Lua 5.2

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

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

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

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

Install Lua by running the following commands:

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

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

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

    make MYCFLAGS="-fPIC" linux

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

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

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

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

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

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

Now, as the `root` user:

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

### Command Explanations

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

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

### Contents

Installed Programs: lua5.2 and luac5.2
Installed Library: liblua5.2.so
Installed Directories: /usr/include/lua5.2, /usr/lib/lua/5.2, /usr/share/doc/lua-5.2.4, and /usr/share/lua/5.2

#### Short Descriptions

lua5.2 | is the standalone Lua version 5.2 interpreter
luac5.2 | is the Lua version 5.2 compiler
`liblua5.2.so` | contains the Lua version 5.2 API functions

Last updated on

## Mercurial-5.9

### Introduction to Mercurial

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

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

#### Package Information

- Download (HTTP): https://www.mercurial-scm.org/release/mercurial-5.9.tar.gz

- Download MD5 sum: 47da24d4076609dcc43b9ef76999369c

- Download size: 7.7 MB

- Estimated disk space required: 77 MB (with docs, add 1.6 GB for tests)

- Estimated build time: 0.3 SBU (with docs, add 17 SBU for tests using -j4)

#### Mercurial Dependencies

##### Optional

docutils-0.17.1 (required to build the documentation), git-2.33.0, GnuPG-2.2.29 (gpg2 with Python bindings), OpenSSH-8.7p1 (runtime, to access ssh://... repositories), Pygments-2.10.0, rustc-1.52.0, Subversion-1.14.1 (with Python bindings), Bazaar, CVS, pyflakes, and pyOpenSSL

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

### Installation of Mercurial

First, force the build system to use Python 3:

    export PYTHON=python3

Build Mercurial by issuing the following command:

    make build

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

    make doc

To run the test suite, issue:

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

where `<N>` is an integer between one and the number of ( processor X threads ), inclusive. 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 confirmed. However, if you add the switch `--debug` before `--tmpdir`, and run again, some failures are gone, which seems to be a problem with the test suite. If this happens, normally, from now on, there will be no more such failures whether you use the debug switch or not. Two tests, test-duplicateoptions.py and test-removeemptydirs.t, are known to fail.

An interesting switch is `--time`, which will generate at the end of the test suite execution, a table with all executed tests and respective start, end, user, system and real times. Note that the 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

Next, clean up the environment variable set earlier:

    unset PYTHON

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.

### Configuring Mercurial

#### Config Files

`/etc/mercurial/hgrc` and `~/.hgrc`

The great majority of extensions are disabled by default. Run hg help extensions if you need to enable any, e.g. when investigating test failures. You will obtain the lists of enabled and disabled extensions, and more information, such as how to enable or disable them using configuration files.

If you have installed make-ca-1.7 and want Mercurial to use them, as the `root` user, issue:

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

### Contents

Installed Programs: hg
Installed Libraries: several internal modules under /usr/lib/python3.9/site-packages/mercurial
Installed Directories: /etc/mercurial and /usr/lib/python3.9/site-packages/{hgdemandimport,hgext,hgext3rd,mercurial}

#### Short Descriptions

hg | is the mercurial version control system

Last updated on

## NASM-2.15.05

### Introduction to NASM

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

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

#### Package Information

- Download (HTTP): https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz

- Download MD5 sum: 1c9802446d7341c41c21eb98c7859064

- Download size: 976 KB

- Estimated disk space required: 40 MB

- Estimated build time: 0.2 SBU

#### Additional Downloads

- Optional documentation: https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05-xdoc.tar.xz

#### NASM Dependencies

##### Optional (for generating documentation):

asciidoc-9.1.0 and xmlto-0.0.28

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

### Installation of NASM

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

    tar -xf ../nasm-2.15.05-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.15.05/html  &&
    cp -v doc/html/*.html    /usr/share/doc/nasm-2.15.05/html  &&
    cp -v doc/*.{txt,ps,pdf} /usr/share/doc/nasm-2.15.05

### Contents

Installed Programs: nasm and ndisasm
Installed Libraries: None
Installed Directory: /usr/share/doc/nasm-2.15.05

#### Short Descriptions

nasm | is a portable 80x86 assembler
ndisasm | is an 80x86 binary file disassembler

Last updated on

## Perl Modules

### Introduction to Perl Modules

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

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

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

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

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

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

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

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

- Archive-Zip-1.68

- autovivification-0.18

- Business-ISBN-3.006

- Business-ISMN-1.202

- Business-ISSN-1.004

- Class-Accessor-0.51

- Data-Compare-1.27

- Data-Dump-1.25

- Data-Uniqid-0.12

- DateTime-Calendar-Julian-0.104

- DateTime-Format-Builder-0.83

- Encode-EUCJPASCII-0.03

- Encode-HanExtra-0.23

- Encode-JIS2K-0.03

- File-Slurper-0.012

- File-Which-1.27

- HTML-Parser-3.76

- HTTP-Daemon-6.12

- IO-Socket-SSL-2.072

- IO-String-1.08

- IPC-Run3-0.048

- Lingua-Translit-0.28

- List-AllUtils-0.19

- List-MoreUtils-0.430

- Log-Log4perl-1.54

- LWP-Protocol-https-6.10

- Module-Build-0.4231

- Net-DNS-1.32

- Parse-RecDescent-1.967015

- Parse-Yapp-1.21

- PerlIO-utf8_strict-0.008

- Regexp-Common-2017060201

- SGMLSpm-1.1

- Sort-Key-1.33

- Test-Command-0.11

- Test-Differences-0.68

- Text-BibTeX-0.88

- Text-CSV-2.01

- Text-Roman-3.5

- Unicode-Collate-1.31

- Unicode-LineBreak-2019.001

- URI-5.09

- XML-LibXML-Simple-1.01

- XML-LibXSLT-1.99

- XML-Simple-2.25

- XML-Writer-0.900

- CPAN automated install of perl modules

### Archive::Zip-1.68

#### Introduction to Archive::Zip

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/P/PH/PHRED/Archive-Zip-1.68.tar.gz

- Download MD5 sum: a33993309322164867c99e04a4000ee3

##### Archive::Zip Dependencies

###### Recommended (for the testsuite)

UnZip-6.0 (with its patch)

###### Optional

Test-MockModule-v0.176.0

#### Installation of Archive::Zip

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Contents

Installed Programs: crc32

#### Short Descriptions

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

### autovivification-0.18

#### Introduction to the autovivification module

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/V/VP/VPIT/autovivification-0.18.tar.gz

- Download MD5 sum: 8dec994e1e7d368e055f21a5777385a0

#### Installation of autovivification

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Business::ISBN-3.006

#### Introduction to Business::ISBN

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISBN-3.006.tar.gz

- Download MD5 sum: 9b9ecd69bc6157332836dc870217ac67

##### Business::ISBN Dependencies

###### Required

Business-ISBN-Data-20210112.006

#### Installation of Business::ISBN

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Business::ISMN-1.202

#### Introduction to Business::ISMN

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISMN-1.202.tar.gz

- Download MD5 sum: 7a32381ddbf1cf58f260c3bcb3016bc3

##### Business::ISMN Dependencies

###### Required

Tie-Cycle-1.226

#### Installation of Business::ISMN

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Business::ISSN-1.004

#### Introduction to Business::ISSN

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISSN-1.004.tar.gz

- Download MD5 sum: 4d638d72f22e2d3cc677eab6e07d15f2

#### Installation of Business::ISSN

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Class::Accessor-0.51

#### Introduction to Class::Accessor

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/K/KA/KASEI/Class-Accessor-0.51.tar.gz

- Download MD5 sum: 1f1e5990f87cad7659b292fed7dc0407

#### Installation of Class::Accessor

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Data::Compare-1.27

#### Introduction to Data::Compare

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DC/DCANTRELL/Data-Compare-1.27.tar.gz

- Download MD5 sum: 53e821a62222e151a5ccab3c8a8e416f

##### Data::Compare Dependencies

###### Required

Clone-0.45, File-Find-Rule-0.34

#### Installation of Data::Compare

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Data::Dump-1.25

#### Introduction to Data::Dump

Data::Dump provides pretty printing of data structures.

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/G/GA/GARU/Data-Dump-1.25.tar.gz

- Download MD5 sum: 9bd7131ef0441e1e0e001bf85e9fae31

#### Installation of Data::Dump

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Data::Uniqid-0.12

#### Introduction to Data::Uniqid

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/M/MW/MWX/Data-Uniqid-0.12.tar.gz

- Download MD5 sum: 6bab3b5da09fedfdf60ce2629a7367db

#### Installation of Data::Uniqid

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

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime::Calendar::Julian-0.104

#### Introduction to DateTime::Calendar::Julian

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/W/WY/WYANT/DateTime-Calendar-Julian-0.104.tar.gz

- Download MD5 sum: 1f9effa9cba2b9b5df079fdfed588106

##### DateTime::Calendar::Julian Dependencies

###### Required

DateTime-1.54

#### Installation of DateTime::Calendar::Julian

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime::Format::Builder-0.83

#### Introduction to DateTime::Format::Builder

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.83.tar.gz

- Download MD5 sum: aa41917ca9ad69b3898728ce9c2fb477

##### DateTime::Format::Builder Dependencies

###### Required

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

#### Installation of DateTime::Format::Builder

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Encode::EUCJPASCII-0.03

#### Introduction to Encode::EUCJPASCII

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/N/NE/NEZUMI/Encode-EUCJPASCII-0.03.tar.gz

- Download MD5 sum: 5daa65f55b7c2050bb0713d9e95f239d

#### Installation of Encode::EUCJPASCII

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Encode::HanExtra-0.23

#### Introduction to Encode::HanExtra

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz

- Download MD5 sum: e1d3bc32c1c8ee304235a06fbcd5d5a4

#### Installation of Encode::HanExtra

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

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

Now, as the `root` user:

    make install

### Encode::JIS2K-0.03

#### Introduction to Encode::JIS2K

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DA/DANKOGAI/Encode-JIS2K-0.03.tar.gz

- Download MD5 sum: 60539471aa408a2b793cd45a6ce651db

#### Installation of Encode::JIS2K

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::Slurper-0.012

#### Introduction to File::Slurper

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/L/LE/LEONT/File-Slurper-0.012.tar.gz

- Download MD5 sum: 5742c63096392dfee50b8db314bcca18

##### File::Slurper Dependencies

###### Recommended (required for the testsuite)

Test-Warnings-0.031

#### Installation of File::Slurper

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::Which-1.27

#### Introduction to File::Which

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/P/PL/PLICEASE/File-Which-1.27.tar.gz

- Download MD5 sum: d5c9154262b93398f0750ec364207639

#### Installation of File::Which

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTML::Parser-3.76

#### Introduction to HTML::Parser

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/HTML-Parser-3.76.tar.gz

- Download MD5 sum: 60e266d5a07fbea671a0383dd8af7b6c

##### HTML::Parser Dependencies

###### Required

HTML-Tagset-3.20

###### Required (runtime)

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

#### Installation of HTML::Parser

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTTP::Daemon-6.12

#### Introduction to HTTP::Daemon

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/HTTP-Daemon-6.12.tar.gz

- Download MD5 sum: 63674e3f81760a29075853413eb157d8

##### HTTP::Daemon Dependencies

###### Required

HTTP-Message-6.33

#### Installation of HTTP::Daemon

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### IO::Socket::SSL-2.072

#### Introduction to IO::Socket::SSL

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-2.072.tar.gz

- Download MD5 sum: 4fb67fc8c4817dce8116f2eb7878fd9c

##### IO::Socket::SSL Dependencies

###### Required

make-ca-1.7 and Net-SSLeay-1.90

###### Recommended

URI-5.09 (to access international domain names)

#### Installation of IO::Socket::SSL

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

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

Now, as the `root` user:

    make install

#### Command Explanations

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

### IO::String-1.08

#### Introduction to IO::String

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/G/GA/GAAS/IO-String-1.08.tar.gz

- Download MD5 sum: 250e5424f290299fc3d6b5d1e9da3835

#### Installation of IO::String

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### IPC::Run3-0.048

#### Introduction to IPC::Run3

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/R/RJ/RJBS/IPC-Run3-0.048.tar.gz

- Download MD5 sum: 5a8cec571c51a118b265cf6e24e55761

#### Installation of IPC::Run3

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Lingua::Translit-0.28

#### Introduction to Lingua::Translit

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/A/AL/ALINKE/Lingua-Translit-0.28.tar.gz

- Download MD5 sum: 090cecd52ff9c1f9d4b370ba653b9da1

#### Installation of Lingua::Translit

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Contents

Installed Programs: translit

#### Short Descriptions

translit | transliterates text between writing systems using various standards

### List::AllUtils-0.19

#### Introduction to List::AllUtils

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DR/DROLSKY/List-AllUtils-0.19.tar.gz

- Download MD5 sum: 86469b1f6819ba181a8471eb932965f2

##### List::AllUtils Dependencies

###### Required

List-SomeUtils-0.58, List-UtilsBy-0.11, Scalar-List-Utils-1.56

#### Installation of List::AllUtils

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### List::MoreUtils-0.430

#### Introduction to List::MoreUtils

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-0.430.tar.gz

- Download MD5 sum: daccd6310021231b827dcc943ff1c6b7

##### List::MoreUtils Dependencies

###### Required

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

#### Installation of List::MoreUtils

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Log::Log4perl-1.54

#### Introduction to Log::Log4perl

Log::Log4perl provides a Log4j implementation for perl.

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/E/ET/ETJ/Log-Log4perl-1.54.tar.gz

- Download MD5 sum: 46c5a3a101921c25857f84585cd0b5c2

#### Installation of Log::Log4perl

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Contents

Installed Programs: l4p-templ

#### Short Descriptions

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

### LWP::Protocol::https-6.10

#### Introduction to LWP::Protocol::https

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/LWP-Protocol-https-6.10.tar.gz

- Download MD5 sum: cf64e4bc57a9266ac4343cdf0808c5c8

##### Additional Download

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/LWP-Protocol-https-6.10-system_certs-2.patch

##### LWP::Protocol::https Dependencies

###### Required

IO-Socket-SSL-2.072, libwww-perl-6.55 and make-ca-1.7 with `/etc/pki/tls/certs/ca-bundle.crt`.

#### Installation of LWP::Protocol::https

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

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

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Module::Build-0.4231

#### Introduction to Module::Build

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEONT/Module-Build-0.4231.tar.gz

- Download MD5 sum: 066b193e461d7dfe1eca17a139353001

#### Installation of Module::Build

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

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

#### Contents

Installed Programs: config_data

#### Short Descriptions

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

### Net::DNS-1.32

#### Introduction to Net::DNS

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/N/NL/NLNETLABS/Net-DNS-1.32.tar.gz

- Download MD5 sum: e8ee02ec42dfeb10ae4a0d175d5fcafc

#### Installation of Net::DNS

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Parse::RecDescent-1.967015

#### Introduction to Parse::RecDescent

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/J/JT/JTBRAUN/Parse-RecDescent-1.967015.tar.gz

- Download MD5 sum: 7a36d45d62a9b68603edcdbd276006cc

#### Installation of Parse::RecDescent

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Parse::Yapp-1.21

#### Introduction to Parse::Yapp

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/W/WB/WBRASWELL/Parse-Yapp-1.21.tar.gz

- Download MD5 sum: 69584d5b0f0304bb2a23cffcd982c5de

#### Installation of Parse::Yapp

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Contents

Installed Programs: yapp

#### Short Descriptions

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

### PerlIO::utf8_strict-0.008

#### Introduction to PerlIO::utf8_strict

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/L/LE/LEONT/PerlIO-utf8_strict-0.008.tar.gz

- Download MD5 sum: 0e2a940e1759c4d322958ef6ebc2e52f

##### PerlIO::utf8_strict Dependencies

###### Recommended (required for the testsuite)

Test-Exception-0.43

#### Installation of PerlIO::utf8_strict

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Regexp::Common-2017060201

#### Introduction to Regexp::Common

Regexp::Common provides commonly requested regular expressions.

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2017060201.tar.gz

- Download MD5 sum: b1bb40759b84154990f36a160160fb94

#### Installation of Regexp::Common

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### SGMLSpm-1.1

#### Introduction to SGMLSpm

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/R/RA/RAAB/SGMLSpm-1.1.tar.gz

- Download MD5 sum: 746c74ae969992cedb1a2879b4168090

#### Installation of SGMLSpm

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

    chmod -v 644 MYMETA.yml

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

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

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

#### Contents

Installed Programs: sgmlspl.pl, sgmlspl

#### Short Descriptions

sgmlspl.pl | is an SGML processor
sgmlspl | is a symbolic link used during the install of DocBook-utils-0.6.14

### Sort::Key-1.33

#### Introduction to Sort::Key

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/S/SA/SALVA/Sort-Key-1.33.tar.gz

- Download MD5 sum: a37ab0da0cfdc26e57b4c79e39f6d98f

#### Installation of Sort::Key

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Command-0.11

#### Introduction to Test::Command

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DA/DANBOO/Test-Command-0.11.tar.gz

- Download MD5 sum: 9ab83c4695961dbe92cd86efe08f0634

#### Installation of Test::Command

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Differences-0.68

#### Introduction to Test::Differences

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/D/DC/DCANTRELL/Test-Differences-0.68.tar.gz

- Download MD5 sum: e1de5ef0f13fa4c815d8f2574820d661

##### Test::Differences Dependencies

###### Required

Text-Diff-1.45,

###### Recommended (required for the testsuite)

Capture-Tiny-0.48

#### Installation of Test::Differences

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Text::BibTeX-0.88

#### Introduction to Text::BibTeX

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/A/AM/AMBS/Text-BibTeX-0.88.tar.gz

- Download MD5 sum: 361aad5cf400764e35d1ade3b609bb60

##### Text::BibTeX Dependencies

###### Required

Config-AutoConf-0.320, ExtUtils-LibBuilder-0.08

#### Installation of Text::BibTeX

This module is built using `Build.PL`:

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

Now, as the `root` user:

    ./Build install

#### Contents

Installed Programs: biblex, libparse, dumpnames
Installed Libraries: libtparse.so

#### Short Descriptions

biblex | performs lexical analysis on a BibTeX file
bibparse | parses a series of BibTeX files with command line options to control the string post-processing behaviour
dumpnames | parses a BibTeX file, splitting 'author' and 'editor' fields into lists of names, and then dumps everything to stdout
`libbtparse.so` | is a library for parsing and processing BibTeX data files

### Text::CSV-2.01

#### Introduction to Text::CSV

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/I/IS/ISHIGAKI/Text-CSV-2.01.tar.gz

- Download MD5 sum: c8fe8236ab3115fe8d82bdb6545e0770

##### Text::CSV Dependencies

###### Recommended

Text-CSV_XS-1.46 (required by biber-2.16)

#### Installation of Text::CSV

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Text::Roman-3.5

#### Introduction to Text::Roman

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/S/SY/SYP/Text-Roman-3.5.tar.gz

- Download MD5 sum: 1f6b09c0cc1f4425b565ff787a39fd83

#### Installation of Text::Roman

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Unicode::Collate-1.31

#### Introduction to Unicode::Collate

Unicode::Collate provides a Unicode collation algorithm.

### Note

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/S/SA/SADAHIRO/Unicode-Collate-1.31.tar.gz

- Download MD5 sum: ee4d960d057c5e5b02ebb49d0286db8f

#### Installation of Unicode::Collate

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Unicode::LineBreak-2019.001

#### Introduction to Unicode::LineBreak

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/N/NE/NEZUMI/Unicode-LineBreak-2019.001.tar.gz

- Download MD5 sum: 003d6da7a13700e069afed9238c864b9

##### Unicode::LineBreak Dependencies

###### Required

MIME-Charset-1.012.2, also Wget-1.21.1 (to download two files from unicode.org in the testsuite)

###### Optional

libthai (to break Thai words into segments)

#### Installation of Unicode::LineBreak

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### URI-5.09

#### Introduction to URI

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/O/OA/OALDERS/URI-5.09.tar.gz

- Download MD5 sum: bd66b0c620d076c4b0de9507b5f1fbdf

##### URI Dependencies

###### Recommended (required for the testsuite)

Test-Needs-0.002009

#### Installation of URI

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::LibXML::Simple-1.01

#### Introduction to XML::LibXML::Simple

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/M/MA/MARKOV/XML-LibXML-Simple-1.01.tar.gz

- Download MD5 sum: faad5ed26cd83998f6514be199c56c38

##### XML::LibXML::Simple Dependencies

###### Required

XML-LibXML-2.0207

#### Installation of XML::LibXML::Simple

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::LibXSLT-1.99

#### Introduction to XML::LibXSLT

XML-LibXSLT provides an interface to libxslt-1.1.34

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXSLT-1.99.tar.gz

- Download MD5 sum: 1a2b2295c4e0088015cf5ea947da5579

##### XML::LibXSLT Dependencies

###### Required

libxslt-1.1.34, XML-LibXML-2.0207

#### Installation of XML::LibXSLT

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::Simple-2.25

#### Introduction to XML::Simple

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/G/GR/GRANTM/XML-Simple-2.25.tar.gz

- Download MD5 sum: bb841dce889a26c89a1c2739970e9fbc

##### XML::Simple Dependencies

###### Optional

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

#### Installation of XML::Simple

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::Writer-0.900

#### Introduction to XML::Writer

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

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

##### Package Information

- Download (HTTP): https://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-0.900.tar.gz

- Download MD5 sum: 2457214360cefda445742a608dd6195e

#### Installation of XML::Writer

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### CPAN automated install of perl modules

#### Automatic Installation of Perl Modules.

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

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

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

In particular, you may wish to configure it so that Sudo-1.9.7p2 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.

Last updated on

## Perl Module Dependencies

### Perl Modules which are only required by other modules

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

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

### Note

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

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

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

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

- Algorithm-Diff-1.201

- Alien-Build-2.41

- Alien-Libxml2-0.17

- B-COW-0.004

- B-Hooks-EndOfScope-0.24

- Business-ISBN-Data-20210112.006

- Capture-Tiny-0.48

- Class-Data-Inheritable-0.08

- Class-Inspector-1.36

- Class-Singleton-1.6

- Class-Tiny-1.008

- Clone-0.45

- Config-AutoConf-0.320

- CPAN-Meta-Check-0.014

- DateTime-1.54

- DateTime-Format-Strptime-1.79

- DateTime-Locale-1.32

- DateTime-TimeZone-2.47

- Devel-StackTrace-2.04

- Dist-CheckConflicts-0.11

- Encode-Locale-1.05

- Eval-Closure-0.14

- Exception-Class-1.45

- Exporter-Tiny-1.002002

- ExtUtils-LibBuilder-0.08

- FFI-CheckLib-0.28

- File-chdir-0.1010

- File-Copy-Recursive-0.45

- File-Find-Rule-0.34

- File-Listing-6.14

- File-ShareDir-1.118

- File-ShareDir-Install-0.13

- HTML-Tagset-3.20

- HTTP-Cookies-6.10

- HTTP-Date-6.05

- HTTP-Message-6.33

- HTTP-Negotiate-6.01

- Importer-0.026

- IO-HTML-1.004

- IPC-System-Simple-1.30

- libwww-perl-6.55

- List-MoreUtils-XS-0.430

- List-SomeUtils-0.58

- List-SomeUtils-XS-0.58

- List-UtilsBy-0.11

- LWP-MediaTypes-6.04

- MIME-Charset-1.012.2

- Module-Implementation-0.09

- Module-Pluggable-5.2

- Module-Runtime-0.016

- MRO-Compat-0.13

- namespace-autoclean-0.29

- namespace-clean-0.27

- Net-HTTP-6.21

- Net-SSLeay-1.90

- Number-Compare-0.03

- Package-Stash-0.39

- Params-Validate-1.30

- Params-ValidationCompiler-0.30

- Path-Tiny-0.118

- Role-Tiny-2.002004

- Scalar-List-Utils-1.56

- Scope-Guard-0.21

- Specio-0.47

- Sub-Exporter-Progressive-0.001013

- Sub-Identify-0.14

- Sub-Info-0.002

- Sub-Quote-2.006006

- Sub-Uplevel-0.2800

- SUPER-1.20190531

- Term-Table-0.015

- Test-Deep-1.130

- Test-Exception-0.43

- Test-Fatal-0.016

- Test-File-1.448

- Test-File-ShareDir-1.001002

- Test-LeakTrace-0.17

- Test-MockModule-v0.176.0

- Test-Needs-0.002009

- Test-Requires-0.11

- Test-RequiresInternet-0.05

- Test-utf8-1.02

- Test-Warnings-0.031

- Test-Without-Module-0.20

- Test2-Plugin-NoWarnings-0.09

- Test2-Suite-0.000140

- Text-CSV_XS-1.46

- Text-Diff-1.45

- Text-Glob-0.11

- Tie-Cycle-1.226

- TimeDate-2.33

- Try-Tiny-0.30

- Variable-Magic-0.62

- WWW-RobotRules-6.02

- XML-LibXML-2.0207

- XML-NamespaceSupport-1.12

- XML-SAX-1.02

- XML-SAX-Base-1.09

### Algorithm::Diff-1.201

#### Introduction to Algorithm::Diff

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS//Algorithm-Diff-1.201.tar.gz

- Download MD5 sum: 2eaae910f5220261ee2bbdfc4a8df2c2

#### Installation of Algorithm::Diff

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Alien::Build-2.41

#### Introduction to Alien::Build

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Build-2.41.tar.gz

- Download MD5 sum: fb974a4bc386e1543223e7db70821122

##### Alien::Build Dependencies

###### Required

Capture-Tiny-0.48, File-Which-1.27, FFI-CheckLib-0.28 and File-chdir-0.1010

#### Installation of Alien::Build

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Alien::Libxml2-0.17

#### Introduction to Alien::Libxml2

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.17.tar.gz

- Download MD5 sum: 5fee0bd3a987a1e7f40ce50016c10c8a

##### Alien::Libxml2 Dependencies

###### Required

Alien-Build-2.41, libxml2-2.9.12, Path-Tiny-0.118

###### Recommended (required for the testsuite)

Test2-Suite-0.000140

#### Installation of Alien::Libxml2

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### B::COW-0.004

#### Introduction to B::COW

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/B-COW-0.004.tar.gz

- Download MD5 sum: a1ef8623a06ce9f6358674d7e604de1e

#### Installation of B::COW

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### B::Hooks::EndOfScope-0.24

#### Introduction to B::Hooks::EndOfScope

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/B-Hooks-EndOfScope-0.24.tar.gz

- Download MD5 sum: 99a48be0694dfd12b40482c6a495e10f

##### B::Hooks::EndOfScope Dependencies

###### Required

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

###### Recommended (required for the testsuite)

Try-Tiny-0.30

#### Installation of B::Hooks::EndOfScope

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Business::ISBN::Data-20210112.006

#### Introduction to Business-ISBN-Data

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Business-ISBN-Data-20210112.006.tar.gz

- Download MD5 sum: a3c6d1ff77eb33d63a35f1a1564530b8

#### Installation of Business-ISBN-Data

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Capture::Tiny-0.48

#### Introduction to Capture::Tiny

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Capture-Tiny-0.48.tar.gz

- Download MD5 sum: f5d24083ad270f8326dd659dd83eeb54

#### Installation of Capture::Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Class::Data::Inheritable-0.08

#### Introduction to Class::Data::Inheritable

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.08.tar.gz

- Download MD5 sum: fc0fe65926eb8fb932743559feb54eb9

#### Installation of Class::Data::Inheritable

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Class::Inspector-1.36

#### Introduction to Class::Inspector

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Class-Inspector-1.36.tar.gz

- Download MD5 sum: 084c3aeec023639d21ecbaf7d4460b21

#### Installation of Class::Inspector

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Class::Singleton-1.6

#### Introduction to Class::Singleton

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/S/SH/SHAY/Class-Singleton-1.6.tar.gz

- Download MD5 sum: d9c84a7b8d1c490c38e88ed1f9faae47

#### Installation of Class::Singleton

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Class:Tiny-1.008

#### Introduction to Class:Tiny

Class:Tiny offers a minimalist class construction kit.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Class-Tiny-1.008.tar.gz

- Download MD5 sum: e3ccfae5f64d443e7e1110be964d7202

#### Installation of Class:Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Clone-0.45

#### Introduction to Clone

Clone recursively copies perl datatypes.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/Clone-0.45.tar.gz

- Download MD5 sum: b101333499b638658f89e29458cd83c0

##### Clone Dependencies

###### Recommended (required for the testsuite)

B-COW-0.004

#### Installation of Clone

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Config::AutoConf-0.320

#### Introduction to Config::AutoConf

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/A/AM/AMBS/Config-AutoConf-0.320.tar.gz

- Download MD5 sum: 71664b2864232e265179ac29298e0916

##### Config::AutoConf Dependencies

###### Required

Capture-Tiny-0.48, File-Slurper-0.012

#### Installation of Config::AutoConf

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### CPAN::Meta::Check-0.014

#### Introduction to CPAN::Meta::Check

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEONT/CPAN-Meta-Check-0.014.tar.gz

- Download MD5 sum: ccd4448a7b08e1e3ef6f475030b282c9

##### CPAN::Meta::Check Dependencies

###### Recommended (Required for the testsuite)

Test-Deep-1.130

#### Installation of CPAN::Meta::Check

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime-1.54

#### Introduction to DateTime

DateTime is a date and time object for perl.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-1.54.tar.gz

- Download MD5 sum: 5b90d9b26741da2627b8d002d8796f95

##### DateTime Dependencies

###### Required

DateTime-Locale-1.32, DateTime-TimeZone-2.47

###### Recommended (required for the testsuite)

CPAN-Meta-Check-0.014, Test-Fatal-0.016 and Test-Warnings-0.031

#### Installation of DateTime

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime::Format::Strptime-1.79

#### Introduction to DateTime::Format::Strptime

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Strptime-1.79.tar.gz

- Download MD5 sum: 441cfec62b0b8a1b4c05cbe5ef73fbf4

##### DateTime::Format::Strptime Dependencies

###### Required

DateTime-1.54

#### Installation of DateTime::Format::Strptime

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime::Locale-1.32

#### Introduction to DateTime::Locale

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-Locale-1.32.tar.gz

- Download MD5 sum: 23ba33ef2d40f349f213ed00680f86aa

##### DateTime::Locale Dependencies

###### Required

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

###### Recommended (required for the testsuite)

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

#### Installation of DateTime::Locale

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### DateTime::TimeZone-2.47

#### Introduction to DateTime::TimeZone

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/DateTime-TimeZone-2.47.tar.gz

- Download MD5 sum: 3ba0c9f5aeae945d2111f28333bd1a3d

##### DateTime::TimeZone Dependencies

###### Required

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

###### Recommended (required for the testsuite)

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

#### Installation of DateTime::TimeZone

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Devel::StackTrace-2.04

#### Introduction to Devel::StackTrace

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Devel-StackTrace-2.04.tar.gz

- Download MD5 sum: a5b09f7be7f2b10b525a9740676906d8

#### Installation of Devel::StackTrace

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Dist::CheckConflicts-0.11

#### Introduction to Dist::CheckConflicts

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DO/DOY/Dist-CheckConflicts-0.11.tar.gz

- Download MD5 sum: c8725a92b9169708b0f63036812070f2

##### Dist::CheckConflicts Dependencies

###### Required

Module-Runtime-0.016

###### Recommended (required for the testsuite)

Test-Fatal-0.016

#### Installation of Dist::CheckConflicts

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Encode::Locale-1.05

#### Introduction to Encode::Locale

Encode::Locale determines the locale encoding.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/Encode-Locale-1.05.tar.gz

- Download MD5 sum: fcfdb8e4ee34bcf62aed429b4a23db27

#### Installation of Encode::Locale

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Eval::Closure-0.14

#### Introduction to Eval::Closure

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DO/DOY/Eval-Closure-0.14.tar.gz

- Download MD5 sum: ceeb1fc579ac9af981fa6b600538c285

##### Eval::Closure Dependencies

###### Recommended (required for the testsuite)

Test-Fatal-0.016, Test-Requires-0.11

#### Installation of Eval::Closure

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Exception::Class-1.45

#### Introduction to Exception::Class

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Exception-Class-1.45.tar.gz

- Download MD5 sum: 1e564d20b374a99fdf660ba3f36b0098

##### Exception::Class Dependencies

###### Required

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

#### Installation of Exception::Class

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Exporter::Tiny-1.002002

#### Introduction to Exporter::Tiny

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/Exporter-Tiny-1.002002.tar.gz

- Download MD5 sum: 485897322a2514b4d6ca90b2daacb7cd

#### Installation of Exporter::Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### ExtUtils::LibBuilder-0.08

#### Introduction to ExtUtils::LibBuilder

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/A/AM/AMBS/ExtUtils-LibBuilder-0.08.tar.gz

- Download MD5 sum: 8ffe9e9a3c2f916f40dc4f6aed237d33

##### ExtUtils::LibBuilder Dependencies

###### Required

Module-Build-0.4231

#### Installation of ExtUtils::LibBuilder

This module is built using `Build.PL`:

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

Now, as the `root` user:

    ./Build install

### FFI::CheckLib-0.28

#### Introduction to FFI::CheckLib

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/FFI-CheckLib-0.28.tar.gz

- Download MD5 sum: f1098652dedd0b4616262524fa05a948

##### FFI::CheckLib Dependencies

###### Recommended (required for the testsuite)

Capture-Tiny-0.48, Path-Tiny-0.118, Test2-Suite-0.000140

#### Installation of FFI::CheckLib

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::chdir-0.1010

#### Introduction to File::chdir

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

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/File-chdir-0.1010.tar.gz

- Download MD5 sum: aacfafa4a8f13d45be67451e0f9b483e

#### Installation of File::chdir

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::Copy::Recursive-0.45

#### Introduction to File::Copy::Recursive

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DM/DMUEY/File-Copy-Recursive-0.45.tar.gz

- Download MD5 sum: e5eee1a3f8ae3aebbac063ea54870e54

##### File::Copy::Recursive Dependencies

###### Recommended (required for the testsuite)

Path-Tiny-0.118, Test-Deep-1.130, Test-Fatal-0.016, Test-File-1.448 and Test-Warnings-0.031

#### Installation of File::Copy::Recursive

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::Find::Rule-0.34

#### Introduction to File::Find::Rule

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/File-Find-Rule-0.34.tar.gz

- Download MD5 sum: a7aa9ad4d8ee87b2a77b8e3722768712

##### File::Find::Rule Dependencies

###### Required

Number-Compare-0.03, Text-Glob-0.11

#### Installation of File::Find::Rule

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Contents

Installed Programs: findrule

#### Short Descriptions

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

### File::Listing-6.14

#### Introduction to File::Listing

File::Listing parses a directory listing.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/File-Listing-6.14.tar.gz

- Download MD5 sum: cf60a79563185391831613178a79b4cd

##### File::Listing Dependencies

###### Required

HTTP-Date-6.05,

#### Installation of File::Listing

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::ShareDir-1.118

#### Introduction to File::ShareDir

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RE/REHSACK/File-ShareDir-1.118.tar.gz

- Download MD5 sum: 0084f730f4e3d4d89703d92b3ea82f54

##### File::ShareDir Dependencies

###### Required

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

#### Installation of File::ShareDir

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### File::ShareDir::Install-0.13

#### Introduction to File::ShareDir::Install

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/File-ShareDir-Install-0.13.tar.gz

- Download MD5 sum: 5eabd44a5d7d84bf2e8e502491226287

#### Installation of File::ShareDir::Install

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTML::Tagset-3.20

#### Introduction to HTML::Tagset

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz

- Download MD5 sum: d2bfa18fe1904df7f683e96611e87437

#### Installation of HTML::Tagset

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTTP::Cookies-6.10

#### Introduction to HTTP::Cookies

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Cookies-6.10.tar.gz

- Download MD5 sum: b4d7804231b1dfd10999d42283e0cf06

##### HTTP::Cookies Dependencies

###### Required

HTTP-Message-6.33

#### Installation of HTTP::Cookies

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTTP::Date-6.05

#### Introduction to HTTP::Date

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Date-6.05.tar.gz

- Download MD5 sum: 2ecbb3aedf6aef062605191813ca3027

##### HTTP::Date Dependencies

###### Recommended

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

#### Installation of HTTP::Date

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTTP::Message-6.33

#### Introduction to HTTP::Message

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Message-6.33.tar.gz

- Download MD5 sum: e291f19e9532ffb7d1c80eab786bf0f2

##### HTTP::Message Dependencies

###### Required

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

###### Recommended (required for the testsuite)

Try-Tiny-0.30

#### Installation of HTTP::Message

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### HTTP::Negotiate-6.01

#### Introduction to HTTP::Negotiate

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz

- Download MD5 sum: 1236195250e264d7436e7bb02031671b

##### HTTP::Negotiate Dependencies

###### Recommended (required for the testsuite)

HTTP-Message-6.33

#### Installation of HTTP::Negotiate

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Importer-0.026

#### Introduction to Importer

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Importer-0.026.tar.gz

- Download MD5 sum: 3f09930b82cadfe26d0ce2fb1338aa1b

#### Installation of Importer

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### IO::HTML-1.004

#### Introduction to IO::HTML

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/C/CJ/CJM/IO-HTML-1.004.tar.gz

- Download MD5 sum: 04bbe363686fd19bfb4cc0ed775e3d03

#### Installation of IO::HTML

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### IPC::System::Simple-1.30

#### Introduction to IPC::System::Simple

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/J/JK/JKEENAN/IPC-System-Simple-1.30.tar.gz

- Download MD5 sum: e68341fd958fd013b3521d909904f675

#### Installation of IPC::System::Simple

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### libwww-perl-6.55

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

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/libwww-perl-6.55.tar.gz

- Download MD5 sum: 4df22c50511a3f01063d2ba4d91bfbec

##### libwww-perl Dependencies

###### Required

File-Listing-6.14, HTTP-Cookies-6.10, HTTP-Daemon-6.12, HTTP-Negotiate-6.01, HTML-Parser-3.76, Net-HTTP-6.21, Try-Tiny-0.30 and WWW-RobotRules-6.02

###### Recommended (required for the testsuite)

Test-Fatal-0.016, Test-Needs-0.002009 and Test-RequiresInternet-0.05

#### Installation of libwww-perl

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

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

#### Contents

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

#### Short Descriptions

lwp-download | is a script to fetch a large file from the web
lwp-dump | is used to see what headers and content is returned for a URL
lwp-mirror | is a simple mirror utility
lwp-request | is a simple command line user agent

### List::MoreUtils::XS-0.430

#### Introduction to List::MoreUtils::XS

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-XS-0.430.tar.gz

- Download MD5 sum: e77113e55b046906aecfb4ddb4f0c662

#### Installation of List::MoreUtils::XS

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### List::SomeUtils-0.58

#### Introduction to List::SomeUtils

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-0.58.tar.gz

- Download MD5 sum: d35e2233abcd8712792e6a3548f41181

##### List::SomeUtils Dependencies

###### Required

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

#### Installation of List::SomeUtils

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### List::SomeUtils::XS-0.58

#### Introduction to List::SomeUtils::XS

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-XS-0.58.tar.gz

- Download MD5 sum: 396eabe83a75fcb8d7542d95812469d1

##### List::SomeUtils::XS Dependencies

###### Recommended (required for the testsuite)

Test-LeakTrace-0.17, Test-Warnings-0.031

#### Installation of List::SomeUtils::XS

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### List::UtilsBy-0.11

#### Introduction to List::UtilsBy

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PEVANS/List-UtilsBy-0.11.tar.gz

- Download MD5 sum: 14469e1029060490bc3a563f0e59e5f1

#### Installation of List::UtilsBy

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### LWP::MediaTypes-6.04

#### Introduction to LWP::MediaTypes

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/LWP-MediaTypes-6.04.tar.gz

- Download MD5 sum: 84b799a90c0d2ce52897a7cb4c0478d0

##### LWP::MediaTypes Dependencies

###### Recommended (required for the testsuite)

Test-Fatal-0.016

#### Installation of LWP::MediaTypes

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### MIME::Charset-1.012.2

#### Introduction to MIME::Charset

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/MIME-Charset-1.012.2.tar.gz

- Download MD5 sum: 71440416376248c31aa3bef753fae28d

##### MIME::Charset Dependencies

###### Recommended

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

#### Installation of MIME::Charset

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

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

Now, as the `root` user:

    make install

#### Command Explanations

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

### Module::Implementation-0.09

#### Introduction to Module::Implementation

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Module-Implementation-0.09.tar.gz

- Download MD5 sum: 52e3fe0ca6b1eff0488d59b7aacc0667

##### Module::Implementation Dependencies

###### Required

Module-Runtime-0.016, Try-Tiny-0.30

###### Recommended (required for the testsuite)

Test-Fatal-0.016, Test-Requires-0.11

#### Installation of Module::Implementation

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Module::Pluggable-5.2

#### Introduction to Module::Pluggable

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/S/SI/SIMONW/Module-Pluggable-5.2.tar.gz

- Download MD5 sum: 87ce2971662efd0b69a81bb4dc9ea76c

#### Installation of Module::Pluggable

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Module::Runtime-0.016

#### Introduction to Module::Runtime

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/Module-Runtime-0.016.tar.gz

- Download MD5 sum: d3d47222fa2e3dfcb4526f6cc8437b20

#### Installation of Module::Runtime

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

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### MRO::Compat-0.13

#### Introduction to MRO::Compat

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/MRO-Compat-0.13.tar.gz

- Download MD5 sum: d2e603e8ae9dc6934162d190eb085385

#### Installation of MRO::Compat

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### namespace::autoclean-0.29

#### Introduction to namespace::autoclean

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/namespace-autoclean-0.29.tar.gz

- Download MD5 sum: 39b38c776cd1f0ee03cc70781a2f2798

##### namespace::autoclean Dependencies

###### Required

namespace-clean-0.27, Sub-Identify-0.14

###### Recommended (required for the testsuite)

Test-Needs-0.002009

#### Installation of namespace::autoclean

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### namespace::clean-0.27

#### Introduction to namespace::clean

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RI/RIBASUSHI/namespace-clean-0.27.tar.gz

- Download MD5 sum: cba97f39ef7e594bd8489b4fdcddb662

##### namespace::clean Dependencies

###### Required

B-Hooks-EndOfScope-0.24, Package-Stash-0.39

#### Installation of namespace::clean

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Net::HTTP-6.21

#### Introduction to Net::HTTP

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/O/OA/OALDERS/Net-HTTP-6.21.tar.gz

- Download MD5 sum: dbe27483034a79a7d43f61cc48540641

##### Net::HTTP Dependencies

###### Required

URI-5.09

#### Installation of Net::HTTP

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Net::SSLeay-1.90

#### Introduction to Net::SSLeay

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/C/CH/CHRISN/Net-SSLeay-1.90.tar.gz

- Download MD5 sum: 00f57f3feb02e4fb7d282f9d6ae2beb2

#### Installation of Net::SSLeay

### Note

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

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

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

Now, as the `root` user:

    make install

#### Command Explanations

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

### Number::Compare-0.03

#### Introduction to Number::Compare

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Number-Compare-0.03.tar.gz

- Download MD5 sum: ded4085a8fc96328742785574ca65208

#### Installation of Number::Compare

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Package::Stash-0.39

#### Introduction to Package::Stash

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Package-Stash-0.39.tar.gz

- Download MD5 sum: 287d80c9115c9230912aca684f8ca92e

##### Package::Stash Dependencies

###### Required

Dist-CheckConflicts-0.11, Module-Implementation-0.09

###### Recommended (required for the testsuite)

CPAN-Meta-Check-0.014, Test-Fatal-0.016, Test-Needs-0.002009

#### Installation of Package::Stash

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Params::Validate-1.30

#### Introduction to Params::Validate

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Params-Validate-1.30.tar.gz

- Download MD5 sum: 2f1f7f3a1845974d9fc44d16cac1a0fb

##### Params::Validate Dependencies

###### Required

Module-Build-0.4231, Module-Implementation-0.09

###### Recommended (required for the testsuite)

Test-Fatal-0.016, Test-Requires-0.11

#### Installation of Params::Validate

This module is built using `Build.PL`:

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

Now, as the `root` user:

    ./Build install

### Params::ValidationCompiler-0.30

#### Introduction to Params::ValidationCompiler

Params::ValidationCompiler builds an optimized subroutine parameter validator.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Params-ValidationCompiler-0.30.tar.gz

- Download MD5 sum: f7746a98cab3d7a246372379d4658a4e

##### Params::ValidationCompiler Dependencies

###### Required

Exception-Class-1.45, Specio-0.47

###### Recommended (required for the testsuite)

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

#### Installation of Params::ValidationCompiler

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Path::Tiny-0.118

#### Introduction to Path::Tiny

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Path-Tiny-0.118.tar.gz

- Download MD5 sum: cb34fd356725ec12b78e88ddac37db08

#### Installation of Path::Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Role::Tiny-2.002004

#### Introduction to Role::Tiny

Role::Tiny is a minimalist role composition tool.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Role-Tiny-2.002004.tar.gz

- Download MD5 sum: 9ee45591befa3d0b1094ac75d282b6ba

#### Installation of Role::Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Scalar::List::Utils-1.56

#### Introduction to Scalar::List::Utils

Scalar::List::Utils provides a selection of list and scalar subroutines.

The module List::Util from this distribution is part of core perl, but List-AllUtils-0.19 requires a newer version than what is in current perl.

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.56.tar.gz

- Download MD5 sum: 284a30ac6dfd99a03025fd0edc6cb1ed

#### Installation of Scalar::List::Utils

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Scope::Guard-0.21

#### Introduction to Scope::Guard

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/C/CH/CHOCOLATE/Scope-Guard-0.21.tar.gz

- Download MD5 sum: be57b915d23ddac7677ef2ad9e52b92a

#### Installation of Scope::Guard

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Specio-0.47

#### Introduction to Specio

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Specio-0.47.tar.gz

- Download MD5 sum: 42a6734e5c02836f6d99646167694b96

##### Specio Dependencies

###### Required

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

###### Recommended (required for the testsuite)

MRO-Compat-0.13, Test-Fatal-0.016 and Test-Needs-0.002009

###### Optional

namespace-autoclean-0.29 (for the testsuite)

#### Installation of Specio

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Sub::Exporter::Progressive-0.001013

#### Introduction to Sub::Exporter::Progressive

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/F/FR/FREW/Sub-Exporter-Progressive-0.001013.tar.gz

- Download MD5 sum: 72cf6acdd2a0a8b105821a4db98e4ebe

#### Installation of Sub::Exporter::Progressive

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Sub::Identify-0.14

#### Introduction to Sub::Identify

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

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

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RG/RGARCIA/Sub-Identify-0.14.tar.gz

- Download MD5 sum: 014f19e72698b6a2cbcb54adc9691825

#### Installation of Sub::Identify

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Sub::Info-0.002

#### Introduction to Sub::Info

Sub::Info is a tool for inspecting subroutines.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Sub-Info-0.002.tar.gz

- Download MD5 sum: 335345b534fc0539c894050f7814cbda

##### Sub::Info Dependencies

###### Required

Importer-0.026

#### Installation of Sub::Info

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Sub::Quote-2.006006

#### Introduction to Sub::Quote

Sub::Quote provides ways to generate subroutines from strings.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Sub-Quote-2.006006.tar.gz

- Download MD5 sum: 1bb9caee697bcfa738f419d40505e506

##### Sub::Quote Dependencies

###### Recommended (required for the testsuite)

Test-Fatal-0.016

#### Installation of Sub::Quote

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Sub::Uplevel-0.2800

#### Introduction to Sub::Uplevel

Sub::Uplevel allows you to fool a caller that it is running in a higher stack frame.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-0.2800.tar.gz

- Download MD5 sum: 6c6a174861fd160e8d5871a86df00baf

#### Installation of Sub::Uplevel

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### SUPER-1.20190531

#### Introduction to SUPER

SUPER provides easier methods to dispatch control to the superclass (when subclassing a class).

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/C/CH/CHROMATIC/SUPER-1.20190531.tar.gz

- Download MD5 sum: defb371225f8ef1581d8c8fcc6077b46

##### SUPER Dependencies

###### Recommended (required for the testsuite)

Sub-Identify-0.14

#### Installation of SUPER

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Term::Table-0.015

#### Introduction to Term::Table

Term::Table formats a header and rows into a table. This is used by some failing tests to provide diagnostics about what has goen wrong.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Term-Table-0.015.tar.gz

- Download MD5 sum: f23274aec9bc43fe46135d37ae1b5927

##### Term::Table Dependencies

###### Required

Importer-0.026

#### Installation of Term::Table

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Deep-1.130

#### Introduction to Test::Deep

Test::Deep gives you very flexible ways to check that the result you got is the result you were expecting.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Test-Deep-1.130.tar.gz

- Download MD5 sum: d466e471108f7f7a5df3802cb13761ac

#### Installation of Test::Deep

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Exception-0.43

#### Introduction to Test::Exception

Test::Exception provides convenience methods for testing exception based code.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Test-Exception-0.43.tar.gz

- Download MD5 sum: 572d355026fb0b87fc2b8c64b83cada0

##### Test::Exception Dependencies

###### Required

Sub-Uplevel-0.2800

#### Installation of Test::Exception

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Fatal-0.016

#### Introduction to Test::Fatal

The Test::Fatal module provides simple helpers for testing code which throws exceptions.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Test-Fatal-0.016.tar.gz

- Download MD5 sum: da5d864c04a60e71de9ae51b318562fd

##### Test::Fatal Dependencies

###### Required

Try-Tiny-0.30

#### Installation of Test::Fatal

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::File-1.448

#### Introduction to Test::File

Test::File provides a collection of test utilities for file attributes.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Test-File-1.448.tar.gz

- Download MD5 sum: b4701559a827f348f36b487867d2c528

##### Test::File Dependencies

###### Recommended (required for the testsuite)

Test-utf8-1.02

#### Installation of Test::File

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::File::ShareDir-1.001002

#### Introduction to Test::File::ShareDir

Test::File::ShareDir is some low level plumbing to enable a distribution to perform tests while consuming its own share directories in a manner similar to how they will be once installed. This allows File-ShareDir-1.118 to see the latest version of content instead of whatever is installed on the target system where you are testing.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/K/KE/KENTNL/Test-File-ShareDir-1.001002.tar.gz

- Download MD5 sum: ec31466aa44c1cd56c6cb51d7ec3a5de

##### Test::File::ShareDir Dependencies

###### Required

Class-Tiny-1.008, File-Copy-Recursive-0.45, File-ShareDir-1.118, Path-Tiny-0.118 and Scope-Guard-0.21

###### Recommended (required for the testsuite)

Test-Fatal-0.016

#### Installation of Test::File::ShareDir

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::LeakTrace-0.17

#### Introduction to Test::LeakTrace

Test::LeakTrace traces memory leaks.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/L/LE/LEEJO/Test-LeakTrace-0.17.tar.gz

- Download MD5 sum: afdb2cc6be0807cb635fb601a004d522

#### Installation of Test::LeakTrace

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::MockModule-v0.176.0

#### Introduction to Test::MockModule

Test::MockModule lets you temporarily redefine subroutines in other packages for the purposes of unit testing.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GF/GFRANKS/Test-MockModule-v0.176.0.tar.gz

- Download MD5 sum: f36bd9aee0349430c434dc1d06b03589

##### Test::MockModule Dependencies

###### Required

Module-Build-0.4231, SUPER-1.20190531

###### Recommended (required for the testsuite)

Test-Warnings-0.031

#### Installation of Test::MockModule

This module is built using `Build.PL`:

    perl Build.PL &&
    ./Build       &&
    ./Build test

Now, as the `root` user:

    ./Build install

### Test::Needs-0.002009

#### Introduction to Test::Needs

Test::Needs skips tests if a requested module is not present.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/H/HA/HAARG/Test-Needs-0.002009.tar.gz

- Download MD5 sum: 5643cd323afb77d20363acbaf9b12bcc

#### Installation of Test::Needs

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Requires-0.11

#### Introduction to Test::Requires

The Test::Requires module checks if another (optional) module can be loaded, and if not it skips all the current tests.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM/Test-Requires-0.11.tar.gz

- Download MD5 sum: 999d6c4e46ea7baae7a5113292e02ed8

#### Installation of Test::Requires

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::RequiresInternet-0.05

#### Introduction to Test::RequiresInternet

Test::RequiresInternet is intended to easily test network connectivity before functional tests begin to non-local Internet resources.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/M/MA/MALLEN/Test-RequiresInternet-0.05.tar.gz

- Download MD5 sum: 0ba9f1cff4cf90ed2618c2eddfd525d8

#### Installation of Test::RequiresInternet

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::utf8-1.02

#### Introduction to Test::utf8

Test::utf8 is a collection of tests useful for dealing with utf8 strings in Perl.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/M/MA/MARKF/Test-utf8-1.02.tar.gz

- Download MD5 sum: 71d187539c76ac1ed9a0242ff208796d

#### Installation of Test::utf8

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Warnings-0.031

#### Introduction to Test::Warnings

Test::Warnings tests for warnings and the lack of them.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Warnings-0.031.tar.gz

- Download MD5 sum: f608f7011b0bb8f27d3a27e646a52f60

#### Installation of Test::Warnings

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test::Without::Module-0.20

#### Introduction to Test::Without::Module

This module allows you to deliberately hide modules from a program even though they are installed. This is mostly useful for testing modules that have a fallback when a certain dependency module is not installed.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/C/CO/CORION/Test-Without-Module-0.20.tar.gz

- Download MD5 sum: 34684186b66929bbcd12d3ac8ae03f9d

#### Installation of Test::Without::Module

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test2::Plugin::NoWarnings-0.09

#### Introduction to Test2::Plugin::NoWarnings

Test2::Plugin::NoWarnings causes tests to fail if there are any warnings while they run.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Test2-Plugin-NoWarnings-0.09.tar.gz

- Download MD5 sum: efcddec6cda66260ae14206e28f7feeb

##### Test2::Plugin::NoWarnings Dependencies

###### Required

Test2-Suite-0.000140

###### Recommended (required for the testsuite)

IPC-Run3-0.048

#### Installation of Test2::Plugin::NoWarnings

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Test2::Suite-0.000140

#### Introduction to Test2::Suite

Test2::Suite is a distribution with a rich set of tools built upon the Test2 framework.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/EX/EXODIST/Test2-Suite-0.000140.tar.gz

- Download MD5 sum: 2ccca23d640361f9c6f4912d676f15c8

##### Test2::Suite Dependencies

###### Required

Module-Pluggable-5.2, Scope-Guard-0.21, Sub-Info-0.002 and Term-Table-0.015

#### Installation of Test2::Suite

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Text::CSV_XS-1.46

#### Introduction to Text::CSV_XS

Text::CSV_XS provides facilities for the composition and decomposition of comma-separated values.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/Text-CSV_XS-1.46.tgz

- Download MD5 sum: 147eb4e11237c848d31fdf36dc1fc364

#### Installation of Text::CSV_XS

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Text::Diff-1.45

#### Introduction to Text::Diff

Text::Diff performs diffs on files and record sets.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/N/NE/NEILB/Text-Diff-1.45.tar.gz

- Download MD5 sum: edf57b6189f7651a6be454062a4e6d9c

##### Text::Diff Dependencies

###### Required

Algorithm-Diff-1.201

#### Installation of Text::Diff

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Text::Glob-0.11

#### Introduction to Text::Glob

Text::Glob implements glob(3) style matching that can be used to match against text, rather than fetching names from a filesystem.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Text-Glob-0.11.tar.gz

- Download MD5 sum: d001559c504a2625dd117bd1558f07f7

#### Installation of Text::Glob

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Tie::Cycle-1.226

#### Introduction to Tie::Cycle

You use Tie::Cycle to go through a list over and over again. Once you get to the end of the list, you go back to the beginning. You don't have to worry about any of this since the magic of tie does that for you.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Tie-Cycle-1.226.tar.gz

- Download MD5 sum: 474cbce228dde2e5253d322e0729baa6

#### Installation of Tie::Cycle

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### TimeDate-2.33

#### Introduction to TimeDate

TimeDate provides miscellaneous timezone manipulation routines.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/TimeDate-2.33.tar.gz

- Download MD5 sum: 5e5afe22c8d417417283d1f7f4572a57

#### Installation of TimeDate

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Try::Tiny-0.30

#### Introduction to Try::Tiny

Try::Tiny provides try and catch to expect and handle exceptional conditions, avoiding quirks in Perl and common mistakes.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/E/ET/ETHER/Try-Tiny-0.30.tar.gz

- Download MD5 sum: eb362c3cb32c42f9f28de9ddb7f2ead6

##### Try::Tiny Dependencies

###### Optional (can be used by the testsuite)

Capture-Tiny-0.48

#### Installation of Try::Tiny

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### Variable::Magic-0.62

#### Introduction to Variable::Magic

Magic is Perl's way of enhancing variables. With this module, you can add your own magic to any variable.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/V/VP/VPIT/Variable-Magic-0.62.tar.gz

- Download MD5 sum: 588d94ec3d98dece878a776d161c1dda

#### Installation of Variable::Magic

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### WWW::RobotRules-6.02

#### Introduction to WWW::RobotRules

WWW::RobotRules parses `robots.txt` files, creating a WWW::RobotRules object with methods to check if access to a given URL is prohibited.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz

- Download MD5 sum: b7186e8b8b3701e70c22abf430742403

##### WWW::RobotRules Dependencies

###### Required (runtime)

libwww-perl-6.55 (install this module first and install that later)

#### Installation of WWW::RobotRules

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::LibXML-2.0207

#### Introduction to XML::LibXML

XML::LibXML is a perl binding for libxml2-2.9.12.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0207.tar.gz

- Download MD5 sum: d943c3ff20e19c376f08adcbc4158019

##### XML::LibXML Dependencies

###### Required

Alien-Libxml2-0.17, XML-SAX-1.02

#### Installation of XML::LibXML

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::NamespaceSupport-1.12

#### Introduction to XML::NamespaceSupport

XML::NamespaceSupport offers a simple way to process namespaced XML names from within any application that may need them.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/XML-NamespaceSupport-1.12.tar.gz

- Download MD5 sum: a8916c6d095bcf073e1108af02e78c97

#### Installation of XML::NamespaceSupport

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

### XML::SAX-1.02

#### Introduction to XML::SAX

XML::SAX is a SAX parser access API for Perl. It includes classes and APIs required for implementing SAX drivers, along with a factory class for returning any SAX parser installed on the user's system.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GR/GRANTM/XML-SAX-1.02.tar.gz

- Download MD5 sum: b62e3754523695c7f5bbcafa3676a38d

##### XML::SAX Dependencies

###### Required

libxml2-2.9.12, XML-NamespaceSupport-1.12 and XML-SAX-Base-1.09

#### Installation of XML::SAX

This module uses a variant of the standard build and installation instructions:

    yes | perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

#### Command Explanations

yes: Perl will ask if you want it to alter ParserDetails.ini and then wait for a response. The default is 'y'. Using 'yes' allows you to script this.

### XML::SAX::Base-1.09

#### Introduction to XML::SAX::Base

This module has a very simple task - to be a base class for PerlSAX drivers and filters.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://cpan.metacpan.org/authors/id/G/GR/GRANTM/XML-SAX-Base-1.09.tar.gz

- Download MD5 sum: ec347a14065dd7aec7d9fb181b2d7946

#### Installation of XML::SAX-Base

This module uses the standard build and installation instructions:

    perl Makefile.PL &&
    make             &&
    make test

Now, as the `root` user:

    make install

Last updated on

## PHP-8.0.10

### Introduction to PHP

PHP is the PHP Hypertext Preprocessor. Primarily used in dynamic web sites, it allows for programming code to be directly embedded into the HTML markup. It is also useful as a general purpose scripting language.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.php.net/distributions/php-8.0.10.tar.xz

- Download MD5 sum: 349ee590787ab46e62dae517d90b5101

- Download size: 10.2 MB

- Estimated disk space required: 446 MB (with tests, add 182 MB for documentation)

- Estimated build time: 1.6 SBU (with parallelism=4; add 2.1 SBU for tests)

#### Additional Downloads

- 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 http://www.php.net/download-docs.php

#### PHP Dependencies

##### Recommended

Apache-2.4.48 and libxml2-2.9.12

##### Optional System Utilities and Libraries

Aspell-0.60.8, enchant-2.3.1, libxslt-1.1.34, an MTA (that provides a sendmail command), PCRE-8.45, Pth-2.0.7, AppArmor, Dmalloc, Net-SNMP, oniguruma, OSSP mm, re2c, and XMLRPC-EPI

##### Optional Graphics Utilities and Libraries

FreeType-2.11.0, libexif-0.6.22, libjpeg-turbo-2.1.1, libpng-1.6.37, libtiff-4.3.0, libwebp-1.2.1, X Window System, FDF Toolkit, GD, and t1lib

##### Optional Web Utilities

cURL-7.78.0, tidy-html5-5.8.0, Caudium, Hyperwave, mnoGoSearch, Roxen WebServer, and WDDX

##### Optional Data Management Utilities and Libraries

Berkeley DB-5.3.28 (Note that PHP does not officially support versions above 5.3), libiodbc-3.52.15, lmdb-0.9.29, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, PostgreSQL-13.4, SQLite-3.36.0, unixODBC-2.3.9, Adabas, Birdstep, cdb, DBMaker, Empress, FrontBase, IBM DB2, Mini SQL, Monetra, and QDBM

PHP also provides support for many commercial database tools such as Oracle, SAP and ODBC Router.

##### Optional Security/Encryption Utilities and Libraries

Cyrus SASL-2.1.27, MIT Kerberos V5-1.19.2, libmcrypt, and mhash

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/php

### Installation of PHP

You can use PHP for server-side scripting, command-line scripting or client-side GUI applications. This book provides instructions for setting up PHP for server-side scripting as it is the most common form.

### Note

PHP has many more configure options that will enable support for various things. You can use ./configure --help to see a full list of the available options. Also, use of the PHP web site is highly recommended, as their online docs are very good. An example of a configure command that utilizes many of the most common dependencies can be found at https://anduin.linuxfromscratch.org/BLFS/files/php_configure.txt.

If, for whatever reason, you don't have libxml2-2.9.12 installed, you need to add `--disable-libxml` to the configure command in the instructions below. Note that this will prevent the pear command from being built.

Install PHP by running the following commands:

    ./configure --prefix=/usr                \
                --sysconfdir=/etc            \
                --localstatedir=/var         \
                --datadir=/usr/share/php     \
                --mandir=/usr/share/man      \
                --enable-fpm                 \
                --without-pear               \
                --with-fpm-user=apache       \
                --with-fpm-group=apache      \
                --with-fpm-systemd           \
                --with-config-file-path=/etc \
                --with-zlib                  \
                --enable-bcmath              \
                --with-bz2                   \
                --enable-calendar            \
                --enable-dba=shared          \
                --with-gdbm                  \
                --with-gmp                   \
                --enable-ftp                 \
                --with-gettext               \
                --enable-mbstring            \
                --disable-mbregex            \
                --with-readline              &&
    make

To test the results, issue: make test. Several tests (out of over 16000) may fail, in which case you are asked whether you want to send the report to the PHP developers. If you want to automate the test, you may prefix the command with yes "n" | .

Now, as the `root` user:

    make install                                     &&
    install -v -m644 php.ini-production /etc/php.ini &&

    install -v -m755 -d /usr/share/doc/php-8.0.10 &&
    install -v -m644    CODING_STANDARDS* EXTENSIONS NEWS README* UPGRADING* \
                        /usr/share/doc/php-8.0.10

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.0.10 &&
    gunzip -v /usr/share/doc/php-8.0.10/php_manual_en.html.gz

For the “Many HTML files” tarball:

    tar -xvf ../php_manual_en.tar.gz \
        -C /usr/share/doc/php-8.0.10 --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 http://pear.php.net/go-pear.phar
    php ./go-pear.phar

### Command Explanations

`--datadir=/usr/share/php`: This works around a bug in the build machinery, which installs some data to a wrong location.

`--enable-fpm`: This parameter allows building the fastCGI Process Manager.

`--with-fpm-systemd`: This parameter allows the FastCGI Process Manager to integrate with systemd.

`--without-pear`: This switch disables installation of bundled pear software.

`--with-config-file-path=/etc`: This parameter makes PHP look for the `php.ini` configuration file in `/etc`.

`--with-zlib`: This parameter adds support for Zlib compression.

`--enable-bcmath`: Enables bc style precision math functions.

`--with-bz2`: Adds support for Bzip2 compression functions.

`--enable-calendar`: This parameter provides support for calendar conversion.

`--enable-dba=shared`: This parameter enables support for database (dbm-style) abstraction layer functions.

`--enable-ftp`: This parameter enables FTP functions.

`--with-gettext`: Enables functions that use Gettext text translation.

`--enable-mbstring`: This parameter enables multibyte string support.

`--with-readline`: This parameter enables command line Readline support.

`--disable-libxml`: This option allows building PHP without libxml2 installed.

`--with-apxs2`: Instead of building the fastCGI process manager, it is possible to build an apache module. This has some performance penalty for heavy loaded servers, but may be easier to set up. This switch is incompatible with the `--enable-fpm` and `--with-fpm-...` switches.

`--with-mysqli=shared`: This option includes MySQLi support.

`--with-mysql-sock=/run/mysqld/mysqld.sock`: Location of the MySQL unix socket pointer.

`--with-pdo-mysql=shared`: This option includes PDO: MySQL support.

`--with-tidy=shared`: This option includes tidy library support.

### Configuring PHP

#### Config Files

`/etc/php.ini`, `/etc/pear.conf`, `/etc/php-fpm.conf`, and `/etc/php-fpm.d/www.conf`

#### Configuration Information

The file used as the default `/etc/php.ini` configuration file is recommended by the PHP development team. This file modifies the default behavior of PHP. If no `/etc/php.ini` is used, all configuration settings fall to the defaults. You should review the comments in this file and ensure the changes are acceptable in your particular environment.

The fastCGI process manager uses the configuration file `/etc/php-fpm.conf`. The default file shipped with PHP includes all the `/etc/php-fpm.d/*.conf` in turn. There is a shipped `/etc/php-fpm.d/www.conf` file, that contains the parameters related to the interaction with the Apache Web server.

You may have noticed the following from the output of the make install command:

    You may want to add: /usr/lib/php to your php.ini include_path

If desired, add the entry using the following command as the `root` user:

    sed -i 's@php/includes"@&\ninclude_path = ".:/usr/lib/php"@' \
        /etc/php.ini

To enable fastCGI support in the Apache web server, two LoadModule directives must be added to the `httpd.conf` file. They are commented out, so just issue the following command as `root` user:

    sed -i -e '/proxy_module/s/^#//'      \
           -e '/proxy_fcgi_module/s/^#//' \
           /etc/httpd/httpd.conf

Those modules accept various ProxyPass directives. One possibility is (as the `root` user):

    echo \
    'ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/srv/www/$1' >> \
    /etc/httpd/httpd.conf

Additionally, it may be useful to add an entry for `index.php` to the DirectoryIndex directive of the `httpd.conf` file. Lastly, adding a line to setup the `.phps` extension to show highlighted PHP source may be desirable:

    AddType application/x-httpd-php-source .phps

You'll need to restart the Apache web server after making any modifications to the `httpd.conf` file.

#### Systemd Unit

To start the php-fpm daemon at boot, install the systemd unit from the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-php-fpm

### Contents

Installed Programs: phar (symlink), phar.phar, php, php-cgi, php-config, php-fpm, phpdbg, and phpize
Installed Libraries: dba.so and opcache.so in /usr/lib/php/extensions/no-debug-non-zts-20200930
Installed Directories: /etc/php-fpm.d, /usr/{include,lib,share}/php, and /usr/share/doc/php-8.0.10

#### Short Descriptions

php | is a command line interface that enables you to parse and execute PHP code
pear | is the PHP Extension and Application Repository (PEAR) package manager. This isn't installed by default
php-fpm | is the fastCGI process manager for PHP
phpdbg | is the interactive PHP debugger

Last updated on

## Python-2.7.18

### Introduction to Python 2

The Python 2 package contains the Python development environment. It is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications. This version is for backward compatibility with other dependent packages.

### Note

Python2 has been deprecated by the upstream developers. Support for Python2 was discontinued on January 1st, 2020.

BLFS is attempting to use Python3 as much as possible, but some packages have not been updated to support Python3.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- 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)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/Python-2.7.18-security_fixes-1.patch

- Optional HTML Documentation: https://docs.python.org/ftp/python/doc/2.7.18/python-2.7.18-docs-html.tar.bz2

#### Python 2 Dependencies

##### Optional

BlueZ-5.61 and Valgrind-3.17.0

##### Optional (For Additional Modules)

SQLite-3.36.0 and Tk-8.6.11.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python

### Installation of Python 2

First, disable the installation of a script that overwrites a more recent script:

    sed -i '/2to3/d' ./setup.py

Install Python 2 by running the following commands:

    patch -Np1 -i ../Python-2.7.18-security_fixes-1.patch &&
    ./configure --prefix=/usr                              \
                --enable-shared                            \
                --with-system-expat                        \
                --with-system-ffi                          \
                --enable-unicode=ucs4                     &&
    make

If you invoke the tests, they will run through twice. To test the results, issue: make -k test.

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 http://docs.python.org/download.html, install it as the `root` user:

    install -v -dm755 /usr/share/doc/python-2.7.18 &&

    tar --strip-components=1                     \
        --no-same-owner                          \
        --directory /usr/share/doc/python-2.7.18 \
        -xvf ../python-2.7.18-docs-html.tar.bz2 &&

    find /usr/share/doc/python-2.7.18 -type d -exec chmod 0755 {} \; &&
    find /usr/share/doc/python-2.7.18 -type f -exec chmod 0644 {} \;

### Command Explanations

`--with-system-expat`: This switch enables linking against system version of Expat.

`--with-system-ffi`: This switch enables linking against system version of libffi.

`--enable-unicode=ucs4`: This switch enables 32bit 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 being phased out.

`--with-dbmliborder=bdb:gdbm:ndbm`: Use this switch if you want to build Python DBM Module against Berkeley DB instead of GDBM.

make altinstall: This make target omits some default symbolic links that may interfere with Python 3.

chmod ...: Fix permissions for libraries to be consistent with other libraries.

### Configuring Python 2

In order for python to find the installed documentation, you must add the following environment variable to individual user's or the system's profile:

    export PYTHONDOCS=/usr/share/doc/python-2.7.18

### Contents

Installed Programs: pydoc, python2 (symlink), python2-config (symlink), python2.7, python2.7-config, smtpd.py, and idle
Installed Library: libpython2.7.so
Installed Directories: /usr/{include,lib}/python2.7 and /usr/share/doc/python-2.7.18

#### Short Descriptions

idle | is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built
pydoc | is the Python documentation tool
python2 | is an interpreted, interactive, object-oriented programming language
python2.7 | is a version-specific name for the python program
smtpd.py | is an SMTP proxy implemented in Python

Last updated on

## Python-3.9.6

### Introduction to Python 3

The Python 3 package contains the Python development environment. This is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications.

### Note

Python 3 was installed in LFS. The only reason to rebuild it here is if optional modules are needed.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz

- Download MD5 sum: ecc29a7688f86e550d29dba2ee66cf80

- Download size: 18 MB

- Estimated disk space required: 356 MB (add 56 MB for tests)

- Estimated build time: 0.6 SBU (using parallelism=4; add 2.7 SBU for tests)

#### Python 3 Dependencies

##### Recommended

SQLite-3.36.0 (required if building firefox or thunderbird)

##### Optional

BlueZ-5.61, GDB-10.2 (required for some tests), Valgrind-3.17.0, and libmpdec

##### Optional (For Additional Modules)

Berkeley DB-5.3.28, libnsl-1.3.0, and Tk-8.6.11.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python3

### Installation of Python 3

Install Python 3 by running the following commands:

    CXX="/usr/bin/g++"               \
    ./configure --prefix=/usr        \
                --enable-shared      \
                --with-system-expat  \
                --with-system-ffi    \
                --with-ensurepip=yes \
                --enable-optimizations &&
    make

To test the result, issue make test. Some tests may need an Internet connection.

Now, as the `root` user:

    make install

### Command Explanations

CXX="/usr/bin/g++" ./configure ...: Avoid an annoying message during configuration.

`--with-system-expat`: This switch enables linking against the system version of Expat.

`--with-system-ffi`: This switch enables linking against the system version of libffi.

`--with-ensurepip=yes` : This switch enables building the pip and setuptools packaging programs. setuptools is needed for building some Python modules.

`--with-dbmliborder=bdb:gdbm:ndbm`: Use this switch if you want to build the Python DBM Module against Berkeley DB instead of GDBM.

`--enable-optimization`: 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.9/config-3.9-<arch>-linux-gnu/libpython3.9.a` with a small increase in the time to compile Python. Run-time results do not appear to show any benefit from doing this.

### Configuring Python 3

In order for python3 to find the installed documentation, create the following version independent symlink:

    ln -svfn python-3.9.6 /usr/share/doc/python-3

and add the following environment variable to the individual user's or system's profile:

    export PYTHONDOCS=/usr/share/doc/python-3/html

### Contents

Installed Programs: 2to3 (symlink) and 2to3-3.9, idle3 (symlink) and idle3.9, pip3 (symlink) and pip3.9, pydoc3 and pydoc3.9, python3 (symlink); python3.9, and python3-config (symlink) and python3.9-config
Installed Libraries: libpython3.9.so and libpython3.so
Installed Directories: /usr/include/python3.9, /usr/lib/python3.9, and /usr/share/doc/python-3.9.6

#### Short Descriptions

idle3 | is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built
pydoc3 | is the Python documentation tool
python3 | is an interpreted, interactive, object-oriented programming language
python3.9 | is a version-specific name for the python program

Last updated on

## Python Modules

### Introduction to Python Modules

The Python module packages add useful objects to the Python language. Modules utilized by packages throughout BLFS are listed here, along with their dependencies.

- D-Bus Python-1.2.18

- decorator-5.0.9

- docutils-0.17.1

- Py3c-1.3.1

- PyAtSpi2-2.38.1

- PyCairo-1.20.1

- PyCairo-1.18.2

- PyCryptodome-3.10.1

- dbusmock-0.23.1

- Pygments-2.10.0

- PyGObject-2.28.7

- PyGObject-3.40.1

- PyGTK-2.24.0

- PyXDG-0.27

- Python2 libxml2-2.9.12 module

- lxml-4.6.3

- MarkupSafe-2.0.1

- Jinja2-3.0.1

- Mako-1.1.5

- python-slip-0.6.5

- Scour-0.38.2

- six-1.16.0

- PyYAML-5.3.1

### D-Bus Python-1.2.18

#### Introduction to D-Bus Python Module

D-Bus Python provides Python bindings to the D-Bus API interface.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://dbus.freedesktop.org/releases/dbus-python/dbus-python-1.2.18.tar.gz

- Download MD5 sum: 468874f3bf61d1b7deac98bbe2cfd8ac

- Download size: 568 KB

- Estimated disk space required: 10 MB (both versions, with tests)

- Estimated build time: 0.3 SBU (both versions, with tests)

##### D-Bus Python Dependencies

###### Required

dbus-1.12.20 and GLib-2.68.4

###### Recommended

Python-2.7.18 (some applications in the book require the Python 2 module)

###### Optional

PyGObject-3.40.1 and tap.py (required for some tests)

###### Optional (Required to build the API and HTML Documentation)

docutils-0.17.1 and Sphinx with sphinx_rtd_theme

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dbus-python

#### Installation of D-Bus Python

### Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To build D-Bus Python as the Python 2 module, run the following commands:

    mkdir python2 &&
    pushd python2 &&
    PYTHON=/usr/bin/python2     \
    ../configure --prefix=/usr --disable-documentation &&
    make &&
    popd

To test the results, issue: make -C python2 check. Several tests report an error due to dbus issues.

To build D-Bus Python as the Python 3 module, run the following commands:

    mkdir python3 &&
    pushd python3 &&
    PYTHON=/usr/bin/python3    \
    ../configure --prefix=/usr --docdir=/usr/share/doc/dbus-python-1.2.18 &&
    make &&
    popd

To test the results, issue: make -C python3 check.

To install the Python 2 module, run the following command as the `root` user:

    make -C python2 install

To install the Python 3 module, run the following command as the `root` user:

    make -C python3 install

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/doc/dbus-python-1.2.18 and /usr/lib/python2.7/site-packages/dbus and/or /usr/lib/python3.9/site-packages/dbus

### decorator-5.0.9

#### Introduction to decorator Module

The goal of the decorator module is to make it easy to define signature-preserving function decorators and decorator factories.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/d/decorator/decorator-5.0.9.tar.gz

- Download MD5 sum: a90526e45e7a30cf2710d6467f403e03

- Download size: 36 KB

- Estimated disk space required: 232 KB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/decorator

#### Installation of decorator

Install decorator with the following commands:

    python3 setup.py build

This package does not come with a test suite.

To install the decorator package with the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: /usr/lib/python3.9/site-packages/decorator-5.0.9-py3.9.egg-info
Installed Directories: None

### docutils-0.17.1

#### Introduction to docutils

docutils is a set of Python modules and programs for processing plaintext docs into formats such as HTML, XML, or LaTeX.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://downloads.sourceforge.net/docutils/docutils-0.17.1.tar.gz

- Download MD5 sum: ed810564c25063e9dac10dd0893ead47

- Download size: 1.9 MB

- Estimated disk space required: 12 MB

- Estimated build time: less than 0.1 SBU

##### Docutils Dependencies

###### Optional

Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docutils

#### Installation of docutils

To build the Python 3 applications, run the following command:

    python3 setup.py build

To install the Python applications run the following as the `root` user:

    python3 setup.py install --optimize=1 &&

    for f in /usr/bin/rst*.py; do
      ln -svf $(basename $f) /usr/bin/$(basename $f .py)
    done

#### Contents

Installed Programs: rst2html4, rst2html5, rst2html, rst2latex, rst2man, rst2odt_prepstyles, rst2odt, rst2pseudoxml, rst2s5, rst2xetex, rst2xml, and rstpep2html
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/docutils

### Py3c-1.3.1

#### Introduction to Py3c

Py3c helps you port C extensions to Python 3. It provides a detailed guide, and a set of macros to make porting easy and reduce boilerplate.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/encukou/py3c/archive/v1.3.1/py3c-1.3.1.tar.gz

- Download MD5 sum: 57f6518f3a7bcd501425bb23f2de15a7

- Download size: 48 KB

- Estimated disk space required: 1.4 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/py3c

#### Installation of Py3c

The Py3c package is a headers-only package and because of that, no configuration and compilation is required.

To test the package, issue: make test-python3.

To install the Python 3 module, run the following command as the `root` user:

    make prefix=/usr install

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/include/py3c

### PyAtSpi2-2.38.1

#### Introduction to PyAtSpi2

The PyAtSpi2 package contains Python bindings for the core components of the GNOME Accessibility.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://download.gnome.org/sources/pyatspi/2.38/pyatspi-2.38.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/pyatspi/2.38/pyatspi-2.38.1.tar.xz

- Download MD5 sum: bac820e859310c64fe37c227be657656

- Download size: 312 KB

- Estimated disk space required: 3.7 MB

- Estimated build time: less than 0.1 SBU

##### PyAtSpi2 Dependencies

###### Required

PyGObject-3.40.1

###### Recommended

at-spi2-core-2.40.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pyatspi2

#### Installation of PyAtSpi2

To build PyAtSpi2 as a Python 3 module, run the following commands:

    ./configure --prefix=/usr --with-python=/usr/bin/python3

This package does not come with a testsuite.

To install the Python 3 module, run the following command as the `root` user:

    make install

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/pyatspi

### PyCairo-1.20.1

#### Introduction to PyCairo Module

PyCairo provides Python bindings to Cairo.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/pygobject/pycairo/releases/download/v1.20.1/pycairo-1.20.1.tar.gz

- Download MD5 sum: fa88a28cadbfb34192fe743d32c0ee33

- Download size: 340 KB

- Estimated disk space required: 3.5 MB

- Estimated build time: less than 0.1 SBU

##### PyCairo Dependencies

###### Required

Cairo-1.17.4

###### Optional

Hypothesis (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycairo

#### Installation of PyCairo

### Note

The current version of pycairo no longer builds the Python2 module. If you need that module for packages such as Gimp-2.10.24, use PyCairo-1.18.2

Install PyCairo for Python3 by running the following commands:

    python3 setup.py build

This package does not come with a test suite.

Now, as the `root` user:

    python3 setup.py install --optimize=1   &&
    python3 setup.py install_pycairo_header &&
    python3 setup.py install_pkgconfig

#### Contents

Installed Program: None
Installed Library: _cairo.cpython-39-<arch>-linux-gnu.so
Installed Directories: /usr/include/pycairo, and /usr/lib/python3.9/site-packages/pycairo-1.20.1-py3.9.egg

### PyCairo-1.18.2

#### Introduction to PyCairo for Python2 Module

This version of PyCairo provides Python2 bindings to Cairo.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- 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

##### PyCairo Dependencies

###### Required

Cairo-1.17.4 and Python-2.7.18

###### Optional

Hypothesis (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycairo

#### Installation of PyCairo

### Note

This version of PyCairo is only retained for packages such as Gimp-2.10.24 which is stuck on Python2 until Gimp-3 is released.

Install PyCairo for Python2 by running the following commands:

    python2 setup.py build

This package does not come with a test suite.

Now, as the `root` user:

    python2 setup.py install --optimize=1   &&
    python2 setup.py install_pycairo_header &&
    python2 setup.py install_pkgconfig

#### Contents

Installed Program: None
Installed Library: _cairo.so
Installed Directories: /usr/include/pycairo, /usr/lib/python2.7/site-packages/cairo, /usr/lib/python2.7/site-packages/pycairo-1.18.2-py2.7.egg,

### PyCryptodome-3.10.1

#### Introduction to the PyCryptodome Module

PyCryptodome is a collection of both secure hash functions (such as SHA256 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal, etc.), and is a drop-in replacement for PyCrypto.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/Legrandin/pycryptodome/archive/v3.10.1/pycryptodome-3.10.1.tar.gz

- Download MD5 sum: 31f5e8c91e8e0fa45da14271b394bba4

- Download size: 15 MB

- Estimated disk space required: 58 MB

- Estimated build time: 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pycryptodome

#### Installation of PyCryptodome

To build PyCryptodome as a Python 3 module, run the following command:

    python3 setup.py build

To install the module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/pycryptodome-3.10.1-py3.9.egg

### dbusmock-0.23.1

#### Introduction to dbusmock

dbusmock is a Python library useful for writing tests for software which talks to D-Bus services.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/martinpitt/python-dbusmock/releases/download/0.23.1/python-dbusmock-0.23.1.tar.gz

- Download MD5 sum: 9f32436dab51f159e988354de1b469ae

- Download size: 80 KB

- Estimated disk space required: 1.3 KB

- Estimated build time: less than 0.1 SBU

##### dbusmock Dependencies

###### Required

D-Bus Python-1.2.18 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dbusmock

#### Installation of dbusmock

Build the package with:

    python3 setup.py build

To install the package run the following as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: python_dbusmock-0.23.1-py3.9.egg
Installed Directories: /usr/lib/python3.9/site-packages/dbusmock

### Pygments-2.10.0

#### Introduction to Pygments Module

Pygments is a general syntax highlighter written in Python, for more than 300 languages.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/P/Pygments/Pygments-2.10.0.tar.gz

- Download MD5 sum: 87369a4e15019caf9cf056ab2c5858b3

- Download size: 3.9 MB

- Estimated disk space required: 54 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygments

#### Installation of Pygments

Build and install the Python 3 module by running the following commands as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: pygmentize
Installed Library: None
Installed Directories: /usr/lib/python3.9/site-packages/Pygments-2.10.0-py3.9.egg

### PyGObject-2.28.7

#### Introduction to PyGObject Module

PyGObject-2.28.7 provides Python 2 bindings to the GObject class from GLib.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://download.gnome.org/sources/pygobject/2.28/pygobject-2.28.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

##### PyGObject Dependencies

###### Required

GLib-2.68.4, PyCairo-1.18.2 and Python-2.7.18

###### Optional

gobject-introspection-1.68.0 and libxslt-1.1.34 (to Build Documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygobject2

#### Installation of PyGObject

Install PyGObject by running the following commands:

    ./configure --prefix=/usr --disable-introspection &&
    make

This package does not have a working testsuite.

Now, as the `root` user:

    make install

#### Command Explanations

`--disable-introspection`: Omit this switch if you have installed gobject-introspection-1.68.0. Note that it conflicts with PyGObject-3.40.1.

`--disable-docs`: This option disables the rebuilding of the html documentation if libxslt-1.1.34 is installed.

#### Contents

Installed Programs: pygobject-codegen-2.0
Installed Libraries: libpyglib-2.0-python.so, _gio.so, unix.so, _glib.so and _gobject.so.
Installed Directories: /usr/include/pygtk-2.0, /usr/lib/python2.7/site-packages/gtk-2.0/{gio,glib,gobject}, /usr/share/gtk-doc/html/pygobject and /usr/share/pygobject/2.0

### PyGObject-3.40.1

#### Introduction to PyGObject3 Module

PyGObject3 provides Python bindings to the GObject class from GLib.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://download.gnome.org/sources/pygobject/3.40/pygobject-3.40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/pygobject/3.40/pygobject-3.40.1.tar.xz

- Download MD5 sum: f27e0a2d1526df57c89624cdebbd69e0

- Download size: 544 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

##### PyGObject3 Dependencies

###### Required

gobject-introspection-1.68.0 and PyCairo-1.20.1 (Python 3 module)

###### Optional (for the tests)

pep8, pyflakes, and pytest

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygobject3

#### Installation of PyGObject3

First, remove a faulty test:

    mv -v tests/test_gdbus.py{,.nouse}

Install pygobject3 by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. An already active graphical session with a bus address is necessary to run the tests. One test, `tests/test_gdbus.py`, is known to fail.

Now, as the `root` user:

    ninja install

#### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

#### Contents

Installed Programs: None
Installed Library: /usr/lib/python3.9/site-packages/gi/_gi{,_cairo}.cpython-39-<arch>-linux-gnu.so
Installed Directories: /usr/include/pygobject-3.0 and /usr/lib/python3.9/site-packages/{gi,pygtkcompat}

### PyGTK-2.24.0

#### Introduction to PyGTK Module

PyGTK lets you to easily create programs with a graphical user interface using the Python programming language.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://download.gnome.org/sources/pygtk/2.24/pygtk-2.24.0.tar.bz2

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/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

##### PyGTK Dependencies

###### Required

PyGObject-2.28.7 and Python-2.7.18

###### Required (atk module)

ATK-2.36.0

###### Required (pango module)

Pango-1.48.9

###### Required (pangocairo module)

PyCairo-1.18.2 and Pango-1.48.9

###### Required (gtk and gtk.unixprint modules)

PyCairo-1.18.2 and GTK+-2.24.33.

###### Required (gtk.glade module)

PyCairo-1.18.2 and libglade-2.6.4.

###### Optional

NumPy

###### Optional (to Build Documentation)

libxslt-1.1.34

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pygtk

#### Installation of PyGTK

First, adapt PyGTK to changes in Pango by removing undefined APIs:

    sed -i '1394,1402 d' pango.defs

Install PyGTK by running the following commands:

    ./configure --prefix=/usr &&
    make

The tests must be run from an active X display. If this is so, issue: make check.

Now, as the `root` user:

    make install

#### Command Explanations

`--enable-docs`: This option enables rebuilding the html documentation if libxslt-1.1.34 is installed.

#### Contents

Installed Programs: pygtk-codegen-2.0 and pygtk-demo.
Installed Libraries: atk.so, _gtk.so, glade.so, gtkunixprint.so, pango.so and pangocairo.so.
Installed Directories: /usr/include/pygtk-2.0, /usr/lib/pygtk, /usr/lib/python2.7/site-packages/gtk-2.0, /usr/share/gtk-doc/html/pygtk and /usr/share/pygtk.

##### Short Descriptions

pygtk-codegen-2.0 | is a wrapper script to run the PyGTK codegen module
pygtk-demo | is a Python wrapper to run the PyGTK demo program

### PyXDG-0.27

#### Introduction to PyXDG Module

PyXDG is a Python library to access freedesktop.org standards.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/6f/2e/2251b5ae2f003d865beef79c8fcd517e907ed6a69f58c32403cec3eba9b2/pyxdg-0.27.tar.gz

- Download MD5 sum: 2a2844c21b1b038d74433a0c4aef0a88

- Download size: 60 KB

- Estimated disk space required: 708 KB

- Estimated build time: less than 0.1 SBU

##### PyXDG Dependencies

###### Optional

Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pyxdg

#### Installation of PyXDG

To install the module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Directory: /usr/lib/python3.9/site-packages/xdg

### libxml2-2.9.12 (for its Python2 module)

#### Introduction to the libxml2 Python2 module

These instructions provide the Python2 bindings for libxml2: the Python3 bindings are built as part of libxml2-2.9.12 and most packages in the book do not use these bindings for the older Python2.

By building these bindings after libxml2-2.9.12 has been installed, there is no need to rebuild the time-consuming (if all dependencies are used) main part of that package.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): http://xmlsoft.org/sources/libxml2-2.9.12.tar.gz

- Download (FTP): ftp://xmlsoft.org/libxml2/libxml2-2.9.12.tar.gz

- Download MD5 sum: f433a39be087a9f0b197eb2307ad9f75

- Download size: 5.4 MB

- Estimated disk space required: 53 MB (2.3 MB installed)

- Estimated build time: less than 0.1 SBU

##### libxml2 (Python2) Dependencies

###### Required

libxml2-2.9.12 and Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxml2

#### Installation of libxml2 Python2 module

To build the Python 2 module, run:

    cd python             &&
    python2 setup.py build

To install the Python 2 module, as the `root` user run:

    python2 setup.py install --optimize=1

#### Contents

Installed Programs: drv_libxml2.py, libxml2.py
Installed Libraries: libxml2mod.so
Installed Directories: None

#### Short Descriptions

drv_libxml2.py | is a SAX Python2 driver for libxml2
libxml2.py | is the Python2 binding for libxml2
`libxml2mod.so` | is the interface for Python2 to use `libxml2.so`

### lxml-4.6.3

#### Introduction to lxml

lxml provides Python bindings for libxslt-1.1.34 and libxml2-2.9.12.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/l/lxml/lxml-4.6.3.tar.gz

- Download MD5 sum: 017f94473dcec0f9b2e9b03524398fa5

- Download size: 3.0 MB

- Estimated disk space required: 204 MB (add 29 MB for tests)

- Estimated build time: 1.6 SBU (add 0.6 SBU for tests)

##### lxml Dependencies

###### Required

libxslt-1.1.34

###### Recommended

Python-2.7.18

###### Optional (to run more tests)

GDB-10.2, Valgrind-3.17.0, and cssselect

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxml

#### Installation of lxml

### Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To build both Python 2 and Python 3 modules, run:

    python2 setup.py build &&
    python3 setup.py build

If you wish to run the tests, enter: make PYTHON=python2 test and make PYTHON=python3 test. This will rebuild the package for inplace use before running the tests.

To install both modules, issue the following commands as the `root` user:

    python2 setup.py install --optimize=1 &&
    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python2.7/site-packages/lxml, /usr/lib/python2.7/site-packages/lxml-4.6.3-py2.7-linux-$ARCH.egg-info and/or /usr/lib/python3.9/site-packages/lxml, /usr/lib/python3.9/site-packages/lxml-4.6.3-py3.9-linux-$ARCH.egg-info

### MarkupSafe-2.0.1

#### Introduction to MarkupSafe Module

MarkupSafe is a Python module that implements a XML/HTML/XHTML Markup safe string.

### Note

MarkupSafe was installed in LFS. The instruction is only kept here for SysV revision.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/M/MarkupSafe/MarkupSafe-2.0.1.tar.gz

- Download MD5 sum: 892e0fefa3c488387e5cc0cad2daa523

- Download size: 20 KB

- Estimated disk space required: 360 KB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/MarkupSafe

#### Installation of MarkupSafe

Install MarkupSafe with the following commands:

    python3 setup.py build

Then, as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/markupsafe and /usr/lib/python3.9/site-packages/MarkupSafe-2.0.1-py3.9.egg-info

### Jinja2-3.0.1

#### Introduction to Jinja2 Module

Jinja2 is a Python module that implements a simple pythonic template language.

### Note

Jinja2 was installed in LFS. The instruction is only kept here for SysV revision.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/J/Jinja2/Jinja2-3.0.1.tar.gz

- Download MD5 sum: 25ba6ef98c164878acff1036fbd72a1d

- Download size: 264 KB

- Estimated disk space required: 2.3 MB

- Estimated build time: less than 0.1 SBU

##### Jinja2 Dependencies

###### Required

MarkupSafe-2.0.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Jinja2

#### Installation of Jinja2

To install the Python 3 module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/Jinja2 and /usr/lib/python3.9/site-packages/Jinja2-3.0.1-py3.9.egg-info

### Mako-1.1.5

#### Introduction to Mako Module

Mako is a Python module that implements hyperfast and lightweight templating for the Python platform.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://files.pythonhosted.org/packages/source/M/Mako/Mako-1.1.5.tar.gz

- Download MD5 sum: 409bdc38e9ddda5eada61fb092cb12fd

- Download size: 484 KB

- Estimated disk space required: 3.9 MB

- Estimated build time: less than 0.1 SBU

##### Mako Dependencies

###### Required

MarkupSafe-2.0.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Mako

#### Installation of Mako

To install the Python 3 module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: mako-render
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/Mako-1.1.5-py3.9.egg

### python-slip-0.6.5

#### Introduction to python-slip Module

python-slip provides convenience, extension and workaround code for Python and some Python modules.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/nphilipp/python-slip/releases/download/python-slip-0.6.5/python-slip-0.6.5.tar.bz2

- Download MD5 sum: 28ae5f93853466c44ec96706ba2a1eb4

- Download size: 28 KB

- Estimated disk space required: 612 KB

- Estimated build time: 0.1 SBU

##### python-slip Dependencies

###### Required

D-Bus Python-1.2.18, decorator-5.0.9, and six-1.16.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/python-slip

#### Installation of python-slip

To build the python-slip module, run the following commands:

    sed 's/@VERSION@/0.6.5/' setup.py.in > setup.py &&
    python3 setup.py build

To install the python-slip module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: usr/lib/python3.9/site-packages/python-slip-0.6.5-py3.9.egg-info and usr/lib/python3.9/site-packages/python-slip.dbus-0.6.5-py3.9.egg-info
Installed Directories: /usr/lib/python3.9/site-packages/python-slip

### PyYAML-5.3.1

#### Introduction to PyYAML Module

PyYAML is a Python module that implements the next generation YAML parser and emitter.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://pyyaml.org/download/pyyaml/PyYAML-5.3.1.tar.gz

- Download MD5 sum: d3590b85917362e837298e733321962b

- Download size: 264 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.1 SBU

##### PyYAML Dependencies

###### Required

libyaml-0.2.5

###### Optional

Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/PyYAML

#### Installation of PyYAML

Install PyYAML with the following commands:

    python3 setup.py build

Now, as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: _yaml.so
Installed Directories: /usr/lib/python2.7/site-packages/yaml and/or /usr/lib/python3.9/site-packages/yaml

### Scour-0.38.2

#### Introduction to Scour

Scour is an SVG (Scalable Vector Graphics) optimizer/cleaner that reduces their size by optimizing structure and removing unnecessary data.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- 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

##### Scour Dependencies

###### Required

six-1.16.0 (will be automatically downloaded and installed if not already present)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/scour

#### Installation of scour

To build the Python 3 module run the following commands:

    python3 setup.py build

To partially test the results, issue: python3 test_css.py. If you have installed Six you can run the main tests by issuing: python3 test_scour.py.

To install the module, run the following command as the `root` user:

    python3 setup.py install --optimize=1

#### Contents

Installed Programs: scour
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

scour | is a program to optimize and clean SVG files

### six-1.16.0

#### Introduction to Six Module

Six is a Python 2 and 3 compatibility library.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- 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

##### Six Dependencies

###### Recommended Dependencies

Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/six

#### Installation of six

### Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

Install six for Python 2 and Python 3 by running the following commands:

    python2 setup.py build &&
    python3 setup.py build

This package does not come with a test suite.

Now, as the `root` user:

    python2 setup.py install --optimize=1 &&
    python3 setup.py install --optimize=1

#### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python2.7/site-packages/six-1.16.0-py2.7.egg and/or /usr/lib/python3.9/site-packages/six-1.16.0-py3.9.egg

Last updated on

## Ruby-3.0.2

### Introduction to Ruby

The Ruby package contains the Ruby development environment. This is useful for object-oriented scripting.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.2.tar.xz

- Download MD5 sum: 242d3a5a2588180ccb3dea9ad8c8cf0e

- Download size: 14 MB

- Estimated disk space required: 573 MB (add 532 MB for C API docs)

- Estimated build time: 1.5 SBU (using parallelism=4; add 4.9 SBU for tests; add 0.8 SBU for C API docs)

#### Ruby Dependencies

##### Optional

Berkeley DB-5.3.28, Doxygen-1.9.2, Graphviz-2.48.0, libyaml-0.2.5, Tk-8.6.11.1, Valgrind-3.17.0, and DTrace

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ruby

### Installation of Ruby

Install Ruby by running the following command:

    ./configure --prefix=/usr   \
                --enable-shared \
                --docdir=/usr/share/doc/ruby-3.0.2 &&
    make

Optionally, build the CAPI documents by running the following commands:

    make capi

To test the results, issue: make check. There are over 21,000 tests. Some tests related to ipv6 may indicate errors. If the tests are run in a directory that has a world writable component (e.g. /tmp) then several additional tests may fail. A few tests may fail due to system configuration expectations.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-shared`: This switch enables building of the `libruby` shared library.

`--disable-install-doc`: This switch disables building and installing rdoc indexes and C API documents.

`--disable-install-rdoc`: This switch disables building and installing rdoc indexes.

`--disable-install-capi`: This switch disables building and installing C API documents.

### Contents

Installed Programs: bundle, bundler, erb, gem, irb, racc, rake, rbs, rdoc, ri, ruby, and typeprof
Installed Libraries: libruby.so
Installed Directories: /usr/include/ruby-3.0.0 /usr/lib/ruby, /usr/share/doc/ruby-3.0.2 and /usr/share/ri

#### Short Descriptions

bundle | creates bundles of Ruby Gems
bundler | manages an application's dependencies throughout it's lifecycle
erb | is Tiny eRuby. It interprets a Ruby code embedded text file
gem | command for RubyGems - a sophisticated package manager for Ruby
irb | is the interactive interface for Ruby
rake | a make-like build utility for Ruby
rdoc | generates Ruby documentation
ri | displays documentation from a database on Ruby classes, modules, and methods
ruby | is an interpreted scripting language for quick and easy object-oriented programming
`libruby.so` | contains the API functions required by Ruby

Last updated on

## Rustc-1.52.0

### Introduction to Rust

The Rust programming language is designed to be a safe, concurrent, practical language.

This package is updated on a six-weekly release cycle. Because it is such a large and slow package to build, is at the moment only required by a few packages in this book, and particularly because newer versions tend to break older mozilla packages, the BLFS editors take the view that it should only be updated when that is necessary (either to fix problems, or to allow a new version of a package to build).

As with many other programming languages, rustc (the rust compiler) needs a binary from which to bootstrap. It will download a stage0 binary and many cargo crates (these are actually .tar.gz source archives) at the start of the build, so you cannot compile it without an internet connection.

These crates will then remain in various forms (cache, directories of extracted source), in `~/.cargo` for ever more. It is common for large rust packages to use multiple versions of some crates. If you purge the files before updating this package, very few crates will need to be updated by the packages in this book which use it (and they will be downloaded as required). But if you retain an older version as a fallback option and then use it (when not building in `/usr`), it is likely that it will then have to re-download some crates. For a full download (i.e. starting with an empty or missing `~/.cargo`) downloading the external cargo files for this version only takes a minute or so on a fast network.

### Note

Although BLFS usually installs in `/usr`, when you later upgrade to a newer version of rust the old libraries in `/usr/lib/rustlib` will remain, with various hashes in their names, but will not be usable and will waste space. The editors recommend placing the files in the `/opt` directory. In particular, if you have reason to rebuild with a modified configuration (e.g. using the shipped LLVM after building with shared LLVM, or for the reverse situation) it is possible for the install to leave a broken cargo program. In such a situation, either remove the existing installation first, or use a different prefix such as /opt/rustc-1.52.0-build2.

If you prefer, you can of course change the prefix to `/usr` and omit the ldconfig and the actions to add rustc to the PATH.

The current rustbuild build-system will use all processors, although it does not scale well and often falls back to just using one core while waiting for a library to compile. However it can be mostly limited to a specified number of processors by a combination of adding the switch `--jobs <N>` (e.g. '--jobs 4' to limit to 4 processors) on each invocation of python3 ./x.py and using an environment variable `CARGO_BUILD_JOBS=<N>`. At the moment this is not effective when some of the rustc tests are run.

The current version of rust's num_cpus crate now recognizes that cgroups can be used to restrict which processors it is allowed to use. So if your machine lacks DRAM (typically, less than 2GB DRAM per core) that might be an alternative to taking CPUs offline. That can apparently be achieved by writing custom unit files.

At the moment Rust does not provide any guarantees of a stable ABI.

### Note

Rustc defaults to building for ALL supported architectures, using a shipped copy of LLVM. In BLFS the build is only for the X86 architecture. If you intend to develop rust crates, this build may not be good enough for your purposes.

The build times of this version when repeated on the same machine are often reasonably consistent, but as with all compilations using rustc there can be some very slow outliers.

Unusually, a DESTDIR-style method is being used to install this package. This is because running the install as root not only downloads all of the cargo files again (to `/root/.cargo`), it then spends a very long time recompiling. Using this method saves a lot of time, at the cost of extra disk space.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://static.rust-lang.org/dist/rustc-1.52.0-src.tar.gz

- Download MD5 sum: bd6fbe9ba5fe457d2514e92a6ccd7b24

- Download size: 161 MB

- Estimated disk space required: 9.3 GB (407 MB installed) including 291 MB of ~/.cargo files for the user building this. Add 4.0 GB including extra 179 MB of ~/.cargo files if running the tests

- Estimated build time: 31 SBU (add 13 SBU for tests, both on a 4-core machine)

#### Rust Dependencies

##### Required

cURL-7.78.0, CMake-3.21.2, and libssh2-1.9.0

##### Recommended

clang from LLVM-12.0.1 (built with -DLLVM_LINK_LLVM_DYLIB=ON so that rust can link to system LLVM instead of building its shipped version) If using an older version, see the config.toml file below re using the shipped llvm, because of rust issue 69225.

##### Optional

GDB-10.2 (used by the testsuite if it is present)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rust

### Installation of Rust

To install into the `/opt` directory, remove the symlink and create a new directory (i.e. with a different name if trying a modified build). As the `root` user:

    mkdir /opt/rustc-1.52.0             &&
    ln -svfin rustc-1.52.0 /opt/rustc

### Note

If multiple versions of Rust are installed in `/opt`, changing to another version only requires changing the `/opt/rustc` symbolic link and then running ldconfig.

Create a suitable `config.toml` file which will configure the build.

    cat << EOF > config.toml
    # see config.toml.example for more possible options
    # See the 8.4 book for an example using shipped LLVM
    # e.g. if not installing clang, or using a version before 10.0
    [llvm]
    # by default, rust will build for a myriad of architectures
    targets = "X86"

    # When using system llvm prefer shared libraries
    link-shared = true

    [build]
    # omit docs to save time and space (default is to build them)
    docs = false

    # install cargo as well as rust
    extended = true

    [install]
    prefix = "/opt/rustc-1.52.0"
    docdir = "share/doc/rustc-1.52.0"

    [rust]
    channel = "stable"
    rpath = false

    # BLFS does not install the FileCheck executable from llvm,
    # so disable codegen tests
    codegen-tests = false

    [target.x86_64-unknown-linux-gnu]
    # NB the output of llvm-config (i.e. help options) may be
    # dumped to the screen when config.toml is parsed.
    llvm-config = "/usr/bin/llvm-config"

    [target.i686-unknown-linux-gnu]
    # NB the output of llvm-config (i.e. help options) may be
    # dumped to the screen when config.toml is parsed.
    llvm-config = "/usr/bin/llvm-config"

    EOF

Compile Rust by running the following commands:

    export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi" &&
    python3 ./x.py build --exclude src/tools/miri

### Note

The testsuite will generate some messages in the systemd journal for traps on invalid opcodes, and for segmentation faults. In themselves these are nothing to worry about, just a way for the test to be terminated.

To run the tests issue python3 ./x.py test --verbose --no-fail-fast | tee rustc-testlog: as with the build, that will use all available CPUs.

At a minimum, seven tests will fail: ui/asm/inline-syntax.rs#arm, assembly/target-feature-multiple.rs#SINGLEFLAG, assembly/target-feature-multiple.rs#TWOFLAGS, run-make-fulldeps/long-linker-command-lines, run-make-fulldeps/split-debuginfo, run-make-fulldeps/split-dwarf, run-make-fulldeps/sysroot-crates-are-unstable. With any recent version of gdb, four more failures (debuginfo/extern-c-fn.rs, debuginfo/generator-objects.rs, debuginfo/issue-57822.rs, debuginfo/pretty-huge-vec.rs) can be expected.

As with all large testsuites, other tests might fail on some machines - if the number of additional failures is in the single digits, check the log for 'FAILED' and review lines above that, particularly the 'stderr:' lines. Any mention of SIGSEGV or signal 11 in a failing test is a cause for concern.

If you get any other failing test which reports an issue number then you should search for that issue. For example, when rustc >= 1.41.1 was built with a version of sysllvm before 10.0 the test for issue 69225 failed https://github.com/rust-lang/rust/issues/69225 and that should be regarded as a critical failure (they released 1.41.1 because of it). Most other failures will not be critical.

Therefore, you should determine the number of failures.

The number of tests which failed can be found by running:

    grep '^test result:' rustc-testlog | awk  '{ sum += $6 } END { print sum }'

And similarly if you care about how many tests passed use $4, for those which were ignored (i.e. skipped) use $8 (and $10 for 'measured', $12 for 'filtered out' but both are probably zero).

Still as your normal user, do a DESTDIR install:

    export LIBSSH2_SYS_USE_PKG_CONFIG=1 &&
    DESTDIR=${PWD}/install python3 ./x.py install &&
    unset LIBSSH2_SYS_USE_PKG_CONFIG

Now, as the `root` user install the files from the DESTDIR:

    chown -R root:root install &&
    cp -a install/* /

### Command Explanations

ln -svfn rustc-1.52.0 /opt/rustc: if this is not the first use of the `/opt/rustc` symlink, overwrite it by forcing, and use the '-n' flag to avoid getting confusing results from e.g. ls -l.

targets = "X86": this avoids building all the available linux cross-compilers (Aarch64, MIPS, PowerPC, SystemZ, etc). Unfortunately, rust insists on installing source files for these below `/opt/rustc/lib/src`.

extended = true: this installs Cargo alongside Rust.

channel = "stable": this ensures only stable features can be used, the default in `config.toml` is to use development features, which is not appropriate for a released version.

rpath = false: by default, rust can be run from where it was built, without being installed. That adds DT_RPATH entries to all of the ELF files, which produces very messy output from ldd, showing the libraries in the place they were built, even if they have been deleted from there after the install.

[target.x86_64-unknown-linux-gnu]: the syntax of `config.toml` requires an `llvm-config` entry for each target for which system-llvm is to be used. Change the target to `[target.i686-unknown-linux-gnu]` if you are building on 32-bit x86. This whole section may be omitted if you wish to build against the shipped llvm, or do not have clang, but the resulting build will be larger and take longer.

export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi": This adds a link to libffi to any RUSTFLAGS you may already be passing to the build. On some systems, linking fails to include libffi unless this is used. The reason why this is needed is not clear.

--exclude src/tools/miri: For a long time, the miri crate (an interpreter for the Midlevel Intermediate Representation) has failed to build on releases. It is optional, but the failure messages can persuade people that the whole build failed. However, although it is not built in the main compile, with rustc-1.35.0 it now got compiled during the install, but it was broken in that version. Omitting it should save a little time.

--verbose: this switch can sometimes provide more information about a test which fails.

--no-fail-fast: this switch ensures that the testsuite will not stop at the first error.

export LIBSSH2_SYS_USE_PKG_CONFIG=1: On some systems, cairo fails to link during the install because it cannot find libssh2. This seems to fix it, but again the reason why the problem occurs is not understood.

DESTDIR=${PWD}/install python3 ./x.py install: This effects a DESTDIR-style install in the source tree,creating an `install` directory. Note that DESTDIR installs need an absolute path, passing 'install' will not work.

chown -R root:root install: the DESTDIR install was run by a regular user, who owns the files. For security, change their owner before doing a simple copy to install them.

### Configuring Rust

#### Configuration Information

If you installed rustc in `/opt`, you need to update the following configuration files so that rustc is correctly found by other packages and system processes.

As the `root` user, update the `/etc/ld.so.conf` file and the dynamic linker's run-time cache file:

    cat >> /etc/ld.so.conf << EOF
    # Begin rustc addition

    /opt/rustc/lib

    # End rustc addition
    EOF

    ldconfig

As the `root` user, create the `/etc/profile.d/rustc.sh` file:

    cat > /etc/profile.d/rustc.sh << "EOF"
    # Begin /etc/profile.d/rustc.sh

    pathprepend /opt/rustc/bin           PATH

    # End /etc/profile.d/rustc.sh
    EOF

Immediately after installation, update the current PATH for your current shell as a normal user:

    source /etc/profile.d/rustc.sh

### Contents

Installed Programs: cargo-clippy, cargo-fmt, cargo-miri, cargo, clippy-driver, miri, rls, rust-analyzer, rust-gdb, rust-gdbgui, rust-lldb, rustc, rustdoc, rustfmt.
Installed Libraries: Many lib*<16-byte-hash>.so libraries.
Installed Directories: ~/.cargo, /opt/rustc/lib/rustlib, /opt/rustc/share/doc/rustc-1.52.0, and /opt/rustc/share/zsh/site-functions

#### Short Descriptions

cargo-clippy | provides lint checks for a cargo package
cargo-fmt | formats all bin and lib files of the current crate using rustfmt
cargo-miri | is for use by Miri to interpret bin crates and tests
cargo | is the Package Manager for Rust
clippy-driver | provides lint checks for Rust
miri | is an interpreter for Rust's mid-level intermediate representation (MIR). It is broken in this version
rls | is the Rust Language Server. This can run in the background to provide IDEs, editors, and other tools with information about Rust programs
rust-analyzer | is an implementation of Language Server Protocol for the Rust programming language.
rust-gdb | is a wrapper script for gdb, pulling in Python pretty-printing modules installed in `/opt/rustc-1.52.0/lib/rustlib/etc`
rust-gdbgui | is a wrapper script for a graphical front end to gdb that runs in a browser
rust-lldb | is a wrapper script for LLDB (the LLVM debugger) pulling in the Python pretty-printing modules
rustc | is the rust compiler
rustdoc | generates documentation from rust source code
rustfmt | formats rust code
`libstd-<16-byte-hash>.so` | is the Rust Standard Library, the foundation of portable Rust software

Last updated on

## SCons-4.2.0

### Introduction to SCons

SCons is a tool for building software (and other files) implemented in Python.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/scons/scons-4.2.0.tar.gz

- Download MD5 sum: 29dacf14f304065dfee147555d6db4ed

- Download size: 2.9 MB

- Estimated disk space required: 50 MB

- Estimated build time: less than 0.1 SBU

#### SCons Dependencies

##### Optional

docbook-xsl-1.79.2 and libxslt-1.1.34

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/scons

### Installation of SCons

Install SCons by running the following commands as the `root` user:

    sed -i 's/env python/&3/' SCons/Utilities/*.py              &&
    sed -i 's:build/doc/man/::' setup.cfg                       &&
    python3 setup.py install --prefix=/usr  \
                             --optimize=1   \
                             --install-data=/usr/share/man/man1 &&
    cp scons{,ign}.1 /usr/share/man/man1

### Contents

Installed Programs: scons, scons-configure-cache, and sconsign
Installed Libraries: None
Installed Directory: /usr/lib/python3.9/site-packages/SCons

#### Short Descriptions

scons | is a software construction tool
scons-configure-cache | shows or converts the configuration of an SCons cache directory
sconsign | prints SCons `.sconsign` file information

Last updated on

## slang-2.3.2

### Introduction to slang

S-Lang (slang) is an interpreted language that may be embedded into an application to make the application extensible. It provides facilities required by interactive applications such as display/screen management, keyboard input and keymaps.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.jedsoft.org/releases/slang/slang-2.3.2.tar.bz2

- Download MD5 sum: c2d5a7aa0246627da490be4e399c87cb

- Download size: 1.5 MB

- Estimated disk space required: 29 MB (add 4 MB for tests)

- Estimated build time: 0.4 SBU (add 0.2 SBU for tests)

#### Slang Dependencies

##### Optional

libpng-1.6.37, PCRE-8.45, and Oniguruma

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/slang

### Installation of Slang

### Note

This package does not support parallel build.

Install slang by running the following commands:

    ./configure --prefix=/usr \
                --sysconfdir=/etc \
                --with-readline=gnu &&
    make -j1

To test the results, issue: make check. Note that this will also create a static version of the library which will then be installed in the next step.

Now, as the `root` user:

    make install_doc_dir=/usr/share/doc/slang-2.3.2   \
         SLSH_DOC_DIR=/usr/share/doc/slang-2.3.2/slsh \
         install-all &&

    chmod -v 755 /usr/lib/libslang.so.2.3.2 \
                 /usr/lib/slang/v2/modules/*.so

### Command Explanations

`--with-readline=gnu`: This parameter sets GNU Readline to be used by the parser interface instead of the slang internal version.

make install_doc_dir=/usr/share/doc/slang-2.3.2 SLSH_DOC_DIR=/usr/share/doc/slang-2.3.2/slsh install-all: This command installs the static library as well as the dynamic shared version and related modules. It also changes the documentation installation directories to a versioned directory.

### Configuring slang

#### Config Files

`~/.slshrc` and `/etc/slsh.rc`

### Contents

Installed Program: slsh
Installed Libraries: libslang.{so,a} and numerous support modules
Installed Directories: /usr/lib/slang, /usr/share/doc/slang-2.3.2 and /usr/share/slsh

#### Short Descriptions

slsh | is a simple program for interpreting slang scripts. It supports dynamic loading of slang modules and includes a Readline interface for interactive use

Last updated on

## Subversion-1.14.1

### Introduction to Subversion

Subversion is a version control system that is designed to be a compelling replacement for CVS in the open source community. It extends and enhances CVS' feature set, while maintaining a similar interface for those already familiar with CVS. These instructions install the client and server software used to manipulate a Subversion repository. Creation of a repository is covered at Running a Subversion Server.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/subversion/subversion-1.14.1.tar.bz2

- Download MD5 sum: 2eccc2c7451397e01a13682600af9563

- Download size: 8.1 MB

- Estimated disk space required: 208 MB (add 228 MB for bindings, 52 MB for docs, 1.3 GB for tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; add 1.9 SBU for bindings, 35 SBU for tests)

#### Subversion Dependencies

##### Required

Apr-Util-1.6.1 and SQLite-3.36.0

##### Recommended

Serf-1.3.9 (for handling http:// and https:// URLs)

##### Optional

Apache-2.4.48, Boost-1.77.0, Cyrus SASL-2.1.27, dbus-1.12.20, Doxygen-1.9.2 (for generating HTML documentation), gnome-keyring-40.0, libsecret-0.20.4, Py3c-1.3.1 (for tests) Python-2.7.18 (with sqlite support for the tests), Ruby-3.0.2, SWIG-4.0.2 (for building Perl, Python and Ruby bindings), LZ4, and UTF8proc

##### Optional (for the Java Bindings)

One of OpenJDK-16.0.2, Dante or Jikes, JUnit 4 (to test the Java bindings) and apache-ant-1.10.11.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/subversion

### Installation of Subversion

First, adapt some Python scripts to use python3:

    grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'

Install Subversion by running the following commands:

    PYTHON=python3 ./configure --prefix=/usr             \
                --disable-static          \
                --with-apache-libexecdir  \
                --with-lz4=internal       \
                --with-utf8proc=internal &&
    make

If you have Doxygen-1.9.2 installed and you wish to build the API documentation, issue:

    doxygen doc/doxygen.conf

If you wish to build the Java bindings pass the `--enable-javahl` parameter to the configure command. In addition, if you want to run the Java test suite, you have to specify the location of the JUnit file by adding `--with-junit=<path to junit jar>` (for instance `--with-junit=/usr/local/java/lib/junit-4.13.jar`) to configure. The JUnit jar file is no longer included in apache-ant-1.10.11 and must be downloaded seperatly. To build the Java bindings, issue the following command:

    make javahl

If you want to compile Perl, Python, or Ruby bindings, issue any of the following command:

    make swig-pl # for Perl
    make swig-py \
         swig_pydir=/usr/lib/python3.9/site-packages/libsvn \
         swig_pydir_extra=/usr/lib/python3.9/site-packages/svn # for Python
    make swig-rb # for Ruby

To test the results, issue: make check. Four tests in the `commit_tests.py`, `prop_tests.py`, and `update_tests.py` suites are known to fail.

To test the results of the Java bindings build, issue LANG=C make check-javahl.

To test the results of any of the SWIG bindings, you can use any of the following commands: make check-swig-pl, make check-swig-py, or make check-swig-rb.

Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/subversion-1.14.1 &&
    cp      -v -R doc/* /usr/share/doc/subversion-1.14.1

If you built the Java bindings, issue the following command as the `root` user to install them:

    make install-javahl

If you built the Perl, Python, or Ruby bindings, issue any of the following commands as the `root` user to install them:

    make install-swig-pl
    make install-swig-py \
          swig_pydir=/usr/lib/python3.9/site-packages/libsvn \
          swig_pydir_extra=/usr/lib/python3.9/site-packages/svn
    make install-swig-rb

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-apache-libexecdir`: If Apache-2.4.48 is installed, the shared Apache modules are built. This switch allows to have those modules installed to Apache's configured module dir instead of `/usr/libexec`. It has no effect if Apache is not installed.

`--with-lz4=internal, --with-utf8proc=internal`: Remove these switches if you have installed the optional dependencies.

`--enable-javahl`: enables compilation of Java high level bindings. Running make javahl is necessary to do the compilation.

`--with-junit=<location of the junit jar file>`: gives the location of the junit jar, otherwise the javahl tests cannot be run.

`--disable-gmock`: Do not use the Googlemock testing framework.

### Configuring Subversion

#### Config Files

`~/.subversion/config` and `/etc/subversion/config`

#### Configuration Information

`/etc/subversion/config` is the Subversion system-wide configuration file. This file is used to specify defaults for different svn commands.

`~/.subversion/config` is the user's personal configuration file. It is used to override the system-wide defaults set in `/etc/subversion/config`.

### Contents

Installed Programs: svn, svnadmin, svnbench, svndumpfilter, svnfsfs, svnlook, svnmucc, svnrdump, svnserve, svnsync, and svnversion
Installed Libraries: libsvn_*-1.so and optionally, a Java library, the mod_dav_svn.so and and mod_authz_svn.so Apache HTTP DSO modules and various Perl, Python and Ruby modules.
Installed Directories: /usr/include/subversion-1, /usr/lib/perl5/site_perl/5.34/{,auto/}SVN, /usr/lib/python3.9/site-packages/{libsvn,svn}, /usr/lib/ruby/site_ruby/<x.y.z>/{,<arch-linux>-linux/}svn, /usr/lib/svn-javahl, and /usr/share/doc/subversion-1.14.1

#### Short Descriptions

svn | is a command-line client program used to access Subversion repositories
svnadmin | is a tool for creating, tweaking or repairing a Subversion repository
svnbench | is a benchmarking tool
svndumpfilter | is a program for filtering Subversion repository dumpfile format streams
svnfsfs | is the FSFS (FileSystem atop of the FileSystem - Subversion filesystem implementation) repository manipulation tool
svnlook | is a tool for inspecting a Subversion repository
svnmucc | is a Multiple URL Command Client for Subversion
svnrdump | is a tool for dumping or loading a remote Subversion repository
svnserve | is a custom standalone server program, able to run as a daemon process or invoked by SSH
svnsync | is a Subversion repository synchronisation tool
svnversion | is used to report the version number and state of a working Subversion repository copy
`libsvn_*-1.so` | are the support libraries used by the Subversion programs
`mod_authz_svn.so` | is a plug-in module for the Apache HTTP server, used to authenticate users to a Subversion repository over the Internet or an intranet
`mod_dav_svn.so` | is a plug-in module for the Apache HTTP server, used to make a Subversion repository available to others over the Internet or an intranet

Last updated on

## Running a Subversion Server

This section will describe how to set up, administer and secure a Subversion server.

#### Subversion Server Dependencies

##### Required

Subversion-1.14.1 and OpenSSH-8.7p1

### Setting up a Subversion Server.

The following instructions will install a Subversion server, which will be set up to use OpenSSH as the secure remote access method, with svnserve available for anonymous access.

Configuration of the Subversion server consists of the following steps:

#### 1. Setup Users, Groups, and Permissions

You'll need to be user `root` for the initial portion of configuration. Create the `svn` user and group with the following commands:

    groupadd -g 56 svn &&
    useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

If you plan to have multiple repositories, you should have a group dedicated to each repository for ease of administration. Create the `svntest` group for the test repository and add the `svn` user to that group with the following commands:

    groupadd -g 57 svntest &&
    usermod -G svntest -a svn

Additionally you should set umask 002 while working with a repository so that all new files will be writable by owner and group. This is made mandatory by creating a wrapper script for svn and svnserve:

    mv /usr/bin/svn /usr/bin/svn.orig &&
    mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
    cat >> /usr/bin/svn << "EOF"
    #!/bin/sh
    umask 002
    /usr/bin/svn.orig "$@"
    EOF
    cat >> /usr/bin/svnserve << "EOF"
    #!/bin/sh
    umask 002
    /usr/bin/svnserve.orig "$@"
    EOF
    chmod 0755 /usr/bin/svn{,serve}

### Note

If you use Apache for working with the repository over HTTP, even for anonymous access, you should wrap /usr/sbin/httpd in a similar script.

#### 2. Create a Subversion repository.

There are several ways to set up a subversion repository. It is recommended to have a look at the SVN Book corresponding chapter. A basic repository can be set up with the instructions below.

Create a new Subversion repository with the following commands (as the `root` user):

    install -v -m 0755 -d /srv/svn &&
    install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
    svnadmin create /srv/svn/repositories/svntest

Now that the repository is created, it should be populated with something useful. You'll need to have a predefined directory layout set up exactly as you want your repository to look. For example, here is a sample BLFS layout setup with a root of `svntest/`. You'll need to setup a directory tree similar to the following:

    svntest/            # The name of the repository
       trunk/           # Contains the existing source tree
          BOOK/
          bootscripts/
          edguide/
          patches/
          scripts/
       branches/        # Needed for additional branches
       tags/            # Needed for tagging release points

Once you've created your directory layout as shown above, you are ready to do the initial import:

    svn import -m "Initial import." \
        </path/to/source/tree>      \
        file:///srv/svn/repositories/svntest

Now change owner and group information on the repository, and add an unprivileged user to the `svn` and `svntest` groups:

    chown -R svn:svntest /srv/svn/repositories/svntest    &&
    chmod -R g+w         /srv/svn/repositories/svntest    &&
    chmod g+s            /srv/svn/repositories/svntest/db &&
    usermod -G svn,svntest -a <username>

`svntest` is the group assigned to the svntest repository. As mentioned earlier, this eases administration of multiple repositories when using OpenSSH for authentication. Going forward, you'll need to add your unprivileged user, and any additional users that you wish to have write access to the repository, to the `svn` and `svntest` groups.

In addition, you'll notice that the new repository's `db` directory is set-groupID. If the reasoning is not immediately obvious, when using any external authentication method (such as ssh), the sticky bit is set so that all new files will be owned by the user, but group of `svntest`. Anyone in the `svntest` group can create files, but still give the entire group write access to those files. This avoids locking out other users from the repository.

Now, return to an unprivileged user account, and take a look at the new repository using svnlook:

    svnlook tree /srv/svn/repositories/svntest/

### Note

You may need to log out and back in again to refresh your group memberships. su `<username>` should work as well.

#### 3. Configure the Server

As mentioned previously, these instructions will configure the server to use only ssh for write access to the repository and to provide anonymous access using svnserve. There are several other ways to provide access to the repository. These additional configurations are best explained at http://svnbook.red-bean.com/.

Access configuration needs to be done for each repository. Create the `svnserve.conf` file for the svntest repository using the following commands:

    cp /srv/svn/repositories/svntest/conf/svnserve.conf \
       /srv/svn/repositories/svntest/conf/svnserve.conf.default &&

    cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
    [general]
    anon-access = read
    auth-access = write
    EOF

There is not a lot to the configuration file at all. You'll notice that only the general section is required. Take a look at the `svnserve.conf.default` file for information on using svnserve's built-in authentication method.

#### 4. Starting the Server

To start the server at boot time, install the `svnserve.service` unit from the blfs-systemd-units-20210819 package:

    make install-svnserve

Additionally, the instructions above require that svn server uses umask 002 so that all new files will be writable by owner and group. This can be achieved by creating a systemd unit override file by running the following command:

    mkdir -p /etc/systemd/system/svnserve.service.d
    echo "UMask=0002" > /etc/systemd/system/svnserve.service.d/99-user.conf

Options which are passed to svnserve daemon can be changed in `/etc/default/svnserve`.

Last updated on

## SWIG-4.0.2

### Introduction to SWIG

SWIG (Simplified Wrapper and Interface Generator) is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua, Octave, R, Scheme, and Ocaml. SWIG can also export its parse tree into Lisp s-expressions and XML.

SWIG reads annotated C/C++ header files and creates wrapper code (glue code) in order to make the corresponding C/C++ libraries available to the listed languages, or to extend C/C++ programs with a scripting language.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/swig/swig-4.0.2.tar.gz

- Download MD5 sum: 7c3e46cb5af2b469722cafa0d91e127b

- Download size: 7.7 MB

- Estimated disk space required: 118 MB (1.3 GB with tests)

- Estimated build time: 0.2 SBU (add 9.3 SBU for tests; both using parallelism=4)

#### SWIG Dependencies

##### Required

PCRE-8.45

##### Optional

Boost-1.77.0 for tests, and any of the languages mentioned in the introduction, as run-time dependencies

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/swig

### Installation of SWIG

Install SWIG by running the following commands:

    ./configure --prefix=/usr \
                --without-maximum-compile-warnings &&
    make

To test the results, issue: PY3=1 make -k check TCL_INCLUDE=. The unsetting of the variable `TCL_INCLUDE` is necessary since it is not correctly set by configure. The tests are only executed for the languages installed on your machine, so the disk space and SBU values given for the tests may vary, and should be considered as mere orders of magnitude. According to SWIG's documentation, the failure of some tests should not be considered harmful. The go tests are buggy and may generate a lot of meaningless output.

Now, as the `root` user:

    make install &&
    install -v -m755 -d /usr/share/doc/swig-4.0.2 &&
    cp -v -R Doc/* /usr/share/doc/swig-4.0.2

### Command Explanations

`--without-maximum-compile-warnings`: disables compiler ansi conformance enforcement, which triggers errors in the Lua headers (starting with Lua 5.3).

`--without-<language>`: allows disabling the building of tests and examples for <language>, but all the languages capabilities of SWIG are always built.

### Contents

Installed Programs: swig and ccache-swig
Installed Library: None
Installed Directories: /usr/share/doc/swig-4.0.2 and /usr/share/swig

#### Short Descriptions

swig | takes an interface file containing C/C++ declarations and SWIG special instructions, and generates the corresponding wrapper code needed to build extension modules
ccache-swig | is a compiler cache, which speeds up re-compilation of C/C++/SWIG code

Last updated on

## Sysprof-3.40.1

### Introduction to Sysprof

The sysprof package contains a statistical and system-wide profiler for Linux.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/sysprof/3.40/sysprof-3.40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/sysprof/3.40/sysprof-3.40.1.tar.xz

- Download MD5 sum: 05d1399cb3ab923b03603b10acd8d40e

- Download size: 460 KB

- Estimated disk space required: 20 MB

- Estimated build time: 0.1 SBU (using parallelism=4)

#### Sysprof Dependencies

##### Required

GTK+-3.24.30, JSON-GLib-1.6.6, libdazzle-3.40.0, and Polkit-0.119

##### Optional

libunwind

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sysprof

### Installation of Sysprof

Install Sysprof by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: sysprof and sysprof-cli
Installed Libraries: libsysprof-4.so, libsysprof-capture-4.a, libsysprof-memory-4.so, libsysprof-speedtrack-4.so, and libsysprof-ui-4.so
Installed Directories: /usr/include/sysprof-4 and /usr/share/help/*/sysprof

#### Short Descriptions

sysprof | is a graphical interface to sysprof
sysprof-cli | is a command line interface to sysprof
`libsysprof-4.so` | provides API functions for profiling processes running on a system
`libsysprof-capture-4.a` | provides a hook used to capture statistics from a process
`libsysprof-memory-4.so` | provides API functions for capturing memory statistics
`libsysprof-speedtrack-4.so` | provides API functions for tracking the speed of a running process
`libsysprof-ui-4.so` | provides API functions for the sysprof GUI

Last updated on

## Tk-8.6.11.1

### Introduction to Tk

The Tk package contains a TCL GUI Toolkit.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/tcl/tk8.6.11.1-src.tar.gz

- Download MD5 sum: 964d69b6307f86bb7e51f7c189666880

- Download size: 4.3 MB

- Estimated disk space required: 31 MB

- Estimated build time: 0.3 SBU (add 2.0 SBU for tests)

#### Tk Dependencies

##### Required

Xorg Libraries

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tk

### Installation of Tk

Install Tk by running the following commands:

    cd unix &&
    ./configure --prefix=/usr \
                --mandir=/usr/share/man \
                $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&

    make &&

    sed -e "s@^\(TK_SRC_DIR='\).*@\1/usr/include'@" \
        -e "/TK_B/s@='\(-L\)\?.*unix@='\1/usr/lib@" \
        -i tkConfig.sh

Running the tests is not recommended. Failures will be reported during the tests, depending on the screen resolution/capabilities, fonts installed and other X related parameters, but the end report can show 0 failures. Some tests will steal focus and some might crash your X Server. To test the results anyway, issue: make test. Ensure you run it from an X Window display device with the GLX extensions loaded, but even so, tests might hang.

Now, as the `root` user:

    make install &&
    make install-private-headers &&
    ln -v -sf wish8.6 /usr/bin/wish &&
    chmod -v 755 /usr/lib/libtk8.6.so

### Command Explanations

`$([ $(uname -m) = x86_64 ] && echo --enable-64bit)`: This switch is used to enable 64 bit support in Tk on 64 bit operating systems.

make install-private-headers: This command is used to install the Tk library interface headers used by other packages if they link to the Tk library.

ln -v -sf wish8.6 /usr/bin/wish: This command is used to create a compatibility symbolic link to the wish8.6 file as many packages expect a file named wish.

sed -e ... tkConfig.sh: The Tk package expects that its source tree is preserved so that packages depending on it for their compilation can utilize it. This sed removes the references to the build directory and replaces them with saner system-wide locations.

### Contents

Installed Programs: wish and wish8.6
Installed Libraries: libtk8.6.so and libtkstub8.6.a
Installed Directory: /usr/lib/tk8.6

#### Short Descriptions

wish | is a symlink to the wish8.6 program
wish8.6 | is a simple shell containing the Tk toolkit that creates a main window and then processes Tcl commands
`libtk8.6.so` | contains the API functions required by Tk

Last updated on

## Vala-0.52.5

### Introduction to Vala

Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/vala/0.52/vala-0.52.5.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/vala/0.52/vala-0.52.5.tar.xz

- Download MD5 sum: e193bf126416ad5db36a1c52eb391b63

- Download size: 3.4 MB

- Estimated disk space required: 145 MB (add 16 MB for tests)

- Estimated build time: 0.4 SBU (using parallelism=4; add 3.1 SBU for tests)

#### Vala Dependencies

##### Required

GLib-2.68.4

##### Recommended

Graphviz-2.48.0 (Required for valadoc)

##### Optional

dbus-1.12.20 (Required for the tests), libxslt-1.1.34 (Required for generating the documentation), help2man, and weasyprint

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vala

### Installation of Vala

Install Vala by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-valadoc`: This option is required if Graphviz-2.48.0 is not installed.

### Contents

Installed Programs: vala, vala-0.52, valac, valadoc, vala-gen-introspect, and vapigen (symlinks); valac-0.52, valadoc-0.52, vala-gen-introspect-0.52, and vapigen-0.52
Installed Library: libvala-0.52.so and libvaladoc-0.52.so
Installed Directories: /usr/include/vala-0.52, /usr/include/valadoc-0.52, /usr/lib/vala-0.52, /usr/lib/valadoc-0.52, /usr/share/vala, /usr/share/vala-0.52, /usr/share/valadoc-0.52, and /usr/share/devhelp/books/vala-0.52

#### Short Descriptions

valac | is a compiler that translates Vala source code into C source and header files
valadoc | is a documentation generator for generating API documentation from Vala source code based on libvala
vala-gen-introspect | generates a GI file for GObject and GLib based packages
vapigen | is an utility which generates Vala API (VAPI) files from GI files
`libvala-0.52.so` | contains the Vala API functions

Last updated on

## Valgrind-3.17.0

### Introduction to Valgrind

Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile programs in detail. Valgrind can also be used to build new tools.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://sourceware.org/ftp/valgrind/valgrind-3.17.0.tar.bz2

- Download (FTP): ftp://sourceware.org/pub/valgrind/valgrind-3.17.0.tar.bz2

- Download MD5 sum: afe11b5572c3121a781433b7c0ab741b

- Download size: 16 MB

- Estimated disk space required: 629 MB (add 103 MB for tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; add 7.9 SBU for tests)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/valgrind-3.17.0-upstream_fixes-1.patch

#### Valgrind Dependencies

##### Optional

GDB-10.2 (for tests), LLVM-12.0.1 (with Clang), and Which-2.21 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/valgrind

### Installation of Valgrind

First, make several changes that are required for Valgrind to function on systems with glibc-2.34 installed:

    patch -Np1 -i ../valgrind-3.17.0-upstream_fixes-1.patch

Install Valgrind by running the following commands:

    autoreconf -fiv &&
    sed -i 's|/doc/valgrind||' docs/Makefile.in &&

    ./configure --prefix=/usr \
                --datadir=/usr/share/doc/valgrind-3.17.0 &&
    make

To test the results, issue: make regtest. The tests may hang forever if GDB-10.2 is not installed. Some tests are known to hang also, depending on the version of glibc. Some tests in the "drd" test suite are known to fail as well. Problematic tests can be disabled by changing the `prereq:` line in the corresponding `.vgtest` file to `prereq: false`. For example:

    sed -e 's@prereq:.*@prereq: false@' \
        -i {helgrind,drd}/tests/pth_cond_destroy_busy.vgtest

### Note

The OpenMP tests are skipped if libgomp has been compiled with `--enable-linux-futex` (the default). If needed, just recompile the libgomp library from the gcc build tree, passing `--disable-linux-futex` to configure, storing the library to some place and changing the link from `/usr/lib/libgomp.so.1` to point to the new library.

Now, as the `root` user:

    make install

### Command Explanations

sed -i ... docs/Makefile.in : This sed provides for installing the documentation in a versioned directory.

`--enable-lto=yes`: This option allows building Valgrind with LTO (link time optimization). This produces a smaller/faster Valgrind (up to 10%), but build time increases to about 5.5 SBU.

### Contents

Installed Programs: callgrind_annotate, callgrind_control, cg_annotate, cg_diff, cg_merge, ms_print, valgrind, valgrind-di-server, valgrind-listener, and vgdb
Installed Libraries: None
Installed Directories: /usr/lib/valgrind, /usr/libexec/valgrind, /usr/include/valgrind, and /usr/share/doc/valgrind-3.17.0

#### Short Descriptions

valgrind | is a program for debugging and profiling Linux executables
callgrind_annotate | takes an output file produced by the Valgrind tool Callgrind and prints the information in an easy-to-read form
callgrind_control | controls programs being run by the Valgrind tool Callgrind
cg_annotate | is a post-processing tool for the Valgrind tool Cachegrind
cg_diff | compares two Cachegrind output files
cg_merge | merges multiple Cachegrind output files into one
ms_print | takes an output file produced by the Valgrind tool Massif and prints the information in an easy-to-read form
valgrind-di-server | is a server that reads debuginfo from objects stored on a different machine
valgrind-listener | listens on a socket for Valgrind commentary
vgdb | is an intermediary between Valgrind and GDB or a shell

Last updated on

## yasm-1.3.0

### Introduction to yasm

Yasm is a complete rewrite of the NASM-2.15.05 assembler. It supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binary, ELF32 and ELF64 object formats.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

- Download MD5 sum: fc9e586751ff789b34b1f21d572d96af

- Download size: 1.5 MB

- Estimated disk space required: 27 MB (additional 12 MB for the tests)

- Estimated build time: 0.1 SBU (additional 0.1 SBU for the tests)

#### yasm Dependencies

##### Optional

Python-2.7.18 and Cython

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/yasm

### Installation of yasm

Install yasm by running the following commands:

    sed -i 's#) ytasm.*#)#' Makefile.in &&

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

sed -i 's#) ytasm.*#)#' Makefile.in: This sed prevents it compiling 2 programs (vsyasm and ytasm) that are only of use on Microsoft Windows.

### Contents

Installed Program: yasm
Installed Library: libyasm.a
Installed Directory: /usr/include/libyasm

#### Short Descriptions

yasm | is a portable, retargetable assembler that supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binaries in ELF32 and ELF64 object formats
`libyasm.a` | provides all of the core functionality of yasm, for manipulating machine instructions and object file constructs

Last updated on

## Java

Last updated on

## Java-16.0.2

### About Java

Java is different from most of the packages in LFS and BLFS. It is a programming language that works with files of byte codes to obtain instructions and executes them in a Java Virtual Machine (JVM). An introductory java program looks like:

    public class HelloWorld
    {
        public static void main(String[] args)
        {
            System.out.println("Hello, World");
        }
    }

This program is saved as `HelloWorld.java`. The file name, HelloWorld, must match the class name. It is then converted into byte code with javac HelloWorld.java. The output file is `HelloWorld.class`. The program is executed with java HelloWorld. This creates a JVM and runs the code. The 'class' extension must not be specified.

Several class files can be combined into one file with the jar command. This is similar to the standard tar command. For instance, the command jar cf myjar.jar *.class will combine all class files in a directory into one jar file. These act as library files.

The JVM can search for and use classes in jar files automatically. It uses the `CLASSPATH` environment variable to search for jar files. This is a standard list of colon-separated directory names similar to the `PATH` environment variable.

### Binary JDK Information

Creating a JVM from source requires a set of circular dependencies. The first thing that's needed is a set of programs called a Java Development Kit (JDK). This set of programs includes java, javac, jar, and several others. It also includes several base jar files.

To start, we set up a binary installation of the JDK created by the BLFS editors. It is installed in the `/opt` directory to allow for multiple installations, including a source based version.

This package is known to build and work properly using an LFS-11.0 platform.

#### Binary Package Information

- Binary download (x86): https://anduin.linuxfromscratch.org/BLFS/OpenJDK/OpenJDK-16.0.2/OpenJDK-16.0.2+7-i686-bin.tar.xz

- Download MD5 sum: 45410ad7ec9045c379f9e736488696c3

- Download size (binary): 152 MB

- Estimated disk space required: 29 MB

- Binary download (x86_64): https://anduin.linuxfromscratch.org/BLFS/OpenJDK/OpenJDK-16.0.2/openjdk-16.0.2_linux-x64_bin.tar.gz

- Download MD5 sum: 31c344e9097bd034c892b97c5ac45c27

- Download size (binary): 176 MB

- Estimated disk space required: 303 MB

#### Java Binary Runtime Dependencies

alsa-lib-1.2.5.1, Cups-2.3.3op2, giflib-5.2.1, and Xorg Libraries

### Installation of the Java BinaryJDK

### Note

The tarball openjdk-16.0.2_linux-x64_bin.tar.gz will untar to the jdk-16.0.2 directory.

Begin by extracting the appropriate binary tarball for your architecture and changing to the extracted directory. Install the binary OpenJDK with the following commands as the `root` user:

    install -vdm755 /opt/OpenJDK-16.0.2-bin &&
    mv -v * /opt/OpenJDK-16.0.2-bin         &&
    chown -R root:root /opt/OpenJDK-16.0.2-bin

The binary version is now installed. You may create a symlink to that version by issuing, as the `root` user:

    ln -sfn OpenJDK-16.0.2-bin /opt/jdk

You may now proceed to Configuring the JAVA environment, where the instructions assume that the above link exists.

Last updated on

## OpenJDK-16.0.2

### Introduction to OpenJDK

OpenJDK is an open-source implementation of Oracle's Java Standard Edition platform. OpenJDK is useful for developing Java programs, and provides a complete runtime environment to run Java programs.

This package is known to build and work properly using an LFS-11.0 platform.

OpenJDK is GPL'd code, with a special exception made for non-free projects to use these classes in their proprietary products. In similar fashion to the LGPL, which allows non-free programs to link to libraries provided by free software, the GNU General Public License, version 2, with the Classpath Exception allows third party programs to use classes provided by free software without the requirement that the third party software also be free. As with the LGPL, any modifications made to the free software portions of a third party application, must also be made freely available.

### Note

The OpenJDK source includes a very thorough, open source test suite using the JTreg test harness. The testing instructions below allow to test the just built JDK for reasonable compatibility with the proprietary Oracle JDK. However, in order for an independent implementation to claim compatibility, it must pass a proprietary JCK/TCK test suite. No claims of compatibility, even partial compatibility, may be made without passing an approved test suite.

Oracle does provide free community access, on a case by case basis, to a closed toolkit to ensure 100% compatibility with its proprietary JDK. Neither the binary version provided on the Java-16.0.2 page nor the JVM built with the instructions below have been tested against the TCK. Any version that is built using the instructions given, cannot claim to be compatible with the proprietary JDK, without the user applying for, and completing the compatibility tests themselves.

With that in mind, the binaries produced using this build method are regularly tested against the TCK by the members listed on the site above. In addition to the community license above, an educational, non-commercial license for the TCK can be obtained from here.

#### Package Information

- Download (HTTP): https://github.com/openjdk/jdk16u/archive/jdk-16.0.2-ga.tar.gz

- Download MD5 sum: 08b1c057136a6756cd8e4609dc517339

- Download Size: 100 MB

- Estimated disk space required: 4.7 GB (add 456 MB for tests)

- Estimated build time: 5.2 SBU with 4 jobs (add 59 SBU for tests with 4 jobs)

#### Additional Downloads

##### Optional test harness

- https://anduin.linuxfromscratch.org/BLFS/OpenJDK/OpenJDK-16.0.2/jtreg-4.2.0-tip.tar.gz

- Download MD5 sum: 11818f2ae4be19d2c7ae6501be60ee98

- Download Size: 6.9 MB

#### OpenJDK Dependencies

##### Required Dependencies

An existing binary (Java-16.0.2 or an earlier built version of this package. The instructions below assume that you are using Configuring the JAVA environment), alsa-lib-1.2.5.1, cpio-2.13, Cups-2.3.3op2, UnZip-6.0, Which-2.21, Xorg Libraries, and Zip-3.0

##### Recommended

make-ca-1.7, giflib-5.2.1, Little CMS-2.12, libjpeg-turbo-2.1.1, libpng-1.6.37, and Wget-1.21.1

##### Optional

git-2.33.0, Graphviz-2.48.0, Mercurial-5.9, pandoc, and pigz

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/openjdk

### Installation of OpenJDK

If you have downloaded the optional test harness, unpack it now:

    tar -xf ../jtreg-4.2.0-tip.tar.gz

### Note

Before proceeding, you should ensure that your environment `PATH` variable contains the location of the Java compiler used for bootstrapping OpenJDK. This is the only requirement for the environment. Modern Java installations do not need `JAVA_HOME` and `CLASSPATH` is not used here. Furthermore, OpenJDK developers recommend to unset `JAVA_HOME`.

The build system does not allow the `-j` switch in `MAKEFLAGS`. See the command explanation for `--with-jobs=` for more information on customizing parallelization.

Configure and build the package with the following commands (--with-milestone value can be modified to fit user preferences):

    unset JAVA_HOME                                       &&
    bash configure --enable-unlimited-crypto              \
                   --disable-warnings-as-errors           \
                   --with-stdc++lib=dynamic               \
                   --with-giflib=system                   \
                   --with-jtreg=$PWD/jtreg                \
                   --with-lcms=system                     \
                   --with-libjpeg=system                  \
                   --with-libpng=system                   \
                   --with-zlib=system                     \
                   --with-version-build="7"               \
                   --with-version-pre=""                  \
                   --with-version-opt=""                  \
                   --with-cacerts-file=/etc/pki/tls/java/cacerts &&
    make images

To test the results, you will need to execute the jtreg program. You can set the number of concurrent tests by adding the `-conc:`<X>`` value in the below command (tests will run sequentially otherwise):

    export JT_JAVA=$(echo $PWD/build/*/jdk) &&
    jtreg/bin/jtreg -jdk:$JT_JAVA -automatic -ignore:quiet -v1 \
        test/jdk:tier1 test/langtools:tier1 &&
    unset JT_JAVA

For more control over the test suite, review the documentation available in `jtreg/doc/jtreg/usage.txt`. To review the results, see the files `JTreport/test_{jdk,langtools}/text/stats.txt` and `JTreport/test_{jdk,langtools}/text/summary.txt`. You should expect to see around 40 failures and about the same number of errors.

Install the package with the following commands as the `root` user:

    install -vdm755 /opt/jdk-16.0.2+7             &&
    cp -Rv build/*/images/jdk/* /opt/jdk-16.0.2+7 &&
    chown -R root:root /opt/jdk-16.0.2+7          &&
    for s in 16 24 32 48; do
      install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \
                      /usr/share/icons/hicolor/${s}x${s}/apps/java.png
    done

### Note

If you only wish to install the Java Runtime Environment, you can substitute `build/*/images/jre` in the above cp command.

There are now two OpenJDK SDKs installed in `/opt`. You should decide on which one you would like to use as the default. Normally, you would opt for the just installed OpenJDK. If so, do the following as the `root` user:

    ln -v -nsf jdk-16.0.2+7 /opt/jdk

If desired, you may create .desktop files to add entries in the menu for java and jconsole. The needed icons have already been installed. As the `root` user:

    mkdir -pv /usr/share/applications &&

    cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
    [Desktop Entry]
    Name=OpenJDK Java 16.0.2 Runtime
    Comment=OpenJDK Java 16.0.2 Runtime
    Exec=/opt/jdk/bin/java -jar
    Terminal=false
    Type=Application
    Icon=java
    MimeType=application/x-java-archive;application/java-archive;application/x-jar;
    NoDisplay=true
    EOF
    cat > /usr/share/applications/openjdk-jconsole.desktop << "EOF"
    [Desktop Entry]
    Name=OpenJDK Java 16.0.2 Console
    Comment=OpenJDK Java 16.0.2 Console
    Keywords=java;console;monitoring
    Exec=/opt/jdk/bin/jconsole
    Terminal=false
    Type=Application
    Icon=java
    Categories=Application;System;
    EOF

### Command Explanations

bash configure...: the top level `configure` is a wrapper around the autotools one. It is not executable and must be run through bash.

`--enable-unlimited-crypto`: Because of limitations on the usage of cryptography in some countries, there is the possibility to limit the size of encryption keys and the use of some algorithms in a policy file. This switch allows to ship a policy file with no restriction. It is the responsibility of the user to ensure proper adherence to the law.

`--disable-warnings-as-errors`: This switch disables use of `-Werror` in the build.

`--with-stdc++lib=dynamic`: This switch forces the build system to link to `libstdc++.so` (dynamic) instead of `libstdc++.a` (static).

`--with-jobs=`<X>``: The `-j` passed to make does not work with make as invoked here. By default, the build system will use the number of CPUs - 1.

`--with-jtreg=$PWD/jtreg`: This switch tells configure where to find jtreg. Omit if you have not downloaded the optional test suite.

`--with-{giflib,lcms,libjpeg,libpng,zlib}=system`: These switches force the build system to use the system libraries instead of the bundled versions.

`--with-version-build`: Currently, the build system does not include the build number in the version string. It has to be specified here.

`--with-version-pre`: This switch allows you to prefix the version string with a custom string.

`--with-version-opt`: This switch allows you to add an optional build description to the version string.

`--with-cacerts-file=/etc/pki/tls/java/cacerts`: Specifies where to find a `cacerts` file, `/etc/pki/tls/java/` on a BLFS system. Otherwise, an empty one is created. You can use the /usr/sbin/make-ca --force command to generate it, once you have installed the Java binaries.

`--with-boot-jdk`: This switch provides the location of the temporary JDK. It is normally not needed if java is found in the `PATH`.

### Configuring OpenJDK

#### Configuration Information

Normally, the JAVA environment has been configured after installing the binary version, and can be used with the just built package as well. Review Configuring the JAVA environment in case you want to modify something.

To test if the man pages are correctly installed, issue source /etc/profile and man java to display the respective man page.

#### Settting up the JRE Certificate Authority Certificates (cacerts) file

If you have run the instructions on the make-ca-1.7 page, you only need to create a symlink in the default location for the `cacerts` file. As user `root`:

    ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

To check the installation, issue:

    cd /opt/jdk
    bin/keytool -list -cacerts

At the prompt `Enter keystore password:`, enter `changeit` (the default) or just press the “Enter” key. If the `cacerts` file was installed correctly, you will see a list of the certificates with related information for each one. If not, you need to reinstall them.

### Contents

Installed Programs: jaotc, jar, jarsigner, java, javac, javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr, jhsdb, jimage, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript, jshell, jstack, jstat, jstatd, keytool, rmid, rmiregistry, and serialver
Installed Libraries: /opt/jdk-16.0.2/lib/*
Installed Directory: /opt/jdk-16.0.2

#### Short Descriptions

jaotc | is an “ahead-of-time” java class compiler
jar | combines multiple files into a single jar archive
jarsigner | signs jar files and verifies the signatures and integrity of a signed jar file
java | launches a Java application by starting a Java runtime environment, loading a specified class and invoking its main method
javac | reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files
javadoc | parses the declarations and documentation comments in a set of Java source files and produces a corresponding set of HTML pages describing the classes, interfaces, constructors, methods, and fields
javap | disassembles a Java class file
jcmd | is a utility to send diagnostic command requests to a running Java Virtual Machine
jconsole | is a graphical console tool to monitor and manage both local and remote Java applications and virtual machines
jdb | is a simple command-line debugger for Java classes
jdeprscan | scans class or jar files for uses of deprecated API elements
jdeps | shows the package-level or class-level dependencies of Java class files
jfr | is a tool for working with “Flight Recorder” files
jhsdb | is a tool to analyze the content of a core dump from a crashed Java Virtual Machine (JVM)
jimage | is used to list, extract, verify, or get information about modules in jimage format
jinfo | prints Java configuration information for a given Java process, core file, or a remote debug server
jlink | is used to assemble and optimize a set of modules and their dependencies into a custom runtime image
jmap | prints shared object memory maps or heap memory details of a given process, core file, or a remote debug server
jmod | creates JMOD files and lists the content of existing JMOD files
jpackage | generates java application packages and images
jps | lists the instrumented JVMs on the target system
jrunscript | is a command line script shell
jshell | is an interactive tool for learning the Java programming language and prototyping Java code
jstack | prints Java stack traces of Java threads for a given Java process, core file, or a remote debug server
jstat | displays performance statistics for an instrumented JVM
jstatd | is an RMI server application that monitors for the creation and termination of instrumented JVMs
keytool | is a key and certificate management utility
rmid | starts the activation system daemon
rmiregistry | creates and starts a remote object registry on the specified port on the current host
serialver | returns the serialVersionUID for one or more classes in a form suitable for copying into an evolving class

Last updated on

## Configuring the JAVA environment

### Setting up the environment

After the package installation is complete, the next step is to make sure that the system can properly find the files. If you set up your login scripts as recommended in The Bash Shell Startup Files, update the environment by creating the `openjdk.sh` script, as the `root` user:

    cat > /etc/profile.d/openjdk.sh << "EOF"
    # Begin /etc/profile.d/openjdk.sh

    # Set JAVA_HOME directory
    JAVA_HOME=/opt/jdk

    # Adjust PATH
    pathappend $JAVA_HOME/bin

    # Add to MANPATH
    pathappend $JAVA_HOME/man MANPATH

    # Auto Java CLASSPATH: Copy jar files to, or create symlinks in, the
    # /usr/share/java directory. Note that having gcj jars with OpenJDK 8
    # may lead to errors.

    AUTO_CLASSPATH_DIR=/usr/share/java

    pathprepend . CLASSPATH

    for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2>/dev/null`; do
        pathappend $dir CLASSPATH
    done

    for jar in `find ${AUTO_CLASSPATH_DIR} -name "*.jar" 2>/dev/null`; do
        pathappend $jar CLASSPATH
    done

    export JAVA_HOME
    unset AUTO_CLASSPATH_DIR dir jar

    # End /etc/profile.d/openjdk.sh
    EOF

If Sudo-1.9.7p2 is installed, the super user should have access to the above variables. Execute the following commands as the `root` user:

    cat > /etc/sudoers.d/java << "EOF"
    Defaults env_keep += JAVA_HOME
    Defaults env_keep += CLASSPATH
    EOF

For allowing mandb to include the OpenJDK man pages in its database, issue, as the `root` user:

    cat >> /etc/man_db.conf << "EOF" &&
    # Begin Java addition
    MANDATORY_MANPATH     /opt/jdk/man
    MANPATH_MAP           /opt/jdk/bin     /opt/jdk/man
    MANDB_MAP             /opt/jdk/man     /var/cache/man/jdk
    # End Java addition
    EOF

    mkdir -p /var/cache/man &&
    mandb -c /opt/jdk/man

### Setting up the Certificate Authority Certificates for Java

OpenJDK uses its own format for the CA certificates. The Java security modules use `$JAVA_HOME``/lib/security/cacerts` by default. In order to keep all the certificates in one place, we use `/etc/ssl/java/cacerts`. The instructions on the make-ca-1.7 page previously created the file located in `/etc/ssl/java`. Setup a symlink in the default location as the `root` user:

    ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

Use the following command to check if the `cacerts` file has been successfully installed:

    /opt/jdk/bin/keytool -list -cacerts

At the prompt `Enter keystore password:`, enter `changeit` (the default) or just press the “Enter” key. If the `cacerts` file was installed correctly, you will see a list of the certificates with related information for each one. If not, you need to reinstall them.

If you later install a new JVM, you just have to create the symlink in the default location to be able to use the cacerts.

Last updated on

## apache-ant-1.10.11

### Introduction to Apache Ant

The Apache Ant package is a Java-based build tool. In theory, it is like the make command, but without make's wrinkles. Ant is different. Instead of a model that is extended with shell-based commands, Ant is extended using Java classes. Instead of writing shell commands, the configuration files are XML-based, calling out a target tree that executes various tasks. Each task is run by an object that implements a particular task interface.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/ant/source/apache-ant-1.10.11-src.tar.xz

- Download MD5 sum: f93d15af0d2d799d9055e9e006071dde

- Download size: 4.3 MB

- Estimated disk space required: 142 MB

- Estimated build time: 0.3 SBU (excluding download time)

#### Apache Ant Dependencies

##### Required

A JDK (Java Binary or OpenJDK-16.0.2) and GLib-2.68.4

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/apache-ant

### Installation of Apache Ant

Build a limited bootstrap version of Apache Ant using the following command:

    ./bootstrap.sh

Download the runtime dependencies using the `fetch.xml` ant build script:

    bootstrap/bin/ant -f fetch.xml -Ddest=optional

Build Apache Ant by running the following command:

    ./build.sh -Ddist.dir=$PWD/ant-1.10.11 dist

Install, as the `root` user:

    cp -rv ant-1.10.11 /opt/            &&
    chown -R root:root /opt/ant-1.10.11 &&
    ln -sfv ant-1.10.11 /opt/ant

### Command Explanations

bootstrap/bin/ant -f fetch.xml -Ddest=optional: Downloads the missing dependencies to the user's home directory, and copies them into the source tree (in the `lib/optional` directory, where ant picks them up at build time).

./build.sh -Ddist.dir=$PWD/ant-1.10.11 dist: This command builds, tests, then installs the package into a temporary directory.

### Configuring Apache Ant

#### Config Files

`/etc/ant/ant.conf`, `~/.ant/ant.conf`, and `~/.antrc`

#### Configuration Information

Some packages will require ant to be in the search path and the `ANT_HOME` environment variable defined. Satisfy these requirements by issuing, as the `root` user:

    cat > /etc/profile.d/ant.sh << EOF
    # Begin /etc/profile.d/ant.sh

    pathappend /opt/ant/bin
    export ANT_HOME=/opt/ant

    # End /etc/profile.d/ant.sh
    EOF

The above instructions assume you have configured your system as described in The Bash Shell Startup Files.

### Contents

Installed Programs: ant, antRun, antRun.pl, complete-ant-cmd.pl, runant.pl, and runant.py
Installed Libraries: Numerous `ant*.jar` and dependant libraries in `$ANT_HOME``/lib`
Installed Directories: /opt/ant-1.10.11

#### Short Descriptions

ant | is a Java based build tool used by many packages instead of the conventional make program
antRun | is a support script used to start ant build scripts in a given directory
antRun.pl | is a Perl script that provides similar functionality offered by the antRun script
complete-ant-cmd.pl | is a Perl script that allows Bash to complete an ant command-line
runant.pl | is a Perl wrapper script used to invoke ant
runant.py | is a Python wrapper script used to invoke ant
`ant*.jar` | files are the Apache Ant Java class libraries

Last updated on

# Part IV. Networking

## Chapter 14. Connecting to a Network

The LFS book covers setting up networking by connecting to a LAN with a static IP address. There are other methods used to obtain an IP address and connect to a LAN and other networks (such as the Internet). The most popular methods (DHCP and PPP) are covered in this chapter.

DHCP stands for Dynamic Host Configuration Protocol. It is a protocol used by many sites to automatically provide information such as IP addresses, subnet masks and routing information to computers. If your network uses DHCP, you will need a DHCP client in order to connect to it.

## Advanced Network Setup

### Network Bridge

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Networking support: Y
      Networking options:
        802.1d Ethernet Bridging: M or Y

#### Setting up a Network Bridge

In this section we are are going to discuss how to set up a network bridge using systemd-networkd. In the examples below, `eth0` represents the external interface that is being bridged, while `br0` represents the bridge interface.

To create a bridge interface, create the following configuration file by running the following command as the `root` user:

    cat > /etc/systemd/network/50-br0.netdev << EOF
    [NetDev]
    Name=br0
    Kind=bridge
    EOF

To assign a network interface to a bridge, create the following configuration file by running the following command as the `root` user:

    cat > /etc/systemd/network/51-eth0.network << EOF
    [Match]
    Name=eth0

    [Network]
    Bridge=br0
    EOF

Repeat the process for any other interfaces that need to be bridged. Note that it is important that nothing assigns any addresses to the bridged interfaces. If you are using NetworkManager-1.32.10, make sure you configure them to ignore the bridged interfaces, as well as the bridge interface itself.

If you are on a network which uses DHCP for assigning ip addresses, create the following configuration file by running the following command as the `root` user:

    cat > /etc/systemd/network/60-br0.network << EOF
    [Match]
    Name=br0

    [Network]
    DHCP=yes
    EOF

Alternatively, if using a static ip setup, create the following configuration file by running the following command as the `root` user:

    cat > /etc/systemd/network/60-br0.network << EOF
    [Match]
    Name=br0

    [Network]
    Address=192.168.0.2/24
    Gateway=192.168.0.1
    DNS=192.168.0.1
    EOF

To bring up the bridge interface, simply restart the systemd-networkd daemon by running the following command as the `root` user:

    systemctl restart systemd-networkd

Last updated on

## dhcpcd-9.4.0

### Introduction to dhcpcd

dhcpcd is an implementation of the DHCP client specified in RFC2131. A DHCP client is useful for connecting your computer to a network which uses DHCP to assign network addresses. dhcpcd strives to be a fully featured, yet very lightweight DHCP client.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://roy.marples.name/downloads/dhcpcd/dhcpcd-9.4.0.tar.xz

- Download (FTP): ftp://roy.marples.name/pub/dhcpcd/dhcpcd-9.4.0.tar.xz

- Download MD5 sum: c36715fc629bc40aa94aae06fa1724c2

- Download size: 252 KB

- Estimated disk space required: 3.6 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### dhcpcd Dependencies

##### Optional

LLVM-12.0.1 (with Clang), ntp-4.2.8p15, chronyd, and ypbind

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dhcpcd

### Installation of dhcpcd

Recent releases of dhcpcd implement privilege separation. 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 -m700 -d /var/lib/dhcpcd &&

    groupadd -g 52 dhcpcd        &&
    useradd  -c 'dhcpcd PrivSep' \
             -d /var/lib/dhcpcd  \
             -g dhcpcd           \
             -s /bin/false     \
             -u 52 dhcpcd &&
    chown    -v dhcpcd:dhcpcd /var/lib/dhcpcd

Install dhcpcd by running the following commands:

    ./configure --prefix=/usr                \
                --sysconfdir=/etc            \
                --libexecdir=/usr/lib/dhcpcd \
                --dbdir=/var/lib/dhcpcd      \
                --privsepuser=dhcpcd         &&
    make

To test the results, issue: make test.

Now, as the `root` user:

    make install

### Command Explanations

`--libexecdir=/usr/lib/dhcpcd`: Set a more proper location for dhcpcd internal libraries.

`--dbdir=/var/lib/dhcpcd`: The default `/var/db` is not FHS-compliant

`--with-hook=...`: You can optionally install more hooks, for example to install some configuration files such as `ntp.conf`. The set of hooks is in the `dhcpcd-hooks` directory in the build tree.

### Configuring dhcpcd

#### Config Files

`/etc/dhcpcd.conf`

#### General Configuration Information

If you want to configure network interfaces at boot using dhcpcd, you need to install the systemd unit included in blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-dhcpcd

### Note

The default behavior of dhcpcd is to set the hostname and the mtu. It also overwrites `/etc/resolv.conf` and `/etc/ntp.conf`. These modifications to system configuration files are done by hooks which are stored in `/lib/dhcpcd/dhcpcd-hooks`. Setup dhcpcd by removing or adding hooks from/to that directory. The execution of hooks can be disabled by using the `--nohook` (`-C`) command line option or by the `nohook` option in the `/etc/dhcpcd.conf` file.

### Note

Make sure that you disable the systemd-networkd service or configure it not to manage the interfaces you want to manage with dhcpcd.

At this point you can test if dhcpcd is behaving as expected by running the following command as the `root` user:

    systemctl start dhcpcd@eth0

To start dhcpcd on a specific interface at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable dhcpcd@eth0

Replace `eth0` with the actual interface name.

### Contents

Installed Program: dhcpcd
Installed Library: /usr/lib/dhcpcd/dev/udev.so
Installed Directory: /{usr,var}/lib/dhcpcd and /usr/share/dhcpcd

#### Short Descriptions

dhcpcd | is an implementation of the DHCP client specified in RFC2131
`udev.so` | adds udev support for interface arrival and departure; this is because udev likes to rename the interface, which it can't do if dhcpcd grabs it first

Last updated on

## DHCP-4.4.2-P1

### Introduction to ISC DHCP

The ISC DHCP package contains both the client and server programs for DHCP. dhclient (the client) is used for connecting to a network which uses DHCP to assign network addresses. dhcpd (the server) is used for assigning network addresses on private networks.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.isc.org/isc/dhcp/4.4.2-P1/dhcp-4.4.2-P1.tar.gz

- Download (FTP): ftp://ftp.isc.org/isc/dhcp/4.4.2-P1/dhcp-4.4.2-P1.tar.gz

- Download MD5 sum: 3089a1ebd20a802ec0870ae337d43907

- Download size: 9.4 MB

- Estimated disk space required: 115 MB

- Estimated build time: 0.4 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dhcp

### Kernel Configuration

You must have Packet Socket support. IPv6 support is optional.

    [*] Networking support --->        [CONFIG_NET]
          Networking options --->
            <*> Packet socket          [CONFIG_PACKET]
            <*> The IPv6 Protocol ---> [CONFIG_IPV6]

### Installation of ISC DHCP

First, fix a build issue with GCC 10 and later:

    sed -i '/o.*dhcp_type/d' server/mdb.c &&
    sed -r '/u.*(local|remote)_port/d'    \
        -i client/dhclient.c              \
           relay/dhcrelay.c

### Note

This package does not support parallel build.

### Note

Be careful with the instructions below. The single and double quotes are important because the defined variables are used verbatim in the code.

Install ISC DHCP by running the following commands:

    ( export CFLAGS="${CFLAGS:--g -O2} -Wall -fno-strict-aliasing                 \
            -D_PATH_DHCLIENT_SCRIPT='\"/usr/sbin/dhclient-script\"'     \
            -D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"'               \
            -D_PATH_DHCLIENT_CONF='\"/etc/dhcp/dhclient.conf\"'"        &&

    ./configure --prefix=/usr                                           \
                --sysconfdir=/etc/dhcp                                  \
                --localstatedir=/var                                    \
                --with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases       \
                --with-srv6-lease-file=/var/lib/dhcpd/dhcpd6.leases     \
                --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \
                --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases
    ) &&
    make -j1

This package does not come with a test suite.

If you only want to install the ISC DHCP client, issue the following commands as the `root` user:

    make -C client install             &&
    install -v -m755 client/scripts/linux /usr/sbin/dhclient-script

Skip to the section called “Client Configuration” in order to configure the client

If you only want to install the ISC DHCP server, issue the following command as the `root` user:

    make -C server install

Skip to the section called “Server Configuration” in order to configure the server.

Alternatively, you can install whole package which includes the client, server, relay, static libraries and development headers by running the following commands as the `root` user:

    make install &&
    install -v -m755 client/scripts/linux /usr/sbin/dhclient-script

### Configuring ISC DHCP

#### Config Files

`/etc/dhcp/dhclient.conf` and `/etc/dhcp/dhcpd.conf`

#### Client Configuration

Create a basic `/etc/dhcp/dhclient.conf` by running the following command as the `root` user:

    install -vdm755 /etc/dhcp &&
    cat > /etc/dhcp/dhclient.conf << "EOF"
    # Begin /etc/dhcp/dhclient.conf
    #
    # Basic dhclient.conf(5)

    #prepend domain-name-servers 127.0.0.1;
    request subnet-mask, broadcast-address, time-offset, routers,
            domain-name, domain-name-servers, domain-search, host-name,
            netbios-name-servers, netbios-scope, interface-mtu,
            ntp-servers;
    require subnet-mask, domain-name-servers;
    #timeout 60;
    #retry 60;
    #reboot 10;
    #select-timeout 5;
    #initial-interval 2;

    # End /etc/dhcp/dhclient.conf
    EOF

See man 5 dhclient.conf for additional options.

Now create the `/var/lib/dhclient` directory which will contain DHCP Client leases by running the following command as the `root` user:

    install -v -dm 755 /var/lib/dhclient

If you want to configure network interfaces at boot using dhclient, you need to install the `dhclient@.service` unit included in the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-dhclient

### Note

Make sure that you disable the systemd-networkd service or configure it not to manage the interfaces you want to manage with dhclient.

At this point you can test if dhclient is behaving as expected by running the following command as the `root` user:

    systemctl start dhclient@eth0

To start dhclient on a specific interface at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable dhclient@eth0

Replace `eth0` with the actual interface name.

#### Server Configuration

Note that you only need the DHCP server if you want to issue LAN addresses over your network. The DHCP client doesn't need the server in order to function properly.

Start with creating `/etc/dhcp/dhcpd.conf` by running the following command as the `root` user:

    cat > /etc/dhcp/dhcpd.conf << "EOF"
    # Begin /etc/dhcp/dhcpd.conf
    #
    # Example dhcpd.conf(5)

    # Use this to enable / disable dynamic dns updates globally.
    ddns-update-style none;

    # option definitions common to all supported networks...
    option domain-name "example.org";
    option domain-name-servers ns1.example.org, ns2.example.org;

    default-lease-time 600;
    max-lease-time 7200;

    # This is a very basic subnet declaration.
    subnet 10.254.239.0 netmask 255.255.255.224 {
      range 10.254.239.10 10.254.239.20;
      option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
    }

    # End /etc/dhcp/dhcpd.conf
    EOF

Adjust the file to suit your needs. See man 5 dhcpd.conf for additional options.

Now create the `/var/lib/dhcpd` directory which will contain DHCP Server leases by running the following command as the `root` user:

    install -v -dm 755 /var/lib/dhcpd

If you want to start the DHCP Server at boot, install the `dhcpd.service` unit included in the blfs-systemd-units-20210819 package:

    make install-dhcpd

You will need to edit the `/etc/default/dhcpd` in order to set the interface on which dhcpd will serve the DHCP requests.

### Contents

Installed Programs: dhclient, dhclient-script, dhcpd, dhcrelay and omshell
Installed Libraries: libdhcpctl.a and libomapi.a
Installed Directories: /etc/dhcp, /usr/include/dhcpctl, /usr/include/isc-dhcp, /usr/include/omapip, /var/lib/dhclient and /var/lib/dhcpd

#### Short Descriptions

dhclient | is the implementation of the DHCP client
dhclient-script | is used by dhclient to (re)configure interfaces. It can make extra changes by invoking custom dhclient-{entry,exit}-hooks
dhcpd | implements Dynamic Host Configuration Protocol (DHCP) and Internet Bootstrap Protocol (BOOTP) requests for network addresses
dhcrelay | provides a means to accept DHCP and BOOTP requests on a subnet without a DHCP server and relay them to a DHCP server on another subnet
omshell | provides an interactive way to connect to, query and possibly change the ISC DHCP Server's state via OMAPI, the Object Management API

Last updated on

## Chapter 15. Networking Programs

These applications are generally client applications used to access the appropriate server across the building or across the world. Tcpwrappers and portmap are support programs for daemons that you may have running on your machine.

## bridge-utils-1.7.1

### Introduction to bridge-utils

The bridge-utils package contains a utility needed to create and manage bridge devices. This is useful in setting up networks for a hosted virtual machine (VM).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/net/bridge-utils/bridge-utils-1.7.1.tar.xz

- Download MD5 sum: 3e1fee4dc22cac5457c2f6ffb990a518

- Download size: 29 KB

- Estimated disk space required: 1.1 MB

- Estimated build time: less than 0.1 SBU

#### bridge-utils Dependencies

##### Optional (to run tests)

Net-tools-2.10

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bridge

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    [*] Networking support --->            [CONFIG_NET]
          Networking options --->
            <*/M> 802.1d Ethernet Bridging [CONFIG_BRIDGE]

### Installation of bridge-utils

Install bridge-utils by running the following commands:

    autoconf                  &&
    ./configure --prefix=/usr &&
    make

Testing the results requires running the six shell scripts in the `tools/` directory. Two of the tests require two ethernet ports. Some tests will not preserve the current network configuration. See `tests/README` for details.

Now, as the `root` user:

    make install

### Contents

Installed Program: brctl
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

brctl | is a program used to set up, maintain, and inspect the ethernet bridge configuration in the linux kernel

Last updated on

## cifs-utils-6.13

### Introduction to cifs-utils

The cifs-utils package provides a means for mounting SMB/CIFS shares on a Linux system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.samba.org/ftp/linux-cifs/cifs-utils/cifs-utils-6.13.tar.bz2

- Download MD5 sum: 4348921483c530826950e9503b08b033

- Download size: 405 KB

- Estimated disk space required: 3.3 MB

- Estimated build time: 0.1 SBU

#### cifs-utils Dependencies

##### Required

Talloc-2.3.3

##### Optional

keyutils-1.6.1 (required to build PAM module), Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2, Samba-4.14.7, and libcap-2.53 with PAM or libcap-ng

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cifsutils

### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    File systems  --->
      [*] Network File Systems  --->                              [CONFIG_NETWORK_FILESYSTEMS]
        <*/M> SMB3 and CIFS support (advanced network filesystem) [CONFIG_CIFS]

Depending on your server configuration, additional kernel options may be required.

### Installation of cifs-utils

Install cifs-utils by running the following commands:

    ./configure --prefix=/usr \
                --disable-pam &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-pam`: Do not build PAM support. Remove it and use `--with-pamdir` (see below), if Linux-PAM-1.5.1 is installed and you wish PAM support.

`--with-pamdir=/usr/lib/security`: Install the PAM module in `/usr/lib/security`.

### Contents

Installed Programs: cifs.idmap, cifs.upcall, cifscreds, getcifsacl, mount.cifs, mount.smb3, setcifsacl, smb2-quota, and smbinfo
Installed Library: /usr/lib/cifs-utils/idmapwb.so and optionally PAM module /usr/lib/security/pam_cifscreds.so
Installed Directory: /usr/lib/cifs-utils

#### Short Descriptions

cifs.idmap | is a userspace helper program for the linux CIFS client filesystem. There are a number of activities that the kernel cannot easily do itself. This program is a callout program that does these things for the kernel and then returns the result. It is not intended to be run from the command-line
cifs.upcall | is a userspace helper program for the linux CIFS client filesystem. It is intended to be run when the kernel calls request-key for a particular key type. It is not intended to be run from the command-line
cifscreds | is a tool for managing credentials (username and password) for the purpose of establishing sessions in multiuser mounts
getcifsacl | is a userspace helper to display an ACL in a security descriptor for Common Internet File System (CIFS)
mount.cifs | mounts a Linux CIFS filesystem. It is usually invoked indirectly by the mount(8) command when using the "-t cifs" option
mount.smb3 | mounts a SMB3-based filesystem. It is usually invoked indirectly by the mount(8) command when using the "-t smb3" option
setcifsacl | is intended to alter an ACL of a security descriptor for a file system object
smb3-quota | displays quota information for a SMB filesystem
smbinfo | displays SMB-specific file information, such as security descriptors and quotas

Last updated on

## iw-5.9

### Introduction to iw

iw is a new nl80211 based CLI configuration utility for wireless devices. It supports all new drivers that have been added to the kernel recently. The old tool iwconfig, which uses Wireless Extensions interface, is deprecated and it's strongly recommended to switch to iw and nl80211.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/software/network/iw/iw-5.9.tar.xz

- Download MD5 sum: 7a47d6f749ec69afcaf351166fd12f6f

- Download size: 144 KB

- Estimated disk space required: 4.6 MB

- Estimated build time: less than 0.1 SBU

#### iw Dependencies

##### Required

libnl-3.5.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/iw

### Kernel Configuration

To use iw, the kernel must have the appropriate drivers and other support available. The appropriate bus must also be available. For older laptops, the PCMCIA bus (CONFIG_PCCARD) needs to be built. In some cases, this bus support will also need to be built for embedded iw cards. The appropriate bridge support also needs to be built. For many modern laptops, the CardBus host bridge (CONFIG_YENTA) will be needed.

In addition to the bus, the actual driver for the specific wireless card must also be available. There are many wireless cards and they don't all work with Linux. The first place to look for card support is the kernel. The drivers are located in Device Drivers → Network Device Support → Wireless LAN (non-hamradio). There are also external drivers available for some very common cards. For more information, look at the user notes.

After the correct drivers are loaded, the interface will appear in `/proc/net/wireless`.

### Installation of iw

To install iw, use the following commands:

    sed -i "/INSTALL.*gz/s/.gz//" Makefile &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

sed ...: Install uncompressed manual pages in accordance with other man pages.

### Contents

Installed Programs: iw
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

iw | shows / manipulates wireless devices and their configuration

Last updated on

## NcFTP-3.2.6

### Introduction to NcFTP

The NcFTP package contains a powerful and flexible interface to the Internet standard File Transfer Protocol. It is intended to replace or supplement the stock ftp program.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.ncftp.com/ncftp/ncftp-3.2.6-src.tar.xz

- Download MD5 sum: 42d0f896d69a4d603ec097546444245f

- Download size: 412 KB

- Estimated disk space required: 6.6 MB

- Estimated build time: 0.2 SBU

#### NcFTP Dependencies

##### Optional

LLVM-12.0.1 (with Clang, used by default if installed)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ncftp

### Installation of NcFTP

There are two ways to build NcFTP. The first (and optimal) way builds most of the functionality as a shared library and then builds and installs the program linked against this library. The second method simply links all of the functionality into the binary statically. This doesn't make the dynamic library available for linking by other applications. You need to choose which method best suits you. Note that the second method does not create an entirely statically linked binary; only the `libncftp` parts are statically linked in, in this case. Be aware that building and using the shared library is covered by the Clarified Artistic License; however, developing applications that utilize the shared library is subject to a different license.

First, fix an issue caused by a change in behavior in GCC-10:

    sed -i 's/^Bookmark/extern Bookmark/' sh_util/gpshare.c

To install NcFTP using the first (and optimal) method, run the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make -C libncftp shared &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make -C libncftp soinstall &&
    make install

To install NcFTP using the second method (with the `libncftp` functionality linked in statically) run the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

make -C ... && make -C ...: These commands make and install the dynamic library `libncftp` which is then used to link against when compiling the main program.

### Configuring NcFTP

#### Config Files

`/etc/ncftp.*` and `~/.ncftp/*`; especially `/etc/ncftp.prefs_v3` and `~/.ncftp/prefs_v3`

#### Configuration Information

Most NcFTP configuration is done while in the program, and the configuration files are dealt with automatically. One exception to this is `~/.ncftp/prefs_v3`. There are various options to alter in there, including:

    yes-i-know-about-NcFTPd=yes

This disables the splash screen advertising the NcFTPd server.

There are other options in the `prefs_v3` file. Most of these are self-explanatory. Global defaults can be set in `/etc/ncftp.prefs_v3`.

### Contents

Installed Programs: ncftp, ncftpbatch, ncftpbookmarks, ncftpget, ncftpls, ncftpput, and ncftpspooler
Installed Library: libncftp.so
Installed Directories: None

#### Short Descriptions

ncftp | is a browser program for File Transfer Protocol
ncftpbatch | is an individual batch FTP job processor
ncftpbookmarks | is the NcFTP Bookmark Editor (NCurses-based)
ncftpget | is an internet file transfer program for scripts used to retrieve files
ncftpls | is an internet file transfer program for scripts used to list files
ncftpput | is an internet file transfer program for scripts used to transfer files
ncftpspooler | is a global batch FTP job processor daemon

Last updated on

## Net-tools-2.10

### Introduction to Net-tools

The Net-tools package is a collection of programs for controlling the network subsystem of the Linux kernel.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/project/net-tools/net-tools-2.10.tar.xz

- Download MD5 sum: 78aae762c95e2d731faf88d482e4cde5

- Download size: 228 KB

- Estimated disk space required: 7.5 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/net-tools

### Installation of Net-tools

The instructions below automate the configuration process by piping yes to the make command. If you wish to run the interactive configuration process (by changing the instruction to just make), but you are not sure how to answer all the questions, then just accept the defaults. This will be just fine in the majority of cases. What you're asked here is a bunch of questions about which network protocols you've enabled in your kernel. The default answers will enable the tools from this package to work with the most common protocols: TCP, PPP, and several others. You still need to actually enable these protocols in the kernel—what you do here is merely tell the package to include support for those protocols in its programs, but it's up to the kernel to make the protocols available.

### Note

This package has several unneeded protocols and hardware device specific functions that are obsolete. To only build the minimum needed for your system, skip the yes command and answer each question interactively. The minimum needed options are 'UNIX protocol family' and 'INET (TCP/IP) protocol family'.

For this package, we use the DESTDIR method of installation in order to easily remove files from the build that overwrite those that we want to keep or are not appropriate for our system.

Install Net-tools by running the following commands:

    export BINDIR='/usr/bin' SBINDIR='/usr/bin' &&
    yes "" | make -j1                           &&
    make DESTDIR=$PWD/install -j1 install       &&
    rm    install/usr/bin/{nis,yp}domainname    &&
    rm    install/usr/bin/{hostname,dnsdomainname,domainname,ifconfig} &&
    rm -r install/usr/share/man/man1            &&
    rm    install/usr/share/man/man8/ifconfig.8 &&
    unset BINDIR SBINDIR

This package does not come with a test suite.

Now, as the `root` user:

    chown -R root:root install &&
    cp -a install/* /

### Command Explanations

export BINDIR='/usr/bin' SBINDIR='/usr/bin': Ensure the executables are installed in the correct location.

yes "" | make : Piping yes to make config skips the interactive configuration and accepts the defaults.

rm ...: Remove unneeded programs and man pages.

### Contents

Installed Programs: arp, ipmaddr, iptunnel, mii-tool, nameif, netstat, plipconfig, rarp, route, and slattach
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

arp | is used to manipulate the kernel's ARP cache, usually to add or delete an entry, or to dump the entire cache
ipmaddr | adds, deletes and shows an interface's multicast addresses
iptunnel | adds, changes, deletes and shows an interface's tunnels
mii-tool | checks or sets the status of a network interface's Media Independent Interface (MII) unit
nameif | names network interfaces based on MAC addresses
netstat | is used to report network connections, routing tables, and interface statistics
plipconfig | is used to fine tune the PLIP device parameters, to improve its performance
rarp | is used to manipulate the kernel's RARP table
route | is used to manipulate the IP routing table
slattach | attaches a network interface to a serial line. This allows you to use normal terminal lines for point-to-point links to others computers

Last updated on

## NFS-Utils-2.5.4

### Introduction to NFS Utilities

The NFS Utilities package contains the userspace server and client tools necessary to use the kernel's NFS abilities. NFS is a protocol that allows sharing file systems over the network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/utils/nfs-utils/2.5.4/nfs-utils-2.5.4.tar.xz

- Download MD5 sum: 7e330130ac9677c34bba5ab512036bef

- Download size: 688 KB

- Estimated disk space required: 19 MB

- Estimated build time: 0.2 SBU

#### NFS Utilities Dependencies

##### Required

libtirpc-1.3.2 and rpcsvc-proto-1.4.2

##### Optional

Cyrus SASL-2.1.27 (for SASL authentication), LVM2-2.03.13 (libdevmapper for NFSv4 support), libnsl-1.3.0 (for NIS client support), OpenLDAP-2.5.7 (for LDAP authentication), SQLite-3.36.0, MIT Kerberos V5-1.19.2 or libgssapi , and librpcsecgss (for GSS and RPC security support), and libcap-2.53 with PAM

##### Required (runtime)

rpcbind-1.2.6

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nfs-utils

### Kernel Configuration

Enable the following options in the kernel configuration (choose client and/or server support as appropriate) and recompile the kernel if necessary:

    File systems  --->
      [*] Network File Systems  --->         [CONFIG_NETWORK_FILESYSTEMS]
        <*/M> NFS client support             [CONFIG_NFS_FS]
        <*/M> NFS server support             [CONFIG_NFSD]

Select the appropriate sub-options that appear when the above options are selected.

### Note

In BLFS we assume that nfs v3 will be used. If the server offers nfs v4 (for linux, CONFIG_NFSD_V4) then auto-negotiation for v3 will fail and you will need to add `nfsver=3` to the mount options. This also applies if that option is enabled in the client's kernel, for example in a distro trying to mount from a BLFS v3 server.

Even if neither end of the connection supports nfs v4, adding `nfsver=3` is still beneficial because it prevents an error message "NFS: bad mount option value specified: minorversion=1" being logged on every mount.

### Installation of NFS Utilities

Before you compile the program, ensure that the `nobody` user and `nogroup` group have been created as done in the current LFS book. You can add them by running the following commands as the `root` user:

    groupadd -g 99 nogroup &&
    useradd -c "Unprivileged Nobody" -d /dev/null -g nogroup \
        -s /bin/false -u 99 nobody

### Note

The classic uid and gid values are 65534 which is also -2 when interpreted as a signed 16-bit number. These values impact other files on some filesystems that do not have support for sparse files. The `nobody` and `nogroup` values are relatively arbitrary. The impact on a server is nil if the `exports` file is configured correctly. If it is misconfigured, an ls -l or ps listing will show a uid or gid number of 65534 instead of a name. The client uses `nobody` only as the user running rpc.statd.

Install NFS Utilities by running the following commands:

    ./configure --prefix=/usr          \
                --sysconfdir=/etc      \
                --sbindir=/usr/sbin    \
                --disable-nfsv4        \
                --disable-gss &&
    make

This package does not come with a working test suite.

Now, as the `root` user:

    make install                      &&
    chmod u+w,go+r /usr/sbin/mount.nfs    &&
    chown nobody.nogroup /var/lib/nfs

### Command Explanations

`--disable-gss`: Disables support for RPCSEC GSS (RPC Security).

chown nobody.nogroup /var/lib/nfs: The rpc.statd program uses the ownership of this directory to set it's UID and GID. This command sets those to unprivileged entries.

### Configuring NFS Utilities

#### Server Configuration

`/etc/exports` contains the exported directories on NFS servers. Refer to the `exports.5` manual page for the syntax of this file. Also refer to the "NFS HowTo" available at http://nfs.sourceforge.net/nfs-howto/ for information on how to configure the servers and clients in a secure manner. For example, for sharing the `/home` directory over the local network, the following line may be added:

    cat >> /etc/exports << EOF
    /home 192.168.0.0/24(rw,subtree_check,anonuid=99,anongid=99)
    EOF

### Note

Be sure to replace the directory, network address. and prefix above to match your network. The only space in the line above should be between the directory and the network address.

##### Systemd Units

Install the NFSv4 server units included in the blfs-systemd-units-20210819 package to start the server at boot.

    make install-nfsv4-server

If you have disabled NFSv4 support, run the following command as the `root` user to omit the NFSv4 specific systemd units:

    make install-nfs-server

You can edit the `/etc/default/nfs-utils` file to change the startup options for NFS daemons. Defaults should be fine for most use cases.

#### Client Configuration

`/etc/fstab` contains the directories that are to be mounted on the client. Alternately the partitions can be mounted by using the mount command with the proper options. To mount the `/home` and `/usr` partitions, add the following to the `/etc/fstab`:

    <server-name>:/home  /home nfs   rw,_netdev 0 0
    <server-name>:/usr   /usr  nfs   ro,_netdev 0 0

The options which can be used are specified in man 5 nfs . If both the client and server are running recent versions of linux, most of the options will be negotiated (but see the Note above on nfsver=3). You can specify either `rw` or `ro`, `_netdev` if the filesystem is to be automatically mounted at boot, or `noauto` (and perhaps `user`) for other filesystems.

If the fileserver is not running a recent version of linux, you may need to specifiy other options.

You may need to enable autofs v4 in your kernel, and add the option `comment=systemd.automount`. Some machines may need this because systemd tries to mount the external filesystems before the network is up. An alternative is to run mount -a as the `root` user after the system has started.

##### Systemd Units

### Note

The following systemd units are not required if the nfs-server units are installed.

Install the units included in the blfs-systemd-units-20210819 package to start the client services at boot.

    make install-nfs-client

### Contents

Installed Programs: exportfs, mountstats, mount.nfs, mount.nfs4 (link to mount.nfs), nfsconf, nfsdclnts, nfsiostat, nfsstat, rpc.mountd, rpc.nfsd, rpc.statd, rpcdebug, showmount, sm-notify, start-statd, umount.nfs (link to mount.nfs), and umount.nfs4 (link to mount.nfs)
Installed Libraries: None
Installed Directories: /var/lib/nfs

#### Short Descriptions

exportfs | maintains a list of NFS exported file systems
mountstats | displays NFS client per-mount statistics
mount.nfs | is used to mount a network share using NFS
mount.nfs4 | is used to mount a network share using NFSv4
nfsconf | can be used to test for and retrieve configuration settings from a range of nfs-utils configuration files
nfsdclnts | prints information about NFS clients
nfsiostat | reports input/output statistics for network filesystems
nfsstat | displays statistics kept about NFS client and server activity
rpc.mountd | implements the NFS mount protocol on an NFS server
rpc.nfsd | implements the user level part of the NFS service on the server
rpc.statd | is used by the NFS file locking service. Run on both sides, client as well as server, when you want file locking enabled
rpcdebug | sets or clears the kernel's NFS client and server debug flags
showmount | displays mount information for an NFS server
sm-notify | is used to send Network Status Monitor reboot messages
start-statd | is a script called by nfsmount when mounting a filesystem with locking enabled, if statd does not appear to be running. It can be customised with whatever flags are appropriate for the site
umount.nfs | is used to unmount a network share using NFS
umount.nfs4 | is used to unmount a network share using NFSv4

Last updated on

## ntp-4.2.8p15

### Introduction to ntp

The ntp package contains a client and server to keep the time synchronized between various computers over a network. This package is the official reference implementation of the NTP protocol.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.8p15.tar.gz

- Download MD5 sum: e1e6b23d2fc75cced41801dbcd6c2561

- Download size: 6.7 MB

- Estimated disk space required: 108 MB (with tests)

- Estimated build time: 0.4 SBU (Using parallelism=4; with tests)

#### ntp Dependencies

##### Required

IO-Socket-SSL-2.072

##### Optional

libcap-2.53 with PAM, libevent-2.1.12, libedit, and libopts from AutoGen

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ntp

### Installation of ntp

There should be a dedicated user and group to take control of the ntpd daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 87 ntp &&
    useradd -c "Network Time Protocol" -d /var/lib/ntp -u 87 \
            -g ntp -s /bin/false ntp

The update-leap command needs to be fixed in order to run properly:

    sed -e 's/"(\\S+)"/"?([^\\s"]+)"?/' \
        -i scripts/update-leap/update-leap.in

Now fix an issue introduced with glibc-2.34:

    sed -e 's/#ifndef __sun/#if !defined(__sun) \&\& !defined(__GLIBC__)/' \
        -i libntp/work_thread.c

Install ntp by running the following commands:

    ./configure --prefix=/usr         \
                --bindir=/usr/sbin    \
                --sysconfdir=/etc     \
                --enable-linuxcaps    \
                --with-lineeditlibs=readline \
                --docdir=/usr/share/doc/ntp-4.2.8p15 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install &&
    install -v -o ntp -g ntp -d /var/lib/ntp

### Command Explanations

`CFLAGS="-O2 -g -fPIC"`: This environment variable is necessary to generate Position Independent Code needed for use in the package libraries.

`--bindir=/usr/sbin`: This parameter places the administrative programs in `/usr/sbin`.

`--enable-linuxcaps`: ntpd is run as user ntp, so use Linux capabilities for non-root clock control.

`--with-lineeditlibs=readline`: This switch enables Readline support for ntpdc and ntpq programs. If omitted, libedit will be used if installed, otherwise no readline capabilites will be compiled.

### Configuring ntp

#### Config Files

`/etc/ntp.conf`

#### Configuration Information

The following configuration file first defines various ntp servers with open access from different continents. Second, it creates a drift file where ntpd stores the frequency offset and a pid file to store the ntpd process ID. Third, it defines the location for the leap-second definition file `/etc/ntp.leapseconds`, that the update-leap script checks and updates, when necessary. This script can be run as a cron job and the ntp developers recommend a frequency of about three weeks for the updates. Since the documentation included with the package is sparse, visit the ntp website at http://www.ntp.org/ and http://www.pool.ntp.org/ for more information.

    cat > /etc/ntp.conf << "EOF"
    # Asia
    server 0.asia.pool.ntp.org

    # Australia
    server 0.oceania.pool.ntp.org

    # Europe
    server 0.europe.pool.ntp.org

    # North America
    server 0.north-america.pool.ntp.org

    # South America
    server 2.south-america.pool.ntp.org

    driftfile /var/lib/ntp/ntp.drift
    pidfile   /run/ntpd.pid

    leapfile  /var/lib/ntp/ntp.leapseconds
    EOF

You may wish to add a “Security session”. For explanations, see https://www.eecis.udel.edu/~mills/ntp/html/accopt.html#restrict.

    cat >> /etc/ntp.conf << "EOF"
    # Security session
    restrict    default limited kod nomodify notrap nopeer noquery
    restrict -6 default limited kod nomodify notrap nopeer noquery

    restrict 127.0.0.1
    restrict ::1
    EOF

#### Synchronizing the Time

There are two options. Option one is to run ntpd continuously and allow it to synchronize the time in a gradual manner. The other option is to run ntpd periodically (using cron) and update the time each time ntpd is scheduled.

If you choose Option one, then install the `ntpd.service` unit included in the blfs-systemd-units-20210819 package.

    make install-ntpd

If you prefer to run ntpd periodically, add the following command to `root`'s `crontab`:

    ntpd -q

### Contents

Installed Programs: calc_tickadj, ntp-keygen, ntp-wait, ntpd, ntpdate, ntpdc, ntpq, ntptime, ntptrace, sntp, tickadj and update-leap
Installed Libraries: None
Installed Directories: /usr/share/ntp, /usr/share/doc/ntp-4.2.8 and /var/lib/ntp

#### Short Descriptions

calc_tickadj | calculates optimal value for tick given ntp drift file
ntp-keygen | generates cryptographic data files used by the NTPv4 authentication and identification schemes
ntp-wait | is useful at boot time, to delay the boot sequence until ntpd has set the time
ntpd | is a ntp daemon that runs in the background and keeps the date and time synchronized based on response from configured ntp servers. It also functions as a ntp server
ntpdate | is a client program that sets the date and time based on the response from an ntp server. This command is deprecated
ntpdc | is used to query the ntp daemon about its current state and to request changes in that state
ntpq | is a utility program used to monitor ntpd operations and determine performance
ntptime | reads and displays time-related kernel variables
ntptrace | traces a chain of ntp servers back to the primary source
sntp | is a Simple Network Time Protocol (SNTP) client
tickadj | reads, and optionally modifies, several timekeeping-related variables in older kernels that do not have support for precision timekeeping
update-leap | is a script to verify and, if necessary, update the leap-second definition file

Last updated on

## rpcbind-1.2.6

### Introduction to rpcbind

The rpcbind program is a replacement for portmap. It is required for import or export of Network File System (NFS) shared directories.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/rpcbind/rpcbind-1.2.6.tar.bz2

- Download MD5 sum: 2d84ebbb7d6fb1fc3566d2d4b37f214b

- Download size: 124 KB

- Estimated disk space required: 1.6 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/rpcbind-1.2.6-vulnerability_fixes-1.patch

#### rpcbind Dependencies

##### Required

libtirpc-1.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rpcbind

### Installation of rpcbind

There should be a dedicated user and group to take control of the rpcbind daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 28 rpc &&
    useradd -c "RPC Bind Daemon Owner" -d /dev/null -g rpc \
            -s /bin/false -u 28 rpc

In order to get rpcbind to work properly, first fix the package to use correct service name:

    sed -i "/servname/s:rpcbind:sunrpc:" src/rpcbind.c

Install rpcbind by running the following commands:

    patch -Np1 -i ../rpcbind-1.2.6-vulnerability_fixes-1.patch &&

    ./configure --prefix=/usr       \
                --bindir=/usr/sbin  \
                --enable-warmstarts \
                --with-rpcuser=rpc  &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--with-rpcuser=rpc`: This switch is used so the rpcbind daemon will run as an unprivileged user instead of the `root` user.

### Configuring rpcbind

#### Systemd Unit

Install the `rpcbind.service` unit included in the blfs-systemd-units-20210819 package.

    make install-rpcbind

### Contents

Installed Program: rpcbind and rpcinfo
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

rpcbind | is a server that converts RPC program numbers into universal addresses. It must be running on the host to be able to make RPC calls on a server on that machine
rpcinfo | makes an RPC call to an RPC server and reports data according to the requested options

Last updated on

## rsync-3.2.3

### Introduction to rsync

The rsync package contains the rsync utility. This is useful for synchronizing large file archives over a network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.samba.org/ftp/rsync/src/rsync-3.2.3.tar.gz

- Download MD5 sum: 209f8326f5137d8817a6276d9577a2f1

- Download size: 1.0 MB

- Estimated disk space required: 10 MB (with tests - additional 47 MB for HTML API documentation)

- Estimated build time: 0.7 SBU (with tests)

#### rsync Dependencies

##### Recommended

popt-1.18

##### Optional

Doxygen-1.9.2, lz4, and xxhash

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rsync

### Installation of rsync

For security reasons, running the rsync server as an unprivileged user and group is encouraged. If you intend to run rsync as a daemon, create the `rsyncd` user and group with the following commands issued by the `root` user:

    groupadd -g 48 rsyncd &&
    useradd -c "rsyncd Daemon" -m -d /home/rsync -g rsyncd \
        -s /bin/false -u 48 rsyncd

Install rsync by running the following commands:

    ./configure --prefix=/usr    \
                --disable-lz4    \
                --disable-xxhash \
                --without-included-zlib &&
    make

If you have Doxygen-1.9.2 installed and wish to build HTML API documentation, issue:

    doxygen

To test the results, issue: make check.

Now, as the `root` user:

    make install

If you built the documentation, install it using the following commands as the `root` user:

    install -v -m755 -d          /usr/share/doc/rsync-3.2.3/api &&
    install -v -m644 dox/html/*  /usr/share/doc/rsync-3.2.3/api

### Command Explanations

`--disable-lz4`: This switch disables LZ4 compression support. Note that it uses the superior 'zstd' algorithm when this switch is in use, and zstd is provided in LFS.

`--disable-xxhash`: This switch disables advanced xxhash checksum support. Remove this switch if you have installed xxhash.

`--without-included-zlib`: This switch enables compilation with the system-installed zlib library.

### Configuring rsync

#### Config Files

`/etc/rsyncd.conf`

#### Configuration Information

For client access to remote files, you may need to install the OpenSSH-8.7p1 package to connect to the remote server.

This is a simple download-only configuration to set up running rsync as a server. See the rsyncd.conf(5) man-page for additional options (i.e., user authentication).

    cat > /etc/rsyncd.conf << "EOF"
    # This is a basic rsync configuration file
    # It exports a single module without user authentication.

    motd file = /home/rsync/welcome.msg
    use chroot = yes

    [localhost]
        path = /home/rsync
        comment = Default rsync module
        read only = yes
        list = yes
        uid = rsyncd
        gid = rsyncd

    EOF

You can find additional configuration information and general documentation about rsync at https://rsync.samba.org/documentation.html.

#### Systemd Unit

Note that you only need to start the rsync server if you want to provide an rsync archive on your local machine. You don't need this unit to run the rsync client.

Install the `rsyncd.service` unit included in the blfs-systemd-units-20210819 package.

    make install-rsyncd

### Note

This package comes with two types of units: A service file and a socket file. The service file will start rsync daemon once at boot and it will keep running until the system shuts down. The socket file will make systemd listen on rsync port (Default 873, needs to be edited for anything else) and will start rsync daemon when something tries to connect to that port and stop the daemon when the connection is terminated. This is called socket activation and is analogous to using {,x}inetd on a SysVinit based system.

By default, the first method is used - rsync daemon is started at boot and stopped at shutdown. If the socket method is desired, you need to run as the `root` user:

    systemctl stop rsyncd &&
    systemctl disable rsyncd &&
    systemctl enable rsyncd.socket &&
    systemctl start rsyncd.socket

Note that socket method is only useful for remote backups. For local backups you'll need the service method.

### Contents

Installed Program: rsync and rsync-ssl
Installed Libraries: None
Installed Directories: Optionally, /usr/share/doc/rsync-3.2.3

#### Short Descriptions

rsync | is a replacement for rcp (and scp) that has many more features. It uses the “rsync algorithm” which provides a very fast method of syncing remote files. It does this by sending just the differences in the files across the link, without requiring that both sets of files are present at one end of the link beforehand
rsync-ssl | is a helper script used when connecting to an rsync daemon that has SSL support built in

Last updated on

## Samba-4.14.7

### Introduction to Samba

The Samba package provides file and print services to SMB/CIFS clients and Windows networking to Linux clients. Samba can also be configured as a Windows Domain Controller replacement, a file/print server acting as a member of a Windows Active Directory domain and a NetBIOS (rfc1001/1002) nameserver (which among other things provides LAN browsing support).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.samba.org/ftp/samba/stable/samba-4.14.7.tar.gz

- Download MD5 sum: f0db8302944bb861b31f4163fd302f66

- Download size: 18 MB

- Estimated disk space required: 622 MB (add 379 MB for quicktest)

- Estimated build time: 3.1 SBU (using parallelism=4; add 4.9 SBU for quicktest)

#### Samba Dependencies

##### Required

GnuTLS-3.7.2, jansson-2.13.1, libtirpc-1.3.2, lmdb-0.9.29, and rpcsvc-proto-1.4.2

##### Recommended

Fuse-3.10.4, GPGME-1.16.0, ICU-69.1, libtasn1-4.17.0, libxslt-1.1.34 (for documentation), Linux-PAM-1.5.1, Parse-Yapp-1.21, and OpenLDAP-2.5.7

##### Optional

Avahi-0.8, BIND-9.16.20, Cups-2.3.3op2, Cyrus SASL-2.1.27, GDB-10.2, git-2.33.0, GnuPG-2.2.29 (required for ADS and testsuite), libaio-0.3.112, libarchive-3.5.2, libcap-2.53 with PAM, libgcrypt-1.9.4, libnsl-1.3.0, MIT Kerberos V5-1.19.2, NSS-3.69, popt-1.18, Talloc-2.3.3 (included), Vala-0.52.5, Valgrind-3.17.0 (optionally used by the test suite), xfsprogs-5.13.0, cmocka, cryptography, ctdb (included), cwrap, dnspython, FAM, Gamin, GlusterFS, Heimdal (included), iso8601, libunwind, ldb (included), M2Crypto (required for ADS), OpenAFS, pyasn1, PyGPGME (recommended for ADS), tevent (included), and tdb (included)

##### Optional (for the Developer Test Suite)

Install in listed order: six-1.16.0, argparse, extras, py, enum34, hypothesis, pytest, coverage, pytest-cov, doctools, unittest2, testtools, fixtures, python-mimeparse, contextlib2, traceback2, linecache2, testscenarios, testresources, virtualenv, pbr, and python-subunit

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/samba4

### Installation of Samba

To support the test suite, set up a Python virtual environment for some Python modules out of the scope of BLFS:

    python3 -m venv pyvenv &&
    ./pyvenv/bin/pip3 install cryptography pyasn1 iso8601

Fix a test that always fails:

    echo "^samba4.rpc.echo.*on.*ncacn_np.*with.*object.*nt4_dc" >> selftest/knownfail

Install Samba by running the following commands:

    PYTHON=$PWD/pyvenv/bin/python3             \
    CPPFLAGS="-I/usr/include/tirpc"            \
    LDFLAGS="-ltirpc"                          \
    ./configure                                \
        --prefix=/usr                          \
        --sysconfdir=/etc                      \
        --localstatedir=/var                   \
        --with-piddir=/run/samba               \
        --with-pammodulesdir=/usr/lib/security \
        --enable-fhs                           \
        --without-ad-dc                        \
        --enable-selftest                      &&
    make

To test the results, as the `root` user, issue: PATH=$PWD/pyvenv/bin:$PATH make quicktest. The test suite will produce lines that look like failures, but these are innocuous. The last few lines of output should report "ALL OK" for a good test run. A summary of any failures can be found in `./st/summary`. With Samba-4.14.4, many tests are known to fail.

### Note

Additionally, developer test suites are available. If you've installed the optional python modules above in the Python virtual environment for building this package, you can run these tests with make test. It is not recommended for the average builder at around 290 SBU and over a gigabyte of disk space, and you should expect ~73 errors and ~30 failures from the 3000+ tests.

Fix a hard coded path to Python 3 interpreter:

    sed '1s@^.*$@#!/usr/bin/python3@' \
        -i ./bin/default/source4/scripting/bin/samba-gpupdate.inst

If upgrading from an old version of samba, as the `root` user, remove the old Python support files to prevent some issues:

    rm -rf /usr/lib/python3.9/site-packages/samba

Still as the `root` user, install the package:

    make install &&

    install -v -m644    examples/smb.conf.default /etc/samba &&

    sed -e "s;log file =.*;log file = /var/log/samba/%m.log;" \
        -e "s;path = /usr/spool/samba;path = /var/spool/samba;" \
        -i /etc/samba/smb.conf.default &&

    mkdir -pv /etc/openldap/schema                        &&

    install -v -m644    examples/LDAP/README              \
                        /etc/openldap/schema/README.LDAP  &&

    install -v -m644    examples/LDAP/samba*              \
                        /etc/openldap/schema              &&

    install -v -m755    examples/LDAP/{get*,ol*} \
                        /etc/openldap/schema

### Command Explanations

`--enable-fhs`: Assigns all other file paths in a manner compliant with the Filesystem Hierarchy Standard (FHS).

`--without-ad-dc`: Disables Active Directory Domain Controller functionality. See Setup a Samba Active Directory Domain Controller for detailed information. Remove this switch if you've installed the Python modules needed for ADS support. Note that BLFS does not provide a samba bootscript or systemd unit for an Active Directory domain controller.

`--with-selftest-prefix=SELFTEST_PREFIX`: This option specifies the test suite work directory (default=./st).

install -v -m644 examples/LDAP/* /etc/openldap/schema: These commands are used to copy sample Samba schemas to the OpenLDAP `schema` directory.

install -v -m644 ../examples/smb.conf.default /etc/samba: This copies a default `smb.conf` file into `/etc/samba`. This sample configuration will not work until you copy it to `/etc/samba/smb.conf` and make the appropriate changes for your installation. See the configuration section for minimum values which must be set.

### Configuring Samba

#### Config Files

/etc/samba/smb.conf

#### Printing to SMB Clients

If you use CUPS for print services, and you wish to print to a printer attached to an SMB client, you need to create an SMB backend device. To create the device, issue the following command as the `root` user:

    install -dvm 755 /usr/lib/cups/backend &&
    ln -v -sf /usr/bin/smbspool /usr/lib/cups/backend/smb

#### Configuration Information

Due to the complexity and the many various uses for Samba, complete configuration for all the package's capabilities is well beyond the scope of the BLFS book. This section provides instructions to configure the `/etc/samba/smb.conf` file for two common scenarios. The complete contents of `/etc/samba/smb.conf` will depend on the purpose of Samba installation.

### Note

You may find it easier to copy the configuration parameters shown below into an empty `/etc/samba/smb.conf` file instead of copying and editing the default file as mentioned in the “Command Explanations” section. How you create/edit the `/etc/samba/smb.conf` file will be left up to you. Do ensure the file is only writeable by the `root` user (mode 644).

##### Scenario 1: Minimal Standalone Client-Only Installation

Choose this variant if you only want to transfer files using smbclient, mount Windows shares and print to Windows printers, and don't want to share your files and printers to Windows machines.

A `/etc/samba/smb.conf` file with the following three parameters is sufficient:

    [global]
        workgroup = MYGROUP
        dos charset = cp850
        unix charset = ISO-8859-1

The values in this example specify that the computer belongs to a Windows workgroup named “`MYGROUP`”, uses the “`cp850`” character set on the wire when talking to MS-DOS and MS Windows 9x, and that the filenames are stored in the “`ISO-8859-1`” encoding on the disk. Adjust these values appropriately for your installation. The “unix charset” value must be the same as the output of locale charmap when executed with the `LANG` variable set to your preferred locale, otherwise the ls command may not display correct filenames of downloaded files.

There is no need to run any Samba servers in this scenario, thus you don't need to install the provided systemd units.

##### Scenario 2: Standalone File/Print Server

Choose this variant if you want to share your files and printers to Windows machines in your workgroup in addition to the capabilities described in Scenario 1.

In this case, the `/etc/samba/smb.conf.default` file may be a good template to start from. Also, you should add the “dos charset” and “unix charset” parameters to the “[global]” section as described in Scenario 1 in order to prevent filename corruption. For security reasons, you may wish to define `path = /home/alice/shared-files`, assuming your user name is `alice` and you only want to share the files in that directory, instead of your entire home. Then, replace `homes` by `shared-files` and change also the “`comment`” if used the configuration file below or the `/etc/samba/smb.conf.default` to create yours.

The following configuration file creates a separate share for each user's home directory and also makes all printers available to Windows machines:

    [global]
        workgroup = MYGROUP
        dos charset = cp850
        unix charset = ISO-8859-1

    [homes]
        comment = Home Directories
        browseable = no
        writable = yes

    [printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        printable = yes

Other parameters you may wish to customize in the “[global]” section include:

        server string =
        security =
        hosts allow =
        load printers =
        log file =
        max log size =
        socket options =
        local master =

Reference the comments in the `/etc/samba/smb.conf.default` file for information regarding these parameters.

Since the smbd and nmbd daemons are needed in this case, install the `samba` systemd unit. Be sure to run smbpasswd (with the `-a` option to add users) to enable and set passwords for all accounts that need Samba access. Using the default Samba passdb backend, any user you attempt to add will also be required to exist in the `/etc/passwd` file.

##### Advanced Requirements

More complex scenarios involving domain control or membership are possible. Such setups are advanced topics and cannot be adequately covered in BLFS. Many complete books have been written on these topics alone. Note that in some domain membership scenarios, the winbindd daemon and the corresponding systemd unit are needed.

##### Guest account

The default Samba installation uses the `nobody` user for guest access to the server. This can be overridden by setting the `guest account =` parameter in the `/etc/samba/smb.conf` file. If you utilize the `guest account =` parameter, ensure this user exists in the `/etc/passwd` file.

##### Systemd Units

To start the Samba daemons at boot, install the systemd units from the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-samba

To start the winbindd daemon at boot, install the systemd unit from the blfs-systemd-units-20210819 package by running the following command as the `root` user:

    make install-winbindd

### Note

This package comes with two types of units: A service file and a socket file. The service file will start the smbd daemon once at boot and it will keep running until the system shuts down. The socket file will make systemd listen on the smbd port (Default 445, needs to be edited for anything else) and will start the smbd daemon when something tries to connect to that port and stop the daemon when the connection is terminated. This is called socket activation and is analogous to using {,x}inetd on a SysVinit based system.

By default, the first method is used - the smbd daemon is started at boot and stopped at shutdown. If the socket method is desired, you need to run the following commands as the `root` user:

    systemctl stop smbd &&
    systemctl disable smbd &&
    systemctl enable smbd.socket &&
    systemctl start smbd.socket

Note that only the smbd daemon can be socket activated.

### Contents

Installed Programs: cifsdd, dbwrap_tool, dumpmscat, eventlogadm, findsmb,gentest, ldbadd, ldbdel, ldbedit, ldbmodify, ldbrename, ldbsearch, locktest, masktest, mdfind, mvxattr, ndrdump, net, nmbd, nmblookup, ntlm_auth, oLschema2ldif, pdbedit, profiles, regdiff, regpatch, regshell, regtree, rpcclient, samba, samba_dnsupdate, samba_downgrade_db, samba_kcc, samba-gpupdate, samba-regedit, samba_spnupdate, samba-tool, samba_upgradedns, sharesec, smbcacls, smbclient, smbcontrol, smbcquotas, smbd, smbget, smbpasswd, smbspool, smbstatus, smbtar, smbtorture, smbtree, tdbbackup, tdbdump, tdbrestore, tdbtool, testparm, wbinfo, and winbindd
Installed Libraries: libdcerpc-binding.so, libdcerpc-samr.so, libdcerpc-server-core.so, libdcerpc-server.so, libdcerpc.so, libndr-krb5pac.so, libndr-nbt.so, libndr.so, libndr-standard.so, libnetapi.so, libnss_winbind.so, libnss_wins.so, libsamba-credentials.so, libsamba-errors.so, libsamba-hostconfig.so, libsamba-passdb.so, libsamba-policy.cpython-38-x86_64-linux-gnu.so, libsamba-util.so, libsamdb.so, libsmbclient.so, libsmbconf.so, libsmbldap.so, libtevent-util.so, libwbclient.so, and winbind_krb5_locator.so; the pam_winbind.so PAM library; and assorted character set, filesystem and support modules under /usr/lib/{python3.9,samba}
Installed Directories: /etc/samba, /run/samba, /usr/include/samba-4.0, /usr/lib/python3.9/site-packages/samba, /usr/libexec/samba, /usr/{lib,share}/samba, and /var/{cache,lib,lock,log,run}/samba

#### Short Descriptions

cifsdd | is the dd command for SMB
dbwrap_tool | is used to read and manipulate TDB/CTDB databases using the dbwrap interface
eventlogadm | is used to write records to eventlogs from STDIN, add the specified source and DLL eventlog registry entries and display the active eventlog names (from `smb.conf`)
findsmb | is used to list info about machines that respond to SMB name queries on a subnet
gentest | is used to run random generic SMB operations against two SMB servers and show the differences in behavior
ldbadd | is a command-line utility for adding records to an LDB database
ldbdel | is a command-line program for deleting LDB database records
ldbedit | allows you to edit LDB databases using your preferred editor
ldbmodify | allows you to modify records in an LDB database
ldbrename | allows you to rename LDB databases
ldbsearch | searches an LDB database for records matching a specified expression
locktest | is used to find differences in locking between two SMB servers
masktest | is used to find differences in wildcard matching between Samba's implementation and that of a remote server
mdfind | runs Spotlight searches against a SMB server
mvxattr | is used to recursively rename extended attributes
ndrdump | is a DCE/RPC Packet Parser and Dumper
net | is a tool for administration of Samba and remote CIFS servers, similar to the net utility for DOS/Windows
nmbd | is the Samba NetBIOS name server
nmblookup | is used to query NetBIOS names and map them to IP addresses
ntlm_auth | is a tool to allow external access to Winbind's NTLM authentication function
oLschema2ldif | converts LDAP schema's to LDB-compatible LDIF
pdbedit | is a tool used to manage the SAM database
profiles | is a utility that reports and changes SIDs in Windows registry files. It currently only supports Windows NT
regdiff | is a Diff program for Windows registry files
regpatch | applies registry patches to registry files
regshell | is a Windows registry file browser using readline
regtree | is a text-mode registry viewer
rpcclient | is used to execute MS-RPC client side functions
samba | is a server to provide AD and SMB/CIFS services to clients
samba_dnsupdate | is used to update the DNS names using TSIG-GSS
samba_downgrade_db | downgrades the Samba AD database to be compatible with a previous version of Samba
samba_kcc | is a script used to compute your KCC (Knowledge Consistency Checker) topology
samba-gpupdate | allows you to edit Microsoft Group Policy Objects (GPOs)
samba-regedit | is a ncurses based tool to manage the Samba registry
samba_spnupdate | is a script to update the servicePrincipalName names from spn_update_list
samba-tool | is the main Samba administration tool
samba_upgradedns | upgrades the DNS records in a Samba server to a newer version
sharesec | manipulates share ACL permissions on SMB file shares
smbcacls | is used to manipulate Windows NT access control lists
smbclient | is a SMB/CIFS access utility, similar to FTP
smbcontrol | is used to control running smbd, nmbd and winbindd daemons
smbcquotas | is used to manipulate Windows NT quotas on SMB file shares
smbd | is the main Samba daemon which provides SMB/CIFS services to clients
smbget | is a simple utility with wget-like semantics, that can download files from SMB servers. You can specify the files you would like to download on the command-line
smbpasswd | changes a user's Samba password
smbspool | sends a print job to an SMB printer
smbstatus | reports current Samba connections
smbtar | is a shell script used for backing up SMB/CIFS shares directly to Linux tape drives or a file
smbtorture | is a testsuite that runs several tests against a SMB server
smbtree | is a text-based SMB network browser
tdbbackup | is a tool for backing up or validating the integrity of Samba `.tdb` files
tdbdump | is a tool used to print the contents of a Samba `.tdb` file
tdbrestore | is a tool for creating a Samba `.tdb` file out of a ntdbdump
tdbtool | is a tool which allows simple database manipulation from the command line
testparm | checks an `smb.conf` file for proper syntax
wbinfo | queries a running winbindd daemon
winbindd | resolves names from Windows NT servers
`libnss_winbind.so` | provides Name Service Switch API functions for resolving names from NT servers
`libnss_wins.so` | provides API functions for Samba's implementation of the Windows Internet Naming Service
`libnetapi.so` | provides API functions for the administration tools used for Samba and remote CIFS servers
`libsmbclient.so` | provides API functions for the Samba SMB client tools
`libwbclient.so` | provides API functions for Windows domain client services

Last updated on

## Wget-1.21.1

### Introduction to Wget

The Wget package contains a utility useful for non-interactive downloading of files from the Web.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/wget/wget-1.21.1.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/wget/wget-1.21.1.tar.gz

- Download MD5 sum: b939ee54eabc6b9b0a8d5c03ace879c9

- Download size: 4.6 MB

- Estimated disk space required: 76 MB (with tests)

- Estimated build time: 0.5 SBU (with tests)

#### Wget Dependencies

##### Recommended

make-ca-1.7 (runtime)

##### Optional

GnuTLS-3.7.2, HTTP-Daemon-6.12 (for the test suite), IO-Socket-SSL-2.072 (for the test suite), libidn2-2.3.2, libpsl-0.21.1, PCRE-8.45 or pcre2-10.37, and Valgrind-3.17.0 (for the test suite)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/wget

### Installation of Wget

Install Wget by running the following commands:

    ./configure --prefix=/usr      \
                --sysconfdir=/etc  \
                --with-ssl=openssl &&
    make

To test the results, issue: make check.

HTTPS tests are known to fail if Perl module IO::Socket::INET6 is installed.

Now, as the `root` user:

    make install

### Command Explanations

`--sysconfdir=/etc`: This relocates the configuration file from `/usr/etc` to `/etc`.

`--with-ssl=openssl`: This allows the program to use openssl instead of GnuTLS-3.7.2.

`--enable-valgrind-tests`: This allows the tests to be run under valgrind.

### Configuring Wget

#### Config Files

`/etc/wgetrc` and `~/.wgetrc`

### Contents

Installed Program: wget
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

wget | retrieves files from the Web using the HTTP, HTTPS and FTP protocols. It is designed to be non-interactive, for background or unattended operations

Last updated on

## Wireless Tools-29

### Introduction to Wireless Tools

The Wireless Extension (WE) is a generic API in the Linux kernel allowing a driver to expose configuration and statistics specific to common Wireless LANs to user space. A single set of tools can support all the variations of Wireless LANs, regardless of their type as long as the driver supports Wireless Extensions. WE parameters may also be changed on the fly without restarting the driver (or Linux).

The Wireless Tools (WT) package is a set of tools allowing manipulation of the Wireless Extensions. They use a textual interface to support the full Wireless Extension.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz

- Download MD5 sum: e06c222e186f7cc013fd272d023710cb

- Download size: 288 KB

- Estimated disk space required: 2.0 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/wireless_tools-29-fix_iwlist_scanning-1.patch

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/WirelessTools

### Kernel Configuration

To use Wireless Tools, the kernel must have the appropriate drivers and other support available. The appropriate bus must also be available. For many laptops, the PCMCIA bus (CONFIG_PCCARD) needs to be built. In some cases, this bus support will also need to be built for embedded wireless cards. The appropriate bridge support also needs to be built. For many modern laptops, the CardBus host bridge (CONFIG_YENTA) will be needed.

In addition to the bus, the actual driver for the specific wireless card must also be available. There are many wireless cards and they don't all work with Linux. The first place to look for card support is the kernel. The drivers are located in Device Drivers → Network Device Support → Wireless LAN (non-hamradio). There are also external drivers available for some very common cards. For more information, look at the user notes.

After the correct drivers are loaded, the interface will appear in `/proc/net/wireless`.

### Installation of Wireless Tools

First, apply a patch that fixes a problem when numerous networks are available:

    patch -Np1 -i ../wireless_tools-29-fix_iwlist_scanning-1.patch

To install Wireless Tools, use the following commands:

    make

This package does not come with a test suite.

Now, as the `root` user:

    make PREFIX=/usr INSTALL_MAN=/usr/share/man install

### Command Explanations

INSTALL_MAN=/usr/share/man: Install manual pages in `/usr/share/man` instead of `/usr/man`.

### Contents

Installed Programs: ifrename, iwconfig, iwevent, iwgetid, iwlist, iwpriv, and iwspy
Installed Library: libiw.so
Installed Directories: None

#### Short Descriptions

ifrename | renames network interfaces based on various static criteria
iwconfig | configures a wireless network interface
iwevent | displays wireless events generated by drivers and setting changes
iwgetid | reports ESSID, NWID or AP/Cell Address of wireless networks
iwlist | gets detailed wireless information from a wireless interface
iwpriv | configures optional (private) parameters of a wireless network interface
iwspy | gets wireless statistics from specific node
`libiw.so` | contains functions required by the wireless programs and provides an API for other programs

Last updated on

## wpa_supplicant-2.9

### Introduction to WPA Supplicant

WPA Supplicant is a Wi-Fi Protected Access (WPA) client and IEEE 802.1X supplicant. It implements WPA key negotiation with a WPA Authenticator and Extensible Authentication Protocol (EAP) authentication with an Authentication Server. In addition, it controls the roaming and IEEE 802.11 authentication/association of the wireless LAN driver. This is useful for connecting to a password protected wireless access point.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://w1.fi/releases/wpa_supplicant-2.9.tar.gz

- Download MD5 sum: 2d2958c782576dc9901092fbfecb4190

- Download size: 3.1 MB

- Estimated disk space required: 35 MB

- Estimated build time: 0.5 SBU (with optional gui)

#### WPA Supplicant Dependencies

##### Recommended

desktop-file-utils-0.26 (for running update-desktop-database) and libnl-3.5.0

##### Optional

dbus-1.12.20, libxml2-2.9.12, and Qt-5.15.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/wpa_supplicant

### Kernel Configuration

Enable the following options in the kernel configuration as well as specific device drivers for your hardware and recompile the kernel if necessary:

    [*] Networking support  --->                              [CONFIG_NET]
      [*] Wireless  --->                                      [CONFIG_WIRELESS]
        <*/M> cfg80211 - wireless configuration API           [CONFIG_CFG80211]
        [*]     cfg80211 wireless extensions compatibility    [CONFIG_CFG80211_WEXT]
        <*/M> Generic IEEE 802.11 Networking Stack (mac80211) [CONFIG_MAC80211]
    Device Drivers  --->
      [*] Network device support  --->                        [CONFIG_NETDEVICES]
        [*] Wireless LAN  --->                                [CONFIG_WLAN]

Open the submenu and select the options that support your hardware: lspci from pciutils-3.7.0 can be used to view your hardware configuration.

### Installation of WPA Supplicant

First you will need to create an initial configuration file for the build process. You can read `wpa_supplicant/README` and `wpa_supplicant/defconfig` for the explanation of the following options as well as other options that can be used. Create a build configuration file that should work for standard WiFi setups by running the following command:

    cat > wpa_supplicant/.config << "EOF"
    CONFIG_BACKEND=file
    CONFIG_CTRL_IFACE=y
    CONFIG_DEBUG_FILE=y
    CONFIG_DEBUG_SYSLOG=y
    CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON
    CONFIG_DRIVER_NL80211=y
    CONFIG_DRIVER_WEXT=y
    CONFIG_DRIVER_WIRED=y
    CONFIG_EAP_GTC=y
    CONFIG_EAP_LEAP=y
    CONFIG_EAP_MD5=y
    CONFIG_EAP_MSCHAPV2=y
    CONFIG_EAP_OTP=y
    CONFIG_EAP_PEAP=y
    CONFIG_EAP_TLS=y
    CONFIG_EAP_TTLS=y
    CONFIG_IEEE8021X_EAPOL=y
    CONFIG_IPV6=y
    CONFIG_LIBNL32=y
    CONFIG_PEERKEY=y
    CONFIG_PKCS12=y
    CONFIG_READLINE=y
    CONFIG_SMARTCARD=y
    CONFIG_WPS=y
    CFLAGS += -I/usr/include/libnl3
    EOF

If you wish to use WPA Supplicant with NetworkManager-1.32.10, make sure that you have installed dbus-1.12.20 and libxml2-2.9.12, then add the following options to the WPA Supplicant build configuration file by running the following command:

    cat >> wpa_supplicant/.config << "EOF"
    CONFIG_CTRL_IFACE_DBUS=y
    CONFIG_CTRL_IFACE_DBUS_NEW=y
    CONFIG_CTRL_IFACE_DBUS_INTRO=y
    EOF

Install WPA Supplicant by running the following commands:

    cd wpa_supplicant &&
    make BINDIR=/usr/sbin LIBDIR=/usr/lib

If you have installed Qt-5.15.2 and wish to build the WPA Supplicant GUI program, run the following commands:

### Note

The following directory name is labelled qt4, but is compatible with Qt-5.15.2.

    pushd wpa_gui-qt4 &&
    qmake wpa_gui.pro &&
    make &&
    popd

This package does not come with a test suite.

Now, as the `root` user:

    install -v -m755 wpa_{cli,passphrase,supplicant} /usr/sbin/ &&
    install -v -m644 doc/docbook/wpa_supplicant.conf.5 /usr/share/man/man5/ &&
    install -v -m644 doc/docbook/wpa_{cli,passphrase,supplicant}.8 /usr/share/man/man8/

Install the systemd support files by running the following command as the `root` user:

    install -v -m644 systemd/*.service /lib/systemd/system/

If you have built WPA Supplicant with D-Bus support, you will need to install D-Bus configuration files. Install them by running the following commands as the `root` user:

    install -v -m644 dbus/fi.w1.wpa_supplicant1.service \
                     /usr/share/dbus-1/system-services/ &&
    install -v -d -m755 /etc/dbus-1/system.d &&
    install -v -m644 dbus/dbus-wpa_supplicant.conf \
                     /etc/dbus-1/system.d/wpa_supplicant.conf

Additionally, enable the `wpa_supplicant.service` so that systemd can properly activate the D-Bus service. Note that the per-connection service and the D-Bus service cannot be enabled at the same time. Run the following command as the `root` user:

    systemctl enable wpa_supplicant

If you have built the WPA Supplicant GUI program, install it by running the following commands as the `root` user:

    install -v -m755 wpa_gui-qt4/wpa_gui /usr/bin/ &&
    install -v -m644 doc/docbook/wpa_gui.8 /usr/share/man/man8/ &&
    install -v -m644 wpa_gui-qt4/wpa_gui.desktop /usr/share/applications/ &&
    install -v -m644 wpa_gui-qt4/icons/wpa_gui.svg /usr/share/pixmaps/

### Note

You will need to restart the system D-Bus daemon before you can use the WPA Supplicant D-Bus interface.

### Note

This package installs desktop files into the `/usr/share/applications` hierarchy and you can improve system performance and memory usage by updating `/usr/share/applications/mimeinfo.cache`. To perform the update you must have desktop-file-utils-0.26 installed and issue the following command as the `root` user:

    update-desktop-database -q

### Configuring wpa_supplicant

#### Config File

`/etc/wpa_supplicant/wpa_supplicant-*.conf`

#### Configuration Information

To connect to an access point that uses a password, you need to put the pre-shared key in `/etc/wpa_supplicant/wpa_supplicant-`wifi0`.conf`. SSID is the string that the access point/router transmits to identify itself. Run the following command as the `root` user:

    install -v -dm755 /etc/wpa_supplicant &&
    wpa_passphrase SSID SECRET_PASSWORD > /etc/wpa_supplicant/wpa_supplicant-wifi0.conf

`/etc/wpa_supplicant/wpa_supplicant-`wifi0`.conf` can hold the details of several access points. When wpa_supplicant is started, it will scan for the SSIDs it can see and choose the appropriate password to connect.

If you want to connect to an access point that isn't password protected, put an entry like this in `/etc/wpa_supplicant/wpa_supplicant-`wifi0`.conf`. Replace "Some-SSID" with the SSID of the access point/router.

    network={
      ssid="Some-SSID"
      key_mgmt=NONE
    }

Connecting to a new access point that is not in the configuration file can be accomplished manually via the command line or GUI, but it must be done via a privileged user. To do that, add the following to the configuration file:

                    ctrl_interface=DIR=/run/wpa_supplicant GROUP=<privileged group>
    update_config=1

Replace the <privileged group> above with a system group where members have the ability to connect to a wireless access point.

There are many options that you could use to tweak how you connect to each access point. They are described in some detail in the `wpa_supplicant/wpa_supplicant.conf` file in the source tree.

#### Connecting to an Access Point

There are 3 types of systemd units that were installed:

- wpa_supplicant@.service

- wpa_supplicant-nl80211@.service

- wpa_supplicant-wired@.service

The only difference between 3 of them is what driver is used for connecting (-D option). The first one uses the default driver, the second one uses the nl80211 driver and the third one uses the wired driver.

You can connect to the wireless access point by running the following command as the `root` user:

    systemctl start wpa_supplicant@wlan0

To connect to the wireless access point at boot, simply enable the appropriate wpa_supplicant service by running the following command as the `root` user:

    systemctl enable wpa_supplicant@wlan0

Depending on your setup, you can replace the `wpa_supplicant@.service` with any other listed above.

To assign a network address to your wireless interface, consult the General Network Configuration page in LFS.

### Contents

Installed Programs: wpa_gui, wpa_supplicant, wpa_passphrase and wpa_cli
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

wpa_gui | is a graphical frontend program for interacting with wpa_supplicant
wpa_supplicant | is a daemon that can connect to a password protected wireless access point
wpa_passphrase | takes an SSID and a password and generates a simple configuration that wpa_supplicant can understand
wpa_cli | is a command line interface used to control a running wpa_supplicant daemon

Last updated on

## Chapter 16. Networking Utilities

This chapter contains some tools that come in handy when the network needs investigating.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/basicnetworkingutilities

## Avahi-0.8

### Introduction to Avahi

The Avahi package is a system which facilitates service discovery on a local network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/lathiat/avahi/releases/download/v0.8/avahi-0.8.tar.gz

- Download MD5 sum: 229c6aa30674fc43c202b22c5f8c2be7

- Download size: 1.5 MB

- Estimated disk space required: 32 MB

- Estimated build time: 0.3 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/avahi-0.8-ipv6_race_condition_fix-1.patch

#### Avahi Dependencies

##### Required

GLib-2.68.4

##### Recommended

gobject-introspection-1.68.0, GTK+-2.24.33, GTK+-3.24.30, libdaemon-0.14, libglade-2.6.4, and Qt-5.15.2

##### Optional

D-Bus Python-1.2.18, libevent-2.1.12, PyGTK-2.24.0, Doxygen-1.9.2 and xmltoman (for generating documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/avahi

### Installation of Avahi

There should be a dedicated user and group to take control of the avahi-daemon daemon after it is started. Issue the following commands as the `root` user:

    groupadd -fg 84 avahi &&
    useradd -c "Avahi Daemon Owner" -d /var/run/avahi-daemon -u 84 \
            -g avahi -s /bin/false avahi

There should also be a dedicated priviliged access group for Avahi clients. Issue the following command as the `root` user:

    groupadd -fg 86 netdev

Fix a regression that results in a race condition when IPv6 is in use and multiple network adapters are present on the system:

    patch -Np1 -i ../avahi-0.8-ipv6_race_condition_fix-1.patch

Fix a security vulnerabilty in avahi-daemon:

    sed -i '426a if (events & AVAHI_WATCH_HUP) { \
    client_free(c); \
    return; \
    }' avahi-daemon/simple-protocol.c

Install Avahi by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --disable-static     \
                --disable-libevent   \
                --disable-mono       \
                --disable-monodoc    \
                --disable-python     \
                --disable-qt3        \
                --disable-qt4        \
                --enable-core-docs   \
                --with-distro=none   &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-libevent`: This parameter disables the use of libevent-2.1.12. Remove if you have it installed.

`--disable-mono`: This parameter disables the Mono bindings.

`--disable-monodoc`: This parameter disables documentation for the Mono bindings.

`--disable-python`: This parameter disables the scripts that depend on Python. It also allows a regular install to complete successfully.

`--disable-qt3`: This parameter disables the attempt to build the obsolete Qt3 portions of the package.

`--disable-qt4`: This parameter disables the attempt to build the obsolete Qt4Core portions of the package.

`--enable-core-docs`: This parameter enables the building of documentation.

`--with-distro=none`: There is an obsolete boot script in the distribution for LFS. This option disables it.

`--disable-dbus`: This parameter disables the use of D-Bus.

`--disable-gtk`: This parameter disables the use of GTK+2.

`--disable-gtk3`: This parameter disables the use of GTK+3.

`--disable-qt5`: This parameter disables the use of Qt5, and allows building without it.

`--disable-libdaemon`: This parameter disables the use of libdaemon. If you use this option, avahi-daemon won't be built.

`--enable-tests`: This option enables the building of tests and examples.

`--enable-compat-howl`: This option enables the compatibility layer for HOWL.

`--enable-compat-libdns_sd`: This option enables the compatibility layer for libdns_sd.

### Configuring avahi

#### Boot Script

To start the avahi-daemon daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable avahi-daemon

To start the avahi-dnsconfd daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable avahi-dnsconfd

### Contents

Installed Programs: avahi-autoipd, avahi-browse, avahi-browse-domains, avahi-daemon, avahi-discover-standalone, avahi-dnsconfd, avahi-publish, avahi-publish-address, avahi-publish-service, avahi-resolve, avahi-resolve-address, avahi-resolve-host-name, avahi-set-host-name, bshell, bssh, and bvnc
Installed Libraries: libavahi-client.so, libavahi-common.so, libavahi-core.so, libavahi-glib.so, libavahi-gobject.so, libavahi-libevent.so libavahi-ui-gtk3.so, libavahi-qt5, libavahi-ui.so, libdns_sd.so, and libhowl.so,
Installed Directories: /etc/avahi/services, /usr/include/{avahi-client,avahi-common, avahi-compat-howl, avahi-compat-libdns_sd, avahi-core, avahi-glib, avahi-gobject, avahi-libevent, avahi-qt5, avahi-ui}, /usr/lib/avahi, /usr/share/avahi

#### Short Descriptions

avahi-autoipd | is a IPv4LL network address configuration daemon
avahi-browse | browses for mDNS/DNS-SD services using the Avahi daemon
avahi-browse-domains | browses for mDNS/DNS-SD services using the Avahi daemon
avahi-daemon | is the Avahi mDNS/DNS-SD daemon
avahi-discover-standalone | browses for mDNS/DNS-SD services using the Avahi daemon
avahi-dnsconfd | is a Unicast DNS server from mDNS/DNS-SD configuration daemon
avahi-publish | registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon
avahi-publish-address | registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon
avahi-publish-service | registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon
avahi-resolve | resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon
avahi-resolve-address | resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon
avahi-resolve-host-name | resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon
avahi-set-host-name | changes the mDNS host name
bssh | browses for SSH servers on the local network
bvnc | browses for VNC servers on the local network

Last updated on

## BIND Utilities-9.16.20

### Introduction to BIND Utilities

BIND Utilities is not a separate package, it is a collection of the client side programs that are included with BIND-9.16.20. The BIND package includes the client side programs nslookup, dig and host. If you install BIND server, these programs will be installed automatically. This section is for those users who don't need the complete BIND server, but need these client side applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.isc.org/isc/bind9/9.16.20/bind-9.16.20.tar.xz

- Download MD5 sum: 8025b8f8463b3b9d9c902bab27f185a2

- Download size: 4.8 MB

- Estimated disk space required: 136 MB

- Estimated build time: 0.6 SBU

#### BIND Utilities Dependencies

##### Required

libuv-1.42.0

##### Recommended

JSON-C-0.15

##### Optional

libcap-2.53 with PAM, libxml2-2.9.12, and Sphinx

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bind-utils

### Installation of BIND Utilities

Install BIND Utilities by running the following commands:

    ./configure --prefix=/usr --without-python &&
    make -C lib/dns    &&
    make -C lib/isc    &&
    make -C lib/bind9  &&
    make -C lib/isccfg &&
    make -C lib/irs    &&
    make -C bin/dig    &&
    make -C doc

This portion of the package does not come with a test suite.

Now, as the `root` user:

    make -C bin/dig install &&
    cp -v doc/man/{dig.1,host.1,nslookup.1} /usr/share/man/man1

### Command Explanations

`--without-python`: This option eliminates the need for an unused python module.

make -C lib/...: These commands build the libraries that are needed for the client programs.

make -C bin/dig: This command builds the client programs.

make -C doc: This command builds the manual pages.

cp -v ... /usr/share/man/man1: This command installs the manual pages.

### Contents

Installed Programs: dig, host, and nslookup
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

See the program descriptions in the BIND-9.16.20 section.

Last updated on

## NetworkManager-1.32.10

### Introduction to NetworkManager

NetworkManager is a set of co-operative tools that make networking simple and straightforward. Whether you use WiFi, wired, 3G, or Bluetooth, NetworkManager allows you to quickly move from one network to another: Once a network has been configured and joined once, it can be detected and re-joined automatically the next time it's available.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

Make sure that you disable the systemd-networkd service or configure it not to manage the interfaces you want to manage with NetworkManager.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/NetworkManager/1.32/NetworkManager-1.32.10.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/NetworkManager/1.32/NetworkManager-1.32.10.tar.xz

- Download MD5 sum: 009372a92b916412d3fecb1d3b216346

- Download size: 5.1 MB

- Estimated disk space required: 285 MB (with tests)

- Estimated build time: 0.8 SBU (with tests, using parallelism=4)

#### NetworkManager Dependencies

##### Required

jansson-2.13.1 and libndp-1.8

##### Recommended

cURL-7.78.0, DHCP-4.4.2-P1 (client only), gobject-introspection-1.68.0, iptables-1.8.7, newt-0.52.21 (for nmtui), NSS-3.69, Polkit-0.119, PyGObject-3.40.1, Systemd-249, UPower-0_99_13, Vala-0.52.5, and wpa_supplicant-2.9 (built with D-Bus support),

##### Optional

BlueZ-5.61, D-Bus Python-1.2.18 (for the test suite), GnuTLS-3.7.2 (used if NSS-3.69 is not found), GTK-Doc-1.33.2, libpsl-0.21.1, Qt-5.15.2 (for examples), ModemManager-1.16.10, Valgrind-3.17.0, dnsmasq, firewalld, libaudit, libteam, mobile-broadband-provider-info, PPP, and RP-PPPoE

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/NetworkManager

### Kernel Configuration

If you wish to run the tests, enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers --->
      [*] Network device support         [CONFIG_NETDEVICES] --->
        [*] Bonding driver support       [CONFIG_BONDING]
        [*] Dummy net driver support     [CONFIG_DUMMY]
        [*] Ethernet team driver support [CONFIG_NET_TEAM]

### Installation of NetworkManager

If Qt-5.15.2 is installed and the Qt based examples are desired, fix two meson.build files:

    sed -e 's/-qt4/-qt5/'              \
        -e 's/moc_location/host_bins/' \
        -i examples/C/qt/meson.build   &&

    sed -e 's/Qt/&5/'                  \
        -i meson.build

Fix the python scripts so that they use Python 3:

    grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'

Install NetworkManager by running the following commands:

    mkdir build &&
    cd    build    &&

    CXXFLAGS+="-O2 -fPIC"            \
    meson --prefix=/usr              \
          --buildtype=release        \
          -Dlibaudit=no              \
          -Dlibpsl=false             \
          -Dnmtui=true               \
          -Dovs=false                \
          -Dppp=false                \
          -Dselinux=false            \
          -Dqt=false                 \
          -Dsession_tracking=systemd \
          -Dmodem_manager=false      \
          .. &&
    ninja

An already active graphical session with a bus address is necessary to run the tests. To test the results, as the root user, issue: ninja test. Five tests, `platform/test-tc-linux`, `test-l3cfg`, `devices/test-acd`, `platform/test-route-linux`, and `platform/test-link-linux`, are known to fail.

Now, as the `root` user:

    ninja install &&
    mv -v /usr/share/doc/NetworkManager{,-1.32.10}

### Command Explanations

`CXXFLAGS="-O2 -fPIC"`: These compiler options are necessary to build the Qt5 based examples.

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddocs=true`: Use this switch to enable building man pages and documentation if GTK-Doc-1.33.2 is installed.

`-Dnmtui=true`: This parameter enables building nmtui.

`-Dlibpsl=false` and `-Dovs=false`: These switches disable building with the respective libraries. Remove if you have the needed libraries installed.

`-Dmodem_manager=false`: This switch is requried if ModemManager is not installed. Omit if you have built ModemManager and mobile-broadband-provider-info.

`-Dsession_tracking=systemd`: This switch is used to set systemd-logind as the default program for session tracking.

`-Dsystemdsystemunitdir=/lib/systemd/system`: This switch is used to set the correct installation directory for systemd units.

`-Dppp=false`: This parameter disables PPP support in NetworkManager.

`-Dlibaudit=no` and `-Dselinux=false`: libaudit and SELinux are not used in BLFS.

`-Dqt=false`: disables the QT examples. Omit if you have QT available and wish to install the examples.

### Configuring NetworkManager

#### Config Files

`/etc/NetworkManager/NetworkManager.conf`

#### Configuration Information

For NetworkManager to work, at least a minimal configuration file must be present. Such a file is not installed with make install. Issue the following command as the `root` user to create a minimal `NetworkManager.conf` file:

    cat >> /etc/NetworkManager/NetworkManager.conf << "EOF"
    [main]
    plugins=keyfile
    EOF

This file should not be modified directly by users of the system. Instead, system specific changes should be made using configuration files in the `/etc/NetworkManager/conf.d` directory.

To allow polkit to manage authorizations, add the following configuration file:

    cat > /etc/NetworkManager/conf.d/polkit.conf << "EOF"
    [main]
    auth-polkit=true
    EOF

To use something other than the built-in dhcp client (recommended if using only nmcli), use the following configuration (valid values include either dhclient or internal):

    cat > /etc/NetworkManager/conf.d/dhcp.conf << "EOF"
    [main]
    dhcp=dhclient
    EOF

To prevent NetworkManager from updating the `/etc/resolv.conf` file, add the following configuration file:

    cat > /etc/NetworkManager/conf.d/no-dns-update.conf << "EOF"
    [main]
    dns=none
    EOF

For additional configuation options, see man 5 NetworkManager.conf.

To allow regular users to configure network connections, you should add them to the `netdev` group, and create a polkit rule that grants access. Run the following commands as the `root` user:

    groupadd -fg 86 netdev &&
    /usr/sbin/usermod -a -G netdev <username>

    cat > /usr/share/polkit-1/rules.d/org.freedesktop.NetworkManager.rules << "EOF"
    polkit.addRule(function(action, subject) {
        if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("netdev")) {
            return polkit.Result.YES;
        }
    });
    EOF

#### Systemd Unit

To start the NetworkManager daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

### Note

If using Network Manager to manage an interface, any previous configuration for that interface should be removed, and the interface brought down prior to starting Network Manager.

    systemctl enable NetworkManager

Starting in version 1.11.2 of NetworkManager, a systemd unit named `NetworkManager-wait-online.service` is enabled, which is used to prevent services that require network connectivity from starting until NetworkManager establishes a connection. To disable this behavior, run the following command as the `root` user:

    systemctl disable NetworkManager-wait-online

### Contents

Installed Programs: NetworkManager, nmcli, nm-online, nmtui, and, symlinked to nmtui: nmtui-connect, nmtui-edit, and nmtui-hostname
Installed Libraries: libnm.so and several modules under /usr/lib/NetworkManager
Installed Directories: /etc/NetworkManager, /usr/include/libnm, /usr/lib/NetworkManager, /usr/share/doc/NetworkManager-1.32.10, /usr/share/gtk-doc/html/{libnm,NetworkManager} (if the documentation is built), and /var/lib/NetworkManager

#### Short Descriptions

nmcli | is a command-line tool for controlling NetworkManager and getting its status
nm-online | is an utility to determine whether you are online
nmtui | is an interactive ncurses-based user interface for nmcli
nmtui-connect | is an interactive ncurses-based user interface to activate/deactivate connections
nmtui-edit | is an interactive ncurses-based user interface to edit connections
nmtui-hostname | is an interactive ncurses-based user interface to edit the hostname
NetworkManager | is the network management daemon
`libnm.so` | contains functions used by NetworkManager

Last updated on

## network-manager-applet-1.24.0

### Introduction to NetworkManager Applet

The NetworkManager Applet provides a tool and a panel applet used to configure wired and wireless network connections through GUI. It's designed for use with any desktop environment that uses GTK+, such as Xfce and LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/network-manager-applet/1.24/network-manager-applet-1.24.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/network-manager-applet/1.24/network-manager-applet-1.24.0.tar.xz

- Download MD5 sum: 55d4f8cf34b9192ba919ee7423e274d9

- Download size: 1.8 MB

- Estimated disk space required: 47 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### NetworkManager Applet Dependencies

##### Required

GTK+-3.24.30, libnma-1.8.32, libnotify-0.7.9, and libsecret-0.20.4

##### Recommended

gobject-introspection-1.68.0 and ModemManager-1.16.10

##### Required (Runtime)

Since this package uses Polkit-0.119 for authorization, one Polkit Authentication Agent should be running when the functionality of this package is used.

##### Optional

gnome-bluetooth-3.34.5 and libindicator

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/network-manager-applet

### Installation of NetworkManager Applet

Install NetworkManager Applet by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dappindicator=no   \
          -Dselinux=false     &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dappindicator=no`: This switch disables AppIndicator support in network-manager-applet because it requires libindicator, which is not in BLFS. The build will fail without this option.

`-Dselinux=false`: This switch forcibly disables SELinux support since it is not currently in BLFS and the build will fail without it.

`-Dwwan=false`: This switch disables WWAN support. Use this if you do not have ModemManager-1.16.10 installed.

### Contents

Installed Programs: nm-applet and nm-connection-editor
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

nm-connection-editor | allows users to view and edit network connection settings

Last updated on

## Nmap-7.92

### Introduction to Nmap

Nmap is a utility for network exploration and security auditing. It supports ping scanning, port scanning and TCP/IP fingerprinting.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://nmap.org/dist/nmap-7.92.tar.bz2

- Download MD5 sum: 849f7298a786ce4cd5728db989cff763

- Download size: 11 MB

- Estimated disk space required: 148 MB (add 24 MB for tests)

- Estimated build time: 0.3 SBU (Using parallelism=4; add 0.2 SBU for tests)

#### Nmap Dependencies

##### Recommended

### Note

These packages are recommended because if they're not installed, the build process will compile and link against its own (often older) version.

libpcap-1.10.1, Lua-5.4.3, PCRE-8.45, and liblinear-243

##### Optional

PyGTK-2.24.0 (required for zenmap), Python-2.7.18 (required for ndiff), and libssh2-1.9.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nmap

### Installation of Nmap

Install Nmap by running the following commands:

    ./configure --prefix=/usr &&
    make

If you wish to run the test suite, run the following command:

    sed -i 's/lib./lib/' zenmap/test/run_tests.py

To test the results, issue: make check as the `root` user. Tests need a graphical session.

Now, as the `root` user:

    make install

### Contents

Installed Programs: ncat, ndiff, nmap, nping, uninstall_ndiff, uninstall_zenmap, zenmap, and 2 symlinks to zenmap: nmapfe and xnmap
Installed Libraries: None
Installed Directories: /usr/lib/python2.7/site-packages/{radialnet,zenmapCore,zenmapGUI}, and /usr/share/{ncat,nmap,zenmap}

#### Short Descriptions

ncat | is a utility for reading and writing data across networks from the command line
ndiff | is a tool to aid in the comparison of Nmap scans
nmap | is a utility for network exploration and security auditing. It supports ping scanning, port scanning and TCP/IP fingerprinting
nping | is an open-source tool for network packet generation, response analysis and response time measurement
uninstall_ndiff | is a Python script to uninstall ndiff
uninstall_zenmap | is a Python script to uninstall zenmap
zenmap | is a Python based graphical nmap frontend viewer

Last updated on

## Traceroute-2.1.0

### Introduction to Traceroute

The Traceroute package contains a program which is used to display the network route that packets take to reach a specified host. This is a standard network troubleshooting tool. If you find yourself unable to connect to another system, traceroute can help pinpoint the problem.

### Note

This package overwrites the version of traceroute that was installed in the inetutils package in LFS. This version is more powerful and allows many more options than the standard version.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/traceroute/traceroute-2.1.0.tar.gz

- Download MD5 sum: 84d329d67abc3fb83fc8cb12aeaddaba

- Download size: 72 KB

- Estimated disk space required: 588 KB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/traceroute

### Installation of Traceroute

Install Traceroute by running the following commands:

    make

This package does not come with a test suite.

Now, as the `root` user:

    make prefix=/usr install                                 &&
    ln -sv -f traceroute /usr/bin/traceroute6                &&
    ln -sv -f traceroute.8 /usr/share/man/man8/traceroute6.8 &&
    rm -fv /usr/share/man/man1/traceroute.1

The traceroute.1 file that was installed in LFS by inetutils is no longer relevant. This package overwrites that version of traceroute and installs the man page in man chapter 8.

### Contents

Installed Program: traceroute and traceroute6 (symlink)
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

traceroute | does basically what it says: it traces the route your packets take from the host you are working on to another host on a network, showing all the intermediate hops (gateways) along the way
traceroute6 | is equivalent to traceroute -6

Last updated on

## Whois-5.4.3

### Introduction to Whois

Whois is a client-side application which queries the whois directory service for information pertaining to a particular domain name. This package will install two programs by default: whois and mkpasswd. The mkpasswd command is also installed by the expect package in LFS.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/rfc1036/whois/archive/v5.4.3/whois-5.4.3.tar.gz

- Download MD5 sum: 381dce8db7c6e38ef013b5d6527f494c

- Download size: 100 KB

- Estimated disk space required: 1.2 MB

- Estimated build time: less than 0.1 SBU

#### Whois Dependencies

##### Optional

libidn-1.38 or libidn2-2.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/whois

### Installation of Whois

Build the application with:

    make

You can install the whois program, the mkpasswd program, and the locale files independently. Control your choice of what is installed with the following commands issued as the `root` user:

### Note

Installing this version of mkpasswd will overwrite the same command installed in LFS.

    make prefix=/usr install-whois
    make prefix=/usr install-mkpasswd
    make prefix=/usr install-pos

### Contents

Installed Programs: whois and mkpasswd
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

whois | is a client-side application which queries the whois directory service for information pertaining to a particular domain name
mkpasswd | generates a new password, and optionally applies it to a user

Last updated on

## Wireshark-3.4.8

### Introduction to Wireshark

The Wireshark package contains a network protocol analyzer, also known as a “sniffer”. This is useful for analyzing data captured “off the wire” from a live network connection, or data read from a capture file.

Wireshark provides both a graphical and a TTY-mode front-end for examining captured network packets from over 500 protocols, as well as the capability to read capture files from many other popular network analyzers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.wireshark.org/download/src/all-versions/wireshark-3.4.8.tar.xz

- Download MD5 sum: 13aea3ee0edbc8f875971eccf2d11b20

- Download size: 31 MB

- Estimated disk space required: 607 MB (with all optional dependencies available in the BLFS book)

- Estimated build time: 2.2 SBU (with parallelism=4 and all optional dependencies available in the BLFS book)

#### Additional Downloads

- Additional Documentation: https://www.wireshark.org/download/docs/ (contains links to several different docs in a variety of formats)

#### Wireshark dependencies

##### Required

CMake-3.21.2, GLib-2.68.4, libgcrypt-1.9.4, and Qt-5.15.2

##### Recommended

libpcap-1.10.1 (required to capture data)

##### Optional

asciidoctor-2.0.16, Brotli-1.0.9, c-ares-1.17.2, Doxygen-1.9.2, git-2.33.0, GnuTLS-3.7.2, libnl-3.5.0, libxslt-1.1.34, libxml2-2.9.12, Lua-5.2.4, MIT Kerberos V5-1.19.2, nghttp2-1.44.0, SBC-1.5, Speex-1.2.0, BCG729, libilbc, libsmi, lz4, libssh, MaxMindDB, Minizip, Snappy, and Spandsp

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/wireshark

### Kernel Configuration

The kernel must have the Packet protocol enabled for Wireshark to capture live packets from the network:

    [*] Networking support --->          [CONFIG_NET]
          Networking options --->
            <*/M> Packet socket          [CONFIG_PACKET]

If built as a module, the name is `af_packet.ko`.

### Installation of Wireshark

Wireshark is a very large and complex application. These instructions provide additional security measures to ensure that only trusted users are allowed to view network traffic. First, set up a system group for wireshark. As the `root` user:

    groupadd -g 62 wireshark

Continue to install Wireshark by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/wireshark-3.4.8 \
          -G Ninja \
          .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install &&

    install -v -m755 -d /usr/share/doc/wireshark-3.4.8 &&
    install -v -m644    ../README.linux ../doc/README.* ../doc/{*.pod,randpkt.txt} \
                        /usr/share/doc/wireshark-3.4.8 &&

    pushd /usr/share/doc/wireshark-3.4.8 &&
       for FILENAME in ../../wireshark/*.html; do
          ln -s -v -f $FILENAME .
       done &&
    popd
    unset FILENAME

If you downloaded any of the documentation files from the page listed in the 'Additional Downloads', install them by issuing the following commands as the `root` user:

    install -v -m644 <Downloaded_Files> \
                     /usr/share/doc/wireshark-3.4.8

Now, set ownership and permissions of sensitive applications to only allow authorized users. As the `root` user:

    chown -v root:wireshark /usr/bin/{tshark,dumpcap} &&
    chmod -v 6550 /usr/bin/{tshark,dumpcap}

Finally, add any users to the wireshark group (as `root` user):

    usermod -a -G wireshark <username>

If you are installing wireshark for the first time, it will be necessary to logout of your session and login again. This will put wireshark in your groups, because otherwise Wireshark will not function properly.

### Configuring Wireshark

#### Config Files

`/etc/wireshark.conf` and `~/.config/wireshark/*` (unless there is already `~/.wireshark/*` in the system)

#### Configuration Information

Though the default configuration parameters are very sane, reference the configuration section of the Wireshark User's Guide for configuration information. Most of Wireshark 's configuration can be accomplished using the menu options of the wireshark graphical interfaces.

### Note

If you want to look at packets, make sure you don't filter them out with iptables-1.8.7. If you want to exclude certain classes of packets, it is more efficient to do it with iptables than it is with Wireshark.

### Contents

Installed Programs: capinfos, captype, dumpcap, editcap, idl2wrs, mergecap, randpkt, rawshark, reordercap, sharkd, text2pcap, tshark, and wireshark
Installed Libraries: libwireshark.so, libwiretap.so, libwsutil.so, and numerous modules under /usr/lib/wireshark/plugins
Installed Directories: /usr/{include,lib,share}/wireshark and /usr/share/doc/wireshark-3.4.8

#### Short Descriptions

capinfos | reads a saved capture file and returns any or all of several statistics about that file. It is able to detect and read any capture supported by the Wireshark package
captype | prints the file types of capture files
dumpcap | is a network traffic dump tool. It lets you capture packet data from a live network and write the packets to a file
editcap | edits and/or translates the format of capture files. It knows how to read libpcap capture files, including those of tcpdump, Wireshark and other tools that write captures in that format
idl2wrs | is a program that takes a user specified CORBA IDL file and generates “C” source code for a Wireshark “plugin”. It relies on two Python programs wireshark_be.py and wireshark_gen.py, which are not installed by default. They have to be copied manually from the `tools` directory to the `$PYTHONPATH/site-packages/` directory
mergecap | combines multiple saved capture files into a single output file
randpkt | creates random-packet capture files
rawshark | dumps and analyzes raw libpcap data
reordercap | reorders timestamps of input file frames into an output file
sharkd | is a daemon that listens on UNIX sockets
text2pcap | reads in an ASCII hex dump and writes the data described into a libpcap-style capture file
tshark | is a TTY-mode network protocol analyzer. It lets you capture packet data from a live network or read packets from a previously saved capture file
wireshark | is the Qt GUI network protocol analyzer. It lets you interactively browse packet data from a live network or from a previously saved capture file
`libwireshark.so` | contains functions used by the Wireshark programs to perform filtering and packet capturing
`libwiretap.so` | is a library being developed as a future replacement for `libpcap`, the current standard Unix library for packet capturing. For more information, see the `README` file in the source `wiretap` directory

Last updated on

## Chapter 17. Networking Libraries

These applications are support libraries for other applications in the book. It is unlikely that you would just install these libraries, you will generally find that you will be referred to this chapter to satisfy a dependency of other applications.

## c-ares-1.17.2

### Introduction to c-ares

c-ares is a C library for asynchronous DNS requests.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://c-ares.haxx.se/download/c-ares-1.17.2.tar.gz

- Download MD5 sum: 3802264830c6886411dac606c66fdbf8

- Download size: 1.5 MB

- Estimated disk space required: 11 MB

- Estimated build time: less than 0.1 SBU

#### c-ares Dependencies

##### Required

CMake-3.21.2

### Installation of c-ares

Install c-ares by running the following commands:

    mkdir build &&
    cd    build &&

    cmake  -DCMAKE_INSTALL_PREFIX=/usr .. &&
    make

This package does not include a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: acountry, adig, and ahost
Installed Libraries: libcares.so
Installed Directories: None

#### Short Descriptions

acountry | prints the country where an IPv4 address or host is located
adig | queries information from DNS servers
ahost | prints the A or AAAA record associated with a hostname or IP address
`libcares.so` | is a C library for asynchronous DNS requests

Last updated on

## cURL-7.78.0

### Introduction to cURL

The cURL package contains an utility and a library used for transferring files with URL syntax to any of the following protocols: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. Its ability to both download and upload files can be incorporated into other programs to support functions like streaming media.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://curl.se/download/curl-7.78.0.tar.xz

- Download MD5 sum: 419c2461366cf404160a820f7a902b7e

- Download size: 2.4 MB

- Estimated disk space required: 103 MB (add 17 MB for tests)

- Estimated build time: 0.3 SBU (add 14 SBU for tests)

#### cURL Dependencies

##### Recommended

make-ca-1.7 (runtime)

##### Optional

Brotli-1.0.9, c-ares-1.17.2, GnuTLS-3.7.2, libidn2-2.3.2, libpsl-0.21.1, libssh2-1.9.0, MIT Kerberos V5-1.19.2, nghttp2-1.44.0, OpenLDAP-2.5.7, Samba-4.14.7, impacket, libmetalink, librtmp, ngtcp2, quiche, and SPNEGO

##### Optional if Running the Test Suite

stunnel-5.60 (for the HTTPS and FTPS tests) and Valgrind-3.17.0 (this will slow the tests down and may cause failures.)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/curl

### Installation of cURL

First, adapt the tests to python3:

    grep -rl '#!.*python$' | xargs sed -i '1s/python/&3/'

Install cURL by running the following commands:

    ./configure --prefix=/usr                           \
                --disable-static                        \
                --with-openssl                          \
                --enable-threaded-resolver              \
                --with-ca-path=/etc/ssl/certs &&
    make

To run the test suite, issue: make test.

Now, as the `root` user:

    make install &&

    rm -rf docs/examples/.deps &&

    find docs \( -name Makefile\* -o -name \*.1 -o -name \*.3 \) -exec rm {} \; &&

    install -v -d -m755 /usr/share/doc/curl-7.78.0 &&
    cp -v -R docs/*     /usr/share/doc/curl-7.78.0

Simple tests to the new installed curl: curl --trace-ascii debugdump.txt http://www.example.com/ and curl --trace-ascii d.txt --trace-time http://example.com/. Inspect the locally created trace files `debugdump.txt` and `d.txt`, which contain version downloaded files information, etc. One file has the time for each action logged.

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-threaded-resolver`: This switch enables cURL's builtin threaded DNS resolver.

`--with-ca-path=/etc/ssl/certs`: This switch sets the location of the BLFS Certificate Authority store.

`--with-openssl`: This parameter chooses OpenSSL as SSL/TLS implementation. This seems mandatory now.

`--with-gssapi`: This parameter adds Kerberos 5 support to `libcurl`.

`--without-ssl --with-gnutls`: Use to build with GnuTLS support instead of OpenSSL for SSL/TLS.

`--with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt`: Use this switch instead of `--with-ca-path` if building with GnuTLS support instead of OpenSSL for SSL/TLS.

`--with-libssh2`: This parameter adds SSH support to cURL. This is disabled by default.

`--enable-ares`: This parameter adds support for DNS resolution through the c-ares library. It is disabled by default, but does speed up DNS resolution queries.

find docs ... -exec rm {} \;: This command removes `Makefiles` and man files from the documentation directory that would otherwise be installed by the commands that follow.

### Contents

Installed Programs: curl and curl-config
Installed Library: libcurl.so
Installed Directories: /usr/include/curl and /usr/share/doc/curl-7.78.0

#### Short Descriptions

curl | is a command line tool for transferring files with URL syntax
curl-config | prints information about the last compile, like libraries linked to and prefix setting
`libcurl.so` | provides the API functions required by curl and other programs

Last updated on

## GeoClue-2.5.7

### Introduction to GeoClue

GeoClue is a modular geoinformation service built on top of the D-Bus messaging system. The goal of the GeoClue project is to make creating location-aware applications as simple as possible.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.freedesktop.org/geoclue/geoclue/-/archive/2.5.7/geoclue-2.5.7.tar.bz2

- Download MD5 sum: f6e731a21d458168eda613816797eb73

- Download size: 84 KB

- Estimated disk space required: 6.2 MB

- Estimated build time: less than 0.1 SBU

#### GeoClue Dependencies

##### Required

JSON-GLib-1.6.6 and libsoup-2.74.0

##### Recommended

ModemManager-1.16.10, Vala-0.52.5, and Avahi-0.8

##### Optional

GTK-Doc-1.33.2 and libnotify-0.7.9

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/geoclue2

### Installation of GeoClue

Install GeoClue by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dgtk-doc=false .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-D3g-source=false`: This switch disables the 3G backend. Use it if you have not installed the ModemManager package.

`-Dmodem-gps-source=false`: This switch disables the modem GPS backend. Use it if you have not installed the ModemManager package.

`-Dcdma-source=false`: This switch disables the CDMA source backend. Use it if you have not installed the ModemManager package.

`-Dnmea-source=false`: This switch disables the NMEA source. Use it if you have not installed the Avahi package.

`-Ddemo-agent=false`: This switch disables the demo. Use it if you have not installed the libnotify package.

### Contents

Installed Programs: None
Installed Libraries: libgeoclue-2.so
Installed Directories: /etc/geoclue, /usr/include/libgeoclue-2.0, /usr/libexec/geoclue-2.0, and /usr/share/gtk-doc/html/{geoclue,libgeoclue}

Last updated on

## glib-networking-2.68.2

### Introduction to GLib Networking

The GLib Networking package contains Network related gio modules for GLib.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/glib-networking/2.68/glib-networking-2.68.2.tar.xz

- Download MD5 sum: 5c3b020db7d0937f75aac7654c38343f

- Download size: 236 KB

- Estimated disk space required: 5.2 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### GLib Networking Dependencies

##### Required

GLib-2.68.4 and GnuTLS-3.7.2

##### Recommended

gsettings-desktop-schemas-40.0 (for the applications using this package to use proxy server settings in GNOME) and make-ca-1.7

##### Optional

libproxy

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/glib-networking

### Installation of GLib Networking

Install GLib Networking by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr          \
          --buildtype=release    &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Program: None
Installed Libraries: libgiognomeproxy.so and libgiognutls.so (GIO Modules installed in `/usr/lib/gio/modules`)
Installed Directories: None

Last updated on

## ldns-1.7.1

### Introduction to ldns

ldns is a fast DNS library with the goal to simplify DNS programming and to allow developers to easily create software conforming to current RFCs and Internet drafts. This packages also includes the drill tool.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.1.tar.gz

- Download MD5 sum: 166262a46995d9972aba417fd091acd5

- Download size: 1.2 MB

- Estimated disk space required: 28 MB (with docs)

- Estimated build time: 0.2 SBU (with docs)

#### ldns Dependencies

##### Optional

make-ca-1.7 and libpcap-1.10.1 (for example programs), Python-2.7.18 and SWIG-4.0.2 (for Python bindings), and Doxygen-1.9.2 (for html documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ldns

### Installation of ldns

Install ldns by running the following commands:

    ./configure --prefix=/usr           \
                --sysconfdir=/etc       \
                --disable-static        \
                --with-drill            &&
    make

If you have Doxygen-1.9.2 installed and want to build html documentation, run the following command:

    make doc

This package does not come with a working test suite.

Now, as the `root` user:

    make install

If you built html documentation, install it by running the following commands as the `root` user:

    install -v -m755 -d /usr/share/doc/ldns-1.7.1 &&
    install -v -m644 doc/html/* /usr/share/doc/ldns-1.7.1

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-drill`: This option enables building of the drill tool (used for obtaining debug information from DNS(SEC))

`--disable-dane-ta-usage`: This option disables DANE-TA (DNS-Based Authentication of Named Entities) support. It is only needed if OpenSSL-1.1.0 or later is not installed.

`--with-examples`: This option enables building of the example programs.

`--with-pyldns`: This option enables building of the Python bindings.

### Contents

Installed Programs: drill and ldns-config
Installed Library: libldns.so and /usr/lib/python2.7/site-packages/_ldns.so
Installed Directories: /usr/include/ldns and /usr/share/doc/ldns-1.7.1

#### Short Descriptions

drill | is a tool like dig from BIND Utilities-9.16.20 designed to get all sorts of information out of the DNS
ldns-config | shows compiler and linker flags for ldns usage
`libldns.so` | provides the ldns API functions to programs

Last updated on

## libevent-2.1.12

### Introduction to libevent

libevent is an asynchronous event notification software library. The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also supports callbacks due to signals or regular timeouts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz

- Download MD5 sum: b5333f021f880fe76490d8a799cd79f4

- Download size: 1.0 MB

- Estimated disk space required: 20 MB (add 4 MB for tests and 4 MB for API docs)

- Estimated build time: 0.3 SBU (add 11 SBU for tests)

#### libevent Dependencies

##### Optional

Doxygen-1.9.2 (for API documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libevent

### Installation of libevent

First, fix an issue that prevents rpcgen_event.py from working:

    sed -i 's/python/&3/' event_rpcgen.py

Install libevent by running the following commands:

    ./configure --prefix=/usr --disable-static &&
    make

If you have Doxygen-1.9.2 installed and wish to build API documentation, issue :

    doxygen Doxyfile

To test the results, issue: make verify.

Now, as the `root` user:

    make install

If you built the API documentation, install it by issuing the following commands as the `root` user:

    install -v -m755 -d /usr/share/doc/libevent-2.1.12/api &&
    cp      -v -R       doxygen/html/* \
                        /usr/share/doc/libevent-2.1.12/api

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: event_rpcgen.py
Installed Libraries: libevent_core.so, libevent_extra.so, libevent_openssl.so, libevent_pthreads.so and libevent.so
Installed Directory: /usr/include/event2 and /usr/share/doc/libevent-2.1.12

Last updated on

## libmnl-1.0.4

### Introduction to libmnl

The libmnl library provides a minimalistic user-space library oriented to Netlink developers. There are a lot of common tasks in parsing, validating, constructing of both the Netlink header and TLVs that are repetitive and easy to get wrong. This library aims to provide simple helpers that allows you to re-use code and to avoid re-inventing the wheel.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://netfilter.org/projects/libmnl/files/libmnl-1.0.4.tar.bz2

- Download MD5 sum: be9b4b5328c6da1bda565ac5dffadb2d

- Download size: 296 KB

- Estimated disk space required: 2.9 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libmnl

### Installation of libmnl

Install libmnl 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

### Contents

Installed Library: libmnl.so

#### Short Descriptions

`libmnl.so` | provides functions for parsing, validating, constructing of both the Netlink header and TLVs

Last updated on

## libnl-3.5.0

### Introduction to libnl

The libnl suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz

- Download MD5 sum: 74ba57b1b1d6f9f92268aa8141d8e8e4

- Download size: 948 KB

- Estimated disk space required: 78 MB (with tests and API documentation)

- Estimated build time: 0.5 SBU (with tests and API documentation)

#### Optional Download

- Download (HTTP): https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-doc-3.5.0.tar.gz

- Download MD5 sum: 43a1a6f0c39f32bee05287c06c500bce

- Download size: 11 MB

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libnl

### Installation of libnl

Install libnl by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

If you wish to install the API documentation, as the `root` user:

    mkdir -vp /usr/share/doc/libnl-3.5.0 &&
    tar -xf ../libnl-doc-3.5.0.tar.gz --strip-components=1 --no-same-owner \
        -C  /usr/share/doc/libnl-3.5.0

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-cli`: Use this parameter if you don't want to install cli tools provided by the package.

### Contents

Installed Programs: genl-ctrl-list, idiag-socket-details, nl-class-add, nl-class-delete, nl-classid-lookup, nl-class-list, nl-cls-add, nl-cls-delete, nl-cls-list, nl-link-list, nl-pktloc-lookup, nl-qdisc-add, nl-qdisc-delete, nl-qdisc-list, and 48 other helper programs with nl- and nf- prefixes
Installed Libraries: libnl-3.so, libnl-cli-3.so, libnl-genl-3.so, libnl-idiag-3.so, libnl-nf-3.so, libnl-route-3.so, libnl-xfrm-3.so, and cli modules under /usr/lib/libnl/cli tree
Installed Directories: /etc/libnl, /usr/include/libnl3, /usr/lib/libnl, and /usr/share/doc/libnl-3.5.0

#### Short Descriptions

genl-ctrl-list | queries the Generic Netlink controller in the kernel and prints a list of all registered Generic Netlink families including the version of the interface that has been registered
nl-class-add | adds, updates, or replaces Traffic Classes
nl-class-delete | deletes Traffic Classes
nl-classid-lookup | is used to resolve qdisc/class names to classid values and vice versa
nl-class-list | lists Traffic Classes
nl-cls-add | adds a classifier
nl-cls-delete | deletes a classifier
nl-cls-list | lists classifiers
nl-link-list | dumps link attributes
nl-pktloc-lookup | allows the lookup of packet location definitions
nl-qdisc-add | adds queueing disciplines (qdiscs) in the kernel
nl-qdisc-delete | deletes queueing disciplines (qdiscs) in the kernel
nl-qdisc-list | lists queueing disciplines (qdiscs) in the kernel
`libnl*-3.so` | These libraries contain API functions used to access Netlink interfaces in Linux kernel

Last updated on

## libnma-1.8.32

### Introduction to libnma

The libnma package contains an implementation of the NetworkManager GUI functions.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libnma/1.8/libnma-1.8.32.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libnma/1.8/libnma-1.8.32.tar.xz

- Download MD5 sum: 10505d481f650442246f9c957e90219b

- Download size: 1.3 MB

- Estimated disk space required: 24 MB

- Estimated build time: 0.1 SBU (with tests)

#### libnma Dependencies

##### Required

Gcr-3.40.0, GTK+-3.24.30, ISO Codes-4.7.0, and NetworkManager-1.32.10

##### Recommended

Vala-0.52.5

##### Optional

mobile-broadband-provider-info

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libnma

### Installation of libnma

Install libnma by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr                             \
          --buildtype=release                       \
          -Dgtk_doc=false                           \
          -Dmobile_broadband_provider_info=false .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: This parameter disables generating API documentation using gtk-doc. If you have GTK-Doc-1.33.2 installed and wish to generate the API documentation, omit this switch.

`-Dmobile_broadband_provider_info=false`: This switch disables WWAN support because mobile-broadband-provider-info is not in BLFS. Omit this switch if you have it installed and wish to enable WWAN support.

### Contents

Installed Programs: None
Installed Libraries: libnma.so
Installed Directories: /usr/include/libnma

#### Short Descriptions

`libnma.so` | contains the NetworkManager GUI library

Last updated on

## libnsl-1.3.0

### Introduction to libnsl

The libnsl package contains the public client interface for NIS(YP) and NIS+. It replaces the NIS library that used to be in glibc.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/thkukuk/libnsl/releases/download/v1.3.0/libnsl-1.3.0.tar.xz

- Download MD5 sum: 9214f674bd0c2bcfdd6c1da0cadb061f

- Download size: 314 KB

- Estimated disk space required: 8.4 MB

- Estimated build time: 0.1 SBU

#### libnsl Dependencies

##### Required

rpcsvc-proto-1.4.2 and libtirpc-1.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libnsl

### Installation of libnsl

Install libnsl by running the following commands:

    autoreconf -fi                &&
    ./configure --sysconfdir=/etc --disable-static &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Libraries: libnsl.so
Installed Directories: None

#### Short Descriptions

`libnsl.so` | provides the NIS (YP) API functions required by other programs

Last updated on

## libpcap-1.10.1

### Introduction to libpcap

libpcap provides functions for user-level packet capture, used in low-level network monitoring.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz

- Download MD5 sum: 28e17495004036567c2cc884b51eba45

- Download size: 916 KB

- Estimated disk space required: 9.7 MB

- Estimated build time: less than 0.1 SBU

#### libpcap Dependencies

##### Optional

BlueZ-5.61, libnl-3.5.0, libusb-1.0.24, Software distribution for the DAG, and Septel range of passive network monitoring cards.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libpcap

### Installation of libpcap

Install libpcap by running the following commands:

    ./configure --prefix=/usr &&
    make

This package does not come with a test suite.

If you want to disable installing the static library, use this sed:

    sed -i '/INSTALL_DATA.*libpcap.a\|RANLIB.*libpcap.a/ s/^/#/' Makefile

Now, as the `root` user:

    make install

### Contents

Installed Program: pcap-config
Installed Libraries: libpcap.so
Installed Directory: /usr/include/pcap

#### Short Descriptions

pcap-config | provides configuration information for libpcap
`libpcap.{a,so}` | are libraries used for user-level packet capture

Last updated on

## libpsl-0.21.1

### Introduction to libpsl

The libpsl package provides a library for accessing and resolving information from the Public Suffix List (PSL). The PSL is a set of domain names beyond the standard suffixes, such as .com.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/rockdaboot/libpsl/releases/download/0.21.1/libpsl-0.21.1.tar.gz

- Download MD5 sum: ad40b970dcb5117d559b62a1e0d8d827

- Download size: 8.8 MB

- Estimated disk space required: 54 MB

- Estimated build time: 0.1 SBU (including tests)

#### libpsl Dependencies

##### Required

libidn2-2.3.2

##### Optional

GTK-Doc-1.33.2 (for documentation) and Valgrind-3.17.0 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libpsl

### Installation of libpsl

Install libpsl by running the following commands:

    sed -i 's/env python/&3/' src/psl-make-dafsa &&
    ./configure --prefix=/usr --disable-static       &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

sed -i ...: This command forces the use of Python 3 in an utility.

### Contents

Installed Program: psl
Installed Library: libpsl.so
Installed Directories: None

#### Short Descriptions

psl | queries the Public Suffix List
`libpsl.so` | contains a library used to access the Public Suffix List

Last updated on

## libndp-1.8

### Introduction to libndp

The libndp package provides a wrapper for IPv6 Neighbor Discovery Protocol. It also provides a tool named ndptool for sending and receiving NDP messages.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://libndp.org/files/libndp-1.8.tar.gz

- Download MD5 sum: c7e775fd5a9d676e8cba9c3732c4df93

- Download size: 360 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libndp

### Installation of libndp

Install libndp by running the following command:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --disable-static     &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Program: ndptool
Installed Library: libndp.so
Installed Directory: None

#### Short Descriptions

ndptool | is a tool for sending and receiving NDP messages
`libndp.so` | provides a wrapper for the IPv6 Neighbor Discovery Protocol

Last updated on

## libsoup-2.74.0

### Introduction to libsoup

The libsoup is a HTTP client/server library for GNOME. It uses GObject and the GLib main loop to integrate with GNOME applications and it also has an asynchronous API for use in threaded applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libsoup/2.74/libsoup-2.74.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libsoup/2.74/libsoup-2.74.0.tar.xz

- Download MD5 sum: 076f7ceeb73ebae2cc55a4c2877f6926

- Download size: 1.4 MB

- Estimated disk space required: 15 MB (with tests)

- Estimated build time: 0.2 SBU (Using parallelism=4; with tests)

#### libsoup Dependencies

##### Required

glib-networking-2.68.2, libpsl-0.21.1, libxml2-2.9.12, and SQLite-3.36.0

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

Apache-2.4.48 (required to run the test suite), Brotli-1.0.9, cURL-7.78.0 (required to run the test suite), sysprof-3.40.1 (for profiling), MIT Kerberos V5-1.19.2 (required to run the test suite), GTK-Doc-1.33.2, PHP-8.0.10 compiled with XMLRPC-EPI support (only used for the XMLRPC regression tests), and Samba-4.14.7 (ntlm_auth is required to run the test suite)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsoup

### Installation of libsoup

Install libsoup by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dvapi=enabled      \
          -Dgssapi=disabled   \
          -Dsysprof=disabled  \
          ..                  &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dvapi=disabled`: Use this if you have not installed Vala, e.g. because you are not building GNOME.

`-Ddoc=enabled`: Use this option if you want to build the documentation. Note that you must have GTK-Doc-1.33.2 installed.

`-Dgssapi=disabled`: libsoup defaults to building with GSSAPI support, which requires Kerberos (as does the test suite). If you are building GNOME or have kerberos installed, remove this option.

`-Dsysprof=disabled`: libsoup will automatically download a git version of sysprof-3.40.1 if git is available or use the installed version if available. If you need profiling, remove this option.

### Contents

Installed Programs: None
Installed Libraries: libsoup-2.4.so and libsoup-gnome-2.4.so
Installed Directories: /usr/include/libsoup-2.4, /usr/include/libsoup-gnome-2.4 and /usr/share/gtk-doc/html/libsoup-2.4

#### Short Descriptions

`libsoup-2.4.so` | provides functions for asynchronous HTTP connections
`libsoup-gnome-2.4.so` | provides GNOME specific features

Last updated on

## libtirpc-1.3.2

### Introduction to libtirpc

The libtirpc package contains libraries that support programs that use the Remote Procedure Call (RPC) API. It replaces the RPC, but not the NIS library entries that used to be in glibc.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libtirpc/libtirpc-1.3.2.tar.bz2

- Download MD5 sum: cf4ca51f3fc401bea61c702c69171ab0

- Download size: 504 KB

- Estimated disk space required: 6.7 MB

- Estimated build time: less than 0.1 SBU

#### libtirpc Dependencies

##### Optional

MIT Kerberos V5-1.19.2 for the GSSAPI

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libtirpc

### Installation of libtirpc

### Note

If updating this package, you will also need to update any existing version of rpcbind-1.2.6

    ./configure --prefix=/usr                                   \
                --sysconfdir=/etc                               \
                --disable-static                                \
                --disable-gssapi                                &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-gssapi`: This switch is needed if no GSSAPI is installed. Remove this switch if you have one installed (for example MIT Kerberos V5-1.19.2) and you wish to use it.

### Contents

Installed Programs: None
Installed Libraries: libtirpc.so
Installed Directory: /usr/include/tirpc

#### Short Descriptions

`libtirpc.so` | provides the Remote Procedure Call (RPC) API functions required by other programs

Last updated on

## neon-0.31.2

### Introduction to neon

neon is an HTTP and WebDAV client library, with a C interface.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://notroj.github.io/neon/neon-0.31.2.tar.gz

- Download MD5 sum: c871268f0ba365b71f1ec1bf068d6ab3

- Download size: 848 KB

- Estimated disk space required: 8.4 MB (additional 19 MB for the tests)

- Estimated build time: 0.1 SBU (additional 0.3 SBU for the tests)

#### neon Dependencies

##### Optional

GnuTLS-3.7.2, libxml2-2.9.12, MIT Kerberos V5-1.19.2, libproxy, and PaKChoiS

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/neon

### Installation of neon

Install neon by running the following commands:

    ./configure --prefix=/usr    \
                --with-ssl       \
                --enable-shared  \
                --disable-static &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--with-ssl`: This switch enables SSL support using OpenSSL or GnuTLS respectively. To force GnuTLS usage when it is are present, simply pass `--with-ssl=gnutls` and `--with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt` to the configure script.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: neon-config
Installed Library: libneon.so
Installed Directories: /usr/include/neon and /usr/share/doc/neon-0.31.2

#### Short Descriptions

neon-config | is a script that provide information about an installed copy of the neon library
`libneon.so` | is used as a high-level interface to common HTTP and WebDAV methods

Last updated on

## nghttp2-1.44.0

### Introduction to nghttp2

nghttp2 is an implementation of HTTP/2 and its header compression algorithm, HPACK.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/nghttp2/nghttp2/releases/download/v1.44.0/nghttp2-1.44.0.tar.xz

- Download MD5 sum: d9702786d89ec8053a96ab4768a172e4

- Download size: 3.8 MB

- Estimated disk space required: 21 MB

- Estimated build time: 0.1 SBU

#### nghttp2 Dependencies

##### Recommended

libxml2-2.9.12

##### Optional

Boost-1.77.0, c-ares-1.17.2, jansson-2.13.1, libevent-2.1.12, CUnit (required for the testsuite), Cython, jemalloc, libev, mruby, Spdylay, and Sphinx.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nghttp2

### Installation of nghttp2

Install nghttp2 by running the following commands:

    ./configure --prefix=/usr     \
                --disable-static  \
                --enable-lib-only \
                --docdir=/usr/share/doc/nghttp2-1.44.0 &&
    make

This package does not come with a usable test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-lib-only`: only build libnghttp2. Omit this switch if you'd like to build the example applications, Python bindings, or the C++ asio library.

### Contents

Installed Programs: None
Installed Libraries: libnghttp2.so
Installed Directories: /usr/include/nghttp2, /usr/share/nghttp2, and /usr/share/doc/nghttp2-1.44.0

#### Short Descriptions

`libnghttp2.so` | an implementation of the Hypertext Transfer Protocol version 2 in C

Last updated on

## rpcsvc-proto-1.4.2

### Introduction to rpcsvc-proto

The rpcsvc-proto package contains the rcpsvc protocol files and headers, formerly included with glibc, that are not included in replacement libtirpc-1.3.2, along with the rpcgen program.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.2/rpcsvc-proto-1.4.2.tar.xz

- Download MD5 sum: 629c91bbc8281fcdf64442f59a9d1705

- Download size: 168 KB

- Estimated disk space required: 2.7 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rpcsvc-proto

### Installation of rpcsvc-proto

Install rpcsvc-proto by running the following commands:

    ./configure --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: rpcgen
Installed Libraries: None
Installed Directories: /usr/include/rpcsvc

#### Short Descriptions

rpcgen | Generates C code to implement the RPC protocol

Last updated on

## Serf-1.3.9

### Introduction to Serf

The Serf package contains a C-based HTTP client library built upon the Apache Portable Runtime (APR) library. It multiplexes connections, running the read/write communication asynchronously. Memory copies and transformations are kept to a minimum to provide high performance operation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/serf/serf-1.3.9.tar.bz2

- Download MD5 sum: 370a6340ff20366ab088012cd13f2b57

- Download size: 144 KB

- Estimated disk space required: 3.2 MB

- Estimated build time: less than 0.1 SBU

#### Serf Dependencies

##### Required

Apr-Util-1.6.1 and SCons-4.2.0

##### Optional

MIT Kerberos V5-1.19.2, for the GSSAPI

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/serf

### Installation of Serf

Install Serf by running the following commands:

    sed -i "/Append/s:RPATH=libdir,::"          SConstruct &&
    sed -i "/Default/s:lib_static,::"           SConstruct &&
    sed -i "/Alias/s:install_static,::"         SConstruct &&
    sed -i "/  print/{s/print/print(/; s/$/)/}" SConstruct &&
    sed -i "/get_contents()/s/,/.decode()&/"    SConstruct &&

    scons PREFIX=/usr

This package does not come with a functional testsuite.

Now, as the `root` user:

    scons PREFIX=/usr install

### Command Explanations

sed -i "...": The first command removes the runtime path from a shared library and the next two commands disable building and installing of the static library. The fourth command corrects for changes in scons-3.x. The last command allows to use Python 3.

`GSSAPI=/usr`: Use this switch if you have installed a GSSAPI library and you want serf to use it.

### Contents

Installed Programs: None
Installed Library: libserf-1.so
Installed Directory: /usr/include/serf-1

#### Short Descriptions

`libserf-1.so` | contains the Serf API functions

Last updated on

## uhttpmock-0.5.3

### Introduction to uhttpmock

The uhttpmock package contains a library for mocking web service APIs which use HTTP or HTTPS.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://tecnocode.co.uk/downloads/uhttpmock/uhttpmock-0.5.3.tar.xz

- Download MD5 sum: dcbd66e80e1635e41b0e434b9852bd39

- Download size: 311 KB

- Estimated disk space required: 3.6 MB

- Estimated build time: less than 0.1 SBU (with tests)

#### uhttpmock Dependencies

##### Required

libsoup-2.74.0

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/uhttpmock

### Installation of uhttpmock

Install uhttpmock 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

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Libraries: libuhttpmock-0.0.so
Installed Directories: /usr/include/libuhttpmock-0.0 and /usr/share/gtk-doc/html/libuhttpmock-0.0

#### Short Descriptions

`libuhttpmock-0.0.so` | contains the uhttpmock API functions

Last updated on

## Chapter 18. Text Web Browsers

People who are new to Unix-based systems tend to ask the question "Why on earth would I want a text-mode browser? I'm going to compile X and use Konqueror/Mozilla/Whatever!". Those who have been around systems for a while know that when (not if) you manage to mess up your graphical browser install and you need to look up some information on the web, a console based browser will save you. Also, there are quite a few people who prefer to use one of these browsers as their primary method of browsing; either to avoid the clutter and bandwidth which accompanies images or because they may use a text-to-speech synthesizer which can read the page to them (of use for instance to partially sighted or blind users). In this chapter you will find installation instructions for three console web browsers:

## Links-2.23

### Introduction to Links

Links is a text and graphics mode WWW browser. It includes support for rendering tables and frames, features background downloads, can display colors and has many other features.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://links.twibright.com/download/links-2.23.tar.bz2

- Download MD5 sum: 64215ef5e6e35ae8b131d78fcb162f12

- Download size: 6.2 MB

- Estimated disk space required: 36 MB

- Estimated build time: 0.3 SBU

#### Links Dependencies

##### Recommended

libevent-2.1.12

##### Optional

Graphics mode requires at least one of GPM-1.20.7 (mouse support to be used with a framebuffer-based console), SVGAlib, DirectFB , and X Window System

For decoding various image formats Links can utilize libpng-1.6.37, libjpeg-turbo-2.1.1, librsvg-2.50.7, and libtiff-4.3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/LinksBrowser

### Installation of Links

Install Links 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 -v -d -m755 /usr/share/doc/links-2.23 &&
    install -v -m644 doc/links_cal/* KEYS BRAILLE_HOWTO \
        /usr/share/doc/links-2.23

### Command Explanations

`--enable-graphics`: This switch enables support for graphics mode.

### Configuring Links

#### Config Files

`~/.links/*`

#### Configuration Information

Links stores its configuration in per-user files in the `~/.links` directory. These files are created automatically when links is run for the first time.

### Contents

Installed Program: links
Installed Libraries: None
Installed Directories: /usr/share/doc/links-2.23

#### Short Descriptions

links | is a text and graphics mode WWW browser

Last updated on

## Lynx-2.8.9rel.1

### Introduction to Lynx

Lynx is a text based web browser.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.9rel.1.tar.bz2

- Download MD5 sum: 44316f1b8a857b59099927edc26bef79

- Download size: 2.5 MB

- Estimated disk space required: 31 MB

- Estimated build time: 0.3 SBU

#### Lynx Dependencies

##### Optional

GnuTLS-3.7.2 (experimental, to replace openssl), Zip-3.0, UnZip-6.0, an MTA (that provides a sendmail command), and Sharutils-4.15.2 (for the uudecode program)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Lynx

### Installation of Lynx

Install Lynx by running the following commands:

    ./configure --prefix=/usr          \
                --sysconfdir=/etc/lynx \
                --datadir=/usr/share/doc/lynx-2.8.9rel.1 \
                --with-zlib            \
                --with-bzlib           \
                --with-ssl             \
                --with-screen=ncursesw \
                --enable-locale-charset &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install-full &&
    chgrp -v -R root /usr/share/doc/lynx-2.8.9rel.1/lynx_doc

### Command Explanations

`--sysconfdir=/etc/lynx`: This parameter is used so that the configuration files are located in `/etc/lynx` instead of `/usr/etc`.

`--datadir=/usr/share/doc/lynx-2.8.9rel.1`: This parameter is used so that the documentation files are installed into `/usr/share/doc/lynx-2.8.9rel.1` instead of `/usr/share/lynx_{doc,help}`.

`--with-zlib`: This enables support for linking `libz` into Lynx.

`--with-bzlib`: This enables support for linking `libbz2` into Lynx.

`--with-ssl`: This enables support for linking SSL into Lynx.

`--with-screen=ncursesw`: This switch enables the use of advanced wide-character support present in the system NCurses library. This is needed for proper display of characters and line wrapping in multibyte locales.

`--enable-locale-charset`: This switch allows Lynx to deduce the proper character encoding for terminal output from the current locale. A configuration step is still needed (see below), but unlike the situation without this switch, the configuration step becomes the same for all users (without the switch one must specify the display character set explicitly). This is important for environments such as a LiveCD, where the amount of system-specific configuration steps has to be reduced to the minimum.

`--enable-ipv6`: This switch allows Lynx to use IPv6, along with IPv4. Use it if your ISP provides an IPv6 configuration.

`--enable-nls`: This switch allows Lynx to print translated messages (such as questions about cookies and SSL certificates).

`--with-gnutls`: This enables experimental support for linking GnuTLS into Lynx. Remove the `--with-ssl` switch if you want to use gnutls.

make install-full: In addition to the standard installation, this target installs the documentation and help files.

chgrp -v -R root /usr/share/doc/lynx-2.8.9rel.1/lynx_doc : This command corrects the improper group ownership of installed documentation files.

### Configuring Lynx

#### Config Files

`/etc/lynx/lynx.cfg`

#### Configuration Information

The proper way to get the display character set is to examine the current locale. However, Lynx does not do this by default. As the `root` user, change this setting:

    sed -e '/#LOCALE/     a LOCALE_CHARSET:TRUE'     \
        -i /etc/lynx/lynx.cfg

The built-in editor in Lynx Breaks Multibyte Characters. This issue manifests itself in multibyte locales, e.g., as the Backspace key not erasing non-ASCII characters properly, and as incorrect data being sent to the network when one edits the contents of text areas. The only solution to this problem is to configure Lynx to use an external editor (bound to the “Ctrl+X e” key combination by default). Still as the `root` user:

    sed -e '/#DEFAULT_ED/ a DEFAULT_EDITOR:vi'       \
        -i /etc/lynx/lynx.cfg

Lynx handles the following values of the DEFAULT_EDITOR option specially by adding cursor-positioning arguments: “emacs”, “jed”, “jmacs”, “joe”, “jove”, “jpico”, “jstar”, “nano”, “pico”, “rjoe”, “vi” (but not “vim”: in order to position the cursor in Vim-8.2.3337, set this option to “vi”).

By default, Lynx doesn't save cookies between sessions. Again as the `root` user, change this setting:

    sed -e '/#PERSIST/    a PERSISTENT_COOKIES:TRUE' \
        -i /etc/lynx/lynx.cfg

Many other system-wide settings such as proxies can also be set in the `/etc/lynx/lynx.cfg` file.

### Contents

Installed Program: lynx
Installed Libraries: None
Installed Directories: /etc/lynx and /usr/share/doc/lynx-2.8.9rel.1

#### Short Descriptions

lynx | is a general purpose, text-based, distributed information browser for the World Wide Web

Last updated on

## Chapter 19. Mail/News Clients

Mail Clients help you retrieve (Fetchmail), sort (Procmail), read and compose responses (Heirloom mailx, Mutt, Pine, Kmail, Balsa, Evolution, SeaMonkey) to email.

News clients also help you retrieve, sort, read and compose responses, but these messages travel through USENET (a worldwide bulletin board system) using the Network News Transfer Protocol (NNTP).

## Fetchmail-6.4.21

### Introduction to Fetchmail

The Fetchmail package contains a mail retrieval program. It retrieves mail from remote mail servers and forwards it to the local (client) machine's delivery system, so it can then be read by normal mail user agents.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/fetchmail/fetchmail-6.4.21.tar.xz

- Download MD5 sum: 091dcd5462f205dbc0597e7ad73d3e15

- Download size: 1.3 MB

- Estimated disk space required: 16 MB including tests

- Estimated build time: 0.1 SBU including tests

#### Fetchmail Dependencies

##### Recommended

a local MDA (Procmail-3.22)

##### Optional

MIT Kerberos V5-1.19.2 and libgssapi

##### Optional (for running fetchmailconf)

Python-3.9.6, built after Tk-8.6.11.1, with the py-future package

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fetchmail

### Installation of Fetchmail

Create a dedicated user for the fetchmail program. Issue the following commands as the `root` user:

    useradd -c "Fetchmail User" -d /dev/null -g nogroup \
            -s /bin/false -u 38 fetchmail

Install Fetchmail by running the following commands:

    PYTHON=python3 \
    ./configure --prefix=/usr \
                --enable-fallback=procmail &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install                                  &&
    chown -v fetchmail:nogroup /usr/bin/fetchmail

### Command Explanations

`PYTHON=python3`: a version of Python is required, but only used to install a module to allow fetchmailconf to be run. That module is unmaintained and should not be used.

`--enable-fallback=procmail`: This tells Fetchmail to hand incoming mail to Procmail for delivery, if the port 25 mail server is not present or not responding.

### Configuring Fetchmail

#### Config Files

`~/.fetchmailrc`

#### Configuration Information

### Note

If you are connecting to a mailserver that supports SSL/TLS-wrapped or "implicit" mode on a dedicated port (default 993) you should use fetchmail --ssl or add the option 'ssl' in an rcfile.

    cat > ~/.fetchmailrc << "EOF"

    # The logfile needs to exist when fetchmail is invoked, otherwise it will
    # dump the details to the screen. As with all logs, you will need to rotate
    # or clear it from time to time.
    set logfile fetchmail.log
    set no bouncemail
    # You probably want to set your local username as the postmaster
    set postmaster <username>

    poll SERVERNAME :
        user <isp_username> pass <password>;
        mda "/usr/bin/procmail -f %F -d %T";
    EOF

    touch ~/fetchmail.log       &&
    chmod -v 0600 ~/.fetchmailrc

This is an example configuration that should suffice for most people. You can add as many users and servers as you need using the same syntax.

man fetchmail: Look for the section near the bottom named CONFIGURATION EXAMPLES. It gives some quick examples. There are countless other configuration options once you get used to it.

If you expect to receive very little mail you can invoke fetchmail when you wish to receive any incoming mail. More commonly, it is either invoked in daemon mode with the `-d` option either on the command line, or in `.fetchmailrc` (see 'DAEMON MODE' in man fetchmailconf), or alternatively it is invoked from a cron job.

### Contents

Installed Programs: fetchmail and fetchmailconf
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

fetchmail | when executed as a user, this will source `~/.fetchmailrc` and download the appropriate mail
fetchmailconf | is intended to assist you in setting up and editing a `~/.fetchmailrc` configuration file, by using a Tk GUI interface. It is written for Python and the Tkinter module but is labelled with a WARNING that it needs to be updated for fetchmail 6.4's SSL options and other recent new options

Last updated on

## mailx-12.5

### Introduction to Heirloom mailx

The Heirloom mailx package (formerly known as the Nail package) contains mailx, a command-line Mail User Agent derived from Berkeley Mail. It is intended to provide the functionality of the POSIX mailx command with additional support for MIME messages, IMAP (including caching), POP3, SMTP, S/MIME, message threading/sorting, scoring, and filtering. Heirloom mailx is especially useful for writing scripts and batch processing.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5.orig.tar.gz

- Download MD5 sum: 29a6033ef1412824d02eb9d9213cb1f2

- Download size: 317 KB

- Estimated disk space required: 3.2 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/heirloom-mailx-12.5-fixes-1.patch

#### Heirloom mailx Dependencies

##### Optional

NSS-3.69, MIT Kerberos V5-1.19.2 (for IMAP GSSAPI authentication), and an MTA

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mailx

### Installation of Heirloom mailx

### Note

This package does not support parallel build.

Install Heirloom mailx by running the following commands.

    patch -Np1 -i ../heirloom-mailx-12.5-fixes-1.patch &&

    sed 's@<openssl@<openssl-1.0/openssl@' \
        -i openssl.c fio.c makeconfig      &&

    make -j1 LDFLAGS+="-L /usr/lib/openssl-1.0/" \
         SENDMAIL=/usr/sbin/sendmail

This package does not come with a test suite.

Now, as the `root` user:

    make PREFIX=/usr UCBINSTALL=/usr/bin/install install &&

    ln -v -sf mailx /usr/bin/mail &&
    ln -v -sf mailx /usr/bin/nail &&

    install -v -m755 -d     /usr/share/doc/heirloom-mailx-12.5 &&
    install -v -m644 README /usr/share/doc/heirloom-mailx-12.5

### Command Explanations

make SENDMAIL=/usr/sbin/sendmail: This changes the default MTA path of /usr/lib/sendmail.

make PREFIX=/usr UCBINSTALL=/usr/bin/install install: This changes the default installation path of `/usr/local` and the default install command path of `/usr/ucb`.

### Configuring Heirloom mailx

#### Config Files

`/etc/nail.rc`, `~/.mailrc` and `~/.nailrc`

### Contents

Installed Programs: mail, mailx and nail
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

mailx | is a command-line mail user agent compatible with the mailx command found on commercial Unix versions
mail | is a symbolic link to mailx
nail | is a symbolic link to mailx

Last updated on

## Mutt-2.1.2

### Introduction to Mutt

The Mutt package contains a Mail User Agent. This is useful for reading, writing, replying to, saving, and deleting your email.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://bitbucket.org/mutt/mutt/downloads/mutt-2.1.2.tar.gz

- Download (FTP): ftp://ftp.mutt.org/pub/mutt/mutt-2.1.2.tar.gz

- Download MD5 sum: 1573fd2154ab1b998363fff9ec9024f8

- Download size: 5.2 MB

- Estimated disk space required: 47 MB

- Estimated build time: 0.3 SBU

#### Mutt Dependencies

##### Recommended (for a text version of the manual)

Lynx-2.8.9rel.1, or Links-2.23 (or W3m, or ELinks) - please read the Note.

##### Optional

Aspell-0.60.8, Cyrus SASL-2.1.27, GDB-10.2, GnuPG-2.2.29, GnuTLS-3.7.2, GPGME-1.16.0, libidn-1.38, MIT Kerberos V5-1.19.2, an MTA (that provides a sendmail command), slang-2.3.2, SQLite-3.36.0, libgssapi, Mixmaster, QDBM or Tokyo Cabinet

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mutt

### Installation of Mutt

### Note

Mutt ships with an HTML version of its manual, but the text version is no longer provided because differences in the formatting from different text browsers compared to the shipped version caused complaints. To get a text file, the following are used in order of preference: lynx with overstriking (backspaces) for emphasis, w3m or elinks: the latter two apparently provide plain text. Plain text is generally preferred unless reading the HTML manual, so the instructions below use lynx if available, or else links to produce plain text.

Mutt requires a group named `mail`. You can add this group, if it does not exist, with this command:

    groupadd -g 34 mail

If you did not install an MTA, you need to modify the ownership of `/var/mail` with this command:

    chgrp -v mail /var/mail

Install Mutt by running the following commands:

To ensure that a plain text manual is created when using lynx or to otherwise use links to produce it (instead of elinks), run the following command:

    sed -i -e 's/ -with_backspaces//' -e 's/elinks/links/' \
      -e 's/-no-numbering -no-references//' doc/Makefile.in

Now configure and build the application:

    ./configure --prefix=/usr                           \
                --sysconfdir=/etc                       \
                --with-docdir=/usr/share/doc/mutt-2.1.2 \
                --with-ssl                              \
                --enable-external-dotlock               \
                --enable-pop                            \
                --enable-imap                           \
                --enable-hcache                         \
                --enable-sidebar                        &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Note

If you used a DESTDIR method to only install to a temporary location as a regular user (as part of a package menagement process), you will need to run the following as the `root` user after completing the real install:

    chown root:mail /usr/bin/mutt_dotlock &&
    chmod -v 2755 /usr/bin/mutt_dotlock

An info file is now installed, so you will also need to recreate the `/usr/share/info/dir` as described when Texinfo was installed in LFS.

### Command Explanations

`sed ... -e 's/ -with_backspaces//' ...`: This turns off the backspaces used for overstriking when lynx is used, resulting in readable plain text when using view.

`sed ... -e 's/elinks/links/' ...`: This allows links to be run instead of elinks which is not in the book.

`sed ... -e 's/-no-numbering -no-references//' ...`: This removes switches which are not understood by links.

`--enable-external-dotlock`: In some circumstances the mutt-dotlock program is not created. This switch ensures it is always created.

`--enable-pop`: This switch enables POP3 support.

`--enable-imap`: This switch enables IMAP support.

`--enable-hcache`: This switch enables header caching.

`--enable-sidebar`: This switch enables support for the sidebar (a list of mailboxes). It is off by default, but can be turned on by :set sidebar_visible in mutt (and off again with ':unset'), or it can be enabled in `~/.muttrc`.

`--with-ssl`: This parameter adds SSL/TLS support from openssl in POP3/IMAP/SMTP.

`--enable-autocrypt --with-sqlite3`: These two switches add support for passive protection against data collection, using gnupg and gpgme (gpgme is enabled by autocrypt). See The Manual.

`--enable-gpgme`: This switch enables GPG support through the GPGME package. Use this switch if you want GPG support in Mutt.

`--enable-smtp`: This switch enables SMTP relay support.

`--with-idn2`: Use this parameter if both libidn and libidn2 have been installed, and you wish to use libidn2 here.

`--with-sasl`: This parameter adds authentication support from Cyrus SASL-2.1.27 in POP3/IMAP/SMTP if they are enabled. Depending on the server configuration, this may not be needed for POP3 or IMAP. However, it is needed for SMTP authentication.

### Configuring Mutt

#### Config Files

`/etc/Muttrc`, `~/.muttrc`, `/etc/mime.types`, and `~/.mime.types`

#### Configuration Information

No changes in these files are necessary to begin using Mutt. When you are ready to make changes, the man page for `muttrc` is a good starting place.

In order to utilize GnuPG, use the following command:

    cat /usr/share/doc/mutt-2.1.2/samples/gpg.rc >> ~/.muttrc

### Contents

Installed Programs: flea, mutt, mutt_dotlock, muttbug, pgpewrap, pgpring, and smime_keys
Installed Libraries: None
Installed Directories: /usr/share/doc/mutt-2.1.2

#### Short Descriptions

flea | is a script showing where to report bugs
mutt | is a Mail User Agent (MUA) which enables you to read, write and delete your email
mutt_dotlock | implements the mail spool file lock
muttbug | is a script identical to flea
pgpewrap | prepares a command line for the GnuPG-2.2.29 utilities
pgpring | is a key ring dumper for PGP. It is not needed for GnuPG-2.2.29
smime_keys | manages a keystore for S/MIME certificates

Last updated on

## Procmail-3.22

### Introduction to Procmail

The Procmail package contains an autonomous mail processor. This is useful for filtering and sorting incoming mail.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.osuosl.org/pub/blfs/conglomeration/procmail/procmail-3.22.tar.gz

- Download MD5 sum: 1678ea99b973eb77eda4ecf6acae53f1

- Download size: 226 KB

- Estimated disk space required: 1.7 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/procmail-3.22-consolidated_fixes-1.patch

#### Procmail Dependencies

##### Recommended

A MTA that installs sendmail

##### Optional

libnsl-1.3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/procmail

### Installation of Procmail

This package does not come with a test suite.

Install Procmail by running the following commands as the `root` user:

    sed -i 's/getline/get_line/' src/*.[ch]                   &&
    patch -Np1 -i ../procmail-3.22-consolidated_fixes-1.patch &&

    make LOCKINGTEST=/tmp MANDIR=/usr/share/man install       &&
    make install-suid

### Command Explanations

sed -i 's/getline/get_line/' src/*.[ch]: This renames procmail's getline function to avoid conflict with the getline function from glibc.

make LOCKINGTEST=/tmp install: This prevents make from asking you where to test file-locking patterns.

make install-suid: Modifies permissions of the installed files.

### Configuring Procmail

#### Config Files

`/etc/procmailrc` and `~/.procmailrc`

#### Configuration Information

Recipes have to be written and placed in `~/.procmailrc` for execution. The procmailex man page is the starting place to learn how to write recipes. For additional information, see also http://pm-doc.sourceforge.net/.

### Contents

Installed Programs: formail, lockfile, mailstat and procmail
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

formail | is a filter that can be used to format mail into mailbox format
lockfile | is a utility that can lock a file for single use interactively or in a script
mailstat | prints a summary report of mail that has been filtered by procmail since the last time mailstat was ran
procmail | is an autonomous mail processor. It performs all the functions of an MDA (Mail Delivery Agent)

Last updated on

## Other Mail and News Programs

Balsa-2.6.3 is a GTK2 based mail client.

SeaMonkey-2.53.9 includes both a mail client and newsreader in its installation.

Thunderbird-91.0.3 is a mail/news client based on the Mozilla code base.

Last updated on

# Part V. Servers

## Chapter 20. Major Servers

Major servers are the programs that provide content or services to users or other programs.

## Apache-2.4.48

### Introduction to Apache HTTPD

The Apache HTTPD package contains an open-source HTTP server. It is useful for creating local intranet web sites or running huge web serving operations.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/httpd/httpd-2.4.48.tar.bz2

- Download MD5 sum: a7088cec171b0d00bf43394ce64d3909

- Download size: 6.9 MB

- Estimated disk space required: 130 MB

- Estimated build time: 0.8 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/httpd-2.4.48-blfs_layout-1.patch

#### Apache HTTPD Dependencies

##### Required

Apr-Util-1.6.1 and PCRE-8.45

##### Optional

Brotli-1.0.9, Berkeley DB-5.3.28, Doxygen-1.9.2, libxml2-2.9.12, Lua-5.4.3, Lynx-2.8.9rel.1 or Links-2.23 or ELinks, nghttp2-1.44.0, OpenLDAP-2.5.7 (Apr-Util-1.6.1 needs to be installed with ldap support), rsync-3.2.3, and Distcache

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/apache

### Installation of Apache HTTPD

For security reasons, running the server as an unprivileged user and group is strongly encouraged. Create the following group and user using the following commands as `root`:

    groupadd -g 25 apache &&
    useradd -c "Apache Server" -d /srv/www -g apache \
            -s /bin/false -u 25 apache

Build and install Apache HTTPD by running the following commands:

    patch -Np1 -i ../httpd-2.4.48-blfs_layout-1.patch             &&

    sed '/dir.*CFG_PREFIX/s@^@#@' -i support/apxs.in              &&

    ./configure --enable-authnz-fcgi                              \
                --enable-layout=BLFS                              \
                --enable-mods-shared="all cgi"                    \
                --enable-mpms-shared=all                          \
                --enable-suexec=shared                            \
                --with-apr=/usr/bin/apr-1-config                  \
                --with-apr-util=/usr/bin/apu-1-config             \
                --with-suexec-bin=/usr/lib/httpd/suexec           \
                --with-suexec-caller=apache                       \
                --with-suexec-docroot=/srv/www                    \
                --with-suexec-logfile=/var/log/httpd/suexec.log   \
                --with-suexec-uidmin=100                          \
                --with-suexec-userdir=public_html                 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

### Note

This package does not install properly using `DESTDIR` techniques as an unpriviledged user.

    make install  &&

    mv -v /usr/sbin/suexec /usr/lib/httpd/suexec &&
    chgrp apache           /usr/lib/httpd/suexec &&
    chmod 4754             /usr/lib/httpd/suexec &&

    chown -v -R apache:apache /srv/www

### Command Explanations

sed '/dir.*CFG_PREFIX/s@^@#@'...: Forces the apxs utility to use absolute pathnames for modules, when instructed to do so.

`--enable-authnz-fcgi`: Build FastCGI authorizer-based authentication and authorization (mod_authnz_fcgi.so fast CGI module).

`--enable-mods-shared="all cgi"`: The modules should be compiled and used as Dynamic Shared Objects (DSOs) so they can be included and excluded from the server using the run-time configuration directives.

`--enable-mpms-shared=all`: This switch ensures that all MPM (Multi Processing Modules) are built as Dynamic Shared Objects (DSOs), so the user can choose which one to use at runtime.

`--enable-suexec`: This switch enables building of the Apache suEXEC module which can be used to allow users to run CGI and SSI scripts under user IDs different from the user ID of the calling web server.

`--with-suexec-*`: These switches control suEXEC module behavior, such as default document root, minimal UID that can be used to run the script under the suEXEC. Please note that with minimal UID 100, you can't run CGI or SSI scripts under suEXEC as the `apache` user.

... /usr/lib/httpd/suexec: These commands put suexec wrapper into proper location, since it is not meant to be run directly. They also adjust proper permissions of the binary, making it setgid `apache`.

chown -R apache:apache /srv/www: By default, the installation process installs files (documentation, error messages, default icons, etc.) with the ownership of the user that extracted the files from the tar file. If you want to change the ownership to another user, you should do so at this point. The only requirement is that the document directories need to be accessible by the httpd process with (r-x) permissions and files need to be readable (r--) by the `apache` user.

### Configuring Apache

#### Config Files

`/etc/httpd/httpd.conf` and `/etc/httpd/extra/*`

#### Configuration Information

See file:///usr/share/httpd/manual/configuring.html for detailed instructions on customising your Apache HTTP server configuration file.

#### Systemd Unit

If you want the Apache server to start automatically when the system is booted, install the `httpd.service` unit included in the blfs-systemd-units-20210819 package:

    make install-httpd

### Contents

Installed Programs: ab, apachectl, apxs, checkgid, dbmmanage, fcgistarter, htcacheclean, htdbm, htdigest, htpasswd, httpd, httxt2dbm, logresolve, rotatelogs, and suexec
Installed Libraries: Several libraries under /usr/lib/httpd/modules/
Installed Directories: /etc/httpd, /srv/www, /usr/include/httpd, /usr/lib/httpd, /usr/share/httpd, /var/log/httpd, and /var/run/httpd

#### Short Descriptions

ab | is a tool for benchmarking your Apache HTTP server
apachectl | is a front end to the Apache HTTP server which is designed to help the administrator control the functioning of the Apache httpd daemon
apxs | is a tool for building and installing extension modules for the Apache HTTP server
checkgid | is a program that checks whether it can setgid to the group specified. This is to see if it is a valid group for Apache2 to use at runtime. If the user (should be run as superuser) is in that group, or can setgid to it, it will return 0
dbmmanage | is used to create and update the DBM format files used to store usernames and passwords for basic authentication of HTTP users
fcgistarter | is a tool to start a FastCGI program
htcacheclean | is used to clean up the disk cache
htdbm | is used to manipulate the DBM password databases
htdigest | is used to create and update the flat-files used to store usernames, realms and passwords for digest authentication of HTTP users
htpasswd | is used to create and update the flat-files used to store usernames and passwords for basic authentication of HTTP users
httpd | is the Apache HTTP server program
httxt2dbm | is used to generate DBM files from text, for use in RewriteMap
logresolve | is a post-processing program to resolve IP-addresses in Apache's access log files
rotatelogs | is a simple program for use in conjunction with Apache's piped log file feature
suexec | allows users to run CGI and SSI applications as a different user

Last updated on

## BIND-9.16.20

### Introduction to BIND

The BIND package provides a DNS server and client utilities. If you are only interested in the utilities, refer to the BIND Utilities-9.16.20.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.isc.org/isc/bind9/9.16.20/bind-9.16.20.tar.xz

- Download MD5 sum: 8025b8f8463b3b9d9c902bab27f185a2

- Download size: 4.8 MB

- Estimated disk space required: 117 MB (20 MB installed)

- Estimated build time: 0.8 SBU (with parallelism=4; add 30+ minutes, somewhat processor independent, to run the complete test suite)

#### BIND Dependencies

##### Required

libuv-1.42.0

##### Recommended

JSON-C-0.15 and libcap-2.53 with PAM

##### Optional

cURL-7.78.0, libidn2-2.3.2, libxml2-2.9.12, lmdb-0.9.29, MIT Kerberos V5-1.19.2, cmocka, geoip, pytest, Sphinx, and w3m

##### Optional database backends

Berkeley DB-5.3.28, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, PostgreSQL-13.4, and unixODBC-2.3.9

##### Optional (to run the test suite)

Net-DNS-1.32

##### Optional (to rebuild the documentation)

Doxygen-1.9.2, libxslt-1.1.34, and texlive-20210325 (or install-tl-unx)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bind

### Installation of BIND

To ensure BIND will build dnssec-keymgr, install a python module as the `root` user:

    pip3 install ply

Fix a regression identified upstream:

    sed -i 's/MAPAPI=2.0/MAPAPI=3.0/' lib/dns/mapapi

Install BIND by running the following commands:

    ./configure --prefix=/usr           \
                --sysconfdir=/etc       \
                --localstatedir=/var    \
                --mandir=/usr/share/man \
                --with-libtool          \
                --disable-static        &&
    make

Issue the following commands to run the complete suite of tests. First, as the `root` user, set up some test interfaces:

### Note

If IPv6 is not enabled in the kernel, there will be several error messages: "RTNETLINK answers: Operation not permitted". These messages do not affect the tests.

    bin/tests/system/ifconfig.sh up

The test suite may indicate some skipped tests depending on what configuration options are used. Some tests are marked “UNTESTED” if Net-DNS-1.32 is not installed. To run the tests, as an unprivileged user, execute:

    make -k check

Again as `root`, clean up the test interfaces:

    bin/tests/system/ifconfig.sh down

Finally, install the package as the `root` user:

    make install

### Command Explanations

`--sysconfdir=/etc`: This parameter forces BIND to look for configuration files in `/etc` instead of `/usr/etc`.

`--with-libtool`: This parameter forces the building of dynamic libraries and links the installed binaries to these libraries.

`--with-libidn2`: This parameter enables the IDNA2008 (Internationalized Domain Names in Applications) support.

`--enable-fetchlimit`: Use this option if you want to be able to limit the rate of recursive client queries. This may be useful on servers which receive a large number of queries.

`--disable-linux-caps`: BIND can also be built without capability support by using this option, at the cost of some loss of security.

`--with-dlz-{mysql,bdb,filesystem,ldap,odbc,stub}`: Use one (or more) of those options to add Dynamically Loadable Zones support. For more information refer to bind-dlz.sourceforge.net.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Configuring BIND

#### Config files

`named.conf`, `root.hints`, `127.0.0`, `rndc.conf`, and `resolv.conf`

#### Configuration Information

BIND will be configured to run in a chroot jail as an unprivileged user (`named`). This configuration is more secure in that a DNS compromise can only affect a few files in the `named` user's `HOME` directory.

Create the unprivileged user and group `named`:

    groupadd -g 20 named &&
    useradd -c "BIND Owner" -g named -s /bin/false -u 20 named &&
    install -d -m770 -o named -g named /srv/named

Set up some files, directories and devices needed by BIND:

    mkdir -p /srv/named &&
    cd       /srv/named &&
    mkdir -p dev etc/named/{slave,pz} usr/lib/engines var/run/named &&
    mknod /srv/named/dev/null c 1 3 &&
    mknod /srv/named/dev/urandom c 1 9 &&
    chmod 666 /srv/named/dev/{null,urandom} &&
    cp /etc/localtime etc

The `rndc.conf` file contains information for controlling named operations with the rndc utility. Generate a key for use in the `named.conf` and `rndc.conf` with the rndc-confgen command:

    rndc-confgen -a -b 512 -t /srv/named

Complete the `named.conf` file from which named will read the location of zone files, root name servers and secure DNS keys:

    cat >> /srv/named/etc/named.conf << "EOF"
    options {
        directory "/etc/named";
        pid-file "/var/run/named.pid";
        statistics-file "/var/run/named.stats";

    };
    zone "." {
        type hint;
        file "root.hints";
    };
    zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
    };

    // Bind 9 now logs by default through syslog (except debug).
    // These are the default logging rules.

    logging {
        category default { default_syslog; default_debug; };
        category unmatched { null; };

      channel default_syslog {
          syslog daemon;                      // send to syslog's daemon
                                              // facility
          severity info;                      // only send priority info
                                              // and higher
      };

      channel default_debug {
          file "named.run";                   // write to named.run in
                                              // the working directory
                                              // Note: stderr is used instead
                                              // of "named.run"
                                              // if the server is started
                                              // with the '-f' option.
          severity dynamic;                   // log at the server's
                                              // current debug level
      };

      channel default_stderr {
          stderr;                             // writes to stderr
          severity info;                      // only send priority info
                                              // and higher
      };

      channel null {
          null;                               // toss anything sent to
                                              // this channel
      };
    };
    EOF

Create a zone file with the following contents:

    cat > /srv/named/etc/named/pz/127.0.0 << "EOF"
    $TTL 3D
    @      IN      SOA     ns.local.domain. hostmaster.local.domain. (
                            1       ; Serial
                            8H      ; Refresh
                            2H      ; Retry
                            4W      ; Expire
                            1D)     ; Minimum TTL
                    NS      ns.local.domain.
    1               PTR     localhost.
    EOF

Create the `root.hints` file with the following commands:

### Note

Caution must be used to ensure there are no leading spaces in this file.

    cat > /srv/named/etc/named/root.hints << "EOF"
    .                       6D  IN      NS      A.ROOT-SERVERS.NET.
    .                       6D  IN      NS      B.ROOT-SERVERS.NET.
    .                       6D  IN      NS      C.ROOT-SERVERS.NET.
    .                       6D  IN      NS      D.ROOT-SERVERS.NET.
    .                       6D  IN      NS      E.ROOT-SERVERS.NET.
    .                       6D  IN      NS      F.ROOT-SERVERS.NET.
    .                       6D  IN      NS      G.ROOT-SERVERS.NET.
    .                       6D  IN      NS      H.ROOT-SERVERS.NET.
    .                       6D  IN      NS      I.ROOT-SERVERS.NET.
    .                       6D  IN      NS      J.ROOT-SERVERS.NET.
    .                       6D  IN      NS      K.ROOT-SERVERS.NET.
    .                       6D  IN      NS      L.ROOT-SERVERS.NET.
    .                       6D  IN      NS      M.ROOT-SERVERS.NET.
    A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
    A.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:ba3e::2:30
    B.ROOT-SERVERS.NET.     6D  IN      A       192.228.79.201
    B.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:200::b
    C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
    C.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2::c
    D.ROOT-SERVERS.NET.     6D  IN      A       199.7.91.13
    D.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2d::d
    E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
    E.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:a8::e
    F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
    F.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2f::f
    G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
    G.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:12::d0d
    H.ROOT-SERVERS.NET.     6D  IN      A       198.97.190.53
    H.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:1::53
    I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
    I.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fe::53
    J.ROOT-SERVERS.NET.     6D  IN      A       192.58.128.30
    J.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:c27::2:30
    K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
    K.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fd::1
    L.ROOT-SERVERS.NET.     6D  IN      A       199.7.83.42
    L.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:9f::42
    M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33
    M.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:dc3::35
    EOF

The `root.hints` file is a list of root name servers. This file must be updated periodically with the dig utility. A current copy of root.hints can be obtained from ftp://rs.internic.net/domain/named.root. For details, consult the "BIND 9 Administrator Reference Manual", included in every source archive of BIND 9 distributed by ISC, in HTML and PDF formats, also available at BIND 9 Administrator Reference Manual.

Create or modify `resolv.conf` to use the new name server with the following commands:

### Note

Replace `<yourdomain.com>` with your own valid domain name.

    cp /etc/resolv.conf /etc/resolv.conf.bak &&
    cat > /etc/resolv.conf << "EOF"
    search <yourdomain.com>
    nameserver 127.0.0.1
    EOF

Set permissions on the chroot jail with the following command:

    chown -R named:named /srv/named

#### Systemd Unit

To start the DNS server at boot, install the `named.service` unit included in the blfs-systemd-units-20210819 package:

    make install-named

Now start BIND with the following command:

    systemctl start named

#### Testing BIND

Test out the new BIND 9 installation. First query the local host address with dig:

    dig -x 127.0.0.1

Now try an external name lookup, taking note of the speed difference in repeated lookups due to the caching. Run the dig command twice on the same address:

    dig www.linuxfromscratch.org &&
    dig www.linuxfromscratch.org

You can see almost instantaneous results with the named caching lookups. Consult the BIND Administrator Reference Manual located at https://bind9.readthedocs.io/en/v9_16/ for further configuration options.

### Contents

Installed Programs: arpaname, ddns-confgen, delv, dig, dnssec-cds, dnssec-checkds, dnssec-coverage, dnssec-dsfromkey, dnssec-importkey, dnssec-keyfromlabel, dnssec-keygen, dnssec-keymgr, dnssec-revoke, dnssec-settime, dnssec-signzone, dnssec-verify, host, mdig, named, named-checkconf, named-checkzone, named-compilezone (symlink), named-journalprint, named-nzd2nzf, named-rrchecker, nsec3hash, nslookup, nsupdate, rndc, rndc-confgen, and tsig-keygen (symlink)
Installed Libraries: libbind9.so, libdns.so, libirs.so, libisc.so, libisccc.so, libisccfg.so, and libns.so
Installed Directories: /usr/include/{bind9,dns,dst,irs,isc,isccc,isccfg,ns,pk11,pkcs11}, /usr/lib/named, /usr/lib/python3.9/site-packages/isc, and /srv/named

#### Short Descriptions

arpaname | translates IP addresses to the corresponding ARPA names
ddns-confgen | generates a key for use by nsupdate and named
delv | is a new debugging tool that is a successor to dig
dig | interrogates DNS servers
dnssec-cds | changes DS records for a child zone based on CDS/CDNSKEY
dnssec-checkds | is a DNSSEC delegation consistency checking tool
dnssec-coverage | verifies that the DNSSEC keys for a given zone or a set of zones have timing metadata set properly to ensure no future lapses in DNSSEC coverage
dnssec-dsfromkey | outputs the Delegation Signer (DS) resource record (RR)
dnssec-importkey | reads a public DNSKEY record and generates a pair of .key/.private files
dnssec-keyfromlabel | gets keys with the given label from a cryptography hardware device and builds key files for DNSSEC
dnssec-keygen | is a key generator for secure DNS
dnssec-keymgr | ensures correct DNSKEY coverage based on a defined policy
dnssec-revoke | sets the REVOKED bit on a DNSSEC key
dnssec-settime | sets the key timing metadata for a DNSSEC key
dnssec-signzone | generates signed versions of zone files
dnssec-verify | verifies that a zone is fully signed for each algorithm found in the DNSKEY RRset for the zone, and that the NSEC / NSEC3 chains are complete
host | is a utility for DNS lookups
mdig | is a version of dig that allows multiple queries at once
named | is the name server daemon
named-checkconf | checks the syntax of `named.conf` files
named-checkzone | checks zone file validity
named-compilezone | is similar to named-checkzone, but it always dumps the zone contents to a specified file in a specified format
named-journalprint | prints the zone journal in human-readable form
named-rrchecker | reads an individual DNS resource record from standard input and checks if it is syntactically correct
named-nzd2nzf | converts an NZD database to NZF text format
nsec3hash | generates an NSEC3 hash based on a set of NSEC3 parameters
nslookup | is a program used to query Internet domain nameservers
nsupdate | is used to submit DNS update requests
rndc | controls the operation of BIND
rndc-confgen | generates `rndc.conf` files
tsig-keygen | is a symlink to ddns-confgen

Last updated on

## ProFTPD-1.3.7c

### Introduction to ProFTPD

The ProFTPD package contains a secure and highly configurable FTP daemon. This is useful for serving large file archives over a network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.7c.tar.gz

- Download MD5 sum: bee3df0bc3c945c62657410610fedeb3

- Download size: 19.4 MB

- Estimated disk space required: 76 MB

- Estimated build time: 0.3 SBU

#### ProFTPD Dependencies

##### Optional

libcap-2.53 with PAM, libssh2-1.9.0, Linux-PAM-1.5.1, MariaDB-10.6.4 or MySQL, PCRE-8.45, PostgreSQL-13.4, and Net::SSH2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/proftpd

### Installation of ProFTPD

For security reasons, you should install ProFTPD using an unprivileged user and group. As the `root` user:

    groupadd -g 46 proftpd                             &&
    useradd -c proftpd -d /srv/ftp -g proftpd \
            -s /usr/bin/proftpdshell -u 46 proftpd     &&

    install -v -d -m775 -o proftpd -g proftpd /srv/ftp &&
    ln -v -s /bin/false /usr/bin/proftpdshell          &&
    echo /usr/bin/proftpdshell >> /etc/shells

Install ProFTPD as an unprivileged user by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/run &&
    make

This packages does not come with a usable test suite.

Now, as the `root` user:

    make install                                   &&
    install -d -m755 /usr/share/doc/proftpd-1.3.7c &&
    cp -Rv doc/*     /usr/share/doc/proftpd-1.3.7c

### Command Explanations

install -v -d -m775 -o proftpd -g proftpd /srv/ftp: Create the home directory for ProFTPD.

ln -v -s /bin/false /usr/bin/proftpdshell: Set the default shell as a link to an invalid shell.

echo /usr/bin/proftpdshell >> /etc/shells: Fake a valid shell for compatibility purposes.

### Note

The above two commands can be omitted if the following directive is placed in the configuration file:

    RequireValidShell off

By default, proftpd will require that users logging in have valid shells. The RequireValidShell directive turns off this requirement. This is only recommended if you are setting up your FTP server exclusively for anonymous downloads.

### Note

Support for most of the dependency packages requires using options passed to the configure script. View the output from ./configure --help for complete information about enabling dependency packages.

### Configuring ProFTPD

#### Config Files

`/etc/proftpd.conf`

#### Configuration Information

This is a simple, download-only sample configuration. See the ProFTPD documentation in `/usr/share/doc/proftpd` and consult the website at http://www.proftpd.org/ for example configurations.

    cat > /etc/proftpd.conf << "EOF"
    # This is a basic ProFTPD configuration file
    # It establishes a single server and a single anonymous login.

    ServerName                      "ProFTPD Default Installation"
    ServerType                      standalone
    DefaultServer                   on

    # Port 21 is the standard FTP port.
    Port                            21
    # Umask 022 is a good standard umask to prevent new dirs and files
    # from being group and world writable.
    Umask                           022

    # To prevent DoS attacks, set the maximum number of child processes
    # to 30.  If you need to allow more than 30 concurrent connections
    # at once, simply increase this value.  Note that this ONLY works
    # in standalone mode, in inetd mode you should use an inetd server
    # that allows you to limit maximum number of processes per service

    MaxInstances                    30

    # Set the user and group that the server normally runs at.
    User                            proftpd
    Group                           proftpd

    # To cause every FTP user to be "jailed" (chrooted) into their home
    # directory, uncomment this line.
    #DefaultRoot ~

    # Normally, files should be overwritable.
    <Directory /*>
      AllowOverwrite                on
    </Directory>

    # A basic anonymous configuration, no upload directories.
    <Anonymous ~proftpd>
      User                          proftpd
      Group                         proftpd
      # Clients should be able to login with "anonymous" as well as "proftpd"
      UserAlias                     anonymous proftpd

      # Limit the maximum number of anonymous logins
      MaxClients                    10

      # 'welcome.msg' should be displayed at login, and '.message' displayed
      # in each newly chdired directory.
      DisplayLogin                  welcome.msg
      DisplayChdir                  .message

      # Limit WRITE everywhere in the anonymous chroot
      <Limit WRITE>
        DenyAll
      </Limit>
    </Anonymous>
    EOF

#### Systemd Unit

Install the `proftpd.service` unit included in the blfs-systemd-units-20210819 package:

    make install-proftpd

### Contents

Installed Programs: ftpasswd, ftpcount, ftpdctl, ftpmail, ftpquota, ftpscrub, ftpshut, ftptop, ftpwho, in.proftpd (symlink to proftpd), proftpd, and prxs
Installed Libraries: None
Installed Directory: /usr/{include,lib}/proftpd, /usr/share/doc/proftpd-1.3.7c, and /srv/ftp

#### Short Descriptions

proftpd | is the FTP daemon
ftpcount | shows the current number of connections
ftpdctl | is used to control the proftpd daemon while it is running
ftpasswd | is a Perl script designed to create and manage AuthUserFiles and AuthGroupFiles of the correct format for proftpd
ftpmail | is a Perl script for sending email based on the proftpd TransferLog
ftpquota | is a Perl script designed to create and manage limits and tally files for the mod_quotatab + mod_quotatab_file module combination for proftpd
ftpscrub | provides a way to scrub the scoreboard file on demand
ftpshut | shuts down all proftpd servers at a given time
ftptop | displays running status on connections
ftpwho | shows current process information for each session
prxs | is a Perl script designed to compile and install third-party modules, from source code, as DSO modules for the installed proftpd

Last updated on

## vsftpd-3.0.5

### Introduction to vsftpd

The vsftpd package contains a very secure and very small FTP daemon. This is useful for serving files over a network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://security.appspot.com/downloads/vsftpd-3.0.5.tar.gz

- Download MD5 sum: efbf362a65bec771bc15ad311f5a982e

- Download size: 210 KB

- Estimated disk space required: 1.9 MB

- Estimated build time: less than 0.1 SBU

#### vsftpd Dependencies

##### Required

libnsl-1.3.0

##### Recommended

Linux-PAM-1.5.1

##### Optional

libcap-2.53 with PAM

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vsftpd

### Installation of vsftpd

For security reasons, running vsftpd as an unprivileged user and group is encouraged. Also, a user should be created to map anonymous users. As the `root` user, create the needed directories, users, and groups with the following commands:

    install -v -d -m 0755 /usr/share/vsftpd/empty &&
    install -v -d -m 0755 /home/ftp               &&
    groupadd -g 47 vsftpd                         &&
    groupadd -g 45 ftp                            &&

    useradd -c "vsftpd User"  -d /dev/null -g vsftpd -s /bin/false -u 47 vsftpd &&
    useradd -c anonymous_user -d /home/ftp -g ftp    -s /bin/false -u 45 ftp

Gcc-10 and later flags an error for an implicit type cast. Make it explicit:

    sed -e "s/kVSFSysStrOpenUnknown;/(enum EVSFSysUtilOpenMode)&/" -i sysstr.c

Build vsftpd as an unprivileged user using the following command:

    make

This package does not come with a test suite.

Once again, become the `root` user and install vsftpd with the following commands:

    install -v -m 755 vsftpd        /usr/sbin/vsftpd    &&
    install -v -m 644 vsftpd.8      /usr/share/man/man8 &&
    install -v -m 644 vsftpd.conf.5 /usr/share/man/man5 &&
    install -v -m 644 vsftpd.conf   /etc

### Command Explanations

install -v -d ...: This creates the directory that anonymous users will use (`/home/ftp`) and the directory the daemon will chroot into (`/usr/share/vsftpd/empty`).

### Note

`/home/ftp` should not be owned by the user `vsftpd`, or the user `ftp`.

echo "#define VSF_BUILD_TCPWRAPPERS" >>builddefs.h: Use this prior to make to add support for tcpwrappers.

echo "#define VSF_BUILD_SSL" >>builddefs.h: Use this prior to make to add support for SSL.

install -v -m ...: The `Makefile` uses non-standard installation paths. These commands install the files in `/usr` and `/etc`.

### Configuring vsftpd

#### Config Files

`/etc/vsftpd.conf`

#### Configuration Information

vsftpd comes with a basic anonymous-only configuration file that was copied to `/etc` above. While still as `root`, this file should be modified because it is now recommended to run vsftpd in standalone mode. Also, you should specify the privilege separation user created above. Finally, you should specify the chroot directory. man vsftpd.conf will give you all the details.

    cat >> /etc/vsftpd.conf << "EOF"
    background=YES
    nopriv_user=vsftpd
    secure_chroot_dir=/usr/share/vsftpd/empty
    EOF

The vsftpd daemon uses seccomp to improve security by default. But it's known to cause vsftpd unable to handle ftp `LIST` command with recent kernel versions. Append a line to `/etc/vsftpd.conf` (as the `root` user) to disable seccomp and workaround this issue:

    cat >> /etc/vsftpd.conf << "EOF"
    seccomp_sandbox=NO
    EOF

To enable local logins, append the following to the `/etc/vsftpd.conf` file (as the `root` user):

    cat >> /etc/vsftpd.conf << "EOF"
    local_enable=YES
    EOF

In addition, if using Linux-PAM and vsftpd with local user logins, you will need a Linux-PAM configuration file. As the `root` user, create the `/etc/pam.d/vsftpd` file, and add the needed configuration changes for Linux-PAM session support using the following commands:

    cat > /etc/pam.d/vsftpd << "EOF" &&
    # Begin /etc/pam.d/vsftpd
    auth       required     /lib/security/pam_listfile.so item=user sense=deny \
                                                          file=/etc/ftpusers \
                                                          onerr=succeed
    auth       required     pam_shells.so
    auth       include      system-auth
    account    include      system-account
    session    include      system-session
    EOF

    cat >> /etc/vsftpd.conf << "EOF"
    session_support=YES
    pam_service_name=vsftpd
    EOF

#### Systemd Unit

Install the `vsftpd.service` unit included in the blfs-systemd-units-20210819 package:

    make install-vsftpd

### Contents

Installed Program: vsftpd
Installed Libraries: None
Installed Directories: /usr/share/vsftpd, /home/ftp

#### Short Descriptions

vsftpd | is the FTP daemon

Last updated on

## Chapter 21. Mail Server Software

MTAs are the programs which transport mail from one machine to the other. The traditional MTA is Sendmail, however there are several other choices.

As well as SMTP servers there is a POP server (qpopper) and an IMAP server (Courier-IMAP).

## Dovecot-2.3.16

### Introduction to Dovecot

Dovecot is an Internet Message Access Protocol (IMAP) and Post Office Protocol (POP) server, written primarily with security in mind. Dovecot aims to be lightweight, fast and easy to set up as well as highly configurable and easily extensible with plugins.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.dovecot.org/releases/2.3/dovecot-2.3.16.tar.gz

- Download MD5 sum: 946dc6a89db0d11d0061f0d4447263dc

- Download size: 7.3 MB

- Estimated disk space required: 205 MB

- Estimated build time: 4.8 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/dovecot-2.3.16-lua_fixes-1.patch

#### Dovecot Dependencies

##### Required

libtirpc-1.3.2

##### Optional

CLucene-2.3.3.4, ICU-69.1, libcap-2.53 with PAM, Linux-PAM-1.5.1, Lua-5.4.3, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, PostgreSQL-13.4, SQLite-3.36.0, Valgrind-3.17.0, xfsprogs-5.13.0, Cassandra, lz4, stemmer and libsodium

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dovecot

### Installation of Dovecot

There should be dedicated users and groups for unprivileged Dovecot processes and for processing users' logins. Issue the following commands as the `root` user:

    groupadd -g 42 dovecot &&
    useradd -c "Dovecot unprivileged user" -d /dev/null -u 42 \
            -g dovecot -s /bin/false dovecot &&
    groupadd -g 43 dovenull &&
    useradd -c "Dovecot login user" -d /dev/null -u 43 \
            -g dovenull -s /bin/false dovenull

First, apply a patch to fix compilation with Lua-5.4:

    patch -Np1 -i ../dovecot-2.3.16-lua_fixes-1.patch

Install Dovecot by running the following commands:

    CPPFLAGS="-I/usr/include/tirpc" \
    LDFLAGS+=" -ltirpc" \
    ./configure --prefix=/usr                          \
                --sysconfdir=/etc                      \
                --localstatedir=/var                   \
                --docdir=/usr/share/doc/dovecot-2.3.16 \
                --disable-static                       &&
    make

To test the results, issue make -k check.

Now, as the `root` user:

    make install

### Command Explanations

CPPFLAGS=... LDFLAGS+=...: build with libtirpc instead of the recently removed RPC code provided by GlibC.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-ldap`: This switch enables OpenLDAP authentication support.

`--with-pgsql`: This switch enables PostgreSQL database support.

`--with-mysql`: This switch enables MySQL database support.

`--with-sqlite`: This switch enables SQLite database support.

`--with-lucene`: This switch enables CLucene full text search support.

`--with-lua`: This switch enables Lua plugin support. This includes a mail and push notification plugin.

### Configuring Dovecot

#### Config Files

`/etc/dovecot/dovecot.conf`, `/etc/dovecot/conf.d/*`, and `/etc/dovecot/local.conf`

#### Configuration Information

Copy an example configuration, which you can use as a starting point:

    cp -rv /usr/share/doc/dovecot-2.3.16/example-config/* /etc/dovecot

The following configuration is a simple proof of concept with IMAP service using local users for authentication and mailbox location. Reading files from the `conf.d` directory is commented out since the included example configuration requires OpenSSL and Linux PAM.

    sed -i '/^\!include / s/^/#/' /etc/dovecot/dovecot.conf &&
    chmod -v 1777 /var/mail &&
    cat > /etc/dovecot/local.conf << "EOF"
    protocols = imap
    ssl = no
    # The next line is only needed if you have no IPv6 network interfaces
    listen = *
    mail_location = mbox:~/Mail:INBOX=/var/mail/%u
    userdb {
      driver = passwd
    }
    passdb {
      driver = shadow
    }
    EOF

You will definitely want to read the official documentation at http://wiki2.dovecot.org/ if you plan to use Dovecot in a production environment.

#### Systemd Unit

To start the dovecot daemon at boot, enable the previously installed systemd unit with the following command:

    systemctl enable dovecot

### Contents

Installed Programs: doveadm, doveconf, dovecot, dovecot-sysreport, and dsync (symbolic link)
Installed Libraries: various internal plugins in `/usr/lib/dovecot`
Installed Directories: /etc/dovecot, /usr/{include,lib,libexec,share}/dovecot and /usr/share/doc/dovecot-2.3.16

#### Short Descriptions

doveadm | is the Dovecot administration tool
doveconf | is Dovecot's configuration dumping utility
dovecot | is the IMAP and POP server
dovecot-sysreport | prints system information that is useful to the Dovecot developers when submitting bug reports upstream
dsync | is Dovecot's mailbox synchronization utility

Last updated on

## Exim-4.94.2

### Introduction to Exim

The Exim package contains a Mail Transport Agent written by the University of Cambridge, released under the GNU Public License.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.exim.org/pub/exim/exim4/exim-4.94.2.tar.xz

- Download (FTP): ftp://ftp.exim.org/pub/exim/exim4/exim-4.94.2.tar.xz

- Download MD5 sum: 4fbf1ebb36f0f43bb94ed0848eb13256

- Download size: 1.8 MB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### Additional Downloads

- Additional formats of the documentation (text-based docs are shipped with the sources) can be downloaded by following the links shown at http://exim.org/docs.html.

#### Exim Dependencies

##### Required

libnsl-1.3.0 and PCRE-8.45

##### Optional

TDB (alternative to GDBM, built in LFS), Cyrus SASL-2.1.27, libidn-1.38, Linux-PAM-1.5.1, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, GnuTLS-3.7.2, PostgreSQL-13.4, SQLite-3.36.0, X Window System, Heimdal GSSAPI, and OpenDMARC

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/exim

### Installation of Exim

Before building Exim, as the `root` user you should create the group and user `exim` which will run the exim daemon:

    groupadd -g 31 exim &&
    useradd -d /dev/null -c "Exim Daemon" -g exim -s /bin/false -u 31 exim

Install Exim with the following commands:

    sed -e 's,^BIN_DIR.*$,BIN_DIRECTORY=/usr/sbin,'    \
        -e 's,^CONF.*$,CONFIGURE_FILE=/etc/exim.conf,' \
        -e 's,^EXIM_USER.*$,EXIM_USER=exim,'           \
        -e '/# SUPPORT_TLS=yes/s,^#,,'                   \
        -e '/# USE_OPENSSL/s,^#,,'                       \
        -e 's,^EXIM_MONITOR,#EXIM_MONITOR,' src/EDITME > Local/Makefile &&

    printf "USE_GDBM = yes\nDBMLIB = -lgdbm\n" >> Local/Makefile &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install                                    &&
    install -v -m644 doc/exim.8 /usr/share/man/man8 &&

    install -v -d -m755    /usr/share/doc/exim-4.94.2 &&
    install -v -m644 doc/* /usr/share/doc/exim-4.94.2 &&

    ln -sfv exim /usr/sbin/sendmail                 &&
    install -v -d -m750 -o exim -g exim /var/spool/exim

### Command Explanations

sed -e ... > Local/Makefile: Most of Exim's configuration options are defined in `Local/Makefile`, which is created from the `src/EDITME` file. This command specifies the minimum set of options. Descriptions for the options are listed below.

printf ... > Local/Makefile: Setting those variables allows to use GDBM instead of the default Berkeley DB. Remove this command if you have installed Berkeley DB-5.3.28.

`BIN_DIRECTORY=/usr/sbin`: This installs all of Exim's binaries and scripts in `/usr/sbin`.

`CONFIGURE_FILE=/etc/exim.conf`: This installs Exim's main configuration file in `/etc`.

`EXIM_USER=exim`: This tells Exim that after the daemon no longer needs `root` privileges, the process hands off the daemon to the `exim` user.

`SUPPORT_TLS=yes`: This allows to support STARTTLS connections. If you use this option, you need to select whether OpenSSL or GnuTLS is used (see `src/EDITME`).

`USE_OPENSSL_PC=openssl`: This tells the build system to use OpenSSL, and to find the needed libraries with pkg-config.

`#EXIM_MONITOR`: This defers building the Exim monitor program, as it requires X Window System support, by commenting out the `EXIM_MONITOR` line in the `Makefile`. If you wish to build the monitor program, omit this sed command and issue the following command before building the package (modify `Local/eximon.conf`, if necessary): cp exim_monitor/EDITME Local/eximon.conf.

ln -sfv exim /usr/sbin/sendmail: Creates a link to sendmail for applications which need it. Exim will accept most Sendmail command-line options.

install -v -m750 -o exim -g exim /var/spool/exim: Since /var/spool is owned by root and this version of exim drops `root` privileges early, to run as user `exim`, it cannot create the `/var/spool/exim` directory. As a work around, it is created manually.

### Adding Additional Functionality

To utilize some or all of the dependency packages, you'll need to modify `Local/Makefile` to include the appropriate directives and parameters to link additional libraries before you build Exim. `Local/Makefile` is heavily commented with instructions on how to do this. Listed below is additional information to help you link these dependency packages or add additional functionality.

If you wish to build and install the `.info` documentation, refer to http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch04.html#SECTinsinfdoc.

If you wish to build in Exim's interfaces for calling virus and spam scanning software directly from access control lists, uncomment the `WITH_CONTENT_SCAN=yes` parameter and review the information found at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch45.html.

To use a backend database other than Berkeley DB, see the instructions at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch04.html#SECTdb.

For SSL functionality, see the instructions at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch04.html#SECTinctlsssl and http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch42.html.

For tcpwrappers functionality, see the instructions at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch04.html#SECID27.

For information about adding authentication mechanisms to the build, see chapters 33—41 of http://exim.org/exim-html-4.94.2/doc/html/spec_html/index.html.

For information about linking Linux-PAM, refer to the instructions http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch11.html#SECTexpcond.

For information about linking database engine libraries used for Exim name lookups, see the instructions at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch09.html.

If you wish to add Readline support to Exim when invoked in “test expansion” (`-be`) mode, see the information in the `-be` section of http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch05.html#id2525974.

You may wish to modify the default configuration and send log files to syslog instead of the default `/var/spool/exim/log` directory. See the information at http://exim.org/exim-html-4.94.2/doc/html/spec_html/ch52.html.

A wealth of information can be also found at the Exim Wiki.

### Configuring Exim

#### Config Files

`/etc/exim.conf` and `/etc/aliases`

#### Configuration Information

Review the file `/etc/exim.conf`, and modify any settings to suit your needs. Note that the default configuration assumes that the `/var/mail` directory is world writable, but has the sticky bit set. If you want to use the default configuration, issue as the `root` user:

    chmod -v a+wt /var/mail

A default (nothing but comments) `/etc/aliases` file is installed during the package installation if this file did not exist on your system. Create the necessary aliases and start the Exim daemon using the following commands:

    cat >> /etc/aliases << "EOF"
    postmaster: root
    MAILER-DAEMON: root
    EOF
    /usr/sbin/exim -bd -q15m

### Note

To protect an existing `/etc/aliases` file, the command above appends these aliases to it. This file should be checked and duplicate aliases removed, if present.

The /usr/sbin/exim -bd -q15m command starts the Exim daemon with a 15 minute interval in processing the mail queue. Adjust this parameter to suit your desires.

#### Systemd Unit

To automatically start exim at boot, install the `exim.service` unit included in the blfs-systemd-units-20210819 package:

    make install-exim

### Contents

Installed Programs: exicyclog, exigrep, exim, exim-4.94.2-2, exim_checkaccess, exim_dbmbuild, exim_dumpdb, exim_fixdb, exim_lock, exim_tidydb, eximstats, exinext, exipick, exiqgrep, exiqsumm, exiwhat, and optionally, eximon, eximon.bin, and sendmail (symlink)
Installed Libraries: None
Installed Directories: /usr/share/doc/exim-4.94.2 and /var/spool/exim

#### Short Descriptions

exicyclog | cycles Exim log files
exigrep | searches Exim log files
exim | is a symlink to the exim-4.94.2-2 MTA daemon
exim-4.94.2-2 | is the Exim mail transport agent daemon
exim_checkaccess | states whether a given recipient address from a given host is acceptable or not
exim_dbmbuild | creates and rebuilds Exim databases
exim_dumpdb | writes the contents of Exim databases to the standard output
exim_fixdb | modifies data in Exim databases
exim_lock | locks a mailbox file
exim_tidydb | removes old records from Exim databases
eximstats | generates mail statistics from Exim log files
exinext | queries remote host retry times
exipick | selects messages based on various criteria
exiqgrep | is a utility for selective queue listing
exiqsumm | produces a summary of the messages in the mail queue
exiwhat | queries running Exim processes
eximon | is a start-up shell script for eximon.bin used to set the required environment variables before running the program
eximon.bin | is a monitor program which displays current information in an X window, and also contains a menu interface to Exim's command line administration options

Last updated on

## Postfix-3.6.2

### Introduction to Postfix

The Postfix package contains a Mail Transport Agent (MTA). This is useful for sending email to other users of your host machine. It can also be configured to be a central mail server for your domain, a mail relay agent or simply a mail delivery agent to your local Internet Service Provider.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-3.6.2.tar.gz

- Download MD5 sum: 4718b498fa4285cf275f506c169f4746

- Download size: 4.5 MB

- Estimated disk space required: 149 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### Postfix Dependencies

##### Recommended

Berkeley DB-5.3.28, Cyrus SASL-2.1.27, and libnsl-1.3.0

##### Optional

ICU-69.1 for Email Address Internationalization (SMTPUTF8) support, MariaDB-10.6.4 or MySQL, OpenLDAP-2.5.7, PCRE-8.45, PostgreSQL-13.4, SQLite-3.36.0, and CDB or TinyCDB

Note that SQLite, MySQL, PostgreSQL and CDB are only useful if there is a known need for them.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/postfix

### Installation of Postfix

#### Adding Users and Groups

Before you compile the program, you need to create users and groups that will be expected to be in place during the installation. Add the users and groups with the following commands issued by the `root` user:

    groupadd -g 32 postfix &&
    groupadd -g 33 postdrop &&
    useradd -c "Postfix Daemon User" -d /var/spool/postfix -g postfix \
            -s /bin/false -u 32 postfix &&
    chown -v postfix:postfix /var/mail

#### Configuring the Build

The README files are formatted to be read with a pager like Less or More. If you want to use a text editor, make them legible with the following sed:

    sed -i 's/.\x08//g' README_FILES/*

Make an adjustment to allow Postfix to compile on Glibc-2.34 and later:

    sed -i '/<linux/i #define HAS_CLOSEFROM' src/util/sys_defs.h

The Postfix source tree does not contain a `configure` script, rather the makefile in the top-level directory contains a `makefiles` target that regenerates all the other makefiles in the build tree. If you wish to use additional software such as a database back-end for virtual users, or TLS/SSL authentication, you will need to regenerate the makefiles using one or more of the appropriate `CCARGS` and `AUXLIBS` settings listed below.

For more details read the readme files.

##### Cyrus-SASL

To use Cyrus-SASL with Postfix, use the following arguments:

    CCARGS='-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl'
    AUXLIBS='-lsasl2'

##### OpenLDAP

To use OpenLDAP with Postfix, use the following arguments:

    CCARGS='-DHAS_LDAP'
    AUXLIBS='-lldap -llber'

##### Sqlite

To use Sqlite with Postfix, use the following arguments:

    CCARGS='-DHAS_SQLITE'
    AUXLIBS='-lsqlite3 -lpthread'

##### MySQL

To use MySQL with Postfix, use the following arguments:

    CCARGS='-DHAS_MYSQL -I/usr/include/mysql'
    AUXLIBS='-lmysqlclient -lz -lm'

##### PostgreSQL

To use PostgreSQL with Postfix, use the following arguments:

    CCARGS='-DHAS_PGSQL -I/usr/include/postgresql'
    AUXLIBS='-lpq -lz -lm'

##### CDB/TinyCDB

To use CDB or TinyCDB with Postfix, use the following arguments:

    CCARGS='-DHAS_CDB'
    AUXLIBS='</path/to/CDB>/libcdb.a'

##### StartTLS Authentication

To use OpenSSL with Postfix, use the following arguments:

    CCARGS='-DUSE_TLS -I/usr/include/openssl/'
    AUXLIBS='-lssl -lcrypto'

#### Installing Postfix

If you have Cyrus SASL and OpenSSL installed, install Postfix by running the following commands:

    make CCARGS="-DUSE_TLS -I/usr/include/openssl/                     \
                 -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" \
         AUXLIBS="-lssl -lcrypto -lsasl2"                              \
         makefiles &&
    make

This package does not come with a useful test suite.

Now, as the `root` user:

    sh postfix-install -non-interactive \
       daemon_directory=/usr/lib/postfix \
       manpage_directory=/usr/share/man \
       html_directory=/usr/share/doc/postfix-3.6.2/html \
       readme_directory=/usr/share/doc/postfix-3.6.2/readme

### Command Explanations

make makefiles: This command rebuilds the makefiles throughout the source tree to use the options contained in the `CCARGS` and `AUXLIBS` variables.

sh postfix-install -non-interactive: This keeps the install script from asking any questions, thereby accepting default destination directories in all but the few cases. If the `html_directory` and `readme_directory` options are not set then the documentation will not be installed.

`CCARGS="-DNO_EAI ..."`: this will turn off SMTPUTF8 support, for example if the rest of your email address infrastructure cannot handle UTF-8 email addresses and message header values.

### Configuring Postfix

#### Config Files

`/etc/aliases`, `/etc/postfix/main.cf`, and `/etc/postfix/master.cf`

#### Configuration Information

Create (or append to an existing) `/etc/aliases` with the following command. Change `<LOGIN>` to your non-root login identity so mail addressed to `root` can be forwarded to you. As the `root` user:

    cat >> /etc/aliases << "EOF"
    # Begin /etc/aliases

    MAILER-DAEMON:    postmaster
    postmaster:       root

    root:             <LOGIN>
    # End /etc/aliases
    EOF

To protect an existing `/etc/aliases` file, the above command appends these aliases to it if it exists. This file should be checked and duplicate aliases removed, if present.

### Note

The `/etc/postfix/main.cf` and `/etc/postfix/master.cf` files must be personalized for your system. The `main.cf` file needs your fully qualified hostname. You will find that `main.cf` is self documenting, so load it into your editor to make the changes you need for your situation.

### Note

Postfix can also be set up to run in a chroot jail. See the file in the source `examples/chroot-setup/LINUX2` for details.

If you have an existing configuration, you can run the postfix utility to add any necessary definitions to your existing files. As the `root` user:

    /usr/sbin/postfix upgrade-configuration

Before starting Postfix, you should check that your configuration and file permissions will work properly. Run the following commands as the `root` user to check and start your Postfix server:

    /usr/sbin/postfix check &&
    /usr/sbin/postfix start

#### Systemd Unit

To automate the running of Postfix at startup, install the `postfix.service` unit included in the blfs-systemd-units-20210819 package:

    make install-postfix

### Contents

Installed Programs: mailq (symlink), newaliases (symlink), postalias, postcat, postconf, postdrop, postfix, postkick, postlock, postlog, postmap, postmulti, postqueue, postsuper, and sendmail
Installed Libraries: None
Installed Directories: /{etc,usr/lib}/postfix, /usr/share/doc/postfix-3.6.2 and /var/{lib,spool}/postfix

#### Short Descriptions

mailq | A symlink to `sendmail`
newaliases | A symlink to `sendmail`
postalias | is a utility for Postfix alias database maintenance
postcat | Prints the contents of files from the Postfix queue in human readable format
postconf | Displays or changes the value of Postfix configuration parameters
postdrop | Creates a file in the maildrop directory and copies its standard input to the file
postfix | is the Postfix control program
postkick | Sends requests to the specified service over a local transport channel
postlock | Locks a mail folder for exclusive use, and executes commands passed to it
postlog | A Postfix-compatible logging interface for use in, for example, shell scripts
postmap | Creates or queries one or more Postfix lookup tables, or updates an existing one
postmulti | is the Postfix multi-instance manager. It allows a system administrator to manage multiple Postfix instances on a single host
postqueue | The Postfix user interface for queue management
postsuper | The Postfix user interface for superuser queue management
sendmail | is the Postfix to Sendmail compatibility interface

Last updated on

## sendmail-8.17.1

### Introduction to sendmail

The sendmail package contains a Mail Transport Agent (MTA).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.17.1.tar.gz

- Download MD5 sum: cd3c3f7b2db60c362f07eecbebd99bf4

- Download size: 2.2 MB

- Estimated disk space required: 20 MB

- Estimated build time: 0.2 SBU

#### sendmail Dependencies

##### Required

OpenLDAP-2.5.7 (client)

##### Recommended

Cyrus SASL-2.1.27

##### Optional

ghostscript-9.54.0 (for creating PDF documentation), Procmail-3.22 (the configuration proposed below requires that procmail be present at run-time), and nph

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sendmail

### Installation of sendmail

Before building sendmail, create the required user, group and directory with the following commands issued as the `root` user:

    groupadd -g 26 smmsp                               &&
    useradd -c "Sendmail Daemon" -g smmsp -d /dev/null \
            -s /bin/false -u 26 smmsp                  &&
    chmod -v 1777 /var/mail                            &&
    install -v -m700 -d /var/spool/mqueue

### Note

See the source tree `sendmail/README` file for information on linking optional packages into the build. Use the example below, which adds support for SASL, StartTLS (OpenSSL) and OpenLDAP, as a starting point. Of course, modify it to suit your particular needs.

    cat >> devtools/Site/site.config.m4 << "EOF"
    APPENDDEF(`confENVDEF',`-DSTARTTLS -DSASL -DLDAPMAP -DHASFLOCK')
    APPENDDEF(`confLIBS', `-lssl -lcrypto -lsasl2 -lldap -llber -ldb')
    APPENDDEF(`confINCDIRS', `-I/usr/include/sasl')
    EOF

Install sendmail with the following commands:

    cat >> devtools/Site/site.config.m4 << "EOF"
    define(`confMANGRP',`root')
    define(`confMANOWN',`root')
    define(`confSBINGRP',`root')
    define(`confUBINGRP',`root')
    define(`confUBINOWN',`root')
    EOF

    sed -i 's|/usr/man/man|/usr/share/man/man|' \
        devtools/OS/Linux           &&

    cd sendmail                     &&
    sh Build                        &&
    cd ../cf/cf                     &&
    cp generic-linux.mc sendmail.mc &&
    sh Build sendmail.cf

This package does not come with a test suite.

Now, as the `root` user:

    install -v -d -m755 /etc/mail &&
    sh Build install-cf &&

    cd ../..            &&
    sh Build install    &&

    install -v -m644 cf/cf/{submit,sendmail}.mc /etc/mail &&
    cp -v -R cf/* /etc/mail                               &&

    install -v -m755 -d /usr/share/doc/sendmail-8.17.1/{cf,sendmail} &&

    install -v -m644 CACerts FAQ KNOWNBUGS LICENSE PGPKEYS README RELEASE_NOTES \
            /usr/share/doc/sendmail-8.17.1 &&

    install -v -m644 sendmail/{README,SECURITY,TRACEFLAGS,TUNING} \
            /usr/share/doc/sendmail-8.17.1/sendmail &&

    install -v -m644 cf/README /usr/share/doc/sendmail-8.17.1/cf &&

    for manpage in sendmail editmap mailstats makemap praliases smrsh
    do
        install -v -m644 $manpage/$manpage.8 /usr/share/man/man8
    done &&

    install -v -m644 sendmail/aliases.5    /usr/share/man/man5 &&
    install -v -m644 sendmail/mailq.1      /usr/share/man/man1 &&
    install -v -m644 sendmail/newaliases.1 /usr/share/man/man1 &&
    install -v -m644 vacation/vacation.1   /usr/share/man/man1

Install the sendmail Installation and Operations Guide with the following commands:

### Note

Remove `op.pdf` from the make and install commands below if you don't have Ghostscript installed.

    cd doc/op                                       &&
    sed -i 's/groff/GROFF_NO_SGR=1 groff/' Makefile &&
    make op.txt op.pdf

Now, as the `root` user:

    install -v -d -m755 /usr/share/doc/sendmail-8.17.1 &&
    install -v -m644 op.ps op.txt op.pdf /usr/share/doc/sendmail-8.17.1 &&
    cd ../..

### Command Explanations

cat > devtools/Site/site.config.m4 << "EOF": This creates a configuration file changing some of the default settings.

sed ... devtools/OS/Linux: The site.config.m4 does not honor a change to the man directory, so fix it in the OS definitions.

sh Build; sh Build sendmail.cf; sh Build install-cf; sh Build install: sendmail uses an m4 based build script to create the various `Makefile`s. These commands build and install the package.

for manpage in...;do...;done; install ...: The man pages are installed already formatted and man displays them somewhat garbled. These commands replace the formatted pages with pages man can display properly.

### Configuring sendmail

#### Config Files

`/etc/mail/*`

#### Configuration Information

### Note

Ensure you have a fully qualified domain name defined in `/etc/hosts` for your system before proceeding.

Create the `/etc/mail/local-host-names` and `/etc/mail/aliases` files using the following commands as the `root` user:

    echo $(hostname) > /etc/mail/local-host-names
    cat > /etc/mail/aliases << "EOF"
    postmaster: root
    MAILER-DAEMON: root

    EOF
    newaliases

sendmail's primary configuration file, `/etc/mail/sendmail.cf`, is complex and not meant to be directly edited. The recommended method for changing it is to modify `/etc/mail/sendmail.mc` and various m4 files, then run the m4 macro processor from within `/etc/mail` as follows:

    cd /etc/mail &&
    m4 m4/cf.m4 sendmail.mc > sendmail.cf

A full explanation of the files to modify, and the available parameters can be found in `/etc/mail/README`.

#### Systemd Unit

To automate the running of sendmail at startup, install the `sendmail.service` unit included in the blfs-systemd-units-20210819 package:

    make install-sendmail

### Note

The -qNm option to sendmail, where N is number of minutes, controls how often sendmail will process the mail queue. A default of 5 minutes is used in the systemd unit. Individual workstation users may want to set this as low as 1 minute, large installations handling more mail may want to set it higher.

### Contents

Installed Programs: editmap, mailstats, makemap, praliases, sendmail, smrsh, and vacation; symlinks to /usr/sbin/sendmail: hoststat, mailq, newaliases, and purgestat
Installed Libraries: None
Installed Directories: /etc/mail, /usr/share/doc/sendmail-8.17.1, and /var/spool/clientmqueue

#### Short Descriptions

editmap | queries and edits sendmail map files
hoststat | prints sendmail's persistent host status
mailstats | displays sendmail statistics
mailq | prints a summary of outbound mail messages waiting for delivery
makemap | creates sendmail map files
newaliases | rebuilds `/etc/mail/aliases.db` from the contents of `/etc/mail/aliases`
praliases | displays current sendmail aliases
purgestat | causes sendmail to clear (purge) all its host-status information
sendmail | is the sendmail mail transport agent
smrsh | is a restricted shell for sendmail
vacation | is an email auto responder

Last updated on

## Chapter 22. Databases

This chapter includes databases that range from single-user read/write to industrial database servers with transaction support. Generally, you will be sent here to satisfy dependencies to other applications although building a SQL server on a base LFS system is entirely possible.

## Berkeley DB-5.3.28

### Introduction to Berkeley DB

The Berkeley DB package contains programs and utilities used by many other applications for database related functions.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/bdb/db-5.3.28.tar.gz

- Download MD5 sum: b99454564d5b4479750567031d66fe24

- Download size: 34 MB

- Estimated disk space required: 265 MB

- Estimated build time: 0.6 SBU

#### Berkeley DB Dependencies

##### Optional

Sharutils-4.15.2 (for the uudecode command)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/db

### Installation of Berkeley DB

First apply a fix so that this will compile with current versions of g++:

    sed -i 's/\(__atomic_compare_exchange\)/\1_db/' src/dbinc/atomic.h

Install Berkeley DB by running the following commands:

    cd build_unix                        &&
    ../dist/configure --prefix=/usr      \
                      --enable-compat185 \
                      --enable-dbm       \
                      --disable-static   \
                      --enable-cxx       &&
    make

Now, as the `root` user:

    make docdir=/usr/share/doc/db-5.3.28 install &&

    chown -v -R root:root                        \
          /usr/bin/db_*                          \
          /usr/include/db{,_185,_cxx}.h          \
          /usr/lib/libdb*.{so,la}                \
          /usr/share/doc/db-5.3.28

### Command Explanations

cd build_unix && ../dist/configure --prefix=/usr...: This replaces the normal ./configure command, as Berkeley DB comes with various build directories for different platforms.

`--enable-compat185`: This switch enables building the DB-1.85 compatibility API.

`--enable-cxx`: This switch enables building C++ API libraries.

`--enable-dbm`: Enables legacy interface support needed by some older packages.

make docdir=/usr/share/doc/db-5.3.28 install: This installs the documentation in the standard location instead of `/usr/docs`.

chown -v -R root:root ...:This command changes the ownership of various installed files from the uid:gid of the builder to root:root.

`--enable-tcl --with-tcl=/usr/lib`: Enables Tcl support in DB and creates the `libdb_tcl` libraries.

`--enable-java`: Enables Java support in DB and creates the `libdb_java` libraries. Support is currently broken with Java-7.x.

### Contents

Installed Programs: db_archive, db_checkpoint, db_deadlock, db_dump, db_hotbackup, db_load, db_log_verify, db_printlog, db_recover, db_replicate, db_stat, db_tuner, db_upgrade, and db_verify
Installed Libraries: libdb.so, libdb_cxx.so, and libdb_tcl.so
Installed Directory: /usr/share/doc/db-5.3.28

#### Short Descriptions

db_archive | prints the pathnames of log files that are no longer in use
db_checkpoint | is a daemon process used to monitor and checkpoint database logs
db_deadlock | is used to abort lock requests when deadlocks are detected
db_dump | converts database files to a flat file format readable by db_load
db_hotbackup | creates "hot backup" or "hot failover" snapshots of Berkeley DB databases
db_load | is used to create database files from flat files created with db_dump
db_log_verify | verifies the log files of a database
db_printlog | converts database log files to human readable text
db_recover | is used to restore a database to a consistent state after a failure
db_replicate | is a daemon process that provides replication/HA services on a transactional environment
db_stat | displays database environment statistics
db_tuner | analyzes the data in a btree database, and suggests a page size that is likely to deliver optimal operation
db_upgrade | is used to upgrade database files to a newer version of Berkeley DB
db_verify | is used to run consistency checks on database files

Last updated on

## lmdb-0.9.29

### Introduction to lmdb

The lmdb package is a fast, compact, key-value embedded data store. It uses memory-mapped files, so it has the read performance of a pure in-memory database while still offering the persistence of standard disk-based databases, and is only limited to the size of the virtual address space

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/LMDB/lmdb/archive/LMDB_0.9.29.tar.gz

- Download MD5 sum: 84cc7cac4bf15486536560f171297a49

- Download size: 144 KB

- Estimated disk space required: 6.1 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lmdb

### Installation of lmdb

### Note

This package extracts to lmdb-LMDB_0.9.29.

Install lmdb by running the following commands:

    cd libraries/liblmdb &&
    make                 &&
    sed -i 's| liblmdb.a||' Makefile

This package does not come with a test suite.

Now, as the `root` user:

    make prefix=/usr install

### Command Explanations

sed ... liblmdb.a ... Makefile: The package executables use a static library so it must be created. This command suppresses installation of the static library.

### Contents

Installed Program: mdb_copy, mdb_dump, mdb_load, and mdb_stat
Installed Library: liblmdb.so
Installed Directories: None

Last updated on

## MariaDB-10.6.4

### Introduction to MariaDB

MariaDB is a community-developed fork and a drop-in replacement for the MySQL relational database management system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.mariadb.org/interstitial/mariadb-10.6.4/source/mariadb-10.6.4.tar.gz

- Download (FTP): ftp://mirrors.fe.up.pt/pub/mariadb/mariadb-10.6.4/source/mariadb-10.6.4.tar.gz

- Download MD5 sum: 0eca3038fbcf56d157c248e6a8b0f5f2

- Download size: 81 MB

- Estimated disk space required: 2.3 GB (650 MB installed)

- Estimated build time: 7.8 SBU (with parallelism=4, add 0.4 SBU for tests)

### Note

The installed size of MariaDB is 644 MB, but this can be reduced by about 244 MB, if desired, by removing the `/usr/share/mysql/test` directory after installation.

#### MariaDB Dependencies

##### Required

CMake-3.21.2

##### Recommended

libevent-2.1.12

##### Optional

Boost-1.77.0, libaio-0.3.112, libxml2-2.9.12, Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2, pcre2-10.37, Ruby-3.0.2, unixODBC-2.3.9, Valgrind-3.17.0, Groonga, KyTea, Judy, lz4, MeCab, MessagePack, mruby, Snappy, Sphinx, TokuDB, and ZeroMQ

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mariadb

### Installation of MariaDB

### Warning

MariaDB and MySQL cannot be installed on the same system without extensive changes to the build configuration of one of the two applications.

For security reasons, running the server as an unprivileged user and group is strongly encouraged. Issue the following (as `root`) to create the user and group:

    groupadd -g 40 mysql &&
    useradd -c "MySQL Server" -d /srv/mysql -g mysql -s /bin/false -u 40 mysql

Install MariaDB by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_BUILD_TYPE=Release                      \
          -DCMAKE_INSTALL_PREFIX=/usr                     \
          -DINSTALL_DOCDIR=share/doc/mariadb-10.6.4       \
          -DINSTALL_DOCREADMEDIR=share/doc/mariadb-10.6.4 \
          -DINSTALL_MANDIR=share/man                      \
          -DINSTALL_MYSQLSHAREDIR=share/mysql             \
          -DINSTALL_MYSQLTESTDIR=share/mysql/test         \
          -DINSTALL_PLUGINDIR=lib/mysql/plugin            \
          -DINSTALL_SBINDIR=sbin                          \
          -DINSTALL_SCRIPTDIR=bin                         \
          -DINSTALL_SQLBENCHDIR=share/mysql/bench         \
          -DINSTALL_SUPPORTFILESDIR=share/mysql           \
          -DMYSQL_DATADIR=/srv/mysql                      \
          -DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock       \
          -DWITH_EXTRA_CHARSETS=complex                   \
          -DWITH_EMBEDDED_SERVER=ON                       \
          -DSKIP_TESTS=ON                                 \
          -DTOKUDB_OK=0                                   \
          .. &&
    make

To test the results, issue: make test. One test, test-connect, is known to fail.

### Note

A more extensive set of tests can be run with the following:

    pushd mysql-test
    ./mtr --parallel <N> --mem --force
    popd

Where N is the number of tests to run in parallel. Over 5400 tests are run in about 24 SBU with N=4. Two tests are known to fail due to character set issues.

Now, as the `root` user:

    make install

### Command Explanations

`-DWITH_EMBEDDED_SERVER=ON`: This switch enables compiling the embedded server library needed by certain applications, such as Amarok.

`-DWITH_EXTRA_CHARSETS=complex`: This switch enables support for the complex character sets.

`-DSKIP_TESTS=ON`: This switch disables tests for MariaDB Connector/C which are not supported without additional setup.

`-DWITHOUT_SERVER=ON`: Use this switch if you don't want the server and would like to build the client only.

### Note

There are numerous options available to cmake. Check the output of the cmake . -LH for additional customization options.

### Configuring MySQL

#### Config Files

`/etc/mysql/my.cnf` and `~/.my.cnf`

#### Configuration Information

Create basic `/etc/mysql/my.cnf` using the following command as the `root` user:

    install -v -dm 755 /etc/mysql &&
    cat > /etc/mysql/my.cnf << "EOF"
    # Begin /etc/mysql/my.cnf

    # The following options will be passed to all MySQL clients
    [client]
    #password       = your_password
    port            = 3306
    socket          = /run/mysqld/mysqld.sock

    # The MySQL server
    [mysqld]
    port            = 3306
    socket          = /run/mysqld/mysqld.sock
    datadir         = /srv/mysql
    skip-external-locking
    key_buffer_size = 16M
    max_allowed_packet = 1M
    sort_buffer_size = 512K
    net_buffer_length = 16K
    myisam_sort_buffer_size = 8M

    # Don't listen on a TCP/IP port at all.
    skip-networking

    # required unique id between 1 and 2^32 - 1
    server-id       = 1

    # Uncomment the following if you are using BDB tables
    #bdb_cache_size = 4M
    #bdb_max_lock = 10000

    # InnoDB tables are now used by default
    innodb_data_home_dir = /srv/mysql
    innodb_log_group_home_dir = /srv/mysql
    # All the innodb_xxx values below are the default ones:
    innodb_data_file_path = ibdata1:12M:autoextend
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    innodb_buffer_pool_size = 128M
    innodb_log_file_size = 48M
    innodb_log_buffer_size = 16M
    innodb_flush_log_at_trx_commit = 1
    innodb_lock_wait_timeout = 50

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates

    [isamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M

    [myisamchk]
    key_buffer_size = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M

    [mysqlhotcopy]
    interactive-timeout

    # End /etc/mysql/my.cnf
    EOF

You can now install a database and change the ownership to the unprivileged user and group (perform as the `root` user):

    mysql_install_db --basedir=/usr --datadir=/srv/mysql --user=mysql &&
    chown -R mysql:mysql /srv/mysql

Further configuration requires that the MariaDB server is running. Start the server using the following commands as the `root` user:

    install -v -m755 -o mysql -g mysql -d /run/mysqld &&
    mysqld_safe --user=mysql 2>&1 >/dev/null &

A default installation does not set up a password for the administrator, so use the following command as the `root` user to set one.

    mysqladmin -u root password

Configuration of the server is now finished. Shut the server down using the following command as the `root` user:

    mysqladmin -p shutdown

#### Systemd Unit

Install the `mysqld.service` unit included in the blfs-systemd-units-20210819 package as the `root` user to start the MariaDB server during system boot-up.

    make install-mysqld

### Contents

Installed Programs: aria_chk, aria_dump_log, aria_ftdump, aria_pack, aria_read_log, aria_s3_copy, galera_new_cluster, galera_recovery, innochecksum, mariabackup, mariadb, mariadbd, mariadb-access, mariadb-admin, mariadb-backup, mariadb-binlog, mariadb-check, mariadb-client-test, mariadb-client-test-embedded, mariadb-conv, mariadb-convert-table-format, mariadb-find-rows, mariadbd-multi, mariadbd-safe, mariadbd-safe-helper, mariadb-dump, mariadb-dumpslow, mariadb-embedded, mariadb-fix-extensions, mariadb-hotcopy, mariadb-import, mariadb-install-db, mariadb-ldb, mariadb-plugin, mariadb-secure-installation, mariadb-setpermission, mariadb-service-convert, mariadb-show, mariadb-slap, mariadb-test, mariadb-test-embedded, mariadb-tzinfo-to-sql, mariadb-upgrade, mariadb-waitpid, mariadb_config, mbstream, msql2mysql, my_print_defaults, myisamchk, myisam_ftdump, myisamlog, myisampack, mysql_config, mytop, perror, replace, resolve_stack_dump, resolveip, sst_dump, wsrep_sst_common, wsrep_sst_mariabackup, wsrep_sst_mysqldump, and wsrep_sst_rsync
Installed Libraries: libmariadbclient.a, libmariadb.so, libmariadbd.so, libmysqlclient.a, libmysqlclient_r.a (symbolic links to libmariadbclient.a), libmysqld.{so,a}, libmysqlservices.a, and several under /usr/lib/mysql/plugin/
Installed Directories: /etc/mysql, /usr/{include,lib,share}/mysql, /usr/share/groonga{-normalizer-mysql}, and /usr/share/doc/mariadb-10.6.4

#### Short Descriptions

There are several symlinks from mysql* to their mariadb counterparts. These are maintained for compatibility.

The Perl DBI modules must be installed for some of the MariaDB support programs to function properly.

#### Short Descriptions

aria_chk | is used to check, repair, optimize, sort and get information about Aria tables
aria_dump_log | is a tool to dump the contents of Aria log pages
aria_ftdump | displays full-text index information
aria_pack | is a tool to generate compressed, read-only Aria tables
aria_read_log | displays Aria log file contents
aria_s3_copy | copies an aria table to and from AWS S3
galera_new_cluster | bootstraps a new Galera cluster
galera_recovery | recovers data from a Galera cluster
innochecksum | prints checksums for InnoDB files
mariabackup | is an open source backup tool for InnoDB and XtraDB
mariadb | is a simple SQL shell with input line editing capabilities
mariadbd | is the MySQL server daemon
mariadb-access | checks the access privileges for a host name, user name, and database combination
mariadb-admin | is a client for performing administrative operations
mariadb-binlog | reads binary log files
mariadb-check | performs table maintenance: It checks, repairs, optimizes, or analyzes tables
mariadb-client-test | is used for testing aspects of the MySQL client API that cannot be tested using mysqltest and its test language
mariadb-client-test-embedded | is a tool to test the client API for the embedded server
mariadb-conv | converts character sets for use with MariaDB
mariadb-convert-table-format | converts the tables in a database to use a particular storage engine
mariadbd-multi | is designed to manage several mysqld processes that listen for connections on different Unix socket files and TCP/IP ports
mariadbd-safe | is the recommended way to start a mysqld server on Unix and NetWare
mariadb-dump | is a backup program
mariadb-dumpslow | parses MySQL slow query log files and prints a summary of their contents
mariadb-embedded | is a MySQL client statically linked to libmariadbd
mariadb-find-rows | reads files containing SQL statements and extracts statements that match a given regular expression or that contain USE db_name or SET statements
mariadb-fix-extensions | converts the extensions for MyISAM (or ISAM) table files to their canonical forms
mariadb-hotcopy | locks the table, flushes the table and then performs a copy of the database
mariadb-import | reads a range of data formats, and inserts the data into a database
mariadb-install-db | initializes the MySQL data directory and creates the system tables that it contains, if they do not exist
mariadb-ldb | is the RocksDB tool
mariadb-plugin | is a utility that enables MySQL administrators to manage which plugins a MySQL server loads
mariadb-secure-installation | is a tool to improve MySQL installation security
mariadb-service-convert | generates a systemd unit based on the current mariadb settings
mariadb-setpermission | sets permissions in the MySQL grant tables
mariadb-show | shows the structure of a MariaDB database
mariadb-slap | is a diagnostic program designed to emulate client load for a MySQL server and to report the timing of each stage
mariadb-test | runs a test case against a MySQL server and optionally compares the output with a result file
mariadb-test-embedded | is similar to the mysqltest command but is built with support for the libmysqld embedded server
mariadb-tzinfo-to-sql | loads the time zone tables in the mysql database
mariadb-upgrade | examines all tables in all databases for incompatibilities with the current version of MySQL Server
mariadb-waitpid | signals a process to terminate and waits for the process to exit
mariadb_config | gets compiler flags for using the MariaDB Connector/C
mbstream | is an utility for sending InnoDB and XTraDB backups over a stream
msql2mysql | is a tool to convert mSQL programs for use with MySQL
my_print_defaults | displays the options from option groups of option files
myisam_ftdump | displays information about FULLTEXT indexes in MyISAM tables
myisamchk | gets information about your database tables or checks, repairs, or optimizes them
myisamlog | displays MyISAM log file contents
myisampack | is a tool for compressing MyISAM tables
mysql_config | provides you with useful information for compiling your MySQL client and connecting it to MySQL
mytop | is a console-based tool for monitoring the threads and overall performance of a MySQL server
perror | is a utility that displays descriptions for system or storage engine error codes
replace | is a MariaDB/MySQL extension to the SQL standard
resolve_stack_dump | resolves a numeric stack dump to symbols
resolveip | is a utility for resolving IP addresses to host names and vice versa
sst_sump | dumps the content of sst files (the format used by RocksDB)

Last updated on

## PostgreSQL-13.4

### Introduction to PostgreSQL

PostgreSQL is an advanced object-relational database management system (ORDBMS), derived from the Berkeley Postgres database management system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.postgresql.org/pub/source/v13.4/postgresql-13.4.tar.bz2

- Download MD5 sum: 7bda65a37c46b8b2c1933d9d1cd677f2

- Download size: 20 MB

- Estimated disk space required: 193 MB (add 38 MB for tests)

- Estimated build time: 0.6 SBU (with parallelism=4, add 0.1 SBU for tests)

#### PostgreSQL Dependencies

##### Optional

Python-2.7.18, ICU-69.1, libxml2-2.9.12, libxslt-1.1.34, OpenLDAP-2.5.7, Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2 and Bonjour

##### Optional (To Regenerate Documentation)

fop-2.6, docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2, and SGMLSpm-1.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/postgresql

### Installation of PostgreSQL

For enhanced security, it is better to have a dedicated group and user for running the PostgreSQL server. First, issue as the `root` user:

    groupadd -g 41 postgres &&
    useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
            -u 41 postgres

### Note

There are several configuration items that add additional functionality with optional packages to PostgreSQL. Use ./configure --help to see a list.

Install PostgreSQL with the following commands:

    sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&

    ./configure --prefix=/usr          \
                --enable-thread-safety \
                --docdir=/usr/share/doc/postgresql-13.4 &&
    make

There are a number of programs in the `contrib/` directory. If you are going to run this installation as a server and wish to build some of them, enter make -C contrib or make -C contrib/`<SUBDIR-NAME>` for each subdirectory.

Tests must be run as an unprivileged user because they need to start a temporary server and this is prevented as the root user. For the same reason, you need to stop all PostgreSQL servers if any are running. If a previous version of PostgreSQL is installed, it may be necessary to use --disable-rpath with configure to avoid failures, but installing the binaries created using this switch is not recommended. To test the results, issue: make check.

Now, as the `root` user:

    make install      &&
    make install-docs

If you made any of the `contrib/` programs, as the `root` user:

    make -C contrib/<SUBDIR-NAME> install

### Tip

If you only intend to use PostgreSQL as a client to connect to a server on another machine, your installation is complete and you should not run the remaining commands.

Initialize a database cluster with the following commands issued by the `root` user:

    install -v -dm700 /srv/pgsql/data &&
    install -v -dm755 /run/postgresql &&
    chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Now, initialize the database as the `root` user:

    su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

### Command Explanations

sed -i ...: This sed changes the server socket location from `/tmp` to `/run/postgresql`.

`--enable-thread-safety`: This switch makes the client libraries thread-safe by allowing concurrent threads in `libpq` and ECPG programs to safely control their private connection handles.

`--with-openssl`: builds the package with support for OpenSSL encrypted connections.

`--with-perl`: builds the PL/Perl server-side language.

`--with-python`: builds the PL/Python server-side language. Add PYTHON=/usr/bin/python2 for Python2 support, otherwise Python3 is used by default.

`--with-tcl`: builds the PL/Tcl server-side language.

### Configuring PostgreSQL

#### Config Files

`$PGDATA/pg_ident.con`, `$PGDATA/pg_hba.conf`, and `$PGDATA/postgresql.conf`

The `PGDATA` environment variable is used to distinguish database clusters from one another by setting it to the value of the directory which contains the cluster desired. The three configuration files exist in every `PGDATA/` directory. Details on the format of the files and the options that can be set in each can be found in `/usr/share/doc/postgresql-13.4/html/index.html`.

#### Systemd Unit

Install the `postgresql.service` unit included in the blfs-systemd-units-20210819 package:

    make install-postgresql

#### Starting the PostgreSQL Server and Creating a Sample Database

The database server can be manually started with the following command (as the `root` user):

    su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                      /srv/pgsql/data/logfile 2>&1 &'

### Note

If you are scripting this part, you should wait for the server to start before going on, by adding for example sleep 2 after the above command.

The instructions below show how to create a database, add a table to it, insert some rows into the table and select them, to verify that the installation is working properly. Still as user `root`, issue:

    su - postgres -c '/usr/bin/createdb test' &&
    echo "create table t1 ( name varchar(20), state_province varchar(20) );" \
        | (su - postgres -c '/usr/bin/psql test ') &&
    echo "insert into t1 values ('Billy', 'NewYork');" \
        | (su - postgres -c '/usr/bin/psql test ') &&
    echo "insert into t1 values ('Evanidus', 'Quebec');" \
        | (su - postgres -c '/usr/bin/psql test ') &&
    echo "insert into t1 values ('Jesse', 'Ontario');" \
        | (su - postgres -c '/usr/bin/psql test ') &&
    echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

When you are done with testing, you can shut down the server, by issuing as `root`:

    su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

### Contents

Installed Programs: clusterdb, createdb, createuser, dropdb, dropuser, ecpg, initdb, pg_archivecleanup, pg_basebackup, pg_checksums, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivewal, pg_recvlogical, pg_resetwal, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_verifybackup, pg_waldump, pgbench, postgres, postmaster (deprecated), psql, reindexdb, vacuumdb, optionally, if Tcl support has been built, pltcl_delmod, pltcl_listmod, pltcl_loadmod, and optionally (in contrib/) oid2name, pg_standby, vacuumlo, and many others
Installed Libraries: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgcommon_shlib.a, libpgfeutils.a, libpgport.a, libpgport_shlib.a, libpgtypes.{so,a}, libpq.{so,a}, various charset modules and optionally programming language modules under /usr/lib/postgresql
Installed Directories: /usr/include/{libpq,postgresql}, /usr/lib/postgresql, /usr/share/{doc/postgresql-13.4,postgresql}, and /srv/pgsql

#### Short Descriptions

clusterdb | is a utility for reclustering tables in a PostgreSQL database
createdb | creates a new PostgreSQL database
createuser | defines a new PostgreSQL user account
dropdb | removes a PostgreSQL database
dropuser | removes a PostgreSQL user account
ecpg | is the embedded SQL preprocessor
initdb | creates a new database cluster
oid2name | resolves OIDs (Object IDs) and file nodes in a PostgreSQL data directory
pg_archivecleanup | cleans up PostgreSQL WAL (write-ahead log) archive files
pg_basebackup | takes base backups of a running PostgreSQL cluster
pg_checksums | enables, disables, or checks data checksums in a PostgreSQL database cluster
pg_config | retrieves PostgreSQL version information
pg_controldata | returns information initialized during initdb, such as the catalog version and server locale
pg_ctl | controls stopping and starting the database server
pg_dump | dumps database data and metadata into scripts which are used to recreate the database
pg_dumpall | recursively calls pg_dump for each database in a cluster
pg_isready | checks the connection status of a PostgreSQL server
pg_receivewal | is used to stream write-ahead logs from a PostgreSQL server
pg_recvlogical | controls PostgreSQL logical decoding streams
pg_resetwal | resets the write-ahead log and other control information of a PostgreSQL database cluster
pg_restore | creates databases from dump files created by pg_dump
pg_rewind | synchronizes a PostgreSQL data directory with another data directory that was forked from the first one
pg_standby | supports the creation of a PostgreSQL warm standby server
pg_test_fsync | determines the fastest wal_sync method for PostgreSQL
pg_test_timing | measures timing overhead
pg_upgrade | upgrades a PostgreSQL server instance
pg_verifybackup | verifies the integrity of a base backup of a PostgreSQL cluster
pg_waldump | displays a human-readable rendering of the write-ahead log of a PostgreSQL database cluster
pgbench | runs a benchmark test on PostgreSQL
pltcl_delmod | is a support script used to delete a module from a PL/Tcl table. The command requires the Pgtcl package to be installed
pltcl_listmod | is a support script used to list the modules in a PL/Tcl table. The command requires the Pgtcl package to be installed
pltcl_loadmod | is a support script used to load a module into a PL/Tcl table. The command requires the Pgtcl package to be installed too
postgres | is the PostgreSQL database server
postmaster | (deprecated, a symlink to postgres) is a multi-user database daemon
psql | is a console based database shell
reindexdb | is a utility for rebuilding indexes in a database
vacuumdb | compacts databases and generates statistics for the query analyzer
vacuumlo | removes orphaned large objects from a PostgreSQL database
`libecpg.{so,a}` | contains functions to support embedded SQL in C programs
`libecpg_compat.{so,a}` | is the ecpg compatibility library
`libgport.a` | is the port-specific subsystem of the Postgres backend
`libpgtypes.{so,a}` | contains functions for dealing with Postgres data types
`libpq.{so,a}` | is the C programmer's API to Postgres

Last updated on

## SQLite-3.36.0

### Introduction to SQLite

The SQLite package is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://sqlite.org/2021/sqlite-autoconf-3360000.tar.gz

- Download MD5 sum: f5752052fc5b8e1b539af86a3671eac7

- Download size: 2.9 MB

- Estimated disk space required: 140 MB

- Estimated build time: 0.4 SBU (Using parallelism=4)

#### Additional Downloads

Optional Documentation

- Download (HTTP): https://sqlite.org/2021/sqlite-doc-3360000.zip

- Download MD5 sum: 9abe65c7295fd0a2462f7c61f95400fd

- Download size: 12 MB

#### SQLite Dependencies

##### Optional

libedit and UnZip-6.0 (required to unzip the documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sqlite

### Installation of SQLite

If you downloaded the optional documentation, issue the following command to install the documentation into the source tree:

    unzip -q ../sqlite-doc-3360000.zip

Install SQLite by running the following commands:

    ./configure --prefix=/usr     \
                --disable-static  \
                --enable-fts5     \
                CPPFLAGS="-DSQLITE_ENABLE_FTS3=1            \
                          -DSQLITE_ENABLE_FTS4=1            \
                          -DSQLITE_ENABLE_COLUMN_METADATA=1 \
                          -DSQLITE_ENABLE_UNLOCK_NOTIFY=1   \
                          -DSQLITE_ENABLE_DBSTAT_VTAB=1     \
                          -DSQLITE_SECURE_DELETE=1          \
                          -DSQLITE_ENABLE_FTS3_TOKENIZER=1" &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you downloaded the optional documentation, issue the following commands as the `root` user to install it:

    install -v -m755 -d /usr/share/doc/sqlite-3.36.0 &&
    cp -v -R sqlite-doc-3360000/* /usr/share/doc/sqlite-3.36.0

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-fts5`: This switch enables support for version 5 of the full text search extension.

`CPPFLAGS="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_TOKENIZER=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1"`: Applications such as SeaMonkey require these options to be turned on. The only way to do this is to include them in the `CFLAGS` or `CPPFLAGS`. We use the latter so the default value (or any value set by the user) of `CFLAGS` won't be affected. For further information on what can be specified see http://www.sqlite.org/compile.html.

### Contents

Installed Program: sqlite3
Installed Library: libsqlite3.so
Installed Directory: /usr/share/doc/sqlite-3.36.0

#### Short Descriptions

sqlite3 | is a terminal-based front-end to the SQLite library that can evaluate queries interactively and display the results
`libsqlite3.so` | contains the SQLite API functions

Last updated on

## Chapter 23. Other Server Software

Here you will find many ways to share your machine with the rest of the world or your local network. Before installing any packages in this chapter, you need to be sure you understand what the package does and how to set it up correctly. It might also be helpful to learn about the consequences of an improper setup so that you can analyze the risks.

## OpenLDAP-2.5.7

### Introduction to OpenLDAP

The OpenLDAP package provides an open source implementation of the Lightweight Directory Access Protocol.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.5.7.tgz

- Download (FTP): ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.5.7.tgz

- Download MD5 sum: e7847d1463ce4cdc8e3fd831d1cd267c

- Download size: 6.1 MB

- Estimated disk space required: 52 MB (client), 98 MB (server)

- Estimated build time: 0.4 SBU (client), 0.9 SBU (server)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/openldap-2.5.7-consolidated-1.patch

#### OpenLDAP Dependencies

##### Recommended

Cyrus SASL-2.1.27

##### Optional

GnuTLS-3.7.2, Pth-2.0.7, unixODBC-2.3.9, MariaDB-10.6.4 or PostgreSQL-13.4 or MySQL, OpenSLP, WiredTiger, and Berkeley DB-5.3.28 (for slapd, but deprecated)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/openldap

### Installation of OpenLDAP

### Note

If you only need to install the client side ldap* binaries, corresponding man pages, libraries and header files (referred to as a “client-only” install), issue these commands instead of the following ones (no test suite available):

    patch -Np1 -i ../openldap-2.5.7-consolidated-1.patch &&
    autoconf &&

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  \
                --enable-dynamic  \
                --enable-versioning  \
                --disable-debug   \
                --disable-slapd &&

    make depend &&
    make

Then, as the `root` user:

    make install

There should be a dedicated user and group to take control of the slapd daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 83 ldap &&
    useradd  -c "OpenLDAP Daemon Owner" \
             -d /var/lib/openldap -u 83 \
             -g ldap -s /bin/false ldap

Install OpenLDAP by running the following commands:

    patch -Np1 -i ../openldap-2.5.7-consolidated-1.patch &&
    autoconf &&

    ./configure --prefix=/usr         \
                --sysconfdir=/etc     \
                --localstatedir=/var  \
                --libexecdir=/usr/lib \
                --disable-static      \
                --enable-versioning   \
                --disable-debug       \
                --with-tls=openssl    \
                --with-cyrus-sasl     \
                --enable-dynamic      \
                --enable-crypt        \
                --enable-spasswd      \
                --enable-slapd        \
                --enable-modules      \
                --enable-rlookups     \
                --enable-backends=mod \
                --disable-ndb         \
                --disable-sql         \
                --disable-wt          \
                --enable-overlays=mod &&

    make depend &&
    make

The tests appear to be fragile. Errors may cause the tests to abort prior to finishing, apparently due to timing issues. The tests take about 65 minutes and are processor independent. To test the results, issue: make test.

Now, as the `root` user:

    make install &&

    sed -e "s/\.la/.so/" -i /etc/openldap/slapd.{conf,ldif}{,.default} &&

    install -v -dm700 -o ldap -g ldap /var/lib/openldap     &&

    install -v -dm700 -o ldap -g ldap /etc/openldap/slapd.d &&
    chmod   -v    640     /etc/openldap/slapd.{conf,ldif}   &&
    chown   -v  root:ldap /etc/openldap/slapd.{conf,ldif}   &&

    install -v -dm755 /usr/share/doc/openldap-2.5.7 &&
    cp      -vfr      doc/{drafts,rfc,guide} \
                      /usr/share/doc/openldap-2.5.7

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-debug`: This switch disables the debugging code in OpenLDAP.

`--enable-dynamic`: This switch forces the OpenLDAP libraries to be dynamically linked to the executable programs.

`--enable-versioning`: This switch enables symbol versioning in the OpenLDAP libraries. Without this, some applications might generate a warning about missing symbol versions.

`--enable-crypt`: This switch enables using crypt(3) passwords.

`--enable-spasswd`: This switch enables SASL password verification.

`--enable-modules`: This switch enables dynamic module support.

`--enable-rlookups`: This switch enables reverse lookups of client hostnames.

`--enable-backends`: This switch enables all available backends.

`--enable-overlays`: This switch enables all available overlays.

`--disable-ndb`: This switch disables MySQL NDB Cluster backend which causes configure to fail if MySQL is present.

`--disable-sql`: This switch explicitly disables the SQL backend. Omit this switch if a SQL server is installed and you are going to use a SQL backend.

`--disable-wt`: This switch explicitly disables the WiredTiger backend. Omit this switch if WiredTiger is installed and you are going to use a WiredTiger backend.

`--libexecdir=/usr/lib`: This switch controls where the `/usr/lib/openldap` directory is installed. Everything in that directory is a library, so it belongs under `/usr/lib` instead of `/usr/libexec`.

`--enable-slp`: This switch enables SLPv2 support. Use it if you have installed OpenSLP.

### Note

You can run ./configure --help to see if there are other switch you can pass to the configure command to enable other options or dependency packages.

install ..., chown ..., and chmod ...: Having slapd configuration files and ldap databases in /var/lib/openldap readable by anyone is a SECURITY ISSUE, especially since a file stores the admin password in PLAIN TEXT. That's why mode 640 and root:ldap ownership were used. The owner is root, so only root can modify the file, and group is ldap, so that the group which owns slapd daemon could read but not modify the file in case of a security breach.

### Configuring OpenLDAP

#### Config Files

- For LDAP client: `/etc/openldap/ldap.conf` and `~/.ldaprc`

- For LDAP server, two configuration mechanisms are used: a legacy `/etc/openldap/slapd.conf` configuration file and the recommended slapd-config system, using an LDIF database stored in `/etc/openldap/slapd.d`.

#### Configuration Information

Configuring the slapd servers can be complex. Securing the LDAP directory, especially if you are storing non-public data such as password databases, can also be a challenging task. In order to set up OpenLDAP, you'll need to modify either the `/etc/openldap/slapd.conf` file (old method), or the `/etc/openldap/slapd.ldif` file and then use ldapadd to create the LDAP configuration database in `/etc/openldap/slapd.d` (recommended by the OpenLDAP documentation).

### Warning

The instructions above install an empty LDAP structure and a default `/etc/openldap/slapd.conf` file, which are suitable for testing the build and other packages using LDAP. Do not use them on a production server.

Resources to assist you with topics such as choosing a directory configuration, backend and database definitions, access control settings, running as a user other than `root` and setting a chroot environment include:

- The slapd(8) man page.

- The slapd.conf(5) and slapd-config(5) man pages.

- The OpenLDAP 2.5 Administrator's Guide (also installed locally in `/usr/share/doc/openldap-2.5.7/guide/admin`).

- Documents located at http://www.openldap.org/pub/.

#### Systemd Unit

To automate the startup of the LDAP server at system bootup, install the `slapd.service` unit included in the blfs-systemd-units-20210819 package using the following command:

    make install-slapd

### Note

You'll need to modify `/etc/default/slapd` to include the parameters needed for your specific configuration. See the slapd man page for parameter information.

#### Testing the Configuration

Start the LDAP server using systemctl:

    systemctl start slapd

Verify access to the LDAP server with the following command:

    ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

The expected result is:

    # extended LDIF
    #
    # LDAPv3
    # base <> with scope baseObject
    # filter: (objectclass=*)
    # requesting: namingContexts
    #

    #
    dn:
    namingContexts: dc=my-domain,dc=com

    # search result
    search: 2
    result: 0 Success

    # numResponses: 2
    # numEntries: 1

### Contents

Installed Programs: ldapadd, ldapcompare, ldapdelete, ldapexop, ldapmodify, ldapmodrdn, ldappasswd, ldapsearch, ldapurl, ldapvc, ldapwhoami, slapacl, slapadd, slapauth, slapcat, slapd, slapdn, slapindex, slapmodify, slappasswd, slapschema, and slaptest
Installed Libraries: liblber.so, libldap.so, and several under /usr/lib/openldap
Installed Directories: /etc/openldap, /{usr,var}/lib/openldap, and /usr/share/doc/openldap-2.5.7

#### Short Descriptions

ldapadd | opens a connection to an LDAP server, binds and adds entries
ldapcompare | opens a connection to an LDAP server, binds and performs a compare using specified parameters
ldapdelete | opens a connection to an LDAP server, binds and deletes one or more entries
ldapexop | issues the LDAP extended operation specified by oid or one of the special keywords whoami, cancel, or refresh
ldapmodify | opens a connection to an LDAP server, binds and modifies entries
ldapmodrdn | opens a connection to an LDAP server, binds and modifies the RDN of entries
ldappasswd | is a tool used to set the password of an LDAP user
ldapsearch | opens a connection to an LDAP server, binds and performs a search using specified parameters
ldapurl | is a command that allows to either compose or decompose LDAP URIs
ldapvc | verifies LDAP credentials
ldapwhoami | opens a connection to an LDAP server, binds and displays whoami information
slapacl | is used to check the behavior of slapd by verifying access to directory data according to the access control list directives defined in its configuration
slapadd | is used to add entries specified in LDAP Directory Interchange Format (LDIF) to an LDAP database
slapauth | is used to check the behavior of the slapd in mapping identities for authentication and authorization purposes, as specified in slapd.conf
slapcat | is used to generate an LDAP LDIF output based upon the contents of a slapd database
slapd | is the standalone LDAP server
slapdn | checks a list of string-represented DNs based on schema syntax
slapindex | is used to regenerate slapd indexes based upon the current contents of a database
slapmodify | modifies entries in a slapd database
slappasswd | is an OpenLDAP password utility
slapschema | is used to check schema compliance of the contents of a slapd database
slaptest | checks the sanity of the `slapd.conf` file
`liblber.so` | is a set of Lightweight Basic Encoding Rules routines. These routines are used by the LDAP library routines to encode and decode LDAP protocol elements using the (slightly simplified) Basic Encoding Rules defined by LDAP. They are not normally used directly by an LDAP application program except in the handling of controls and extended operations
`libldap.so` | supports the LDAP programs and provide functionality for other programs interacting with LDAP

Last updated on

## Unbound-1.13.2

### Introduction to Unbound

Unbound is a validating, recursive, and caching DNS resolver. It is designed as a set of modular components that incorporate modern features, such as enhanced security (DNSSEC) validation, Internet Protocol Version 6 (IPv6), and a client resolver library API as an integral part of the architecture.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://nlnetlabs.nl/downloads/unbound/unbound-1.13.2.tar.gz

- Download MD5 sum: 5a63b7228141f45f2ab3169662f7ee13

- Download size: 5.8 MB

- Estimated disk space required: 132 MB (with docs; add 11 MB for tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with docs; add 0.3 SBU for tests)

#### Unbound Dependencies

##### Optional

libevent-2.1.12, Nettle-3.7.3, Python-2.7.18, SWIG-4.0.2 (for Python bindings), Doxygen-1.9.2 (for html documentation), dnstap, and Sphinx (for Python bindings documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/unbound

### Installation of Unbound

There should be a dedicated user and group to take control of the unbound daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 88 unbound &&
    useradd -c "Unbound DNS Resolver" -d /var/lib/unbound -u 88 \
            -g unbound -s /bin/false unbound

Install Unbound by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  \
                --with-pidfile=/run/unbound.pid &&
    make

If you have Doxygen-1.9.2 package installed and want to build html documentation, run the following command:

    make doc

To test the results, issue make check.

Now, as the `root` user:

    make install &&
    mv -v /usr/sbin/unbound-host /usr/bin/

If you built the documentation, install it by running the following commands as the `root` user:

    install -v -m755 -d /usr/share/doc/unbound-1.13.2 &&
    install -v -m644 doc/html/* /usr/share/doc/unbound-1.13.2

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-libevent`: This option enables libevent support allowing use of large outgoing port ranges.

`--with-pyunbound`: This option enables building of the Python bindings.

### Configuring Unbound

#### Config Files

`/etc/unbound/unbound.conf`

#### Configuration Information

In the default configuration, unbound will bind to localhost (127.0.0.1 IP address) and allow recursive queries only from localhost clients. If you want to use unbound for local DNS resolution, run the following command as the `root` user:

    echo "nameserver 127.0.0.1" > /etc/resolv.conf

If you are using a DHCP client for connecting to a network, `/etc/resolv.conf` gets overwritten with values provided by DHCP server. You can override this, for example in DHCP-4.4.2-P1, by running the following command as the `root` user:

    sed -i '/request /i\supersede domain-name-servers 127.0.0.1;' \
           /etc/dhcp/dhclient.conf

For advanced configuration see `/etc/unbound/unbound.conf` file and the documentation.

When Unbound is installed, some package builds fail if the file `/etc/unbound/root.key` is not found. This file is created by running the boot script (install instructions below). Alternatively, it can be created by running the following command as the `root` user:

    unbound-anchor

#### Systemd Unit

If you want the Unbound server to start automatically when the system is booted, install the `unbound.service` unit included in the blfs-systemd-units-20210819 package:

    make install-unbound

### Contents

Installed Programs: unbound, unbound-anchor, unbound-checkconf, unbound-control, unbound-control-setup, and unbound-host
Installed Library: libunbound.so and (optional) /usr/lib/python2.7/site-packages/_unbound.so
Installed Directories: /etc/unbound and /usr/share/doc/unbound-1.13.2 (optional)

#### Short Descriptions

unbound | is a DNS resolver daemon
unbound-anchor | performs setup or update of the root trust anchor for DNSSEC validation
unbound-checkconf | checks the unbound configuration file for syntax and other errors
unbound-control | performs remote administration on the unbound DNS resolver
unbound-control-setup | generates a self-signed certificate and private keys for the server and client
unbound-host | is a DNS lookup utility similar to host from BIND Utilities-9.16.20
`libunbound.so` | provides the Unbound API functions to programs

Last updated on

# Part VI. X + Window and Display Managers

## Chapter 24. X Window System Environment

This chapter contains instructions to build and configure a graphical user environment.

Xorg, in addition to clearing up some licensing issues with XFree86, introduced a completely auto-tooled build for the X Window system. This means that the packages build and install using the conventional configure, make, and make install commands, as opposed to a proprietary build system that required hand editing of configuration parameters in a C-like syntax.

Xorg also brought with it a modular build system. While this separation into modules resulted in full control of the features available to the X server on any given installation, it also made the installation more tedious as it requires installing more than 100 different packages to obtain a functional X Window environment. Most large commercial distributions have elected to use Xorg over the XFree86 distribution due to both licensing issues and the increased functionality provided by it over XFree86. With the modular build system, also came incremental updates to individual packages. The distribution of Xorg is given a release number by the developers, in this case Xorg-7, and is referred to as the "katamari" by the upstream developers.

## Introduction to Xorg-7

Xorg is a freely redistributable, open-source implementation of the X Window System. This system provides a client/server interface between display hardware (the mouse, keyboard, and video displays) and the desktop environment, while also providing both the windowing infrastructure and a standardized application interface (API).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7

#### Xorg Download and Installation Instructions

Xorg-7.0 introduced a completely auto-tooled, modular build system. With the new modular build system, it is no longer possible to download the entire package in a single file. In fact, there will be well over 100 packages that need to be fetched from the download location. To assist with such a large task, installing Wget-1.21.1 is strongly recommended for downloading the needed files. A complete wget file list is provided for each page that includes multiple packages.

Given the number of packages available, deciding which packages you need to install for your particular setup may seem a bit overwhelming at first. Take a look at this page and this thread to get an idea of what you will need. If you are unsure, you should install all packages at the cost of extra disk space.

### Note

Even if you intend to download only the necessary packages, you should download the wget file lists. The list of files are ordered by dependency, and the package versions listed in the files are known to work well with each other. Further, the wget file lists contain comments for specific packages that are deprecated or are not recommended to install. Newer packages are likely intended for the next release of Xorg and have already proved to be incompatible with current versions of software installed in BLFS. The installed size of Xorg can be reduced considerably by installing only the packages that you will need and use, however, the BLFS book cannot account for all dependencies and build options for the individual Xorg packages. The instructions assume that all packages have been built. A wiki page containing dependency information is under development. You are encouraged to add to these pages if you discover additional information that may be helpful to other users who selectively install individual packages.

Additionally, because of the large number of repetitive commands, you are encouraged to partially automate the build. Instructions have been given that utilize the Sudo-1.9.7p2 package. It is recommended that you use the `:NOPASSWD` configuration option for the user that will be building the xorg packages.

### Setting up the Xorg Build Environment

### Note

The following instructions assume that the shell startup files have been set up as described in The Bash Shell Startup Files.

As with previous releases of the X Window System, it may be desirable to install Xorg into an alternate prefix. This is no longer common practice among Linux distributions. The common installation prefix for Xorg on Linux is `/usr`. There is no standard alternate prefix, nor is there any exception in the current revision of the Filesystem Hierarchy Standard for Release 7 of the X Window System. Alan Coopersmith of Sun Microsystems, once stated "At Sun, we were using `/usr/X11` and plan to stick with it." Only the `/opt/*` prefix or the `/usr` prefix adhere to the current FHS guidelines.

Choose your installation prefix, and set the `XORG_PREFIX` variable with the following command:

    export XORG_PREFIX="<PREFIX>"

Throughout these instructions, you will use the following configure switches for all of the packages. Create the `XORG_CONFIG` variable to use for this parameter substitution:

    export XORG_CONFIG="--prefix=$XORG_PREFIX --sysconfdir=/etc \
        --localstatedir=/var --disable-static"

Create an `/etc/profile.d/xorg.sh` configuration file containing these variables as the `root` user:

    cat > /etc/profile.d/xorg.sh << EOF
    XORG_PREFIX="$XORG_PREFIX"
    XORG_CONFIG="--prefix=\$XORG_PREFIX --sysconfdir=/etc --localstatedir=/var --disable-static"
    export XORG_PREFIX XORG_CONFIG
    EOF
    chmod 644 /etc/profile.d/xorg.sh

### Note

There is some confustion about the above 'here' document. The backslash in front of the dollar sign is correct. Bash will remove it when creating /etc/profile.d/xorg.sh. However, if you are creating the file with an editor, a copy and paste operation will not remove the baskslash. It must then be removed manually.

If you've installed Sudo-1.9.7p2, ensure that `XORG_PREFIX` and `XORG_CONFIG` are available in the sudo environment. As the `root` user, run the following command:

    cat > /etc/sudoers.d/xorg << EOF
    Defaults env_keep += XORG_PREFIX
    Defaults env_keep += XORG_CONFIG
    EOF

### Warning

If you've decided to use the standard `/usr` prefix, you must omit the remainder of this page and continue at util-macros-1.19.3.

If you've decided to not use the standard prefix, be sure to add `$XORG_PREFIX/bin` to your `PATH` environment variable, and `$XORG_PREFIX/lib/pkgconfig` and `$XORG_PREFIX/share/pkgconfig` to your `PKG_CONFIG_PATH` variable. It is also helpful to specify additional search paths for gcc and an include directory for the aclocal program. Issue the following commands as the `root` user:

    cat >> /etc/profile.d/xorg.sh << "EOF"

    pathappend $XORG_PREFIX/bin             PATH
    pathappend $XORG_PREFIX/lib/pkgconfig   PKG_CONFIG_PATH
    pathappend $XORG_PREFIX/share/pkgconfig PKG_CONFIG_PATH

    pathappend $XORG_PREFIX/lib             LIBRARY_PATH
    pathappend $XORG_PREFIX/include         C_INCLUDE_PATH
    pathappend $XORG_PREFIX/include         CPLUS_INCLUDE_PATH

    ACLOCAL="aclocal -I $XORG_PREFIX/share/aclocal"

    export PATH PKG_CONFIG_PATH ACLOCAL LIBRARY_PATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH
    EOF

The script above needs to be activated. Normally it will be automatic at login, but to activate it now, as a regular user, run:

    source /etc/profile.d/xorg.sh

You should also add `$XORG_PREFIX/lib` to the `/etc/ld.so.conf` file. Again, as the `root` user, issue the following command:

    echo "$XORG_PREFIX/lib" >> /etc/ld.so.conf

You should also modify `/etc/man_db.conf`, adding appropriate MANDATORY_MANPATH, MANPATH_MAP, and MANDB_MAP entries following the examples for `/usr/X11R6`. Issue the following command as the `root` user:

    sed "s@/usr/X11R6@$XORG_PREFIX@g" -i /etc/man_db.conf

Some applications look for shared files in `/usr/share/X11`. Create a symbolic link to the proper location as the `root` user:

    ln -svf $XORG_PREFIX/share/X11 /usr/share/X11

If building KDE, some cmake files look for Xorg in places other than $XORG_PREFIX. Allow cmake to find Xorg with:

    ln -svf $XORG_PREFIX /usr/X11R6

Last updated on

## util-macros-1.19.3

### Introduction to util-macros

The util-macros package contains the m4 macros used by all of the Xorg packages.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/util/util-macros-1.19.3.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/util/util-macros-1.19.3.tar.bz2

- Download MD5 sum: 4be6df7e6af52e28e13dc533244eb9d7

- Download size: 84 KB

- Estimated disk space required: 632 KB

- Estimated build time: less than 0.1 SBU

#### util-macros Dependencies

##### Required

Xorg build environment (should be set for the following instructions to work)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/util-macros

### Installation of util-macros

Install util-macros by running the following commands:

    ./configure $XORG_CONFIG

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: `$XORG_PREFIX`/share/pkgconfig and `$XORG_PREFIX`/share/util-macros

Last updated on

## xorgproto-2021.4

### Introduction to xorgproto

The xorgproto package provides the header files required to build the X Window system, and to allow other applications to build against the installed X Window system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xorg.freedesktop.org/archive/individual/proto/xorgproto-2021.4.tar.bz2

- Download MD5 sum: fb7593911f90727adc03d731e286c685

- Download size: 864 KB

- Estimated disk space required: 8.2 MB

- Estimated build time: less than 0.1 SBU

#### xorgproto Dependencies

##### Required

util-macros-1.19.3

##### Optional

fop-2.6, libxslt-1.1.34, xmlto-0.0.28 and asciidoc-9.1.0 (to build additional documentation)

### Note

There is a reciprocal dependency with fop-2.6. If you wish to build the documentation, you'll need to re-install the Protocol Headers after the installation is complete and fop-2.6 has been installed.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7ProtocolHeaders

### Installation of xorgproto

Install xorgproto by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX -Dlegacy=true .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install &&

    install -vdm 755 $XORG_PREFIX/share/doc/xorgproto-2021.4 &&
    install -vm 644 ../[^m]*.txt ../PM_spec $XORG_PREFIX/share/doc/xorgproto-2021.4

### Command Explanations

install -vm 644 ../[^m]*.txt ../PM_spec ...: The meson build system does not install the text files into `/usr/share/doc`. The [^m] part prevents copying the `meson_options.txt` file.

`-Dlegacy=true`: Installs legacy headers needed by old programs (such as LessTif).

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: `$XORG_PREFIX`/include/GL, `$XORG_PREFIX`/include/X11, and `$XORG_PREFIX`/share/doc/xorgproto-2021.4

Last updated on

## libXau-1.0.9

### Introduction to libXau

The libXau package contains a library implementing the X11 Authorization Protocol. This is useful for restricting client access to the display.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/lib/libXau-1.0.9.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/lib/libXau-1.0.9.tar.bz2

- Download MD5 sum: c5f16288f2da9f071b29111d68797480

- Download size: 316 KB

- Estimated disk space required: 2.8 MB

- Estimated build time: less than 0.1 SBU

#### libXau Dependencies

##### Required

xorgproto-2021.4

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libXau

### Installation of libXau

Install libXau by running the following commands:

    ./configure $XORG_CONFIG &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libXau.so
Installed Directories: None

#### Short Descriptions

`libXau.so` | is the library of X authority database routines

Last updated on

## libXdmcp-1.1.3

### Introduction to libXdmcp

The libXdmcp package contains a library implementing the X Display Manager Control Protocol. This is useful for allowing clients to interact with the X Display Manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/lib/libXdmcp-1.1.3.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/lib/libXdmcp-1.1.3.tar.bz2

- Download MD5 sum: 115c5c12ecce0e749cd91d999a5fd160

- Download size: 328 KB

- Estimated disk space required: 2.8 MB

- Estimated build time: less than 0.1 SBU

#### libXdmcp Dependencies

##### Required

xorgproto-2021.4

##### Optional

xmlto-0.0.28, fop-2.6, and libxslt-1.1.34 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libXdmcp

### Installation of libXdmcp

Install libXdmcp by running the following commands:

    ./configure $XORG_CONFIG --docdir=/usr/share/doc/libXdmcp-1.1.3 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libXdmcp.so
Installed Directory: `$XORG_PREFIX`/share/doc/libXdmcp

#### Short Descriptions

`libXdmcp.so` | is the X Display Manager Control Protocol library

Last updated on

## xcb-proto-1.14.1

### Introduction to xcb-proto

The xcb-proto package provides the XML-XCB protocol descriptions that libxcb uses to generate the majority of its code and API.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xorg.freedesktop.org/archive/individual/proto/xcb-proto-1.14.1.tar.xz

- Download MD5 sum: ecd6955dab1a7b9ba9756a11b8bdb48f

- Download size: 144 KB

- Estimated disk space required: 1.2 MB

- Estimated build time: less than 0.1 SBU

#### xcb-proto Dependencies

##### Optional

libxml2-2.9.12 (required to run the tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-proto

### Installation of xcb-proto

Install xcb-proto by running the following commands:

    PYTHON=python3 ./configure $XORG_CONFIG

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: `$XORG_PREFIX`/share/xcb and `$XORG_PREFIX`/lib/python2.7/site-packages/xcbgen or `$XORG_PREFIX`/lib/python3.9/site-packages/xcbgen

Last updated on

## libxcb-1.14

### Introduction to libxcb

The libxcb package provides an interface to the X Window System protocol, which replaces the current Xlib interface. Xlib can also use XCB as a transport layer, allowing software to make requests and receive responses with both.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xorg.freedesktop.org/archive/individual/lib/libxcb-1.14.tar.xz

- Download MD5 sum: f90b6e4541e9518b4c373b734f475ae7

- Download size: 432 KB

- Estimated disk space required: 27 MB (with tests, add 62 MB for doxygen docs)

- Estimated build time: 0.2 SBU (with tests, add 1.4 SBU for doxygen docs)

#### libxcb Dependencies

##### Required

libXau-1.0.9 and xcb-proto-1.14.1

##### Recommended

libXdmcp-1.1.3

##### Optional

Doxygen-1.9.2 (to generate API documentation) and libxslt-1.1.34

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxcb

### Installation of libxcb

Install libxcb by running the following commands:

    CFLAGS="${CFLAGS:--O2 -g} -Wno-error=format-extra-args" \
    PYTHON=python3                \
    ./configure $XORG_CONFIG      \
                --without-doxygen \
                --docdir='${datadir}'/doc/libxcb-1.14 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`CFLAGS=...`: This variable fixes building this package with GCC-10 and later.

`PYTHON=python3`: This variable forces configure to use python3 instead of python2. The configure script for this package will automatically default to python2 if it is present.

`--without-doxygen`: Do not use doxygen to generate API documentation (default: auto). Without it, if Doxygen-1.9.2 is installed, the API documentation will be generated and installed.

### Contents

Installed Programs: None
Installed Libraries: libxcb.so, libxcb-composite.so, libxcb-damage.so, libxcb-dpms.so, libxcb-dri2.so, libxcb-dri3.so, libxcb-glx.so, libxcb-present.so, libxcb-randr.so, libxcb-record.so, libxcb-render.so, libxcb-res.so, libxcb-screensaver.so, libxcb-shape.so, libxcb-shm.so, libxcb-sync.so, libxcb-xf86dri.so, libxcb-xfixes.so, libxcb-xinerama.so, libxcb-xinput.so, libxcb-xkb.so, libxcb-xtest.so, libxcb-xvmc.so, and libxcb-xv.so
Installed Directories: `$XORG_PREFIX`/include/xcb and `$XORG_PREFIX`/share/doc/libxcb-1.14

#### Short Descriptions

`libxcb.so` | is an interface to the X Window System protocol

Last updated on

## Xorg Libraries

### Introduction to Xorg Libraries

The Xorg libraries provide library routines that are used within all X Window applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/lib/

- Download (FTP): ftp://ftp.x.org/pub/individual/lib/

- Download size: 13 MB

- Estimated disk space required: 224 MB (34 MB installed) - if source directories not deleted

- Estimated build time: 2.4 SBU

#### Xorg Libraries Dependencies

##### Required

Fontconfig-2.13.1 and libxcb-1.14

##### Optional

asciidoc-9.1.0, xmlto-0.0.28 with one or more of the following: fop-2.6, Links-2.23, Lynx-2.8.9rel.1, and W3m (to generate additional PDF or text documentation for the libXfont package).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Libraries

### Downloading Xorg Libraries

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

    cat > lib-7.md5 << "EOF"
    ce2fb8100c6647ee81451ebe388b17ad  xtrans-1.4.0.tar.bz2
    a9a24be62503d5e34df6b28204956a7b  libX11-1.7.2.tar.bz2
    f5b48bb76ba327cd2a8dc7a383532a95  libXext-1.3.4.tar.bz2
    4e1196275aa743d6ebd3d3d5ec1dff9c  libFS-1.0.8.tar.bz2
    76d77499ee7120a56566891ca2c0dbcf  libICE-1.0.10.tar.bz2
    87c7fad1c1813517979184c8ccd76628  libSM-1.2.3.tar.bz2
    eeea9d5af3e6c143d0ea1721d27a5e49  libXScrnSaver-1.2.3.tar.bz2
    b122ff9a7ec70c94dbbfd814899fffa5  libXt-1.2.1.tar.bz2
    ac774cff8b493f566088a255dbf91201  libXmu-1.1.3.tar.bz2
    6f0ecf8d103d528cfc803aa475137afa  libXpm-3.5.13.tar.bz2
    c1ce21c296bbf3da3e30cf651649563e  libXaw-1.0.14.tar.bz2
    86f182f487f4f54684ef6b142096bb0f  libXfixes-6.0.0.tar.bz2
    3fa0841ea89024719b20cd702a9b54e0  libXcomposite-0.4.5.tar.bz2
    802179a76bded0b658f4e9ec5e1830a4  libXrender-0.9.10.tar.bz2
    9b9be0e289130fb820aedf67705fc549  libXcursor-1.2.0.tar.bz2
    e3f554267a7a04b042dc1f6352bd6d99  libXdamage-1.1.5.tar.bz2
    6447db6a689fb530c218f0f8328c3abc  libfontenc-1.1.4.tar.bz2
    bdf528f1d337603c7431043824408668  libXfont2-2.0.5.tar.bz2
    5004d8e21cdddfe53266b7293c1dfb1b  libXft-2.3.4.tar.bz2
    62c4af0839072024b4b1c8cbe84216c7  libXi-1.7.10.tar.bz2
    0d5f826a197dae74da67af4a9ef35885  libXinerama-1.1.4.tar.bz2
    18f3b20d522f45e4dadd34afb5bea048  libXrandr-1.5.2.tar.bz2
    e142ef0ed0366ae89c771c27cfc2ccd1  libXres-1.2.1.tar.bz2
    ef8c2c1d16a00bd95b9fdcef63b8a2ca  libXtst-1.2.3.tar.bz2
    210b6ef30dda2256d54763136faa37b9  libXv-1.0.11.tar.bz2
    3569ff7f3e26864d986d6a21147eaa58  libXvMC-1.0.12.tar.bz2
    0ddeafc13b33086357cfa96fae41ee8e  libXxf86dga-1.1.5.tar.bz2
    298b8fff82df17304dfdb5fe4066fe3a  libXxf86vm-1.1.4.tar.bz2
    d2f1f0ec68ac3932dd7f1d9aa0a7a11c  libdmx-1.1.4.tar.bz2
    b34e2cbdd6aa8f9cc3fa613fd401a6d6  libpciaccess-0.16.tar.bz2
    dd7e1e946def674e78c0efbc5c7d5b3b  libxkbfile-1.1.0.tar.bz2
    42dda8016943dc12aff2c03a036e0937  libxshmfence-1.3.tar.bz2
    EOF

To download the needed files using wget, use the following commands:

    mkdir lib &&
    cd lib &&
    grep -v '^#' ../lib-7.md5 | awk '{print $2}' | wget -i- -c \
        -B https://www.x.org/pub/individual/lib/ &&
    md5sum -c ../lib-7.md5

### Installation of Xorg Libraries

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

Some libraries come with a test suite. If you wish to execute them, either comment out the rm -rf ... below, so that, after all libraries are installed, you can come back to the corresponding directory and run make check, or do individual builds, running the tests for each of those distributed with working test suites. Alternatively, you can uncomment the line #make check ..., and at the end, check the test results with:

    grep -A9 summary *make_check.log

BLFS developers have confirmed that libX11, libXt and libxshmfence are distributed with working test suites.

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    for package in $(grep -v '^#' ../lib-7.md5 | awk '{print $2}')
    do
      packagedir=${package%.tar.bz2}
      tar -xf $package
      pushd $packagedir
      docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
      case $packagedir in
        libICE* )
          ./configure $XORG_CONFIG $docdir ICE_LIBS=-lpthread
        ;;

        libXfont2-[0-9]* )
          ./configure $XORG_CONFIG $docdir --disable-devel-docs
        ;;

        libXt-[0-9]* )
          ./configure $XORG_CONFIG $docdir \
                      --with-appdefaultdir=/etc/X11/app-defaults
        ;;

        * )
          ./configure $XORG_CONFIG $docdir
        ;;
      esac
      make
      #make check 2>&1 | tee ../$packagedir-make_check.log
      as_root make install
      popd
      rm -rf $packagedir
      as_root /sbin/ldconfig
    done

Finally, exit the shell that was started earlier:

    exit

### Command Explanations

./configure $XORG_CONFIG ICE_LIBS=-lpthread: This fixes a change in glibc which breaks pulseaudio at runtime.

`--disable-devel-docs`: Disable generation of text documentation in the libXfont2 package if xmlto-0.0.28 is installed without a text browser. Omit this parameter (or the entire case statement) if a text browser is installed.

`--with-fop`: Use fop-2.6 to generate PDF documentation (only for the libXfont package).

### Configuration of Xorg Libraries

If you've chosen to install Xorg into `/usr`, then no further configuration is necessary and you can skip the rest of this section. If you've opted for an alternate prefix, you should create two symlinks to satisfy the expected environment of several packages. Execute the following commands as the root user:

    ln -sv $XORG_PREFIX/lib/X11 /usr/lib/X11 &&
    ln -sv $XORG_PREFIX/include/X11 /usr/include/X11

### Contents

Installed Programs: cxpm and sxpm
Installed Libraries: libdmx.so, libfontenc.so, libFS.so, libICE.so, libpciaccess.so, libSM.so, libX11.so, libXaw6.so, libXaw7.so, libXaw.so, libXcomposite.so, libXcursor.so, libXdamage.so, libXext.so, libXfixes.so, libXfont2.so, libXft.so, libXinerama.so, libXi.so, libxkbfile.so, libXmu.so, libXmuu.so, libXpm.so, libXrandr.so, libXrender.so, libXRes.so, libxshmfence.so, libXss.so, libXt.so, libXtst.so, libXvMC.so, libXvMCW.so, libXv.so, libXxf86dga.so and libXxf86vm.so
Installed Directories: `$XORG_PREFIX`/include/X11/fonts, `$XORG_PREFIX`/include/X11/Xtrans, `$XORG_PREFIX`/share/doc/libFS, `$XORG_PREFIX`/share/doc/libICE, `$XORG_PREFIX`/share/doc/libSM, `$XORG_PREFIX`/share/doc/libX11, `$XORG_PREFIX`/share/doc/libXaw, `$XORG_PREFIX`/share/doc/libXext, `$XORG_PREFIX`/share/doc/libXi, `$XORG_PREFIX`/share/doc/libXmu, `$XORG_PREFIX`/share/doc/libXrender, `$XORG_PREFIX`/share/doc/libXt, `$XORG_PREFIX`/share/doc/libXtst, `$XORG_PREFIX`/share/doc/libXvMC, `$XORG_PREFIX`/share/doc/xtrans and `$XORG_PREFIX`/share/X11/locale

#### Short Descriptions

cxpm | checks the format of an XPM file
sxpm | shows an XPM file and/or converts XPM 1 or 2 files to XPM 3
`libdmx.so` | is the X Window System DMX (Distributed Multihead X) extension library
`libfontenc.so` | is the X11 font encoding library
`libFS.so` | is the library interface to the X Font Server
`libICE.so` | is the X Inter Client Exchange Library
`libpciaccess.so` | is the generic PCI Access library for X
`libSM.so` | is the X Session Management Library
`libX11.so` | is the Xlib Library
`libXaw6.so` | is the X Athena Widgets Library, version 6
`libXaw7.so` | is the X Athena Widgets Library, version 7
`libXaw.so` | are symbolic links to the current X Athena Widgets Library, version 7
`libXcomposite.so` | is the X Composite Library
`libXcursor.so` | is the X Cursor management library
`libXdamage.so` | is the X Damage Library
`libXext.so` | is the Misc X Extension Library
`libXfixes.so` | provides augmented versions of core protocol requests
`libXfont2.so` | is the X font library
`libXft.so` | is the X FreeType interface library
`libXinerama.so` | is the Xinerama Library
`libXi.so` | is the X Input Extension Library
`libxkbfile.so` | is the xkbfile Library
`libXmu.so` | is the X interface library for miscellaneous utilities not part of the Xlib standard
`libXmuu.so` | is the Mini Xmu Library
`libXpm.so` | is the X Pixmap Library
`libXrandr.so` | is the X Resize, Rotate and Reflection extension library
`libXrender.so` | is the X Render Library
`libXRes.so` | is the X-Resource extension client library
`libxshmfence.so` | exposes an event API on top of Linux futexes
`libXss.so` | is the X11 Screen Saver extension client library
`libXt.so` | is the X Toolkit Library
`libXtst.so` | is the Xtst Library
`libXvMC.so` | is the X-Video Motion Compensation Library
`libXvMCW.so` | is the XvMC Wrapper including the Nonstandard VLD extension
`libXv.so` | is the X Window System video extension library
`libXxf86dga.so` | is the client library for the XFree86-DGA extension
`libXxf86vm.so` | is the client library for the XFree86-VidMode X extension

Last updated on

## xcb-util-0.4.0

### Introduction to xcb-util

The xcb-util package provides additional extensions to the XCB library, many that were previously found in Xlib, but are not part of core X protocol.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-0.4.0.tar.bz2

- Download MD5 sum: 2e97feed81919465a04ccc71e4073313

- Download size: 292 KB

- Estimated disk space required: 2.6 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util Dependencies

##### Required

libxcb-1.14

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util

### Installation of xcb-util

Install xcb-util by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libxcb-util.so
Installed Directories: None

#### Short Descriptions

`libxcb-util.so` | Provides utility functions for other XCB utilities

Last updated on

## xcb-util-image-0.4.0

### Introduction to xcb-util-image

The xcb-util-image package provides additional extensions to the XCB library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-image-0.4.0.tar.bz2

- Download MD5 sum: 08fe8ffecc8d4e37c0ade7906b3f4c87

- Download size: 324 KB

- Estimated disk space required: 3.2 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util-image Dependencies

##### Required

xcb-util-0.4.0

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-image

### Installation of xcb-util-image

Install xcb-util-image by running the following commands:

    ./configure $XORG_CONFIG &&
    make

To test the results, issue: LD_LIBRARY_PATH=$XORG_PREFIX/lib make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libxcb-image.so
Installed Directories: None

#### Short Descriptions

`libxcb-image.so` | Is a port of Xlib's XImage and XShmImage functions

Last updated on

## xcb-util-keysyms-0.4.0

### Introduction to xcb-util-keysyms

The xcb-util-keysyms package contains a library for handling standard X key constants and conversion to/from keycodes.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-keysyms-0.4.0.tar.bz2

- Download MD5 sum: 1022293083eec9e62d5659261c29e367

- Download size: 284 KB

- Estimated disk space required: 2.2 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util-keysyms Dependencies

##### Required

libxcb-1.14

##### Optional

Doxygen-1.9.2 (to generate documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-keysyms

### Installation of xcb-util-keysyms

Install xcb-util-keysyms by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libxcb-keysyms.so
Installed Directories: None

#### Short Descriptions

`libxcb-keysyms.so` | provides the standard X key constants and API functions for conversion to/from keycodes

Last updated on

## xcb-util-renderutil-0.3.9

### Introduction to xcb-util-renderutil

The xcb-util-renderutil package provides additional extensions to the XCB library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-renderutil-0.3.9.tar.bz2

- Download MD5 sum: 468b119c94da910e1291f3ffab91019a

- Download size: 288 KB

- Estimated disk space required: 2.4 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util-renderutil Dependencies

##### Required

libxcb-1.14

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-renderutil

### Installation of xcb-util-renderutil

Install xcb-util-renderutil by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libxcb-render-util.so
Installed Directories: None

#### Short Descriptions

`libxcb-render-util.so` | Provides convenience functions for the Render extension

Last updated on

## xcb-util-wm-0.4.1

### Introduction to xcb-util-wm

The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-wm-0.4.1.tar.bz2

- Download MD5 sum: 87b19a1cd7bfcb65a24e36c300e03129

- Download size: 316 KB

- Estimated disk space required: 3.3 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util-wm Dependencies

##### Required

libxcb-1.14

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-wm

### Installation of xcb-util-wm

Install xcb-util-wm by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: libxcb-ewmh.so and libxcb-icccm.so
Installed Directories: None

#### Short Descriptions

`libxcb-ewmh.so` | provides the client and window-manager helpers for EWMH
`libxcb-icccm.so` | provides the client and window-manager helpers for ICCCM

Last updated on

## xcb-util-cursor-0.1.3

### Introduction to xcb-util-cursor

The xcb-util-cursor package provides a module that implements the XCB cursor library. It is the XCB replacement for libXcursor.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://xcb.freedesktop.org/dist/xcb-util-cursor-0.1.3.tar.bz2

- Download MD5 sum: 6ac3b17cba51aaaa36ba035a53527214

- Download size: 292 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

#### xcb-util-cursor Dependencies

##### Required

xcb-util-0.4.0

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-cursor

### Installation of xcb-util-cursor

Install xcb-util-cursor by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libxcb-cursor.so
Installed Directories: None

#### Short Descriptions

`libxcb-cursor.so` | Is a port of Xlib's libXcursor functions

Last updated on

## Mesa-21.2.1

### Introduction to Mesa

Mesa is an OpenGL compatible 3D graphics library.

### Note

Mesa is updated relatively often. You may want to use the latest available 21.2.x mesa version.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://mesa.freedesktop.org/archive/mesa-21.2.1.tar.xz

- Download (FTP): ftp://ftp.freedesktop.org/pub/mesa/mesa-21.2.1.tar.xz

- Download MD5 sum: f81336168864b1f890edfa5db8587f2b

- Download size: 15 MB

- Estimated disk space required: 799 MB (with docs, add 376 MB if running the tests)

- Estimated build time: 5.1 SBU (on a 4-core machine with docs)

#### Additional Downloads

- Recommended patch: https://www.linuxfromscratch.org/patches/blfs/11.0/mesa-21.2.1-add_xdemos-1.patch (installs 2 demo programs for testing Mesa - not needed if you install the mesa-demos package)

#### Mesa Dependencies

##### Required

Xorg Libraries, libdrm-2.4.107, and Mako-1.1.5

##### Recommended

libva-2.12.0 (to provide VA-API support for some gallium drivers, note that there is a circular dependency. You must build libva first without EGL and GLX support, install this package, and rebuild libva), libvdpau-1.4 (to build VDPAU drivers), LLVM-12.0.1 (required for Gallium3D, nouveau, r300, and radeonsi drivers and for swrast, the software rasterizer which is sometimes referred to as llvmpipe. See https://docs.mesa3d.org/systems.html for more information), and wayland-protocols-1.21 (required for Plasma-5.22.4, GNOME, and recommended for GTK+-3.24.30)

##### Optional

libgcrypt-1.9.4, lm-sensors-3-6-0 , Nettle-3.7.3, Valgrind-3.17.0, mesa-demos (provides more than 300 extra demos to test Mesa; this includes the same programs added by the patch above), Bellagio OpenMAX Integration Layer (for mobile platforms), libunwind, libtizonia, and libvulkan (for the zink driver)

### Note

The instructions below assume that LLVM with the r600/amdgpu and host backends and run-time type information (RTTI - needed for nouveau) are installed. You will need to modify the instructions if you choose not to install all of these. For an explanation of Gallium3D see https://en.wikipedia.org/wiki/Gallium3D.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mesa

### Installation of Mesa

If you have downloaded the xdemos patch (needed if testing the Xorg installation per BLFS instructions), apply it by running the following command:

    patch -Np1 -i ../mesa-21.2.1-add_xdemos-1.patch

Adjust a script file in test suite to use Python 3, instead of the obsolete Python 2:

    sed '1s/python/&3/' -i bin/symbols-check.py

### Note

The measurements above, and the Contents below, are for a full build. Many people will not wish to install drivers they cannot use, so the following paragraphs explain how to limit the drivers, and give an example which can be be reduced or amended as necessary.

Now, select the drivers you wish to install. For the X86 architecture, the available gallium drivers are auto (in 21.2.1 this does not select crocus ), or alternatively a choice from crocus, i915, iris, nouveau, r300, r600, radeonsi, svga, swrast, and virgl. The latter is recommended if you intend to run the system under qemu-6.1.0.

The (non-gallium) DRI drivers available in X86 are auto, or alternatively a choice from i915, i965, nouveau, r100, r200, and swrast. Use 'auto' to build all available DRI drivers, or use an empty string (DRI_DRIVERS="") if you wish to only build gallium drivers.

The platforms ("window systems") available for X86 linux are x11, wayland, and surfaceless. By not specifying anything, the meson build-system will build for all these platforms if you have the dependencies, identical to if you had specified '-Dplatforms=auto'.

Modify the commands below for your desired drivers. The drivers listed below will cover most modern video cards and virtual machines. For help in selecting drivers see https://docs.mesa3d.org/systems.html. For intel drivers, specify crocus for i965 gen 4 through to haswell, iris for broadwell and later.

### Note

Although the nouveau drivers can be built for both gallium and dri, the i915 driver can only be built for one or the other.

    GALLIUM_DRV="crocus,i915,iris,nouveau,r600,radeonsi,svga,swrast,virgl"
    DRI_DRIVERS="i965,nouveau"

Install Mesa by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX          \
          --buildtype=release            \
          -Ddri-drivers=$DRI_DRIVERS     \
          -Dgallium-drivers=$GALLIUM_DRV \
          -Dgallium-nine=false           \
          -Dglx=dri                      \
          -Dvalgrind=disabled            \
          -Dlibunwind=disabled           \
          ..                             &&

    unset GALLIUM_DRV DRI_DRIVERS &&

    ninja

If you built the tests (see 'Command Explanations'), to run them issue: ninja test. All 33 subtests tests in the mesa:compiler+glsl / glsl compiler warnings suite are known to fail.

Now, as the `root` user:

    ninja install

If desired, install the optional documentation by running the following commands as the `root` user:

    install -v -dm755 /usr/share/doc/mesa-21.2.1 &&
    cp -rfv ../docs/* /usr/share/doc/mesa-21.2.1

### Command Explanations

`--buildtype=release`: This switch ensures a fully-optimized build, and disables debug assertions which will severely slow down the libraries in certain use-cases. Without this switch, build sizes can span into the 2GB range.

`-Ddri-drivers="..."`: This parameter controls which (non-gallium) dri drivers should be built.

`-Dgallium-drivers="..."`: This parameter controls which Gallium3D drivers should be built.

`-Dgallium-nine=false`: Prevents building support for (MS Windows) games designed for DX9. Set it to true if this support is desired.

`-Dvalgrind=disabled`: This parameter disables the usage of Valgrind during the build process. Remove this parameter if you have Valgrind installed, and wish to check for memory leaks.

`-Dlibunwind=disabled`: This parameter disables the usage of libunwind.

`-Dbuild-tests=true`: This option will cause the test code to be enabled. To run the tests, issue: ninja test.

### Contents

Installed Programs: glxgears and glxinfo
Installed Libraries: libEGL.so, libGL.so, libGLESv1_CM.so, libGLESv2.so, libOSMesa.so, libXvMCnouveau.so, libXvMCr600.so, libgbm.so, libglapi.so, libvulkan_intel.so, libvulkan_lvp.so, libvulkan_radeon.so, and libxatracker.so,
Installed Drivers: d3dadapter9.so (optional), crocus_dri.so, i830_dri.so, i915_dri.so, i965_dri.so, iris_dri.so, kms_swrast_dri.so, nouveau_dri.so, nouveau_drv_video.so, nouveau_vieux_dri.so, r200_dri.so (optional), r300_dri.so (optional), r600_dri.so, r600_drv_video.so, radeon_dri.so (optional), radeonsi_dri.so, radeonsi_drv_video.so, swrast_dri.so, virtio_gpu_dri.so, vmwgfx_dri.so, libvdpau_nouveau.so, libvdpau_r300.so (optional), libvdpau_r600.so, and libvdpau_radeonsi.so (Many of these drivers are hard-linked).
Installed Directories: $XORG_PREFIX/{include/{EGL,GL,GLES,GLES2,GLES3,KHR,vulkan},lib/{dri,vdpau}}, $XORG_PREFIX/include/d3adapter (optional), $XORG_PREFIX/lib/d3d (optional), $XORG_PREFIX/share/drirc.d (contains workarounds for various applications, particularly browsers and games) $XORG_PREFIX/share/vulkan/icd.d, and /usr/share/doc/mesa-21.2.1 (optional)

#### Short Descriptions

glxgears | is a GL demo useful for troubleshooting graphics problems
glxinfo | is a diagnostic program that displays information about the graphics hardware and installed GL libraries
`libEGL.so` | provides a native platform graphics interface as defined by the EGL-1.4 specification
`libgbm.so` | is the Mesa Graphics Buffer Manager library
`libGLESv1_CM.so` | is the Mesa OpenGL ES 1.1 library
`libGLES2.so` | is the Mesa OpenGL ES 2.0 library
`libGL.so` | is the main Mesa OpenGL library
`libOSMesa.so` | is the Mesa Off-screen Rendering library

Last updated on

## xbitmaps-1.1.2

### Introduction to xbitmaps

The xbitmaps package contains bitmap images used by multiple applications built in Xorg chapter.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/data/xbitmaps-1.1.2.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/data/xbitmaps-1.1.2.tar.bz2

- Download MD5 sum: cedeef095918aca86da79a2934e03daf

- Download size: 126 KB

- Estimated disk space required: 1.6 MB

- Estimated build time: less than 0.1 SBU

#### xbitmaps Dependencies

##### Required

util-macros-1.19.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xbitmaps

### Installation of xbitmaps

Install xbitmaps by running the following commands:

    ./configure $XORG_CONFIG

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: `$XORG_PREFIX`/include/X11/bitmaps

Last updated on

## Xorg Applications

### Introduction to Xorg Applications

The Xorg applications provide the expected applications available in previous X Window implementations.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/app/

- Download (FTP): ftp://ftp.x.org/pub/individual/app/

- Download size: 4.9 MB

- Estimated disk space required: 48 MB

- Estimated build time: 1.5 SBU (ignoring the time to download)

#### Xorg Applications Dependencies

##### Required

libpng-1.6.37, Mesa-21.2.1, xbitmaps-1.1.2, and xcb-util-0.4.0

##### Optional

Linux-PAM-1.5.1 and both cairo-5c and Nickle (only if you wish to try to run the undocumented xkeyhost script).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Applications

### Downloading Xorg Applications

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

    cat > app-7.md5 << "EOF"
    3b9b79fa0f9928161f4bad94273de7ae  iceauth-1.0.8.tar.bz2
    c4a3664e08e5a47c120ff9263ee2f20c  luit-1.1.1.tar.bz2
    215940de158b1a3d8b3f8b442c606e2f  mkfontscale-1.2.1.tar.bz2
    92be564d4be7d8aa7b5024057b715210  sessreg-1.1.2.tar.bz2
    93e736c98fb75856ee8227a0c49a128d  setxkbmap-1.3.2.tar.bz2
    3a93d9f0859de5d8b65a68a125d48f6a  smproxy-1.0.6.tar.bz2
    e96b56756990c56c24d2d02c2964456b  x11perf-1.6.1.tar.bz2
    e50587c1bb832aafd1a19d91a0890a0b  xauth-1.1.tar.bz2
    5b6405973db69c0443be2fba8e1a8ab7  xbacklight-1.2.3.tar.bz2
    9956d751ea3ae4538c3ebd07f70736a0  xcmsdb-1.0.5.tar.bz2
    25cc7ca1ce5dcbb61c2b471c55e686b5  xcursorgen-1.0.7.tar.bz2
    8809037bd48599af55dad81c508b6b39  xdpyinfo-1.3.2.tar.bz2
    480e63cd365f03eb2515a6527d5f4ca6  xdriinfo-1.0.6.tar.bz2
    e1d7dc1afd3ddb8fab16d6a76f21a258  xev-1.2.4.tar.bz2
    90b4305157c2b966d5180e2ee61262be  xgamma-1.0.6.tar.bz2
    a48c72954ae6665e0616f6653636da8c  xhost-1.0.8.tar.bz2
    ac6b7432726008b2f50eba82b0e2dbe4  xinput-1.6.3.tar.bz2
    c45e9f7971a58b8f0faf10f6d8f298c0  xkbcomp-1.4.5.tar.bz2
    c747faf1f78f5a5962419f8bdd066501  xkbevd-1.1.4.tar.bz2
    502b14843f610af977dffc6cbf2102d5  xkbutils-1.0.4.tar.bz2
    938177e4472c346cf031c1aefd8934fc  xkill-1.0.5.tar.bz2
    61671fee12535347db24ec3a715032a7  xlsatoms-1.1.3.tar.bz2
    4fa92377e0ddc137cd226a7a87b6b29a  xlsclients-1.1.4.tar.bz2
    e50ffae17eeb3943079620cb78f5ce0b  xmessage-1.0.5.tar.bz2
    51f1d30a525e9903280ffeea2744b1f6  xmodmap-1.0.10.tar.bz2
    eaac255076ea351fd08d76025788d9f9  xpr-1.0.5.tar.bz2
    2358e29133d183ff67d4ef8afd70b9d2  xprop-1.2.5.tar.bz2
    fe40f7a4fd39dd3a02248d3e0b1972e4  xrandr-1.5.1.tar.xz
    85f04a810e2fb6b41ab872b421dce1b1  xrdb-1.2.1.tar.bz2
    c56fa4adbeed1ee5173f464a4c4a61a6  xrefresh-1.0.6.tar.bz2
    70ea7bc7bacf1a124b1692605883f620  xset-1.2.4.tar.bz2
    5fe769c8777a6e873ed1305e4ce2c353  xsetroot-1.1.2.tar.bz2
    b13afec137b9b331814a9824ab03ec80  xvinfo-1.1.4.tar.bz2
    f783a209f2e3fa13253cedb65eaf9cdb  xwd-1.0.8.tar.bz2
    26d46f7ef0588d3392da3ad5802be420  xwininfo-1.1.5.tar.bz2
    79972093bb0766fcd0223b2bd6d11932  xwud-1.0.5.tar.bz2
    EOF

To download the needed files using wget, use the following commands:

    mkdir app &&
    cd app &&
    grep -v '^#' ../app-7.md5 | awk '{print $2}' | wget -i- -c \
        -B https://www.x.org/pub/individual/app/ &&
    md5sum -c ../app-7.md5

### Installation of Xorg Applications

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    for package in $(grep -v '^#' ../app-7.md5 | awk '{print $2}')
    do
      packagedir=${package%.tar.?z*}
      tar -xf $package
      pushd $packagedir
         case $packagedir in
           luit-[0-9]* )
             sed -i -e "/D_XOPEN/s/5/6/" configure
           ;;
         esac

         ./configure $XORG_CONFIG
         make
         as_root make install
      popd
      rm -rf $packagedir
    done

Finally, exit the shell that was started earlier:

    exit

Unless you installed the optional dependencies, remove an undocumented script which is reported to be broken (xkeystone provided by the xrandr package).

    as_root rm -f $XORG_PREFIX/bin/xkeystone

### Contents

Installed Programs: iceauth, luit, mkfontdir, mkfontscale, sessreg, setxkbmap, smproxy, x11perf, x11perfcomp, xauth, xbacklight, xcmsdb, xcursorgen, xdpr, xdpyinfo, xdriinfo, xev, xgamma, xhost, xinput, xkbbell, xkbcomp, xkbevd, xkbvleds, xkbwatch, xkill, xlsatoms, xlsclients, xmessage, xmodmap, xpr, xprop, xrandr, xrdb, xrefresh, xset, xsetroot, xvinfo, xwd, xwininfo, and xwud
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

iceauth | is the ICE authority file utility
luit | provides locale and ISO 2022 support for Unicode terminals
mkfontdir | creates an index of X font files in a directory
mkfontscale | creates an index of scalable font files for X
sessreg | manages utmp/wtmp entries for non-init clients
setxkbmap | sets the keyboard using the X Keyboard Extension
smproxy | is the Session Manager Proxy
x11perf | is an X11 server performance test program
x11perfcomp | is an X11 server performance comparison program
xauth | is the X authority file utility
xbacklight | adjusts backlight brightness using RandR extension
xcmsdb | is the Device Color Characterization utility for the X Color Management System
xcursorgen | creates an X cursor file from a collection of PNG images
xdpr | dumps an X window directly to a printer
xdpyinfo | is a display information utility for X
xdriinfo | queries configuration information of DRI drivers
xev | prints contents of X events
xgamma | alters a monitor's gamma correction through the X server
xhost | is a server access control program for X
xinput | is a utility to configure and test X input devices
xkbbell | is an XKB utility program that raises a bell event
xkbcomp | compiles an XKB keyboard description
xkbevd | is the XKB event daemon
xkbvleds | shows the XKB status of keyboard LEDs
xkbwatch | monitors modifier keys and LEDs
xkill | kills a client by its X resource
xlsatoms | lists interned atoms defined on the server
xlsclients | lists client applications running on a display
xmessage | displays a message or query in a window
xmodmap | is a utility for modifying keymaps and pointer button mappings in X
xpr | prints an X window dump
xprop | is a property displayer for X
xrandr | is a primitive command line interface to RandR extension
xrdb | is the X server resource database utility
xrefresh | refreshes all or part of an X screen
xset | is the user preference utility for X
xsetroot | is the root window parameter setting utility for X
xvinfo | prints out X-Video extension adaptor information
xwd | dumps an image of an X window
xwininfo | is a window information utility for X
xwud | is an image displayer for X

Last updated on

## xcursor-themes-1.0.6

### Introduction to xcursor-themes

The xcursor-themes package contains the redglass and whiteglass animated cursor themes.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/data/xcursor-themes-1.0.6.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/data/xcursor-themes-1.0.6.tar.bz2

- Download MD5 sum: aea14eabf40528ec4db18f1cfcf5c458

- Download size: 2.3 MB

- Estimated disk space required: 15 MB

- Estimated build time: less than 0.1 SBU

#### xcursor-themes Dependencies

##### Required

Xorg Applications

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xcursor-themes

### Installation of xcursor-themes

Install xcursor-themes by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: `$XORG_PREFIX`/share/icons/handhelds, `$XORG_PREFIX`/share/icons/redglass and `$XORG_PREFIX`/share/icons/whiteglass

Last updated on

## Xorg Fonts

### Introduction to Xorg Fonts

The Xorg font packages provide some scalable fonts and supporting packages for Xorg applications. Many people will want to install other TTF or OTF fonts in addition to, or instead of, these. Some are listed at the section called “TTF and OTF fonts”.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/font/

- Download (FTP): ftp://ftp.x.org/pub/individual/font/

- Download size: 3.0 MB

- Estimated disk space required: 8.8 MB

- Estimated build time: 0.1 SBU

#### Xorg Fonts Dependencies

##### Required

xcursor-themes-1.0.6

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Fonts

### Downloading Xorg Fonts

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

    cat > font-7.md5 << "EOF"
    3d6adb76fdd072db8c8fae41b40855e8  font-util-1.3.2.tar.bz2
    bbae4f247b88ccde0e85ed6a403da22a  encodings-1.0.5.tar.bz2
    0497de0176a0dfa5fac2b0552a4cf380  font-alias-1.0.4.tar.bz2
    fcf24554c348df3c689b91596d7f9971  font-adobe-utopia-type1-1.0.4.tar.bz2
    e8ca58ea0d3726b94fe9f2c17344be60  font-bh-ttf-1.0.3.tar.bz2
    53ed9a42388b7ebb689bdfc374f96a22  font-bh-type1-1.0.3.tar.bz2
    bfb2593d2102585f45daa960f43cb3c4  font-ibm-type1-1.0.3.tar.bz2
    4ee18ab6c1edf636b8e75b73e6037371  font-misc-ethiopic-1.0.4.tar.bz2
    3eeb3fb44690b477d510bbd8f86cf5aa  font-xfree86-type1-1.0.4.tar.bz2
    EOF

To download the needed files using wget, use the following commands:

    mkdir font &&
    cd font &&
    grep -v '^#' ../font-7.md5 | awk '{print $2}' | wget -i- -c \
        -B https://www.x.org/pub/individual/font/ &&
    md5sum -c ../font-7.md5

### Installation of Xorg Fonts

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    for package in $(grep -v '^#' ../font-7.md5 | awk '{print $2}')
    do
      packagedir=${package%.tar.bz2}
      tar -xf $package
      pushd $packagedir
        ./configure $XORG_CONFIG
        make
        as_root make install
      popd
      as_root rm -rf $packagedir
    done

Finally, exit the shell that was started earlier:

    exit

When all of the fonts have been installed, the system must be configured so that Fontconfig can find the TrueType fonts since they are outside of the default search path of `/usr/share/fonts`. Make symlinks to the Xorg TrueType font directories by running the following commands as the `root` user:

    install -v -d -m755 /usr/share/fonts                               &&
    ln -svfn $XORG_PREFIX/share/fonts/X11/OTF /usr/share/fonts/X11-OTF &&
    ln -svfn $XORG_PREFIX/share/fonts/X11/TTF /usr/share/fonts/X11-TTF

### Contents

Installed Programs: bdftruncate and ucs2any
Installed Libraries: None
Installed Directories: `$XORG_PREFIX`/share/fonts

#### Short Descriptions

bdftruncate | generates a truncated BDF font from an ISO 10646-1 encoded BDF font
ucs2any | generates BDF fonts in any encoding from an ISO 10646-1 encoded BDF font

Last updated on

## XKeyboardConfig-2.33

### Introduction to XKeyboardConfig

The XKeyboardConfig package contains the keyboard configuration database for the X Window System.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/data/xkeyboard-config/xkeyboard-config-2.33.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/data/xkeyboard-config/xkeyboard-config-2.33.tar.bz2

- Download MD5 sum: 49282f120fd22c6c860004931c03c595

- Download size: 1.7 MB

- Estimated disk space required: 21 MB

- Estimated build time: less than 0.1 SBU

#### XKeyboardConfig Dependencies

##### Required

Xorg Libraries

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xkeyboard-config

### Installation of XKeyboardConfig

Install XKeyboardConfig by running the following commands:

    ./configure $XORG_CONFIG --with-xkb-rules-symlink=xorg &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--with-xkb-rules-symlink=xorg`: By default, the XKB rules installed are named "base". This creates symlinks named "xorg" to those rules, which is the default name used by Xorg.

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: `$XORG_PREFIX`/share/X11/xkb

Last updated on

## Xorg-Server-1.20.13

### Introduction to Xorg Server

The Xorg Server is the core of the X Window system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/xserver/xorg-server-1.20.13.tar.xz

- Download (FTP): ftp://ftp.x.org/pub/individual/xserver/xorg-server-1.20.13.tar.xz

- Download MD5 sum: 9acb2a51507e6056b09e3d3f19565419

- Download size: 4.9 MB

- Estimated disk space required: 193 MB (with tests)

- Estimated build time: 0.7 SBU (using parallelism=4; with tests)

#### Xorg Server Dependencies

##### Required

Pixman-0.40.0 and Xorg Fonts (only font-util), and at runtime: xkeyboard-config-2.33

##### Recommended

libepoxy-1.5.9 (needed for glamor and Xwayland), Wayland-1.19.0 (needed for Xwayland), wayland-protocols-1.21 , and Systemd-249

##### Optional

acpid-2.0.32 (runtime), Doxygen-1.9.2 (to build API documentation), fop-2.6 (to build documentation), Nettle-3.7.3, libgcrypt-1.9.4, xcb-util-keysyms-0.4.0, xcb-util-image-0.4.0, xcb-util-renderutil-0.3.9, xcb-util-wm-0.4.1 (all three to build Xephyr), xmlto-0.0.28 (to build documentation), libunwind, and xorg-sgml-doctools (to build documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Server

### Installation of Xorg Server

Install the server by running the following commands:

    ./configure $XORG_CONFIG            \
                --enable-glamor         \
                --enable-suid-wrapper   \
                --with-xkb-output=/var/lib/xkb &&
    make

To test the results, issue: make check. You will need to run ldconfig as the `root` user first or some tests may fail.

Now as the `root` user:

    make install &&
    mkdir -pv /etc/X11/xorg.conf.d

### Command Explanations

`--enable-glamor`: Build the Glamor DIX (Device Independent X) module which is currently used by: R600 or later radeon video chipsets, the modesetting driver (which is part of this package) for hardware using KMS which offers acceleration, and (optionally) the intel driver.

`--enable-suid-wrapper`: Builds the suid-root wrapper for legacy driver support on rootless xserver systems.

`--disable-systemd-logind`: This switch disables systemd-logind integration allowing Xorg Server to work without having the systemd PAM module configured.

`--enable-install-setuid`: This switch restores the setuid bit to the Xorg executable allowing Xorg Server to work with a virtual terminal designated on the startx command line.

`--enable-dmx`: Builds the DMX (Distributed Multihead X) server.

`--enable-kdrive`: This option allows the configure script to enable Xephyr if its dependencies are met.

### Contents

Installed Programs: cvt, gtf, X, Xnest, Xorg, and Xvfb; optional: dmxaddinput, dmxaddscreen, dmxinfo, dmxreconfig, dmxresize, dmxrminput, dmxrmscreen, dmxtodmx, dmxwininfo, vdltodmx, Xdmx, xdmxconfig, Xephyr, and Xwayland
Installed Libraries: several under $XORG_PREFIX/lib/xorg/modules/{,drivers,extensions} including modesetting_drv.so
Installed Directories: $XORG_PREFIX/{include/xorg,lib/xorg,share/X11/xorg.conf.d} and /var/lib/xkb

#### Short Descriptions

cvt | calculates VESA CVT mode lines
dmx* | are various tools used for manipulating the dmx server
gtf | calculates VESA GTF mode lines
vdltodmx | is a tool used to convert VDL config files to DMX config files
X | is a symbolic link to Xorg
Xdmx | is a proxy X server that uses one or more other X servers as its display devices
Xephyr | is a nested X server which supports modern X extensions
Xnest | is a nested X server
Xorg | is the X11R7 X Server
Xvfb | is the virtual framebuffer X server for X Version 11
xdmxconfig | is a graphical configuration utility for the dmx server
Xwayland | allows the X server to run X clients under wayland (i.e. wayland provides the input devices and handles the presentation of the windows)
`modesetting_drv.so` | provides a video driver for machines using Kernel Mode Setting (KMS). This will use glamor if that has been enabled and the hardware offers acceleration

Last updated on

## Xorg Drivers

### Introduction to Xorg Drivers

The Xorg Drivers page contains the instructions for building Xorg drivers that are necessary in order for Xorg Server to take advantage of the hardware that it is running on. At least one input and one video driver are required for Xorg Server to start.

On machines using KMS, the modesetting driver is provided by xorg-server and can be used instead of the video driver for the specific hardware, but with reduced performance. It can also be used (without hardware acceleration) in virtual machines running under qemu.

### Note

If you are unsure which video hardware you have, you can use lspci from pciutils-3.7.0 to find out which video hardware you have and then look at the descriptions of the packages in order to find out which driver you need.

### Note

In addition to the drivers listed below, there are several other drivers for very old hardware that may still be relevant. The latest versions of these drivers may be downloaded from https://www.x.org/archive/individual/driver. Instructions for building these now intermittently maintained drivers may be found in a prior version of BLFS: https://www.linuxfromscratch.org/blfs/view/7.6/x/x7driver.html

#### Xorg Input Drivers

- libevdev-1.11.0

- Xorg Evdev Driver-2.10.6

- libinput-1.18.1

- Xorg Libinput-1.1.0

- Xorg Synaptics Driver-1.9.1

- Xorg Wacom Driver-0.40.0

#### Xorg Video Drivers

- Xorg AMDGPU Driver-21.0.0

- Xorg ATI Driver-19.1.0

- Xorg Fbdev Driver-0.5.0

- Xorg Intel Driver-20210222

- Xorg Nouveau Driver-1.0.17

- Xorg VMware Driver-13.3.0

#### Hardware Video Acceleration

- libva-2.12.0

- libvdpau-1.4

- libvdpau-va-gl-0.4.0

### libevdev 1.11.0

#### Introduction to libevdev

The libevdev package contains common functions for Xorg input drivers.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.freedesktop.org/software/libevdev/libevdev-1.11.0.tar.xz

- Download MD5 sum: b09838ec120dabeebc08fa6a1943594f

- Download size: 436 KB

- Estimated disk space required: 9.1 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

##### libevdev Dependencies

###### Optional

Doxygen-1.9.2 and Valgrind-3.17.0 (optional for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libevdev

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Input device support --->
        <*> Generic input layer (needed for keyboard, mouse, ...) [CONFIG_INPUT]
        <*>   Event interface                   [CONFIG_INPUT_EVDEV]
        [*]   Miscellaneous devices  --->       [CONFIG_INPUT_MISC]
          <*>    User level driver support      [CONFIG_INPUT_UINPUT]

#### Installation of libevdev

Install libevdev by running the following commands:

    ./configure $XORG_CONFIG &&
    make

The regression tests can be run as the `root` user with make check, in a graphical session. Note that on some systems, the tests may cause a hard lockup and require a reboot. On laptops, the system will go into Sleep and need to be woken up to finish the test suites.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Programs: libevdev-tweak-device, mouse-dpi-tool, and touchpad-edge-detector
Installed Xorg Library: libevdev.so
Installed Xorg Directory: $XORG_PREFIX/include/libevdev-1.0

##### Short Descriptions

libevdev-tweak-device | is a tool to change some kernel device properties
mouse-dpi-tool | is a tool to estimate the resolution of a mouse
touchpad-edge-detector | touchpad-edge-detector is a tool that reads the touchpad events from the kernel and calculates the minimum and maximum for the x and y coordinates, respectively
`libevdev.so` | is a library of Xorg driver input functions

### Xorg Evdev Driver-2.10.6

#### Introduction to Xorg Evdev Driver

The Xorg Evdev Driver package contains a Generic Linux input driver for the Xorg X server. It handles keyboard, mouse, touchpads and wacom devices, though for touchpad and wacom advanced handling, additional drivers are required.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-input-evdev-2.10.6.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-input-evdev-2.10.6.tar.bz2

- Download MD5 sum: e8bd1edc6751f92e425cae7eba3c61eb

- Download size: 400 KB

- Estimated disk space required: 3.9 MB

- Estimated build time: less than 0.1 SBU

##### Xorg Evdev Driver Dependencies

###### Required

libevdev-1.11.0, mtdev-1.1.6, and Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-evdev-driver

#### Installation of Xorg Evdev Driver

Install Xorg Evdev Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: evdev_drv.so

##### Short Descriptions

`evdev_drv.so` | is an Xorg input driver for Linux generic event devices

### libinput-1.18.1

#### Introduction to libinput

libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.freedesktop.org/software/libinput/libinput-1.18.1.tar.xz

- Download MD5 sum: 17057507ddbcad69ecc5de0dd9a05e47

- Download size: 608 KB

- Estimated disk space required: 13 MB

- Estimated build time: less than 0.1 SBU

##### libinput Dependencies

###### Required

libevdev-1.11.0 and mtdev-1.1.6

###### Optional

Valgrind-3.17.0 (to run the tests), Sphinx (required to build documentation), GTK+-3.24.30 (to build the GUI event viewer), libunwind (required for tests), libwacom-1.11, and PyParsing (for one non-root test)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libinput

#### kernel configuration for running the libinput testsuite

Although libinput works with the same kernel configuration used by libevdev-1.11.0, its extensive testsuite requires the presence of `/dev/uinput` (as well as both Valgrind-3.17.0 and libunwind).

If you wish to run the full tests, enable the following option in the kernel configuration and recompile the kernel if necessary:

    Device Drivers --->
      Input device support --->
        Miscellaneous Devices --->
        <*/M>   User level driver support        [CONFIG_INPUT_UINPUT]

If you build this as a module, it needs to be inserted before the testsuite runs.

On an Xorg system you will also need to prevent the events generated during the testsuite from interfering with your desktop. Copy the file `test/50-litest.conf` into `${XORG_PREFIX}/share/X11/xorg.conf.d` and restart X. For further information see libinput test suite.

#### Installation of libinput

Install libinput by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX \
          --buildtype=release   \
          -Ddebug-gui=false     \
          -Dtests=false         \
          -Ddocumentation=false \
          -Dlibwacom=false      \
          ..                    &&
    ninja

### Note

If you want to run the full tests, remove -Dtests from the meson command above. Please read "kernel configuration for running the libinput testsuite" (above).

If you have enabled the full tests, you can run the main tests as the root user by executing: ninja test. A very large number of tests will be run, about 20 fail (at least on an Xorg system).

Now, as the `root` user:

    ninja install

If Doxygen-1.9.2, Graphviz-2.48.0, and Sphinx were present during the build, you can install the generated documentation by running the following commands as the `root` user:

    install -v -dm755      /usr/share/doc/libinput-1.18.1/{html,api} &&
    cp -rv Documentation/* /usr/share/doc/libinput-1.18.1/html &&
    cp -rv api/*           /usr/share/doc/libinput-1.18.1/api

#### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddebug-gui=false`: This switch disables creation of a visual debug helper for libinput. Remove if you want it, and you have GTK+-3.24.30 installed.

`-Dtests=false`: This switch disables compilation of the main tests. Even with the tests defined as false, you can still run the first four minor tests, as a regular user, but one will be skipped if PyParsing is not installed.

`-Ddocumentation=false`: This switch disables generation of the documentation. Remove if you want to generate it, and you have Doxygen-1.9.2 and Graphviz-2.48.0 installed.

`-Dlibwacom=false`: Remove this option if you have libwacom-1.11 installed, or if you are installing GNOME.

#### Contents

Installed Programs: libinput
Installed Libraries: libinput.so
Installed Directories: $XORG_PREFIX/libexec/libinput, /etc/libinput, /usr/share/libinput, and (optionally) /usr/share/doc/libinput-1.18.1

#### Short Descriptions

libinput | is a set of tools to interface with the libinput library
`libinput.so` | contains API functions for handling input devices

### Xorg Libinput Driver-1.1.0

#### Introduction to Xorg Libinput Driver

The X.Org Libinput Driver is a thin wrapper around libinput and allows for libinput to be used for input devices in X. This driver can be used as as drop-in replacement for evdev and synaptics.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-input-libinput-1.1.0.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-input-libinput-1.1.0.tar.bz2

- Download MD5 sum: 0997116b1203d3152aee746e4faf0d31

- Download size: 372 KB

- Estimated disk space required: 4.0 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

##### Xorg Libinput Driver Dependencies

###### Required

libinput-1.18.1 and Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-libinput-driver

#### Installation of Xorg Libinput Driver

Install Xorg Libinput Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

To test the results, issue make check.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: libinput_drv.so

##### Short Descriptions

`libinput_drv.so` | is an Xorg input driver for mouse, keyboard, touchpad, touchscreen, and tablet devices

### Xorg Synaptics Driver-1.9.1

#### Introduction to Xorg Synaptics Driver

The Xorg Synaptics Driver package contains the X.Org Input Driver, support programs and SDK for Synaptics touchpads. Even though the evdev driver can handle touchpads very well, this driver is required if you want to use advanced features like multi tapping, scrolling with touchpad, turning the touchpad off while typing, etc.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-input-synaptics-1.9.1.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-input-synaptics-1.9.1.tar.bz2

- Download MD5 sum: cfb79d3c975151f9bbf30b727c260cb9

- Download size: 492 KB

- Estimated disk space required: 4.8 MB

- Estimated build time: less than 0.1 SBU

##### Xorg Synaptics Driver Dependencies

###### Required

libevdev-1.11.0 and Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-synaptics-driver

#### Installation of Xorg Synaptics Driver

Install Xorg Synaptics Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Programs: synclient and syndaemon
Installed Xorg Driver: synaptics_drv.so

##### Short Descriptions

synclient | is a command line utility used to query and modify Synaptics driver options
syndaemon | is a program that monitors keyboard activity and disables the touchpad when the keyboard is being used
`synaptics_drv.so` | is an Xorg input driver for touchpads

### Xorg Wacom Driver-0.40.0

#### Introduction to Xorg Wacom Driver

The Xorg Wacom Driver package contains the X.Org X11 driver and SDK for Wacom and Wacom-like tablets. It is not required to use a Wacom tablet, the xf86-input-evdev driver can handle these devices without problems.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/linuxwacom/xf86-input-wacom/releases/download/xf86-input-wacom-0.40.0/xf86-input-wacom-0.40.0.tar.bz2

- Download MD5 sum: e97a5230d1875d288010b3df1b332ed5

- Download size: 616 KB

- Estimated disk space required: 12 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

##### Xorg Wacom Drivers Dependencies

###### Required

Xorg-Server-1.20.13

###### Optional

Doxygen-1.9.2 and Graphviz-2.48.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-wacom-driver

#### Kernel Configuration

To use a Wacom tablet with USB interface, enable the following options in your kernel configuration and recompile. Note that other configuration options could be required for tablet with a serial or bluetooth interface:

    Device Drivers  --->
      HID support  --->
        -*- HID bus support                                      [CONFIG_HID]
             Special HID drivers --->
                  <*/M> Wacom Intuos/Graphire tablet support (USB) [CONFIG_HID_WACOM]

#### Installation of Xorg Wacom Driver

Install Xorg Wacom Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

#### Contents

Installed Programs: isdv4-serial-debugger, isdv4-serial-inputattach, and xsetwacom
Installed Xorg Driver: wacom_drv.so

##### Short Descriptions

xsetwacom | is a commandline utility used to query and modify wacom driver settings
`wacom_drv.so` | is an Xorg input driver for Wacom devices

### Xorg AMDGPU Driver-21.0.0

#### Introduction to Xorg AMDGPU Driver

The Xorg AMDGPU Driver package contains the X.Org Video Driver for newer AMD Radeon video cards starting from Volcanic Islands. It can also be used for Southern and Sea Islands if the experimental support was enabled in the kernel.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

For Direct Rendering to work, you need to enable the radeonsi Gallium driver at Mesa-21.2.1 build time. Also, all cards require Firmware to be available when the kernel driver is loaded. Firmware can be obtained from https://anduin.linuxfromscratch.org/BLFS/linux-firmware/. See the section called “Kernel Configuration for additional firmware” below for additional firmware.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-video-amdgpu-21.0.0.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-video-amdgpu-21.0.0.tar.bz2

- Download MD5 sum: 61a4af51082a58c63af8970b06c3f4be

- Download size: 440 KB

- Estimated disk space required: 6.0 MB

- Estimated build time: less than 0.1 SBU

##### Xorg AMDGPU Driver Dependencies

###### Required

Xorg-Server-1.20.13 (must be built with glamor enabled)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-amdgpu-driver

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Graphics support --->
       <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
       <*/M> AMD GPU                                           [CONFIG_DRM_AMDGPU]
        < /*> Enable amdgpu support for SI parts               [CONFIG_DRM_AMDGPU_SI]
        < /*> Enable amdgpu support for CIK parts              [CONFIG_DRM_AMDGPU_CIK]

The last two options enable experimental support for Southern and Sea Islands AMD GPUs so they can be used with this driver. Note that the support is marked experimental and disabled by default. Xorg ATI Driver-19.1.0 should be used for those GPUs.

#### Kernel Configuration for additional firmware

If you need to add firmware, install the file(s) and then point to them in the kernel configuration and recompile the kernel if necessary. To find out which firmware you need, consult the Decoder ring for engineering vs marketing names. Download any firmware for your card which is named like: ``<ENGINEERING_NAME>`_rlc.bin`, etc. Below is an example for Radeon R7 M340 GPU, which is codenamed Iceland/Topaz, along with a network card that also requires the firmware:

    CONFIG_EXTRA_FIRMWARE="amdgpu/topaz_ce.bin amdgpu/topaz_k_smc.bin amdgpu/topaz_mc.bin
                           amdgpu/topaz_me.bin amdgpu/topaz_mec2.bin amdgpu/topaz_mec.bin
                           amdgpu/topaz_pfp.bin amdgpu/topaz_rlc.bin amdgpu/topaz_sdma1.bin
                           amdgpu/topaz_sdma.bin amdgpu/topaz_smc.bin rtl_nic/rtl8168e-3.fw"
    CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

### Note

CONFIG_EXTRA_FIRMWARE should all be on one line. It is shown above as multiple lines for presentation only.

### Tip

You can check dmesg output after boot to see which firmware is missing.

Alternatively, if you change CONFIG_DRM_AMDGPU to '=m' in your linux kernel .config the firmware can be loaded automatically from /lib/firmware/amdgpu/ when it installs the module. This offers a tiny space saving, but also means that the screen will be blank for a longer time before the framebuffer appears. Distros take this approach because it is not practical to specify every possible firmware and the kernel would be excessively big.

#### Installation of Xorg AMDGPU Driver

Install Xorg AMDGPU Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: amdgpu_drv.so

##### Short Descriptions

`amdgpu_drv.so` | is an Xorg video driver for latest AMD Radeon video cards

### Xorg ATI Driver-19.1.0

#### Introduction to Xorg ATI Driver

The Xorg ATI Driver package contains the X.Org Video Driver for ATI Radeon video cards including all chipsets ranging from R100 to the "Volcanic Islands" chipsets.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

For Direct Rendering to work with newer Radeon Cards (R300 and later chipsets), you need to enable the r300, r600 and radeonsi Gallium drivers at Mesa-21.2.1 build time. Also, some cards require Firmware to be available when the kernel driver is loaded. Firmware can be obtained from https://anduin.linuxfromscratch.org/BLFS/linux-firmware/. See the section called “Kernel Configuration for additional firmware” below for additional firmware.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-video-ati-19.1.0.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-video-ati-19.1.0.tar.bz2

- Download MD5 sum: 6e49d3c2839582af415ceded76e626e6

- Download size: 884 KB

- Estimated disk space required: 21 MB

- Estimated build time: 0.2 SBU

##### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/xf86-video-ati-19.1.0-upstream_fixes-1.patch

##### Xorg ATI Driver Dependencies

###### Required

Xorg-Server-1.20.13 (recommended to be built with glamor enabled)

### Note

Glamor is required for Southern, Sea or Volcanic Islands GPUs, and used by default in all other R600 or later radeon GPUs. To see which GPUs are in these categories, read the Decoder ring for engineering vs marketing names.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-ati-driver

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Graphics support --->
       <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
       <*> ATI Radeon                                          [CONFIG_DRM_RADEON]

#### Kernel Configuration for additional firmware

If you need to add firmware, install the file(s) and then point to them in the kernel configuration and recompile the kernel if necessary. To find out which firmware you need, consult the Decoder ring for engineering vs marketing names. Download any firmware for your card which is named like: ``<ENGINEERING_NAME>`_rlc.bin`, etc. Note that for R600 and R700 family, generic `R600_rlc.bin` and `R700_rlc.bin` are necessary in addition to the model specific firmware, while for later generations you need the `BTC_rlc.bin` in addition to the model specific firmware. Below is an example for a Radeon HD6470 which is a "Northern Islands" GPU, plus an RTL network chip that also requests extra firmware:

    CONFIG_EXTRA_FIRMWARE="radeon/BTC_rlc.bin radeon/CAICOS_mc.bin radeon/CAICOS_me.bin
    radeon/CAICOS_pfp.bin radeon/CAICOS_smc.bin rtl_nic/rtl8168e-3.fw"
    CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

### Note

CONFIG_EXTRA_FIRMWARE should all be on one line. It is shown above as two lines for presentation only.

### Tip

You can check dmesg output after boot to see which firmware is missing.

Alternatively, if you change CONFIG_DRM_RADEON to '=m' in your .config the firmware can be loaded automatically from /lib/firmware/radeon when it installs the module. This offers a tiny space saving, but also means that the screen will be blank for a longer time before the framebuffer appears. Distros take this approach because it is not practical to specify every possible firmware and the kernel would be excessively big.

#### Installation of Xorg ATI Driver

First, apply a patch including fixes for known performance regressions and future problems with Xorg-Server.

    patch -Np1 -i ../xf86-video-ati-19.1.0-upstream_fixes-1.patch

Install Xorg ATI Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Drivers: ati_drv.so and radeon_drv.so

##### Short Descriptions

`ati_drv.so` | is a wrapper driver for ATI video cards that autodetects ATI video hardware and loads the radeon, mach64 or r128 driver depending on which video card is in use
`radeon_drv.so` | is an Xorg video driver for ATI Radeon based video cards

### Xorg Fbdev Driver-0.5.0

#### Introduction to Xorg Fbdev Driver

The Xorg Fbdev Driver package contains the X.Org Video Driver for framebuffer devices. This driver is often used as fallback driver if the hardware specific and VESA drivers fail to load or are not present. If this driver is not installed, Xorg Server will print a warning on startup, but it can be safely ignored if hardware specific driver works well.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-video-fbdev-0.5.0.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-video-fbdev-0.5.0.tar.bz2

- Download MD5 sum: f07475655376be5a124d8187aacd87b6

- Download size: 292 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

##### Xorg Fbdev Driver Dependencies

###### Required

Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-fbdev-driver

#### Installation of Xorg Fbdev Driver

Install Xorg Fbdev Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: fbdev_drv.so

##### Short Descriptions

`fbdev_drv.so` | is an Xorg video driver for framebuffer devices

### Xorg Intel Driver-20210222

#### Introduction to Xorg Intel Driver

The Xorg Intel Driver package contains the X.Org Video Driver for Intel integrated video chips including 8xx, 9xx, Gxx, Qxx, HD, Iris, and Iris Pro graphics processors.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

This is a development version of the Intel driver which is needed to work properly with the latest hardware.

##### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/xf86-video-intel/xf86-video-intel-20210222.tar.xz

- Download (FTP): ftp://anduin.linuxfromscratch.org/BLFS/xf86-video-intel/xf86-video-intel-20210222.tar.xz

- Download MD5 sum: 8795a5d17ece4dea4763e61be7805882

- Download size: 948 KB

- Estimated disk space required: 77 MB

- Estimated build time: 0.6 SBU

##### Xorg Intel Driver Dependencies

###### Required

xcb-util-0.4.0 and Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-intel-driver

#### Kernel Configuration

Enable the following options in the kernel configuration. Recompile the kernel if necessary:

    Device Drivers  --->
      Graphics support --->
       <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
       <*> Intel 8xx/9xx/G3x/G4x/HD Graphics                   [CONFIG_DRM_I915]

#### Installation of Xorg Intel Driver

Install Xorg Intel Driver by running the following commands:

    ./autogen.sh $XORG_CONFIG     \
                --enable-kms-only \
                --enable-uxa      \
                --mandir=/usr/share/man &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&

    mv -v /usr/share/man/man4/intel-virtual-output.4 \
          /usr/share/man/man1/intel-virtual-output.1 &&

    sed -i '/\.TH/s/4/1/' /usr/share/man/man1/intel-virtual-output.1

#### Working around problems with the Intel driver

The SandyBridge New Acceleration (SNA) code is intended to replace the old UXA (UMA Acceleration Architecture), but it is a large body of code and may cause problems. However, the version of the code in the version control system listed above has been tested successfully with both SNA and UXA capabilities.

To work around this problem, as well as enabling support for UXA, it is necessary to force UXA to be used by creating a configuration file. If this problem applies to you, create the following file as the `root` user and modify it as needed:

    cat >> /etc/X11/xorg.conf.d/20-intel.conf << "EOF"
    Section   "Device"
            Identifier "Intel Graphics"
            Driver     "intel"
            #Option     "DRI" "2"            # DRI3 is default
            #Option     "AccelMethod"  "sna" # default
            #Option     "AccelMethod"  "uxa" # fallback
    EndSection
    EOF

#### Command Explanations

`--enable-kms-only`: This switch omits the UMS (User Mode Setting) code.

`--enable-uxa`: This switch allows the old UXA code to be compiled in addition to the default SNA.

#### Contents

Installed Program: intel-virtual-output
Installed Library: libIntelXvMC.so
Installed Xorg Driver: intel_drv.so

##### Short Descriptions

intel-virtual-output | is a utility to connect the integrated Intel GPU to discrete outputs on hybrid systems
`intel_drv.so` | is an Xorg video driver for Intel integrated graphics chipsets

### Xorg Nouveau Driver-1.0.17

#### Introduction to Xorg Nouveau Driver

The Xorg Nouveau Driver package contains the X.Org Video Driver for NVidia Cards including RIVA TNT, RIVA TNT2, GeForce 256, QUADRO, GeForce2, QUADRO2, GeForce3, QUADRO DDC, nForce, nForce2, GeForce4, QUADRO4, GeForce FX, QUADRO FX, GeForce 6XXX and GeForce 7xxx chipsets.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-video-nouveau-1.0.17.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-video-nouveau-1.0.17.tar.bz2

- Download MD5 sum: b08633be9af9ee819077c278dfc55648

- Download size: 620 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.1 SBU

##### Xorg Nouveau Drivers Dependencies

###### Required

Xorg-Server-1.20.13 (recommended to be built with glamor enabled)

### Note

The new “Maxwell” and “Pascal” GPUs require Glamor to be built with the Xorg server.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-nouveau-driver

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Graphics support --->
       <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
       <*> Nouveau (NVIDIA) cards                              [CONFIG_DRM_NOUVEAU]
          [*]   Support for backlight control                     [CONFIG_DRM_NOUVEAU_BACKLIGHT]

#### Installation of Xorg Nouveau Driver

Install Xorg Nouveau Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: nouveau_drv.so

##### Short Descriptions

`nouveau_drv.so` | is an Xorg video driver for nVidia video cards

### Xorg VMware Driver-13.3.0

#### Introduction to Xorg VMware Driver

The Xorg VMware Driver package contains the X.Org Video Driver for VMware SVGA virtual video cards.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://www.x.org/pub/individual/driver/xf86-video-vmware-13.3.0.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/driver/xf86-video-vmware-13.3.0.tar.bz2

- Download MD5 sum: 08d66d062055080ff699ab4869726ea2

- Download size: 464 KB

- Estimated disk space required: 12 MB

- Estimated build time: 0.1 SBU

##### Xorg VMware Driver Dependencies

###### Required

Xorg-Server-1.20.13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-vmware-driver

#### Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

    Device Drivers  --->
      Graphics support  --->
       <*> Direct Rendering Manager (XFree86 ... support) --->  [CONFIG_DRM]
       <*> DRM driver for VMware Virtual GPU                    [CONFIG_DRM_VMWGFX]
          [*]   Enable framebuffer console under vmwgfx by default [CONFIG_DRM_VMWGFX_FBCON]

#### Installation of Xorg VMware Driver

Install Xorg VMware Driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Xorg Driver: vmware_drv.so

##### Short Descriptions

`vmware_drv.so` | is an Xorg video driver for VMware SVGA virtual video card

### libva-2.12.0

#### Introduction to libva

The libva package contains a library which provides access to hardware accelerated video processing, using hardware to accelerate video processing in order to offload the central processing unit (CPU) to decode and encode compressed digital video. The VA API video decode/encode interface is platform and window system independent targeted at Direct Rendering Infrastructure (DRI) in the X Window System however it can potentially also be used with direct framebuffer and graphics sub-systems for video output. Accelerated processing includes support for video decoding, video encoding, subpicture blending, and rendering.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://github.com/intel/libva/releases/download/2.12.0/libva-2.12.0.tar.bz2

- Download MD5 sum: 602b7583ebab2a3ee7cfcd8f984b4a81

- Download size: 488 KB

- Estimated disk space required: 12 MB

- Estimated build time: less than 0.1 SBU

##### Additional Downloads

- Intel Driver Download (HTTP): https://github.com/intel/intel-vaapi-driver/releases/download/2.4.1/intel-vaapi-driver-2.4.1.tar.bz2

- Intel Driver Download MD5 sum: 073fce0f409559109ad2dd0a6531055d

- Intel Driver Download size: 2.8 MB

- Estimated disk space required: 97 MB

- Estimated build time: 0.3 SBU

##### libva Dependencies

###### Required

libdrm-2.4.107

###### Recommended

Mesa-21.2.1

###### Optional

Doxygen-1.9.2, Wayland-1.19.0, and intel-gpu-tools

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libva

#### Installation of libva

### Caution

If you are reinstalling this package, you will need to remove the older versions of the libraries. These are in the form of libva*.so.1 and any symbolic links pointing to them. In addition, any packages that use these files need to be rebuilt.

Install libva by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Installation of intel-vaapi-driver

The intel-vaapi-driver is designed specifically for video cards based on an Intel GPU. Unpack the intel-vaapi tarball:

    tar -xvf ../intel-vaapi-driver-2.4.1.tar.bz2 &&
    cd intel-vaapi-driver-2.4.1

Install the driver by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Contents

Installed Programs: None
Installed Libraries: libva-drm.so, libva-glx.so, libva.so, libva-wayland.so, and libva-x11.so
Installed Driver: i965_drv_video.so
Installed Directory: $XORG_PREFIX/include/va

#### Short Descriptions

`libva.so` | contains API functions which provide access to hardware accelerated video processing

### libvdpau-1.4

#### Introduction to libvdpau

The libvdpau package contains a library which implements the VDPAU library.

VDPAU (Video Decode and Presentation API for Unix) is an open source library (libvdpau) and API originally designed by Nvidia for its GeForce 8 series and later GPU hardware targeted at the X Window System This VDPAU API allows video programs to offload portions of the video decoding process and video post-processing to the GPU video-hardware.

Currently, the portions capable of being offloaded by VDPAU onto the GPU are motion compensation (mo comp), inverse discrete cosine transform (iDCT), VLD (variable-length decoding) and deblocking for MPEG-1, MPEG-2, MPEG-4 ASP (MPEG-4 Part 2), H.264/MPEG-4 AVC and VC-1, WMV3/WMV9 encoded videos. Which specific codecs of these that can be offloaded to the GPU depends on the version of the GPU hardware; specifically, to also decode MPEG-4 ASP (MPEG-4 Part 2), Xvid/OpenDivX (DivX 4), and DivX 5 formats, a GeForce 200M (2xxM) Series (the eleventh generation of Nvidia's GeForce graphics processing units) or newer GPU hardware is required.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Download (HTTP): https://gitlab.freedesktop.org/vdpau/libvdpau/-/archive/1.4/libvdpau-1.4.tar.bz2

- Download MD5 sum: a664cc2cfe9c30536d2e11c928cbea35

- Download size: 140 KB

- Estimated disk space required: 4.2 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

##### libvdpau Dependencies

###### Required

Xorg Libraries

###### Optional

Doxygen-1.9.2, Graphviz-2.48.0, and texlive-20210325 or install-tl-unx

###### Runtime Dependency

Mesa-21.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

#### Installation of libvdpau

Install libvdpau by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX .. &&
    ninja

To test the results, issue: ninja test. There is only one test for this package, dlclose, and it is known to fail on some systems.

Now, as the `root` user:

    ninja install

#### Contents

Installed Programs: None
Installed Library: libvdpau.so
Installed Directories: $XORG_PREFIX/{include,lib}/vdpau

#### Short Descriptions

`libvdpau.so` | contains functions to offload portions of the video decoding process and video post-processing to the GPU video-hardware

### libvdpau-va-gl-0.4.0

#### Introduction to libvdpau-va-gl

The libvdpau-va-gl package contains a library which implements the VDPAU library. Libvdpau_va_gl uses OpenGL under the hood to accelerate drawing and scaling and the VA-API (if available) to accelerate video decoding. For now VA-API is available on some Intel chips, and on some AMD video adapters with the help of the libvdpau driver.

This package is known to build and work properly using an LFS-11.0 platform.

##### Package Information

- Libvdpau-va-gl Driver Download (HTTP): https://github.com/i-rinat/libvdpau-va-gl/archive/v0.4.0/libvdpau-va-gl-0.4.0.tar.gz

- Libvdpau-va-gl Driver Download MD5 sum: 638244652a702d0262039890904f37ce

- Libvdpau-va-gl Driver Download size: 120 KB

- Estimated disk space required: 3.4 MB

- Estimated build time: less than 0.1 SBU

##### libvdpau-va-gl Dependencies

###### Required

CMake-3.21.2, FFmpeg-4.4, libvdpau-1.4, and libva-2.12.0

###### Optional

Doxygen-1.9.2, Graphviz-2.48.0, and texlive-20210325 or install-tl-unx

###### Runtime Dependency

Mesa-21.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

#### Installation of libvdpau-va-gl

Install libvdpau-va-gl by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$XORG_PREFIX .. &&
    make

To test the results, issue: make check. The tests must be run from an Xorg environment.

Now, as the `root` user:

    make install

#### Configuration

To allow libvdpau to find libvdpau-va-gl, set an environment variable. As the `root` user:

    echo "export VDPAU_DRIVER=va_gl" >> /etc/profile.d/xorg.sh

#### Contents

Installed Programs: None
Installed Library: libvdpau_va_gl.so
Installed Directories: None

#### Short Descriptions

`libvdpau_va_gl.so` | contains functions to implement the OpenGL backend to the VDPAU (Video Decode and Presentation API for Unix) API

Last updated on

## twm-1.0.11

### Introduction to twm

The twm package contains a very minimal window manager.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/app/twm-1.0.11.tar.xz

- Download (FTP): ftp://ftp.x.org/pub/individual/app/twm-1.0.11.tar.xz

- Download MD5 sum: e2a92734871575b01308e62822915981

- Download size: 256 KB

- Estimated disk space required: 4.7 MB

- Estimated build time: less than 0.1 SBU

#### twm Dependencies

##### Required

Xorg-Server-1.20.13

##### Recommended

Xorg Legacy Fonts

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/twm

### Installation of twm

Install twm by running the following commands:

    sed -i -e '/^rcdir =/s,^\(rcdir = \).*,\1/etc/X11/app-defaults,' src/Makefile.in &&
    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

sed -i -e '/^rcdir =/s...: This command ensures the twm configuration file gets installed in the proper location.

### Contents

Installed Programs: twm
Installed Libraries: None
Installed Directory: /etc/X11/app-defaults

#### Short Descriptions

twm | is the Tab Window Manager for the X Window System

Last updated on

## xterm-368

### Introduction to xterm

xterm is a terminal emulator for the X Window System.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://invisible-mirror.net/archives/xterm/xterm-368.tgz

- Download MD5 sum: 3a4126006085ff22f4c73f716a9a03a7

- Download size: 1.4 MB

- Estimated disk space required: 17 MB

- Estimated build time: 0.2 SBU

#### xterm Dependencies

##### Required

Xorg Applications

##### Required (at runtime)

A monospace TTF or OTF font such as Dejavu fonts

##### Optional

Emacs-27.2, PCRE-8.45 or pcre2-10.37, Valgrind-3.17.0 and man2html

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xterm

### Installation of xterm

Install xterm by running the following commands:

    sed -i '/v0/{n;s/new:/new:kb=^?:/}' termcap &&
    printf '\tkbs=\\177,\n' >> terminfo &&

    TERMINFO=/usr/share/terminfo \
    ./configure $XORG_CONFIG     \
        --with-app-defaults=/etc/X11/app-defaults &&

    make

This package does not come with a test suite.

Now, as the `root` user:

    make install    &&
    make install-ti &&

    mkdir -pv /usr/share/applications &&
    cp -v *.desktop /usr/share/applications/

### Command Explanations

sed -i ... termcap, printf ... >> terminfo: These commands modify the terminal description so that the Backspace key is expected to send the character with ASCII code 127. This is done for consistency with the Linux console.

`TERMINFO=/usr/share/terminfo`: This ensures that the xterm terminfo files are installed to the system terminfo database.

`--with-app-defaults=...`: Sets the location for the `app-defaults` directory.

make install-ti: This command installs corrected terminfo description files for use with xterm.

### Configuring xterm

There are two ways to configure xterm. You can add the X resource definitions to the user's `~/.Xresources` file, or add them to the system-wide `$XORG_PREFIX/share/X11/app-defaults/Xterm` file.

In order for xterm to follow the locale settings in the environment, use TrueType fonts, and follow the Linux convention about the code sent by the Backspace key, add the following definitions as the `root` user:

    cat >> /etc/X11/app-defaults/XTerm << "EOF"
    *VT100*locale: true
    *VT100*faceName: Monospace
    *VT100*faceSize: 10
    *backarrowKeyIsErase: true
    *ptyInitialErase: true
    EOF

### Contents

Installed Programs: koi8rxterm, resize, uxterm, and xterm
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

koi8rxterm | is a wrapper script to set up xterm with a KOI8-R locale
resize | prints a shell command for setting the TERM and TERMCAP environment variables to indicate the current size of xterm window
uxterm | is a wrapper script that modifies the current locale to use UTF-8 and starts xterm with the proper settings
xterm | is a terminal emulator for the X Window System

Last updated on

## xclock-1.0.9

### Introduction to xclock

The xclock package contains a simple clock application which is used in the default xinit configuration.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/app/xclock-1.0.9.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/app/xclock-1.0.9.tar.bz2

- Download MD5 sum: 437522a96f424f68fc64ed34ece9b211

- Download size: 172 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

#### xclock Dependencies

##### Required

Xorg Libraries

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xclock

### Installation of xclock

Install xclock by running the following commands:

    ./configure $XORG_CONFIG &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: xclock
Installed Libraries: None
Installed Directory: None

#### Short Descriptions

xclock | is an analog/digital clock for X

Last updated on

## xinit-1.4.1

### Introduction to xinit

The xinit package contains a usable script to start the xserver.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/app/xinit-1.4.1.tar.bz2

- Download (FTP): ftp://ftp.x.org/pub/individual/app/xinit-1.4.1.tar.bz2

- Download MD5 sum: 6d506ab2efc17a08e87778654e099d37

- Download size: 178 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

#### xinit Dependencies

##### Required

Xorg Libraries

##### Recommended (runtime only)

twm-1.0.11, xclock-1.0.9, and xterm-368 (used in the default `xinitrc` file)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xinit

### Installation of xinit

Install xinit by running the following commands:

    ./configure $XORG_CONFIG --with-xinitdir=/etc/X11/app-defaults &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    ldconfig

### Contents

Installed Programs: xinit and startx
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

startx | initializes an X session
xinit | is the X Window System initializer

Last updated on

## Xorg-7 Testing and Configuration

### Testing Xorg

### Note

Before starting Xorg for the first time, is is useful to rebuild the library cache by running `ldconfig` as the `root` user.

### Note

Before starting Xorg for the first time, is is often needed to reboot the system to ensure all appropriate daemons are started and approprite security issues are properly set. As an alternative, logging out and logging back in may work, but as of this writing has not been tested.

### Warning

If Xorg hangs for some reason (for example, lacking a proper input driver), the system may stop responsing to any user input. As a precaution, you can enable a magic SysRq key before testing Xorg. As the `root` user, issue:

    echo 4 > /proc/sys/kernel/sysrq

Then if Xorg hangs, it's possible to use Alt+SysRq+R to reset the keyboard mode. Now it should be able to use Ctrl+Alt+Fx (replace x with a VT number) to switch to another VT. If it works, login and kill Xorg using command line in the new VT.

To test the Xorg installation, issue startx. This command brings up a rudimentary window manager called twm with three xterm windows and one xclock window. The xterm window in the upper left is a login terminal and running exit from this terminal will exit the X Window session. The third xterm window may be obscured on your system by the other two xterms.

### Note

When testing Xorg with the twm window manager, there will be several warnings in the Xorg log file, $HOME/.local/share/xorg/Xorg.0.log, about missing font files. In addition, there will be several warnings on the text mode terminal (usually tty1) about missing fonts. These warnings do not affect functionality, but can be removed if desired by installing the Xorg Legacy Fonts.

Generally, there is no specific configuration required for Xorg, but customization is possible. For details, see the section called “Setting up Xorg Devices” below.

### Checking the Direct Rendering Infrastructure (DRI) Installation

DRI is a framework for allowing software to access graphics hardware in a safe and efficient manner. It is installed in X by default (using Mesa) if you have a supported video card.

To check if DRI drivers are installed properly, check the log file `$HOME/.local/share/xorg/Xorg.0.log` (or `/var/log/Xorg.0.log` if you have built Xorg-Server-1.20.13 with the suid bit) for statements such as:

    (II) intel(0): direct rendering: DRI2 Enabled

or

    (II) NOUVEAU(0): Loaded DRI module

### Note

DRI configuration may differ if you are using alternate drivers, such as those from NVIDIA or AMD.

Another way to determine if DRI is working properly is to use one of the two optionally installed OpenGL demo programs in Mesa-21.2.1. From an X terminal, run glxinfo and look for the phrase:

    name of display: :0
    display: :0  screen: 0
    direct rendering: Yes

If direct rendering is enabled, you can add verbosity by running LIBGL_DEBUG=verbose glxinfo. This will show the drivers, device nodes and files used by the DRI system.

To confirm that DRI2 hardware acceleration is working, you can (still in the X terminal) run the command glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)". If that reports something other than `Software Rasterizer` then you have working acceleration for the user who ran the command.

If your hardware does not have any DRI2 driver available, it will use a Software Rasterizer for Direct Rendering. In such cases, you can use a new, LLVM-accelerated, Software Rasterizer called LLVMPipe. In order to build LLVMPipe just make sure that LLVM-12.0.1 is present at Mesa build time. Note that all decoding is done on the CPU instead of the GPU, so the display will run slower than with hardware acceleration. To check if you are using LLVMpipe, review the output of the glxinfo command above. An example of the output using the Software Rasterizer is shown below:

    OpenGL vendor string: VMware, Inc.
    OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.5, 256 bits)
    OpenGL version string: 3.0 Mesa 10.4.5

You can also force LLVMPipe by exporting the `LIBGL_ALWAYS_SOFTWARE=1` environment variable when starting Xorg.

Again, if you have built the Mesa OpenGL demos, you can also run the test program glxgears. This program brings up a window with three gears turning. The X terminal will display how many frames were drawn every five seconds, so this will give a rough benchmark. The window is scalable, and the frames drawn per second is highly dependent on the size of the window. On some hardware, glxgears will run synchronized with the vertical refresh signal and the frame rate will be approximately the same as the monitor refresh rate.

### Hybrid Graphics

Hybrid Graphics is still in experimental state for Linux. Xorg Developers have developed a technology called PRIME that can be used for switching between integrated and muxless discrete GPU at will. Automatic switching is not possible at the moment.

In order to use PRIME for GPU switching, make sure that you are using Linux Kernel 3.4 or later (recommended). You will need latest DRI and DDX drivers for your hardware and Xorg Server 1.13 or later.

Xorg Server should load both GPU drivers automaticaly. You can check that by running:

    xrandr --listproviders

There should be two (or more) providers listed, for example:

    Providers: number : 2
    Provider 0: id: 0x7d cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 3 outputs: 4 associated providers: 1 name:Intel
    Provider 1: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 1 associated providers: 1 name:radeon

In order to be able to run a GLX application on a discrete GPU, you will need to run the following command, where <provider> is the more powerful discrete card, and <sink> is the card which has a display connected:

    xrandr --setprovideroffloadsink <provider> <sink>

### Note

With newer Xorg drivers, such as modesetting or intel, which are DRI3 capable, the above command is no longer necessary. It does no harm however.

Then, you will need to export the `DRI_PRIME=1` environment variable each time you want the powerful GPU to be used. For example,

    DRI_PRIME=1 glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)"

will show OpenGL vendor, renderer and version for the discrete GPU.

If the last command reports same OpenGL renderer with and without `DRI_PRIME=1`, you will need to check your installation.

### Setting up Xorg Devices

For most hardware configurations, modern Xorg will automatically get the server configuration correct without any user intervention. There are, however, some cases where auto-configuration will be incorrect. Following are some example manual configuration items that may be of use in these instances.

#### Setting up X Input Devices

For most input devices, no additional configuration will be necessary. This section is provided for informational purposes only.

A sample default XKB setup could look like the following (executed as the `root` user):

    cat > /etc/X11/xorg.conf.d/xkb-defaults.conf << "EOF"
    Section "InputClass"
        Identifier "XKB Defaults"
        MatchIsKeyboard "yes"
        Option "XkbLayout" "fr"
        Option "XkbOptions" "terminate:ctrl_alt_bksp"
    EndSection
    EOF

The “XkbLayout” line is an example for a French (AZERTY) keyboard. Change it to your keyboard model. That line is not needed for a QWERTY (US) keyboard.

#### Fine Tuning Display Settings

Again, with modern Xorg, little or no additional configuration is necessary. If you should need extra options passed to your video driver, for instance, you could use something like the following (again, executed as the `root` user):

    cat > /etc/X11/xorg.conf.d/videocard-0.conf << "EOF"
    Section "Device"
        Identifier  "Videocard0"
        Driver      "radeon"
        VendorName  "Videocard vendor"
        BoardName   "ATI Radeon 7500"
        Option      "NoAccel" "true"
    EndSection
    EOF

Another common setup is having multiple server layouts for use in different environments. Though the server will automatically detect the presence of another monitor, it may get the order incorrect:

    cat > /etc/X11/xorg.conf.d/server-layout.conf << "EOF"
    Section "ServerLayout"
        Identifier     "DefaultLayout"
        Screen      0  "Screen0" 0 0
        Screen      1  "Screen1" LeftOf "Screen0"
        Option         "Xinerama"
    EndSection
    EOF

Last updated on

## Tuning Fontconfig

### Overview of Fontconfig

If you only read text in English, and are happy with the common libre fonts listed on the next page, you may never need to worry about the details of how fontconfig works. But there are many things which can be altered if they do not suit your needs.

Although this page is long, it barely scratches the surface and you will be able to find many alternative views on the web (but please remember that some things have changed over the years, for example the autohinter is no longer the default). The aim here is to give you enough information to understand the changes you are making.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig

### The Xft Font Protocol

The Xft font protocol provides antialiased font rendering through freetype, and fonts are controlled from the client side using fontconfig (except for rxvt-unicode-9.26 which can use fonts listed in `~/.Xresources`, and AbiWord-3.0.5 which only uses the specified font). The default search path is `/usr/share/fonts` and `~/.local/share/fonts` although for the moment the old and deprecated location `~/.fonts` still works. Fontconfig searches directories in its path recursively and maintains a cache of the font characteristics in each directory. If the cache appears to be out of date, it is ignored, and information is fetched from the fonts themselves (that can take a few seconds if you installed a lot of fonts).

If you've installed Xorg in any prefix other than `/usr`, any X fonts were not installed in a location known to Fontconfig. Symlinks were created from the `OTF` and `TTF` X font directories to `/usr/share/fonts/X11-{OTF,TTF}`. This allows Fontconfig to use the OpenType and TrueType fonts provided by X, although many people will prefer to use more modern fonts.

Fontconfig uses names to define fonts. Applications generally use generic font names such as "Monospace", "Sans" and "Serif". Fontconfig resolves these names to a font that has all characters that cover the orthography of the language indicated by the locale settings.

### Useful Commands

The following commands may be helpful when working with fontconfig:

fc-list | less : show a list of all available fonts (/path/to/filename: Font Name:style). If you installed a font more than 30 seconds ago but it does not show, then it or one of its directories is not readable by your user.

fc-match 'Font Name' : will tell you which font will be used if the named font is requested. Typically you would use this to see what happens if a font you have not installed is requested, but you can also use it if the system is giving you a different font from what you expected (perhaps because fontconfig does not agree that the font supports your language).

fc-match -a 'Type' | less : will provide a list of all fonts which can be used for that type (Monospace, Sans, Serif). Note that in-extremis fontconfig will take a glyph from any available font, even if it is not of the specified type, and unless it knows about the font's type it will assume it is Sans.

If you wish to know which font will be used for a string of text (i.e. one or more glyphs, preceded by a space), paste the following command and replace the `xyz` by the text you care about:

FC_DEBUG=4 pango-view --font=monospace -t xyz | grep family : this requires Pango-1.48.9 and ImageMagick-7.1.0-4 - it will invoke display to show the text in a tiny window, and after closing that the last line of the output will show which font was chosen. This is particularly useful for CJK languages, and you can also pass a language, e.g. PANGO_LANGUAGE=en;ja (English, then assume Japanese) or just zh-cn (or other variants - 'zh' on its own is not valid).

### The various files

The main files are in `/etc/fonts/conf.d/`, which was intended to be a directory populated by symlinks to some of the files in `/usr/share/fontconfig/conf.avail/`. But many people, and some packages, create the files directly. Each file name must be in the form of two digits, a dash, somename.conf and they are read in sequence.

By convention, the numbers are assigned as follows:

- 00-09 extra font directories

- 10-19 system rendering defaults (antialising etc)

- 20-29 font rendering options

- 30-39 family substitution

- 40-49 map family to generic type

- 50-59 load alternate config files

- 60-69 generic aliases, map generic to family

- 70-79 adjust which fonts are available

- 80-89 match target scan (modify scanned patterns)

- 90-99 font synthesis

You can also have a personal `fonts.conf` in $XDG_CONFIG_HOME which is `~/.config/fontconfig/`.

### The rules to choose a font

If the requested font is installed, and provided it contains the codepoints required for the current language (in the source, see the .orth files in the `fc-lang/` directory), it will be used.

But if the document or page requested a font which is not installed (or, occasionally, does not contain all the required codepoints) the following rules come into play: First, `30-metric-aliases.conf` is used to map aliases for some fonts with the same metrics (same size, etc). After that, an unknown font will be searched for in `45-latin.conf` - if it is found it will be mapped as Serif or Monospace or Sans, otherwise it will be assumed to be Sans. Then `50-latin.conf` provides ordered lists of the fallbacks - Dejavu fonts will be used if you installed them. Cyrillic and Greek appear to be treated in the same way. There are similar files with a 65- prefix for Persian and other non-latin writing systems. All of these files prefer commercial fonts if they are present, although modern libre fonts are often at least their equals.

Since fontconfig-2.12.5 there is also generic family matching for some emoji and math fonts, see {45,60}-generic.conf.

In the rare cases where a font does not contain all the expected codepoints, see 'Trial the First:' at I stared into the fontconfig for the long details.

### Hinting and Anti-aliasing

It is possible to change how, or if, fonts are hinted. The following example file contains the default settings, but with comments. The settings are very much down to the user's preferences and to the choice of fonts, so a change which improves some pages may worsen others. The preferred location for this file is: `~/.config/fontconfig/fonts.conf`

To try out different settings, you may need to exit from Xorg and then rerun startx so that all applications use the new settings. And if you use Gnome or KDE their desktops can override these changes. To explore the possibilities, create a file for your user:

    mkdir -pv ~/.config/fontconfig &&
    cat > ~/.config/fontconfig/fonts.conf << "EOF"
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>

      <match target="font" >
        <!-- autohint was the old automatic hinter when hinting was patent
        protected, so turn it off to ensure any hinting information in the font
        itself is used, this is the default -->
        <edit mode="assign" name="autohint">  <bool>false</bool></edit>

        <!-- hinting is enabled by default -->
        <edit mode="assign" name="hinting">   <bool>true</bool></edit>

        <!-- for the lcdfilter see http://www.spasche.net/files/lcdfiltering/ -->
        <edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>

        <!-- options for hintstyle:
        hintfull: is supposed to give a crisp font that aligns well to the
        character-cell grid but at the cost of its proper shape.

        hintmedium: poorly documented, maybe a synonym for hintfull.
        hintslight is the default: - supposed to be more fuzzy but retains shape.

        hintnone: seems to turn hinting off.
        The variations are marginal and results vary with different fonts -->
        <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>

        <!-- antialiasing is on by default and really helps for faint characters
        and also for 'xft:' fonts used in rxvt-unicode -->
        <edit mode="assign" name="antialias"> <bool>true</bool></edit>

        <!-- subpixels are usually rgb, see
        http://www.lagom.nl/lcd-test/subpixel.php -->
        <edit mode="assign" name="rgba">      <const>rgb</const></edit>

        <!-- thanks to the Arch wiki for the lcd and subpixel links -->
      </match>

    </fontconfig>
    EOF

You will now need to edit the file in your preferred editor.

For more examples see the blfs-support thread which started at 2016-09/00128, particularly 2016-09/00137, and the original poster's preferred solution at 2016-09/00147. There are other examples in Fontconfig in the Arch wiki and Fontconfig in the Gentoo wiki.

### Disabling Bitmap Fonts

In previous versions of BLFS, the ugly old Xorg bitmap fonts were installed. Now, many people will not need to install any of them. But if for some reason you have installed one or more bitmap fonts, you can prevent them being used by fontconfig by creating the following file as the `root` user :

    cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
    <!-- Reject bitmap fonts -->
     <selectfont>
      <rejectfont>
       <pattern>
         <patelt name="scalable"><bool>false</bool></patelt>
       </pattern>
      </rejectfont>
     </selectfont>
    </fontconfig>
    EOF

### Adding extra font directories

Normally, system fonts and user fonts are installed in directories beneath the locations specified in The Xft Font Protocol and there is no obvious reason to put them elsewhere. However, a full BLFS install of texlive-20210325 puts many fonts in `/opt/texlive/2021/texmf-dist/fonts/` in the `opentype/` and `truetype/` subdirectories. Although pulling in all of these files may appear useful (it allows you to use them in non TeX programs), there are several problems with such an approach:

1. There are hundreds of files, which makes selecting the font hard.

2. Some of the files do odd things, such as displaying semaphore flags instead of ASCII letters, or mapping cyrillic codepoints to character forms appropriate to Old Church Slavonic instead of the expected current shapes: fine if that is what you need, but painful for normal use.

3. Several fonts have multiple sizes and impenetrable short names, which both make selecting the correct font even harder.

4. When a font is added to CTAN, it is accompanied by TeX packages to use it in the old engines (xelatex does not normally need this), and then the version is often frozen whilst the font is separately maintained. Some of these fonts such as Dejavu fonts are probably already installed on your BLFS system in a newer version, and if you have multiple versions of a font it is unclear which one will be used by fontconfig.

However, it is sometimes useful to look at these fonts in non-TeX applications, if only to see whether you wish to install a current version. If you have installed all of texlive, the following example will make one of the Arkandis Open Type fonts available to other applications, and all three of the ParaType TrueType fonts. Adjust or repeat the lines as desired, to either make all the `opentype/` or `truetype`fonts available, or to select different font directories. As the `root` user:

    cat > /etc/fonts/conf.d/09-texlive.conf << "EOF"
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
      <dir>/opt/texlive/2021/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
      <dir>/opt/texlive/2021/texmf-dist/fonts/truetype/paratype</dir>
    </fontconfig>
    EOF

If you do this, remember to change all instances of the year in that file when you upgrade texlive to a later release.

### Preferring certain fonts

There are many reasons why people may wish to have pages which specify a particular font use a different font, or prefer specific fonts in Monospace or Sans or Serif. As you will expect, there a number of different ways of achieving this.

#### Fontconfig user docs

Fontconfig installs user documentation that includes an example 'User configuration file' which among other things prefers WenQuanYi ZenHei (a Sans font) if a Serif font is requested for Chinese (this part might be anachronistic unless you have non-free Chinese fonts, because in `65-nonlatin.conf` this font is already among the preferred fonts when Serif is specified for Chinese) and to prefer the modern VL Gothic font if a Sans font is specified on a Japanese page (otherwise a couple of other fonts would be preferred if they have been installed).

If you have installed the current version, the user documentation is available in html, PDF and text versions at `/usr/share/doc/fontconfig-2.13.1/` : change the version if you installed a different one.

#### Prefer a specific font

As an example, if for some reason you wished to use the Nimbus Roman No9 L font wherever Times New Roman is referenced (it is metrically similar, and preferred for Times Roman, but the Serif font from Liberation fonts will be preferred for the Times New Roman font if installed), as an individual user you could install the font and then create the following file:

    mkdir -pv ~/.config/fontconfig/conf.d &&
    cat >  ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
    <!-- prefer Nimbus Roman No9 L for Times New Roman as well as for Times,
     without this Tinos and Liberation Serif take precedence for Times New Roman
     before fontconfig falls back to whatever matches Times -->
        <alias binding="same">
            <family>Times New Roman</family>
            <accept>
                <family>Nimbus Roman No9 L</family>
            </accept>
        </alias>
    </fontconfig>
    EOF

This is something you would normally do in an individual user's settings, but the file in this case has been prefixed '35-' so that it could, if desired, be used system-wide in `/etc/fonts/conf.d/`.

#### Prefer chosen CJK fonts

The following example of a local configuration (i.e. one that applies for all users of the machine) does several things:

1. If a Serif font is specified, it will prefer the UMing variants, so that in the zh-cn, zh-hk and zh-tw languages things should look good (also zh-sg which actually uses the same settings as zh-cn) without affecting Japanese.

2. It prefers the Japanese IPAex fonts if they have been installed (although VL Gothic will take precedence for (Japanese) Sans if it has also been installed.

3. Because WenQuanYi ZenHei covers Korean Hangul glyphs and is also preferred for Serif in `65-nonlatin.conf`, if installed it will be used by default for Korean Serif. To get a proper Serif font, the UnBatang font is specified here - change that line if you installed a different Serif font from the choice of Korean fonts.

4. The Monospace fonts are forced to the preferred Sans fonts. If the text is in Korean then WenQuanYi ZenHei will be used.

In a non-CJK locale, the result is that suitable fonts will be used for all variants of Chinese, Japanese and Hangul Korean. All other languages should already work if a font is present. As the `root` user:

    cat > /etc/fonts/local.conf << "EOF"
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
        <alias>
            <family>serif</family>
            <prefer>
                <family>AR PL UMing</family>
                <family>IPAexMincho</family>
                <!-- WenQuanYi is preferred as Serif in 65-nonlatin.conf,
                override that so a real Korean font can be used for Serif -->
                <family>UnBatang</family>
            </prefer>
        </alias>
        <alias>
             <family>sans-serif</family>
             <prefer>
                 <family>WenQuanYi Zen Hei</family>
                 <family>VL Gothic</family>
                 <family>IPAexGothic</family>
             </prefer>
        </alias>
        <alias>
             <family>monospace</family>
             <prefer>
                 <family>VL Gothic</family>
                 <family>IPAexGothic</family>
                 <family>WenQuanYi Zen Hei</family>
             </prefer>
        </alias>
    </fontconfig>
    EOF

### Editing Old-style conf files

Some fonts, particularly Chinese fonts, ship with conf files which can be installed in `/etc/fonts/conf.d`. However, if you do that and then use a terminal to run any command which uses fontconfig you may see error messages such as :

`Fontconfig warning: "/etc/fonts/conf.d/69-odofonts.conf", line 14: Having multiple <family> in <alias> isn't supported and may not work as expected`.

In practice, these old rules do not work. For non-CJK users, fontconfig will usually do a good job without these rules. Their origin dates back to when CJK users needed handcrafted bitmaps to be legible at small sizes, and those looked ugly next to antialiased Latin glyphs - they preferred to use the same CJK font for the Latin glyphs. There is a side-effect of doing this : the (Serif) font is often also used for Sans, and in such a situation the (English) text in Gtk menus will use this font - compared to system fonts, as well as being serif it is both faint and rather small. That can make it uncomfortable to read.

Nevertheless, these old conf files can be fixed if you wish to use them. The following example is the first part of `64-arphic-uming.conf` from UMing - there are a lot more similar items which also need changing :

<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>

The process to correct this is straightforward but tedious - for every item which produces an error message, using your editor (as the `root` user) edit the installed file to repeat the whole block as many times as there are multiple variables, then reduce each example to have only one of them. You may wish to work on one error at a time, save the file after each fix, and from a separate term run a command such as fc-list 2>&1 | less to see that the fix worked. For the block above, the fixed version will be :

<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>

### See Also

#### I stared into the fontconfig ...

The blog entries by Eevee are particularly useful if fontconfig does not think your chosen font supports your language, and for preferring some non-MS Japanese fonts when an ugly MS font is already installed.

#### Fontconfig in the Arch wiki

Arch has a lot of information in its wiki at font_configuration.

#### Fontconfig in the Gentoo wiki

Gentoo has some information in its wiki at Fontconfig although a lot of the details (what to enable, and Infinality) are specific to Gentoo.

Last updated on

## TTF and OTF fonts

### About TTF and OTF fonts

Originally, Xorg provided only bitmap fonts. Later, some scalable Type1 fonts were added, but the desktop world moved on to using TrueType and Open Type fonts. To support these, Xorg uses Xft, the X FreeType interface library.

These fonts can provide hints, which fontconfig uses to adjust them for maximum readability on computer monitors. On linux you should always prefer the hinted versions, if available (in general the latin, cyrillic and greek alphabets can use hints, most other writing systems do not use hinting).

A few fonts are provided as collections (TTC or OTC) where font data is shared between different fonts, thus saving disk space. Treat these in exactly the same way as individual TTF or OTF files.

If a font provides both TTF and OTF forms, prefer the OTF form in linux, it may provide more features for programs which know how to use them (such as xelatex).

For some scripts pango is required to render things correctly, either by selecting different glyph forms, or by combining glyphs - in both cases, according to the context. This applies particularly to arabic and indic scripts.

Standard scalable fonts that come with X provide very poor Unicode coverage. You may notice in applications that use Xft that some characters appear as a box with four binary digits inside. In this case, a font with the required glyphs has not been found. Other times, applications that don't use other font families by default and don't accept substitutions from Fontconfig will display blank lines when the default font doesn't cover the orthography of the user's language.

The fonts available to a program are those which were present when it was started, so if you add an extra font and wish to use it in a program which is currently running, then you will have to close and restart that program.

Some people are happy to have dozens, or even hundreds, of font files available, but if you ever wish to select a specific font in a desktop application (for example in a word processor) then scrolling through a lot of fonts to find the right one is slow and awkward - fewer is better. So, for some font packages you might decide to install only one of the fonts - but nevertheless install the different variants (italic, bold, etc) as these are all variations for the same font name.

In the past, everybody recommended running fc-cache as the `root` user after installing or removing fonts, but this is no-longer necessary on linux, fontconfig will do it automatically if needed and if its caches are more than 30 seconds old. But if you add a font and want to immediately use it then you can run that command (as a normal user).

There are several references below to CJK characters. This stands for Chinese, Japanese and Korean, although modern Korean is now almost all written using the phonetic Hangul glyphs (it used to sometimes use Hanja glyphs which are similar to Chinese and Japanese). Unicode decided to go for Han Unification and to map some Chinese and Japanese glyphs to the same codepoints. This was very unpopular in Japan, and the result is that different fonts will render some codepoints in quite different shapes. In addition, Simplified Chinese will sometimes use the same codepoint as Traditional Chinese but will show it differently, somewhat analogous to the different shapes used for the letters 'a' and 'g' in English (single-storey and two-storey), except that in a language context one will look "wrong" rather than just "different".

Unlike most other packages in this book, the BLFS editors do not monitor the versions of the fonts on this page - once a font is good enough for general use, the typical additions in a new version are minor (e.g. new currency symbols, or glyphs not for a modern language, such as emojis or playing cards). Therefore, none of these fonts show version or md5 information.

The list below will not provide complete Unicode coverage. Unicode is updated every year, and most additions are now for historic writing systems. For almost-complete coverage you can install Noto fonts (about 180 fonts when last checked) but that number of fonts makes it much less convenient to select a specific font in a document, and most people will regard many of them as a waste of space. We used to recommend the Unicode Font Guide, but that has not been updated since 2008 and many of its links are dead.

Rendered examples of most of these fonts, and many others, with details of what languages they cover, some examples of latin fonts with the same metrics (listed as "Substitute latin fonts") and various files of dummy text to compare fonts of similar types, can be found at this font comparison page. That site also covers other current writing systems.

Fonts are often supplied in zip files, requiring UnZip-6.0 to list and extract them, but even if the current release is a tarball you should still check to see if it will create a directory (scatterring the contents of a zipfile or tarball across the current directory can be very messy, and a few fonts create odd __MACOSX/ directories. In addition, many fonts are supplied with permissions which do not let 'other' read them - if a font is to be installed for system-wide use, any directories must be mode 755 and all the files mode 644, so change them if necessary. If you forget, the root user may be able to see a particular font in fc-list but a normal user will not.

As a font installation example, consider the installation of the Dejavu fonts. In this particular package, the TTF files are in a subdirectory. From the unpacked source directory, run the following commands as the `root` user:

    install -v -d -m755 /usr/share/fonts/dejavu &&
    install -v -m644 ttf/*.ttf /usr/share/fonts/dejavu &&
    fc-cache -v /usr/share/fonts/dejavu

If you wish, you can also install any licenses or other documentation, either alongside the font or in a corresponding directory under `/usr/share/doc/`.

A few fonts ship with source as well as with the completed TTF or OTF file(s). Unless you intend to modify the font, and have the correct tools (sometimes FontForge-20201107, but often commercial tools), the source will provide no benefit, so do not install it. One or two fonts even ship with Web Open Font Format (WOFF) files - useful if you run a webserver and want to use that font on it, but not useful for desktops.

To provide greater Unicode coverage, you are recommended to install some of the following fonts, depending on what webistes and languages you wish to read. The next part of this page details some fonts which cover at least latin alphabets, the final part deals with come CJK issues.

### Note

You are strongly recommended to install the Dejavu fonts.

#### Caladea

Caladea (created as a Chrome OS extra font, hence the 'crosextrafonts' tarball name) is metrically compatible with MS Cambria and can be used if you have to edit a document which somebody started in Microsoft Office using Cambria and then return it to them.

#### Cantarell fonts

Cantarell fonts – The Cantarell typeface family provides a contemporary Humanist sans serif. It is particularly optimised for legibility at small sizes and is the preferred font family for the GNOME-3 user interface.

Please be aware that the current version includes a VF (Variable Font) file can provide all the individual fonts (also supplied) but breaks xelatex if it is found by fontconfig. The individual fonts work fine.

#### Carlito

Carlito (created as another Chrome OS extra font, again the 'crosextrafonts-' prefix in the tarball name) is metrically compatible with MS Calibri and can be used if you have to edit a document which somebody started in Microsoft Office using Calibri and then return it to them.

#### DejaVu fonts

DejaVu fonts – These fonts are an extension of, and replacement for, the Bitstream Vera fonts and provide Latin-based scripts with accents and punctuation such as "smart-quotes" and variant spacing characters, as well as Cyrillic, Greek, Arabic, Hebrew, Armenian, Georgian and some other glyphs. In the absence of the Bitstream Vera fonts (which had much less coverage), these are the default fallback fonts.

#### GNU FreeFont

GNU FreeFont – This set of fonts covers many non-CJK characters, in particular some of the variants of latin and cyrillic letters used in minority languages, but the glyphs are comparatively small (unlike DejaVu fonts which are comparatively large) and rather light weight ("less black" when black on white is used) which means that in some contexts such as terminals they are not visually pleasing, for example when most other glyphs are provided by another font. On the other hand, some fonts used primarily for printed output, and many CJK fonts, are also light weight.

#### Gelasio

Gelasio is metrically compatible with MS Georgia and fontconfig will use it if ever Georgia is requested but not installed.

#### Liberation fonts

The Liberation fonts provide libre substitutes for Arial, Courier New, and Times New Roman. Fontconfig will use them as substitutes for those fonts, and also for the similar Helvetica, Courier, Times Roman although for these latter it can prefer a different font (see the examples in the 'Substitutes' PDFs at zarniwhoop.uk).

Many people will find the Liberation fonts useful for pages where one of those fonts is requested.

#### Microsoft Core Fonts

The Microsoft Core fonts date from 2002. They were supplied with old versions of Microsoft Windows and were apparently made available for general use. You can extract them from the 'exe' files using bsd-tar from libarchive-3.5.2. Be sure to read the license before using them. At one time some of these fonts (particularly Arial, Times New Roman, and to a lesser extent Courier New) were widely specified on web pages. The full set contains Andale Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana and Webdings.

Please note that if you only want to use a font with the same metrics (character size, etc) as Arial, Courier New, or Times New Roman you can use the libre Liberation Fonts (above), and similarly you can replace Georgia with Gelasio.

Although many old posts recommend installing these fonts for better-looking output, there are more recent posts that these are ugly or 'broken'. One suggestion is that they do not support anti-aliasing.

The newer fonts which Microsoft made their defaults in later releases of MS Windows or MS Office (Calibri and Cambria) have never been freely available. But if you do not have them installed you can find metric equivalents (Carlito, Caladea) above.

#### Noto fonts

The Noto fonts ('No Tofu', i.e. avoiding boxes with dots [hex digits] when a glyph cannot be found) is a set of fonts which aim to cover every glyph in unicode, no matter how obscure. These fonts, or at least the Sans Serif fonts, are used by KF5 (initially only for gtk applications). If you want to cover historic languages, you can download all the fonts by clicking on the link at the top of that page.

People using languages written in Latin, Greek or Cyrillic alphabets need only install Noto Sans itself, and perhaps Noto Sans Symbols for currency symbols. For more details on the CJK fonts see Noto Sans CJK below. There are also separate fonts for every other current writing system, but these too will also require Noto Sans (or Noto Serif) and perhaps Noto Symbols.

However, you should be aware that fontconfig knows nothing about Noto fonts. The 'Noto Sans Something' fonts are each treated as separate fonts (and for Arabic there is not a specifically Sans name), so if you have other fonts installed then the choice of which font to use for missing glyphs where 'Noto Sans' is specified will be random, except that Sans fonts will be preferred over known Serif and Monospace fonts because Sans is the fallback for unknown fonts.

#### Oxygen fonts

When KDE Frameworks 5 was first released, it used the Oxygen fonts which were designed for integrated use with the KDE desktop. Those fonts are no-longer actively maintained, so KDE made a decision to switch to Noto fonts, but for the moment they are still required by 'startkde'.

Originally these fonts were only supplied as source, needing CMake-3.21.2 and FontForge-20201107 to create the TTF files. But for a while the source has also included the prepared TTF. The only unusual feature is that each TTF file is in its own subdirectory (`oxygen-fonts/{*-?00}/`) with the source in further subdirectories. You could just install the whole tarball if you prefer, although that will waste space.

#### Source Code Pro

This set of fonts from Adobe (seven different weights) includes what is now the preferred monospace font for those applications which use gsettings-desktop-schemas-40.0. The github release source-code-pro contains OTF (preferred) and TTF as well as the source and WOFF fonts.

To use this in terminals, you probably only want the Regular font.

There is also an older TTF version of this available from Google fonts but that has very limited coverage (adequate for most European languages using a latin alphabet).

#### CJK fonts:

As indicated earlier, usage of a combination of Chinese, Japanese and Korean can be tricky - each font only covers a subset of the available codepoints, the preferred shapes of the glyphs can differ between the languages, and many of the CJK fonts do not actually support modern Korean.

Also, by default fontconfig prefers Chinese to Japanese. Tuning that is covered at Prefer chosen CJK fonts.

Although Unicode has been extended to allow a very large number of CJK codepoints, those outside the Base Plane (greater than U+0xFFFF) are not commonly used in Mandarin (the normal form of written Chinese, whether Simplified (PRC) or Traditional (Taiwan)), or Japanese.

For Hong Kong, which uses Traditional Chinese and where Cantonese is the dominant language, the Hong Kong Supplementary Character Set was added to Unicode in 2005 and revised in 2009 (it is part of CJK Extension B and contains more than 1900 characters). Earlier fonts will not be able to support either Cantonese or use of these characters where local names are written in Mandarin. The UMing HK, Noto Sans CJK HK and WenQuanYi Zen Hei fonts all seem to cover Hong Kong usage (fontconfig disagrees about Noto Sans CJK HK).

The Han glyphs are double-width, other glyphs in the same font may be narrower. For their CJK content, all of these fonts can be regarded as monospaced (i.e. fixed width).

If all you wish to do is to be able to render CJK glyphs, installing WenQuanYi ZenHei may be a good place to start if you do not already have a preference.

#### Chinese fonts:

In Chinese, there are three font styles in common use: Sung (also known as Song or Ming) which is the most-common ornamented ("serif") form, Kai ("brush strokes") which is an earlier ornamented style that looks quite different, and modern Hei ("sans"). Unless you appreciate the differences, you probably do not want to install Kai fonts.

##### Noto Sans CJK

Noto Sans CJK – Sans-Serif sets of all CJK fonts in a ttc – as the link says, you can choose to install the TTC and cover all the languages in all weights in a 110MB file, or you can download subsets. There are also Monospace versions.

##### Opendesktop fonts

A copy of version 1.4.2 of the opendesktop-fonts is preserved at Arch. This was a later development of fireflysung which BLFS used to recommend, adding Kai and Mono fonts. The name of the Sung font remains 'AR PL New Sung' so they cannot both be installed together.

At one time there was a 1.6 release, and more recently some versions at github, which also included a Sans font (Odohei), but those have dropped off the web and it is unclear if there was a problem. Fontconfig does not know anything about the later fonts (AR PL New Kai, AR PL New Sung Mono) and will default to treating them as Sans.

##### UMing

UMing fonts – sets of Chinese Ming fonts (from Debian, use the '.orig' tarball) in a ttc which contain variations of Simplified and Traditional Chinese (Taiwanese, with second variant for different bopomofo, and Cantonese for Hong Kong). This ships with old-syntax files which you can install to `/etc/fonts/conf.d/` but see Editing Old-Style conf files.

##### WenQuanYi Zen Hei

WenQuanYi Zen Hei provides a Sans-Serif font which covers all CJK scripts including Korean. Although it includes old-style conf files, these are not required: fontconfig will already treat these fonts (the 'sharp' contains bitmaps, the monospace appears not to be Mono in its ASCII part) as Sans, Serif, and Monospace. If all you wish to do is to be able to render Han and Korean text without worrying about the niceties of the shapes used, the main font from this package is a good font to use.

#### Japanese fonts:

In Japanese, Gothic fonts are Sans, Mincho are Serif. BLFS used to only mention the Kochi fonts, but those appear to now be the least-preferred of the Japanese fonts.

Apart from the fonts detailed below, also consider Noto Sans CJK.

##### IPAex fonts

The IPAex fonts are the current version of the IPA fonts. Click on 'English' at the link and then click on the Download icon to find IPAex Font Ver.003.01. Unfortunately, fontconfig only knows about the older IPAfonts and the forked IPA Mona font (which is not easily available and which apparently does not meet Debian's Free Software guidelines). Therefore if you install the IPAex fonts you may wish to make it known to fontconfig, see Prefer chosen CJK fonts for one possible way to do this.

##### Kochi fonts

The Kochi Substitute fonts were the first truly libre Japanese fonts (the earlier Kochi fonts were allegedly plagiarized from a commercial font).

##### VL Gothic

The VL Gothic font is a modern Japanese font in two variants with monotonic or proportional spacing for the non-Japanese characters.

#### Korean fonts:

In Korean, Batang or Myeongjo (the older name) are Serif, Dotum or Gothic are the main Sans fonts. BLFS previously recommended the Baekmuk fonts, but the Nanum and Un fonts are now preferred to Baekmuk by fontconfig because of user requests.

A convenient place to see examples of these and many other Korean fonts is Free Korean Fonts. Click on 'Gothic Fonts' or 'All Categories -> Myeongjo Fonts', then click on the font example to see more details including the License, and click on the link to download it. For Nanum, you will need to be able to read Korean to find the download link on the page you get to. For Un there are direct links and you can find the un-fonts-core tarball in the `releases/` directory.

Alternatively, consider Noto Sans CJK (all of the variants cover Hangul) or WenQuanYi ZenHei.

Last updated on

## Xorg Legacy

### Introduction to Xorg Legacy

Xorg's ancestor (X11R1, in 1987) at first only provided bitmap fonts, with a tool (bdftopcf) to assist in their installation. With the introduction of xorg-server-1.19.0 and libXfont2 many people will not need them. There are still a few old packages which might require, or benefit from, these deprecated fonts and so the following packages are shown here.

### Note

The font-adobe-100dpi package installs 100 dots per inch versions of Courier, Helvetica, New Century Schoolbook and Times fonts.

The remaining font packages here provide 75dpi versions of those fonts, and various miscellaneous fonts - mostly for legacy encodings. Those are primarily to silence warnings when testing Xorg. In previous versions of BLFS a lot more legacy fonts were installed.

Please consult the BLFS-7.10 systemd book at https://www.linuxfromscratch.org/blfs/view/7.10-systemd/x/x7font.html if you wish to install any of those other fonts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.x.org/pub/individual/

- Download (FTP): ftp://ftp.x.org/pub/individual/

- Download size: 4.2 MB

- Estimated disk space required: 30 MB

- Estimated build time: 0.3 SBU

#### Xorg Legacy Dependencies

##### Required

xcursor-themes-1.0.6

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Legacy

### Downloading Xorg Legacy

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

    cat > legacy.dat << "EOF"
    2a455d3c02390597feb9cefb3fe97a45 app/ bdftopcf-1.1.tar.bz2
    1347c3031b74c9e91dc4dfa53b12f143 font/ font-adobe-100dpi-1.0.3.tar.bz2
    6c9f26c92393c0756f3e8d614713495b font/ font-adobe-75dpi-1.0.3.tar.bz2
    cb7b57d7800fd9e28ec35d85761ed278 font/ font-jis-misc-1.0.3.tar.bz2
    0571bf77f8fab465a5454569d9989506 font/ font-daewoo-misc-1.0.3.tar.bz2
    a2401caccbdcf5698e001784dbd43f1a font/ font-isas-misc-1.0.3.tar.bz2
    c88eb44b3b903d79fb44b860a213e623 font/ font-misc-misc-1.1.2.tar.bz2
    EOF

To download the needed files using wget, use the following commands:

    mkdir legacy &&
    cd    legacy &&
    grep -v '^#' ../legacy.dat | awk '{print $2$3}' | wget -i- -c \
         -B https://www.x.org/pub/individual/ &&
    grep -v '^#' ../legacy.dat | awk '{print $1 " " $3}' > ../legacy.md5 &&
    md5sum -c ../legacy.md5

### Installation of Xorg Legacy

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    for package in $(grep -v '^#' ../legacy.md5 | awk '{print $2}')
    do
      packagedir=${package%.tar.bz2}
      tar -xf $package
      pushd $packagedir
        ./configure $XORG_CONFIG
        make
        as_root make install
      popd
      rm -rf $packagedir
      as_root /sbin/ldconfig
    done

Finally, exit the shell that was started earlier:

    exit

### Contents

Installed Programs: bdftopcf
Installed Libraries: None
Installed Directories: `$XORG_PREFIX`/share/fonts/100dpi, `$XORG_PREFIX`/share/fonts/75dpi, `$XORG_PREFIX`/share/fonts/misc

#### Short Descriptions

bdftopcf | converts an X font from Bitmap Distribution Format to Portable Compiled Format

Last updated on

## Chapter 25. X Libraries

This chapter does not contain libraries that are required to run X. It does contain libraries that enhance X. In some cases the enhancement is as simple as font support. In others it is as complex as libraries that sit between X and applications that run on X whose purpose is to standardize the look and feel and inter-process communications for different applications. They also assist programmers by supplying common elements.

## Amtk-5.2.0

### Introduction to Amtk

The Amtk package contains a basic GTKUIManager replacement based on GAction.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/amtk/5.2/amtk-5.2.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/amtk/5.2/amtk-5.2.0.tar.xz

- Download MD5 sum: 8ea25cde8b7bdbf98d7d6c939dea1724

- Download size: 376 KB

- Estimated disk space required: 8.5 MB

- Estimated build time: 0.1 SBU

#### Amtk Dependencies

##### Required

GTK+-3.24.30

##### Optional

GTK-Doc-1.33.2 (for documentation) and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/amtk

### Installation of Amtk

Install Amtk by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libamtk-5.so
Installed Directories: /usr/include/amtk-5 and /usr/share/gtk-doc/html/amtk-5.0

#### Short Descriptions

`libamtk-5.so` | provides a basic GTKUIManager replacement API based on GAction

Last updated on

## ATK-2.36.0

### Introduction to ATK

ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and control running applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/atk/2.36/atk-2.36.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/atk/2.36/atk-2.36.0.tar.xz

- Download MD5 sum: 01aa5ec5138f5f8c9b3a4e3196ed2900

- Download size: 296 KB

- Estimated disk space required: 7.9 MB

- Estimated build time: less than 0.1 SBU

#### ATK Dependencies

##### Required

GLib-2.68.4

##### Recommended (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/atk

### Installation of ATK

Install ATK by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a testsuite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Library: libatk-1.0.so
Installed Directories: /usr/include/atk-1.0

#### Short Descriptions

`libatk-1.0.so` | contains functions that are used by assistive technologies to interact with the desktop applications

Last updated on

## Atkmm-2.28.2

### Introduction to Atkmm

Atkmm is the official C++ interface for the ATK accessibility toolkit library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/atkmm/2.28/atkmm-2.28.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/atkmm/2.28/atkmm-2.28.2.tar.xz

- Download MD5 sum: c1dc581b9cf14a8f3cd088a7563d0d3e

- Download size: 676 KB

- Estimated disk space required: 11 MB

- Estimated build time: 0.2 SBU

#### Atkmm Dependencies

##### Required

ATK-2.36.0 and GLibmm-2.66.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/atkmm

### Installation of Atkmm

Install Atkmm by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a testsuite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Library: libatkmm-1.6.so
Installed Directories: /usr/{include,lib}/atkmm-1.6 and /usr/share/{devhelp/books/atkmm-1.6,doc/atkmm-2.28.2}

#### Short Descriptions

`libatkmm-1.6.so` | contains the ATK API classes

Last updated on

## at-spi2-core-2.40.3

### Introduction to At-Spi2 Core

The At-Spi2 Core package is a part of the GNOME Accessibility Project. It provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/at-spi2-core/2.40/at-spi2-core-2.40.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/at-spi2-core/2.40/at-spi2-core-2.40.3.tar.xz

- Download MD5 sum: db4f7caceb5d663ec3adb715408b2303

- Download size: 196 KB

- Estimated disk space required: 9.8 MB (with tests)

- Estimated build time: less than 0.1 SBU (using parallelism=4, with tests)

#### At-Spi2 Core Dependencies

##### Required

dbus-1.12.20, GLib-2.68.4, and Xorg Libraries

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/at-spi2-core

### Installation of At-Spi2 Core

Install At-Spi2 Core by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

A session bus address, normally available in an Xorg terminal, is necessary to run the tests. And, the test suite requires the glib schemas of the package already installed. To test the results, install the package first, then issue: ninja test. The memory test is known to timeout.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Library: libatspi.so
Installed Directories: /usr/include/at-spi-2.0, /usr/share/defaults/at-spi2, and /usr/share/gtk-doc/html/libatspi

#### Short Descriptions

`libatspi.so` | contains the At-Spi2 API functions

Last updated on

## at-spi2-atk-2.38.0

### Introduction to At-Spi2 Atk

The At-Spi2 Atk package contains a library that bridges ATK to At-Spi2 D-Bus service.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/at-spi2-atk/2.38/at-spi2-atk-2.38.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/at-spi2-atk/2.38/at-spi2-atk-2.38.0.tar.xz

- Download MD5 sum: aed95be54ef213d210331dda88298b92

- Download size: 96 KB

- Estimated disk space required: 8.5 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### At-Spi2 Atk Dependencies

##### Required

at-spi2-core-2.40.3 and ATK-2.36.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/at-spi2-atk

### Installation of At-Spi2 Atk

Install At-Spi2 Atk by running the following commands:

    mkdir build &&
    cd build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. An already active graphical session with bus address is necessary to run the tests.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libatk-bridge-2.0.so and /usr/lib/gtk-2.0/modules/libatk-bridge.so
Installed Directory: /usr/include/at-spi2-atk and /usr/lib/gnome-settings-daemon-3.0

#### Short Descriptions

`libatk-bridge.so` | is the Accessibility Toolkit GTK+ module
`libatk-bridge-2.0.so` | Contains the common functions used by GTK+ Accessibility Toolkit Bridge

Last updated on

## Cairo-1.17.4

### Introduction to Cairo

Cairo is a 2D graphics library with support for multiple output devices. Currently supported output targets include the X Window System, win32, image buffers, PostScript, PDF and SVG. Experimental backends include OpenGL, Quartz and XCB file output. Cairo is designed to produce consistent output on all output media while taking advantage of display hardware acceleration when available (e.g., through the X Render Extension). The Cairo API provides operations similar to the drawing operators of PostScript and PDF. Operations in Cairo include stroking and filling cubic Bézier splines, transforming and compositing translucent images, and antialiased text rendering. All drawing operations can be transformed by any affine transformation (scale, rotation, shear, etc.).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.cairographics.org/snapshots/cairo-1.17.4.tar.xz

- Download MD5 sum: bf9d0d324ecbd350d0e9308125fa4ce0

- Download size: 40 MB

- Estimated disk space required: 154 MB

- Estimated build time: 0.8 SBU

#### Cairo Dependencies

##### Required

libpng-1.6.37 and Pixman-0.40.0

##### Recommended

Fontconfig-2.13.1, GLib-2.68.4 (required for most GUIs), and Xorg Libraries

##### Optional

Cogl-1.22.8, ghostscript-9.54.0, GTK+-3.24.30 and GTK+-2.24.33, GTK-Doc-1.33.2, libdrm-2.4.107, librsvg-2.50.7, libxml2-2.9.12, LZO-2.10, Mesa-21.2.1, Poppler-21.08.0, Qt-5.15.2, Valgrind-3.17.0, DirectFB, jbig2dec, libspectre, Skia, and Qt4.

### Note

There is a circular dependency between cairo and harfbuzz. If cairo is built before harfbuzz, it is necessary to rebuild cairo after harfbuzz in order to build pango.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cairo

### Installation of Cairo

Install Cairo by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --enable-tee &&
    make

This package does not have a working testsuite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-tee`: This switch enables the experimental tee surface backend which is required if using system-installed Cairo with Mozilla applications.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-xlib-xcb`: This switch enables several experimental Xlib/XCB functions used by some window managers.

`--enable-gl`: This switch enables Cairo's experimental OpenGL surface which is required for Wayland compositor and some other packages that are not part of BLFS.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to create and install the documentation.

### Contents

Installed Programs: cairo-trace
Installed Libraries: libcairo.so, libcairo-gobject.so and libcairo-script-interpreter.so
Installed Directories: /usr/{include,lib,share/gtk-doc/html}/cairo

#### Short Descriptions

cairo-trace | generates a log of all calls made by an application to Cairo
`libcairo.so` | contains the 2D graphics functions required for rendering to the various output targets
`libcairo-gobject.so` | contains functions that integrate Cairo with Glib's GObject type system
`libcairo-script-interpreter.so` | contains the script interpreter functions for executing and manipulating Cairo execution traces

Last updated on

## libcairomm-1.0 (cairomm-1.14.0)

### Introduction to libcairomm-1.0

The libcairomm-1.0 package provides a C++ interface to Cairo.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.cairographics.org/releases/cairomm-1.14.0.tar.xz

- Download MD5 sum: 75a08d50eb08b97667e4ea2be6efa1ad

- Download size: 592 KB

- Estimated disk space required: 9.5 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### libcairomm-1.0 Dependencies

##### Required

Cairo-1.17.4 and libsigc++-2.10.7

##### Recommended

Boost-1.77.0 (for tests)

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cairomm-1.0

### Installation of libcairomm-1.0

Install Cairomm-1.0 by running the following commands:

    mkdir bld &&
    cd    bld &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dbuild-tests=true  \
          -Dboost-shared=true \
          ..                  &&
    ninja

To run the test suite, run: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dbuild-tests=true`: This switch is for building the unit tests. Remove if you have not installed Boost-1.77.0.

`-Dboost-shared=true`: This switch has the package use the shared version of boost libraries. It is required if you have not installed the boost static libraries, and you have passed `-Dbuild-tests=true`.

`-Dbuild-documentation=true`: This switch builds the html documentation if doxygen is installed.

### Contents

Installed Programs: None
Installed Library: libcairomm-1.0.so
Installed Directories: /usr/{lib,include}/cairomm-1.0 and /usr/share/{devhelp/books,doc}/cairomm-1.0 (optional)

#### Short Descriptions

`libcairomm-1.0.so` | contains the Cairo API classes

Last updated on

## Cogl-1.22.8

### Introduction to Cogl

Cogl is a modern 3D graphics API with associated utility APIs designed to expose the features of 3D graphics hardware using a direct state access API design, as opposed to the state-machine style of OpenGL.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/cogl/1.22/cogl-1.22.8.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/cogl/1.22/cogl-1.22.8.tar.xz

- Download MD5 sum: 7dd8b2e24171ef7399f851cea144b569

- Download size: 1.7 MB

- Estimated disk space required: 69 MB (add 2 MB for tests)

- Estimated build time: 0.3 SBU (Using parallelism=4; add 0.2 SBU for tests)

#### Cogl Dependencies

##### Required

Cairo-1.17.4, gdk-pixbuf-2.42.6, GLU-9.0.2, Mesa-21.2.1, Pango-1.48.9, and Wayland-1.19.0

##### Recommended

gobject-introspection-1.68.0

##### Optional

gst-plugins-base-1.18.4, GTK-Doc-1.33.2, SDL-1.2.15, and SDL2-2.0.16

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cogl

### Installation of Cogl

Install Cogl by running the following commands:

### Note

This package may occasionally fail when building with multiple processors. See Using Multiple Processors for more information.

    ./configure --prefix=/usr  \
                --enable-gles1 \
                --enable-gles2 \
                --enable-{kms,wayland,xlib}-egl-platform \
                --enable-wayland-egl-server              &&
    make

To test the results, issue: make check. The tests should be run from an X terminal on the hardware accelerated Xorg Server. A few tests will use all CPUs in parallel, regardless of parallellism settings.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gles1`: This switch enables support for OpenGL ES 1.1.

`--enable-gles2`: This switch enables support for OpenGL ES 2.0.

`--enable-{kms,wayland,xlib}-egl-platform`: These switches enable support for KMS, Wayland and Xlib EGL platforms. They are required for GNOME Wayland support.

`--enable-wayland-egl-server`: This switch enables Cogl's Wayland Server API which is required for GNOME Wayland support.

`--enable-cogl-gst`: This switch enables gstreamer support.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libcogl-gles2.so, libcogl-pango.so, libcogl-path.so, and libcogl.so, and optional libraries libcogl-gst.so and /usr/lib/gstreamer-1.0/libgstcogl.so
Installed Directories: /usr/include/cogl and /usr/share/cogl

#### Short Descriptions

`libcogl-gles2.so` | is the OpenGL ES 2.0 integration library for Cogl
`libcogl-pango.so` | is the Pango integration library for Cogl
`libcogl.so` | is an object oriented GL/GLES Abstraction/Utility Layer library

Last updated on

## Clutter-1.26.4

### Introduction to Clutter

The Clutter package contains an open source software library used for creating fast, visually rich and animated graphical user interfaces.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

Anything built with this toolkit needs hardware 3D acceleration from the graphics driver at runtime. This is provided by Mesa (or by proprietary graphics drivers), but is not available for every graphics card nor for all virtual machines. You may wish to review Checking the DRI installation.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/clutter/1.26/clutter-1.26.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/clutter/1.26/clutter-1.26.4.tar.xz

- Download MD5 sum: 624dd776a5159de0267587b1df6b97b2

- Download size: 5.2 MB

- Estimated disk space required: 93 MB (with tests)

- Estimated build time: 0.7 SBU (Using parallelism=4; with tests)

#### Clutter Dependencies

##### Required

ATK-2.36.0, Cogl-1.22.8, and JSON-GLib-1.6.6

##### Recommended

gobject-introspection-1.68.0, GTK+-3.24.30, libgudev-237, libinput-1.18.1, libxkbcommon-1.3.0, and Wayland-1.19.0

##### Optional

GTK-Doc-1.33.2 and Tslib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/clutter

### Installation of Clutter

Install Clutter by running the following commands:

    ./configure --prefix=/usr               \
                --sysconfdir=/etc           \
                --enable-egl-backend        \
                --enable-evdev-input        \
                --enable-wayland-backend    \
                --enable-wayland-compositor &&
    make

To test the results, issue: make -j1 -k check (you must be in an xterm or similar to do this, because it launches some windows).

Now, as the `root` user:

    make install

### Command Explanations

`--enable-egl-backend`: This switch enables the experimental EGL windowing backend.

`--enable-evdev-input`: This switch enables the experimental Evdev input backend which is required for GNOME Wayland support.

`--enable-wayland-backend` and `--enable-wayland-compositor`: These switches enable the experimental Wayland API in Clutter which is required for GNOME Wayland support.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libclutter-1.0.so and libclutter-glx-1.0.so
Installed Directories: /usr/include/clutter-1.0 and /usr/share/gtk-doc/html/{cally,clutter}

#### Short Descriptions

`libclutter-1.0.so` | contains the Clutter API functions

Last updated on

## clutter-gst-3.0.27

### Introduction to Clutter Gst

The Clutter Gst package contains an integration library for using GStreamer with Clutter. Its purpose is to implement the ClutterMedia interface using GStreamer.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/clutter-gst/3.0/clutter-gst-3.0.27.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/clutter-gst/3.0/clutter-gst-3.0.27.tar.xz

- Download MD5 sum: 2bf9d7ca146c9d71e86c45cd00e9a28e

- Download size: 396 KB

- Estimated disk space required: 10 MB

- Estimated build time: 0.2 SBU

#### Clutter Gst Dependencies

##### Required

Clutter-1.26.4, gst-plugins-base-1.18.4, and libgudev-237

##### Recommended

gobject-introspection-1.68.0 and gst-plugins-bad-1.18.4

##### Optional

GTK-Doc-1.33.2 and Cgc

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/clutter-gst

### Installation of Clutter Gst

Install Clutter Gst by running the following commands:

    ./configure --prefix=/usr &&
    make

This package does not come with a testsuite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libclutter-gst-3.0.so and /usr/lib/gstreamer-1.0/libcluttergst3.so
Installed Directories: /usr/include/clutter-gst-3.0 and /usr/share/gtk-doc/html/clutter-gst-3.0

#### Short Descriptions

`libclutter-gst-3.0.so` | contains the Clutter Gst API functions

Last updated on

## clutter-gtk-1.8.4

### Introduction to Clutter Gtk

The Clutter Gtk package is a library providing facilities to integrate Clutter into GTK+ applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/clutter-gtk/1.8/clutter-gtk-1.8.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/clutter-gtk/1.8/clutter-gtk-1.8.4.tar.xz

- Download MD5 sum: b363ac9878e2337be887b8ee9e1da00e

- Download size: 324 KB

- Estimated disk space required: 5.2 MB

- Estimated build time: 0.1 SBU

#### Clutter Gtk Dependencies

##### Required

Clutter-1.26.4 and GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/clutter-gtk

### Installation of Clutter Gtk

Install Clutter Gtk 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

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libclutter-gtk-1.0.so
Installed Directories: /usr/include/clutter-gtk-1.0 and /usr/share/gtk-doc/html/clutter-gtk-1.0

#### Short Descriptions

`libclutter-gtk-1.0.so` | contains the Clutter Gtk API functions

Last updated on

## colord-gtk-0.2.0

### Introduction to Colord GTK

The Colord GTK package contains GTK+ bindings for Colord.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/colord/releases/colord-gtk-0.2.0.tar.xz

- Download MD5 sum: 66d048803c8b89e5e63da4b461484933

- Download size: 20 KB

- Estimated disk space required: 41 MB

- Estimated build time: less than 0.1 SBU

#### Colord GTK Dependencies

##### Required

colord-1.4.5 and GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0, GTK+-2.24.33, and Vala-0.52.5

##### Optional

DocBook-utils-0.6.14 and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/colord-gtk

### Installation of Colord GTK

### Warning

If building the documentation ninja -j1 must be used.

Install Colord GTK by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dgtk2=true         \
          -Dvapi=true         \
          -Ddocs=false        \
          -Dman=false ..      &&
    ninja

To test the results, issue: ninja test. The tests need to be run from an X session, and may require a color profile for your primary display.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dvapi=true`: This switch enables building of the Vala bindings. Remove if you don't have Vala-0.52.5 installed.

`-Dgtk2=true`: This switch enables building the GTK+-2 bindings for colord.

`-Ddocs=false`: This switch disables building GTK-DOC based documentation. Even if GTK-DOC is installed, you will need the namespaced versions of the Docbook XSL stylesheets.

`-Dman=false`: This switch disables generating the manual pages for this package. Remove this switch if you have namespaced versions of the Docbook XSL stylesheets installed.

### Contents

Installed Programs: cd-convert
Installed Libraries: libcolord-gtk.so and libcolord-gtk2.so
Installed Directories: /usr/include/colord-1/colord-gtk and /usr/share/gtk-doc/html/colord-gtk

#### Short Descriptions

cd-convert | is a Color Manager Testing Tool
`libcolord-gtk.so` | contains the Colord GTK+ bindings
`libcolord-gtk2.so` | contains the Colord GTK+-2 bindings

Last updated on

## FLTK-1.3.7

### Introduction to FLTK

FLTK (pronounced "fulltick") is a cross-platform C++ GUI toolkit. FLTK provides modern GUI functionality and supports 3D graphics via OpenGL and its built-in GLUT emulation libraries used for creating graphical user interfaces for applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://fltk.org/pub/fltk/1.3.7/fltk-1.3.7-source.tar.gz

- Download MD5 sum: 8483e58b2312a348c0f66101eead1409

- Download size: 5.1 MB

- Estimated disk space required: 119 MB (with documentation)

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### FLTK Dependencies

##### Required

Xorg Libraries

##### Recommended

hicolor-icon-theme-0.17, libjpeg-turbo-2.1.1, and libpng-1.6.37

##### Optional

alsa-lib-1.2.5.1, desktop-file-utils-0.26, Doxygen-1.9.2, GLU-9.0.2, Mesa-21.2.1, and texlive-20210325 (or install-tl-unx)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fltk

### Installation of FLTK

### Note

The tar extraction directory is fltk-1.3.7 and not fltk-1.3.7-source as indicated by the tarball name.

Install FLTK by running the following commands:

    sed -i -e '/cat./d' documentation/Makefile       &&

    ./configure --prefix=/usr    \
                --enable-shared  &&
    make

If you wish to create the API documentation, issue:

    make -C documentation html

The tests for the package are interactive. To execute the tests, run test/unittests. In addition, there are 70 other executable test programs in the `test` directory that can be run individually.

Now, as the `root` user:

    make docdir=/usr/share/doc/fltk-1.3.7 install

If desired, install some example games built as a part of the tests, extra documentation and example programs. As the `root` user:

    make -C test          docdir=/usr/share/doc/fltk-1.3.7 install-linux &&
    make -C documentation docdir=/usr/share/doc/fltk-1.3.7 install-linux

### Command Explanations

sed ... documentation/Makefile: Avoid installing pages in `/usr/share/man/cat*`.

### Contents

Installed Programs: blocks, checkers, fltk-config, fluid, and sudoku
Installed Libraries: libfltk.{a,so}, libfltk_forms.{a,so}, libfltk_gl.{a,so}, and libfltk_images.{a,so}
Installed Directories: /usr/include/FL and /usr/share/doc/fltk-1.3.7

#### Short Descriptions

blocks | is a FLTK-based block elimination game
checkers | is a FLTK-based version of the game of checkers
fltk-config | is a utility script that can be used to get information about the current version of FLTK that is installed on the system
fluid | is an interactive GUI designer for FLTK
sudoku | is an implementation of the popular Sudoku game
`libfltk.so` | contains functions that provide an API to implement graphical user interfaces

Last updated on

## Freeglut-3.2.1

### Introduction to Freeglut

Freeglut is intended to be a 100% compatible, completely opensourced clone of the GLUT library. GLUT is a window system independent toolkit for writing OpenGL programs, implementing a simple windowing API, which makes learning about and exploring OpenGL programming very easy.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/freeglut/freeglut-3.2.1.tar.gz

- Download MD5 sum: cd5c670c1086358598a6d4a9d166949d

- Download size: 432 KB

- Estimated disk space required: 5.0 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/freeglut-3.2.1-gcc10_fix-1.patch

#### Freeglut Dependencies

##### Required

CMake-3.21.2 and Mesa-21.2.1

##### Recommended

GLU-9.0.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/freeglut

### Installation of Freeglut

First, fix an issue with multiple defined symbols exposed by GCC-10:

    patch -Np1 -i ../freeglut-3.2.1-gcc10_fix-1.patch

Install Freeglut by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr       \
          -DCMAKE_BUILD_TYPE=Release        \
          -DFREEGLUT_BUILD_DEMOS=OFF        \
          -DFREEGLUT_BUILD_STATIC_LIBS=OFF  \
          -Wno-dev .. &&

    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DFREEGLUT_BUILD_DEMOS=OFF`: Disable building optional demo programs. Note that if you choose to build them, their installation must be done manually. The demo programs are limited and installation is not recommended.

`-DFREEGLUT_BUILD_STATIC_LIBS=OFF`: Do not build the static library.

### Contents

Installed Programs: None
Installed Library: libglut.so
Installed Directories: None

#### Short Descriptions

`libglut.so` | contains functions that implement the OpenGL Utility Toolkit

Last updated on

## gdk-pixbuf-2.42.6

### Introduction to Gdk Pixbuf

The Gdk Pixbuf package is a toolkit for image loading and pixel buffer manipulation. It is used by GTK+ 2 and GTK+ 3 to load and manipulate images. In the past it was distributed as part of GTK+ 2 but it was split off into a separate package in preparation for the change to GTK+ 3.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.6.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.6.tar.xz

- Download MD5 sum: 7cd2fdaa3c55e2302316fe36968f7425

- Download size: 7.4 MB

- Estimated disk space required: 71 MB (with tests)

- Estimated build time: 0.2 SBU (Using parallelism=4; with tests)

#### Gdk Pixbuf Dependencies

##### Required

GLib-2.68.4, libjpeg-turbo-2.1.1, libpng-1.6.37, and shared-mime-info-2.1

##### Recommended

librsvg-2.50.7 (runtime dependency, needed for loading symbolic icons) and libtiff-4.3.0

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

gi-docgen (to generate documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gdk-pixbuf

### Installation of Gdk Pixbuf

Install Gdk Pixbuf by running the following commands:

    mkdir build &&
    cd build &&

    meson --prefix=/usr --buildtype=release --wrap-mode=nofallback .. &&
    ninja

To test the results, issue: ninja test. The tests make a heavy use of disk.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`--wrap-mode=nofallback`: This switch prevents meson from iusing subproject fallbacks for any dependency declarations in the build files, stopping it downloading any optional dependency which is not installed on the system.

### Contents

Installed Programs: gdk-pixbuf-csource, gdk-pixbuf-pixdata, gdk-pixbuf-query-loaders, and gdk-pixbuf-thumbnailer
Installed Libraries: libgdk_pixbuf-2.0.so
Installed Directories: /usr/{include,lib}/gdk-pixbuf-2.0, /usr/libexec/installed-tests/gdk-pixbuf, /usr/share/installed-tests/gdk-pixbuf, /usr/share/gtk-doc/html/gdk-pixbuf, and /usr/share/thumbnailers

#### Short Descriptions

gdk-pixbuf-csource | is a small utility that generates C code containing images, used for compiling images directly into programs
gdk-pixbuf-pixdata | is a tool used to convert GdkPixbuf to GdkPixdata
gdk-pixbuf-query-loaders | collects information about loadable modules for Gdk Pixbuf and writes it to the default cache file location, or to stdout
gdk-pixbuf-thumbnailer | creates thumbnails of pictures for use in other applications
`libgdk_pixbuf-2.0.so` | contains functions used to load and render images

Last updated on

## gdk-pixbuf-xlib-2.40.2

### Introduction to gdk-pixbuf-xlib

The gdk-pixbuf-xlib package provides a deprecated Xlib interface to gdk-pixbuf, which is needed for some applications which have not been ported to use the new interfaces yet.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gdk-pixbuf-xlib/2.40/gdk-pixbuf-xlib-2.40.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf-xlib/2.40/gdk-pixbuf-xlib-2.40.2.tar.xz

- Download MD5 sum: fbd57e867e039a8cf9164d145c0f0434

- Download size: 53 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

#### gdk-pixbuf-xlib Dependencies

##### Required

gdk-pixbuf-2.42.6 and Xorg Libraries

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gdk-pixbuf-xlib

### Installation of gdk-pixbuf-xlib

Install gdk-pixbuf-xlib by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dgtk_doc=true`: Use this option if GTK-Doc-1.33.2 is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libgdk_pixbuf_xlib-2.0.so
Installed Directories: /usr/include/gdk-pixbuf-2.0/gdk-pixbuf-xlib

#### Short Descriptions

`libgdk_pixbuf_xlib-2.0.so` | provides a Xlib interface to gdk-pixbuf

Last updated on

## GDL-3.40.0

### Introduction to GDL

The GDL package provides a library that is useful for docking objects in GTK+ applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gdl/3.40/gdl-3.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gdl/3.40/gdl-3.40.0.tar.xz

- Download MD5 sum: 21df1254b49b74a498feb99be57364d0

- Download size: 524 KB

- Estimated disk space required: 9.8 MB

- Estimated build time: 0.1 SBU

#### GDL Dependencies

##### Required

GTK+-3.24.30

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gdl

### Installation of GDL

Install GDL 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

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Libraries: libgdl-3.so
Installed Directories: /usr/include/libgdl-3.0 and /usr/share/gtk-doc/html/gdl-3.0

#### Short Descriptions

`libgdl-3.so` | contains functions that allow for docking objects in GTK+ applications

Last updated on

## GLEW-2.2.0

### Introduction to GLEW

GLEW is the OpenGL Extension Wrangler Library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/glew/glew-2.2.0.tgz

- Download MD5 sum: 3579164bccaef09e36c0af7f4fd5c7c7

- Download size: 820 KB

- Estimated disk space required: 16 MB

- Estimated build time: less than 0.1 SBU

#### glew Dependencies

##### Required

Mesa-21.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/GLEW

### Installation of GLEW

Install GLEW by running the following commands:

    sed -i 's%lib64%lib%g' config/Makefile.linux &&
    sed -i -e '/glew.lib.static:/d' \
           -e '/0644 .*STATIC/d'    \
           -e 's/glew.lib.static//' Makefile     &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install.all

### Command Explanations

sed -i 's%lib64%lib%g' ...: This ensures that the library is installed in `/usr/lib`.

sed -i -e '/glew.lib.static:/d' ...: This suppresses the static library.

make install.all: This installs the programs as well as the library.

### Contents

Installed Programs: glewinfo and visualinfo
Installed Library: libGLEW.so
Installed Directory: /usr/include/GL

#### Short Descriptions

glewinfo | provides information about the supported extensions
visualinfo | is an extended version of glxinfo
`libGLEW.so` | provides functions to access OpenGL extensions

Last updated on

## GLU-9.0.2

### Introduction to GLU

This package provides the Mesa OpenGL Utility library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://ftp.freedesktop.org/pub/mesa/glu/glu-9.0.2.tar.xz

- Download MD5 sum: 2b0f13fa5b949bfb3a995927c6e35125

- Download size: 428 KB

- Estimated disk space required: 9.2 MB

- Estimated build time: 0.2 SBU

#### GLU Dependencies

##### Required

Mesa-21.2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/glu

### Installation of GLU

Install GLU by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX -Dgl_provider=gl --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install &&
    rm -vf /usr/lib/libGLU.a

### Contents

Installed Programs: None
Installed Library: libGLU.so
Installed Directories: None

#### Short Descriptions

`libGLU.so` | is the Mesa OpenGL Utility library

Last updated on

## GOffice-0.10.50

### Introduction to GOffice

The GOffice package contains a library of GLib/GTK document centric objects and utilities. This is useful for performing common operations for document centric applications that are conceptually simple, but complex to implement fully. Some of the operations provided by the GOffice library include support for plugins, load/save routines for application documents and undo/redo functions.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/goffice/0.10/goffice-0.10.50.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/goffice/0.10/goffice-0.10.50.tar.xz

- Download MD5 sum: 3b9ec1e1cb59dfb9ff107acc3a8972fb

- Download size: 2.3 MB

- Estimated disk space required: 79 MB (with tests)

- Estimated build time: 0.4 SBU (Using parallelism=4; with tests)

#### GOffice Dependencies

##### Required

GTK+-3.24.30, libgsf-1.14.47, librsvg-2.50.7, libxslt-1.1.34, and Which-2.21

##### Optional

gobject-introspection-1.68.0, ghostscript-9.54.0, gsettings-desktop-schemas-40.0, GTK-Doc-1.33.2, Lasem, and libspectre

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/goffice010

### Installation of GOffice

Install GOffice by running the following commands:

    ./configure --prefix=/usr &&
    make

If you wish to run the tests, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libgoffice-0.10.so
Installed Directories: /usr/include/libgoffice-0.10, /usr/{lib,share}/goffice, and /usr/share/gtk-doc/html/goffice-0.10

#### Short Descriptions

`libgoffice-0.10.so` | contains API functions to provide support for document centric objects and utilities

Last updated on

## Graphene-1.10.6

### Introduction to Graphene

The Graphene package provides a thin layer of types for graphics libraries.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/ebassi/graphene/releases/download/1.10.6/graphene-1.10.6.tar.xz

- Download MD5 sum: 390139e704772b915ff2b7cac56c24ae

- Download size: 328 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.1 SBU

#### Graphene Dependencies

##### Required

GLib-2.68.4 and gobject-introspection-1.68.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/graphene

### Installation of Graphene

Install Graphene by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this switch if you have GTK-Doc-1.33.2 installed and wish to generate the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libgraphene-1.0.so
Installed Directories: /usr/include/graphene-1.0, /usr/lib/graphene-1.0, /usr/{libexec,share}/installed-tests/graphene-1.0

#### Short Descriptions

`libgraphene-1.0.so` | contains functions that provide a thin layer of types for graphics libraries

Last updated on

## GTK+-2.24.33

### Introduction to GTK+ 2

The GTK+ 2 package contains libraries used for creating graphical user interfaces for applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk+/2.24/gtk+-2.24.33.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtk+/2.24/gtk+-2.24.33.tar.xz

- Download MD5 sum: 0118e98dbe0e4dab90ce475f9f0e6c0c

- Download size: 12 MB

- Estimated disk space required: 285 MB

- Estimated build time: 0.9 SBU (using parallelism=4; add 0.1 SBU for tests)

#### GTK+ 2 Dependencies

##### Required

ATK-2.36.0, gdk-pixbuf-2.42.6 and Pango-1.48.9

##### Recommended

hicolor-icon-theme-0.17

##### Optional

Cups-2.3.3op2, DocBook-utils-0.6.14, gnome-themes-extra-3.28 (runtime, for Adwaita and HighContrast themes), gobject-introspection-1.68.0 and GTK-Doc-1.33.2

### Note

If gobject-introspection-1.68.0 was installed after ATK-2.36.0, gdk-pixbuf-2.42.6, and/or Pango-1.48.9, those packages will have to be rebuilt before this package can be built.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk+2

### Installation of GTK+ 2

Install GTK+ 2 by running the following commands:

    sed -e 's#l \(gtk-.*\).sgml#& -o \1#' \
        -i docs/{faq,tutorial}/Makefile.in      &&

    ./configure --prefix=/usr --sysconfdir=/etc &&

    make

To test the results, issue: make -k check. Note that you must run the tests from a session with X Window Display capability (i.e., not a text-based terminal/console) as the tests attempt to open an X window, and the tests can take an excessively long time. Using an X Window, the tests should take less than 0.1 SBU. One test, aliasfilescheck.sh, is known to fail.

Now, as the `root` user:

    make install

### Note

If you installed the package on to your system using a “DESTDIR” method, an important file was not installed and must be copied and/or generated. Generate it using the following command as the `root` user:

    gtk-query-immodules-2.0 --update-cache

### Command Explanations

sed -i 's#l \(gtk-.*\).sgml#& -o \1#' docs/{faq,tutorial}/Makefile.in: If you have DocBook-utils-0.6.14 installed (specifically, if configure finds db2html) then it will try to use it to rebuild some of its HTML documentation and fail due to bugs in some of the `Makefile`s. This sed fixes the `Makefile`s.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Configuring GTK+ 2

#### Config Files

`~/.gtkrc-2.0`, `/etc/gtk-2.0/gtkrc`, and `/usr/share/gtk-2.0/gtkrc`

#### Configuration Information

GTK+ 2 themes change the way a GTK+ 2 application looks. A GTK+ 2 icon theme can be used to change the icons that appear on the application's toolbar. If you have installed a GTK+ 2 theme (such as gnome-themes-extra-3.28 or GTK Engines-2.20.2), a GTK+ icon theme (such as adwaita-icon-theme-40.1.1) you can set your preferences in `~/.gtkrc-2.0`:

    cat > ~/.gtkrc-2.0 << "EOF"
    include "/usr/share/themes/Glider/gtk-2.0/gtkrc"
    gtk-icon-theme-name = "hicolor"
    EOF

There are many more themes available at Gnome-Look.org and other places.

Once you've settled on themes you like, you can (as the `root` user) make them the default system wide:

    cat > /etc/gtk-2.0/gtkrc << "EOF"
    include "/usr/share/themes/Clearlooks/gtk-2.0/gtkrc"
    gtk-icon-theme-name = "elementary"
    EOF

LXAppearance-0.6.3 is a GTK+ 2 application that can help you choose the themes you like.

### Contents

Installed Programs: gtk-builder-convert, gtk-demo, gtk-query-immodules-2.0, and gtk-update-icon-cache
Installed Libraries: libgailutil.so, libgdk-x11-2.0.so, and libgtk-x11-2.0.so
Installed Directories: /etc/gtk-2.0, /usr/include/{gail-1.0,gtk-2.0,gtk-unix-print-2.0}, /usr/lib/gtk-2.0, /usr/share/doc/gtk+-2.24.33, /usr/share/gtk-2.0, /usr/share/gtk-doc/html/{gail-libgail-util,gdk2,gtk2}, and /usr/share/themes/{Default,Emacs,Raleigh}

#### Short Descriptions

gtk-builder-convert | converts glade files into XML files which can be loaded with GtkBuilder
gtk-demo | demonstrates GTK+ 2 functionality and provides code for the examples
gtk-query-immodules-2.0 | collects information about loadable input method modules for GTK+ 2 and writes it to standard output
gtk-update-icon-cache | creates mmap()able cache files for icon themes. Starting with gtk+-2.24.24, add the flag “--include-image-data” to this command, if you wish previous behavior, with image data in the cache
`libgdk-x11-2.0.so` | contains functions that act as a wrapper around the low-level drawing and windowing functions provided by the underlying graphics system
`libgtk-x11-2.0.so` | contains functions that provide an API to implement graphical user interfaces

Last updated on

## GTK+-3.24.30

### Introduction to GTK+ 3

The GTK+ 3 package contains libraries used for creating graphical user interfaces for applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.30.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtk+/3.24/gtk+-3.24.30.tar.xz

- Download MD5 sum: 1cfb66b3460ae5a62f964a5cc14c66b6

- Download size: 21 MB

- Estimated disk space required: 584 MB (add 16 MB for tests)

- Estimated build time: 2.1 SBU (using parallelism=4, add 1.2 SBU for tests)

#### GTK+ 3 Dependencies

##### Required

at-spi2-atk-2.38.0, gdk-pixbuf-2.42.6, libepoxy-1.5.9, and Pango-1.48.9

##### Recommended

adwaita-icon-theme-40.1.1 (default for some gtk+3 settings keys, also needed for tests), hicolor-icon-theme-0.17 (needed for tests), ISO Codes-4.7.0, libxkbcommon-1.3.0, sassc-3.6.2, Wayland-1.19.0, and wayland-protocols-1.21

##### Recommended (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

colord-1.4.5, Cups-2.3.3op2, DocBook-utils-0.6.14, GTK-Doc-1.33.2, JSON-GLib-1.6.6, PyAtSpi2-2.38.1 (for tests), rest-0.8.1, and PAPI

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk3

### Installation of GTK+ 3

Install GTK+ 3 by running the following commands:

    ./configure --prefix=/usr              \
                --sysconfdir=/etc          \
                --enable-broadway-backend  \
                --enable-x11-backend       \
                --enable-wayland-backend   &&
    make

Some tests fail if `/usr/share/glib-2.0/schemas/gschemas.compiled` is not found. If you wish to run the test suite, create (or update) the file using the following command as the `root` user: glib-compile-schemas /usr/share/glib-2.0/schemas.

To test the results you need a graphical session, then issue make check. The accessibility-dump test has subtests that are known to fail. The gtk-reftest suite has two tests that are known to fail as well.

Now, as the `root` user:

    make install

### Note

If you installed the package on to your system using a “DESTDIR” method, an important file was not installed and must be copied and/or generated. Generate it using the following command as the `root` user:

    gtk-query-immodules-3.0 --update-cache

### Note

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

### Command Explanations

`--enable-broadway-backend`: This switch enables the HTML5 GTK backend.

`--enable-x11-backend`: This switch enables the X11 GDK backend.

`--enable-wayland-backend`: This switch enables the Wayland GDK backend. Replace with `--disable-wayland-backend` if you do not have Wayland-1.19.0 and wayland-protocols-1.21 or you do not wish to build GNOME with Wayland support. Other changes may be needed to allow the build to complete without the wayland backend enabled. Note that a previous installation of gtk+3 built with wayland will interfere with installation without wayland. If this is desired, remove /usr/lib/libgtk-3* before installation.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Configuring GTK+ 3

#### Config Files

`~/.config/gtk-3.0/settings.ini` and `/etc/gtk-3.0/settings.ini`

#### Configuration Information

GTK+ 3 themes change the way a GTK+ 3 application looks. An icon theme can be used to change the icons that appear on the application's toolbar. If you have installed a GTK+ 3 theme (e.g. the Adwaita theme built in GTK+ 3), an icon theme (such as oxygen-icons5-5.85.0) and/or a font (Dejavu fonts), you can set your preferences in `~/.config/gtk-3.0/settings.ini`, or the default system wide configuration file (as the `root` user), in `/etc/gtk-3.0/settings.ini`. For the local user an example is:

    mkdir -vp ~/.config/gtk-3.0
    cat > ~/.config/gtk-3.0/settings.ini << "EOF"
    [Settings]
    gtk-theme-name = Adwaita
    gtk-icon-theme-name = oxygen
    gtk-font-name = DejaVu Sans 12
    gtk-cursor-theme-size = 18
    gtk-toolbar-style = GTK_TOOLBAR_BOTH_HORIZ
    gtk-xft-antialias = 1
    gtk-xft-hinting = 1
    gtk-xft-hintstyle = hintslight
    gtk-xft-rgba = rgb
    gtk-cursor-theme-name = Adwaita
    EOF

There are many settings keys, some with default values. You can find them at Settings: GTK+ 3 Reference Manual. There are many more themes available at https://www.gnome-look.org/browse/ and other places.

As part of GTK+-3.0's redesign, the scroll bar buttons are no longer visible on the scrollbar in many applications. If this functionality is desired, modify the `gtk.css` file and restore them using the following command:

    cat > ~/.config/gtk-3.0/gtk.css << "EOF"
    *  {
       -GtkScrollbar-has-backward-stepper: 1;
       -GtkScrollbar-has-forward-stepper: 1;
    }
    EOF

### Contents

Installed Programs: broadwayd, gtk3-demo, gtk3-demo-application, gtk3-icon-browser, gtk3-widget-factory, gtk-builder-tool, gtk-encode-symbolic-svg, gtk-launch, gtk-query-immodules-3.0, gtk-query-settings, and gtk-update-icon-cache
Installed Libraries: libgailutil-3.so, libgdk-3.so, and libgtk-3.so
Installed Directories: /etc/gtk-3.0, /usr/include/{gail,gtk}-3.0, /usr/{lib,share}/gtk-3.0, /usr/share/gtk-doc/html/{gail-libgail-util,gdk,gtk}3, and /usr/share/themes/{Default,Emacs}/gtk-3.0

#### Short Descriptions

broadwayd | provides support for displaying GTK+ 3 applications in a web browser, using HTML5 and web sockets
gtk3-demo | is a simple program that demonstrates some of the tasks that can be done with GTK+ 3
gtk3-demo-application | is a simple GTK+ 3 application
gtk3-icon-browser | is a utility to explore the icons in the current icon theme. It shows icons in various sizes, their symbolic variants where available, as well as a description of the icon and its context
gtk3-widget-factory | is a program to view GTK+ 3 themes and widgets
gtk-builder-tool | performs various operations on GtkBuilder .ui files
gtk-encode-symbolic-svg | converts symbolic SVG icons into specially prepared PNG files. GTK+ 3 can load and recolor these PNGs, just like original SVGs, but loading them is much faster
gtk-launch | launches an application using the given name. The name should match the application desktop file name, as residing in `/usr/share/applications`, with or without the '.desktop' suffix
gtk-query-immodules-3.0 | collects information about loadable input method modules for GTK+ 3 and writes it to the default cache file location, or to standard output
gtk-query-settings | provides a complete listing of all settings related to GTK+ 3
gtk-update-icon-cache | is an icon theme caching utility that creates mmap()able cache files for icon themes
`libgailutil-3.so` | contains functions that implement the accessibility interfaces defined by the GNOME Accessibility Toolkit
`libgdk-3.so` | contains functions that act as a wrapper around the low-level drawing and windowing functions provided by the underlying graphics system
`libgtk-3.so` | contains functions that provide an API to implement graphical user interfaces

Last updated on

## GTK-4.4.0

### Introduction to GTK 4

The GTK 4 package contains libraries used for creating graphical user interfaces for applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk/4.4/gtk-4.4.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtk/4.4/gtk-4.4.0.tar.xz

- Download MD5 sum: 113d24bd311037f774bf1aa7d5d0a344

- Download size: 29 MB

- Estimated disk space required: 670 MB (76 MB installed, add 10 MB for tests)

- Estimated build time: 1.1 SBU (using parallelism=4, add 0.5 SBU for tests)

#### GTK 4 Dependencies

##### Required

FriBidi-1.0.9, gdk-pixbuf-2.42.6, graphene-1.10.6, ISO Codes-4.7.0, libepoxy-1.5.9, libxkbcommon-1.3.0, Pango-1.48.9, wayland-protocols-1.21,

##### Recommended

adwaita-icon-theme-40.1.1 (default for some gtk4 settings keys), FFmpeg-4.4, gst-plugins-bad-1.18.4, hicolor-icon-theme-0.17 (needed for tests and for defaults), and librsvg-2.50.7

##### Recommended (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

colord-1.4.5, Cups-2.3.3op2, GTK-Doc-1.33.2, Highlight-4.1 (runtime, only used by gtk4-demo for syntax highlighting of demo source code), JSON-GLib-1.6.6, rest-0.8.1, sassc-3.6.2, Tracker-3.1.2, gi-docgen, libcloudproviders, and vulkan

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk4

### Installation of GTK 4

Install GTK 4 by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dbroadway-backend=true .. &&
    ninja

To run the tests, issue: meson test --setup x11. If you are in a Wayland session, replace x11 with wayland. 8 tests are known to fail, out of 730.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dbroadway-backend=true`: This switch enables the HTML5 GDK backend.

`-Dcloudproviders=enabled`: Use this switch if you have libcloudproviders installed and wish to enable support for cloud providers in a file chooser window.

`-Dsysprof=enabled`: Use this switch if you have sysprof-3.40.1 installed and wish to enable tracing support for GTK4-based applications.

`-Dtracker=enabled`: Use this switch if you have Tracker-3.1.2 installed and wish to use search functionality when running a file chooser.

`-Dcolord=enabled`: Use this switch if you have colord-1.4.5 installed and wish to use colord with the CUPS printing backend.

`-Dgtk_doc=true`: Use this switch if you have GTK-Doc-1.33.2 installed and wish to generate the API reference documentation.

### Configuring GTK 4

#### Config Files

`~/.config/gtk-4.0/settings.ini` and `/usr/share/gtk-4.0/settings.ini`

#### Configuration Information

GTK 4 themes change the way a GTK 4 application looks. An icon theme can be used to change the icons that appear on the application's toolbar. If you have installed a GTK 4 theme (e.g. the Adwaita theme built in GTK 4), an icon theme (such as oxygen-icons5-5.85.0) and/or a font (Dejavu fonts), you can set your preferences in `~/.config/gtk-4.0/settings.ini`, or the default system-wide configuration file (as the `root` user), in `/usr/share/gtk-4.0/settings.ini`. For the local user, an example is:

    mkdir -pv ~/.config/gtk-4.0
    cat > ~/.config/gtk-4.0/settings.ini << "EOF"
    [Settings]
    gtk-theme-name = Adwaita
    gtk-icon-theme-name = oxygen
    gtk-font-name = DejaVu Sans 12
    gtk-cutsor-theme-size = 18
    gtk-xft-antialias = 1
    gtk-xft-hinting = 1
    gtk-xft-hintstyle = hintslight
    gtk-xft-rgba = rgb
    gtk-cursor-theme-name = Adwaita
    EOF

There are many settings keys, some with default values. You can find them at Settings: GTK 4 Reference Manual.

### Contents

Installed Programs: gtk4-broadwayd, gtk4-builder-tool, gtk4-demo, gtk4-demo-application, gtk4-encode-symbolic-svg, gtk4-icon-browser, gtk4-launch, gtk4-print-editor, gtk4-query-settings, gtk4-update-icon-cache, and gtk4-widget-factory
Installed Libraries: libgtk-4.so
Installed Directories: /usr/include/gtk-4.0, /usr/lib/gtk-4.0, and /usr/share/gtk-4.0

#### Short Descriptions

gtk4-broadwayd | provides support for displaying GTK 4 applications in a web browser using HTML5 and web sockets
gtk4-builder-tool | performs various operations on GtkBuilder .ui files
gtk4-demo | is a simple program that demonstrates some of the tasks that can be done with GTK 4
gtk4-demo-application | is a simple GTK 4 application which is useful for testing
gtk4-encode-symbolic-svg | converts symbolic SVG icons into special PNG files. GTK 4 can load and recolor these PNGs, just like original SVGs, but loading them is much faster
gtk4-icon-browser | is a utility to explore the icons in the current icon theme. It shows icons in various sizes, their symbolic variants when available, as well as a description of the icon and its context
gtk4-launch | launches an application using the given name. The name should match the application .desktop file name (as seen in `/usr/share/applications`), with or without the '.desktop' extension
gtk4-print-editor | is a simple program to demonstrate printing using GTK 4 applications
gtk4-query-settings | provides a complete listing of all settings related to GTK 4
gtk4-update-icon-cache | is an icon theme caching utility that creates mmap()able cache files for icon themes
gtk4-widget-factory | is a program to view GTK 4 themes and widgets
`libgtk-4.so` | contains functions that provide an API to implement graphical user interfaces

Last updated on

## GTK Engines-2.20.2

### Introduction to GTK Engines

The GTK Engines package contains eight themes/engines and two additional engines for GTK2.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk-engines/2.20/gtk-engines-2.20.2.tar.bz2

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtk-engines/2.20/gtk-engines-2.20.2.tar.bz2

- Download MD5 sum: 5deb287bc6075dc21812130604c7dc4f

- Download size: 676 KB

- Estimated disk space required: 19 MB

- Estimated build time: 0.4 SBU

#### GTK Engines Dependencies

##### Required

GTK+-2.24.33

##### Optional

Lua-5.4.3 and Which-2.21 (required for test suite)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk-engines

### Installation of GTK Engines

Install GTK Engines by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-lua --with-system-lua`: Use these switches if you installed Lua and want to build Lua theming engine.

### Contents

Installed Programs: None
Installed Libraries: libclearlooks.so, libcrux-engine.so, libglide.so, libhcengine.so, libindustrial.so, libmist.so, libredmond95.so and libthinice.so (GTK-2 engines libraries)
Installed Directories: /usr/lib/gtk-2.0/2.10.0/engines, /usr/share/gtk-engines, /usr/share/themes/Clearlooks, /usr/share/themes/Crux, /usr/share/themes/Industrial, /usr/share/themes/Mist, /usr/share/themes/Redmond and /usr/share/themes/ThinIce
Installed Themes: Clearlooks, Crux, Industrial, Mist, Redmond and ThinIce

#### Short Descriptions

engine libraries | are manager systems for specific themes

Last updated on

## Gtkmm-2.24.5

### Introduction to Gtkmm

The Gtkmm package provides a C++ interface to GTK+ 2. It can be installed alongside Gtkmm-3.24.5 (the GTK+ 3 version) with no namespace conflicts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtkmm/2.24/gtkmm-2.24.5.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtkmm/2.24/gtkmm-2.24.5.tar.xz

- Download MD5 sum: 6c59ae8bbff48fad9132f23af347acf1

- Download size: 11 MB

- Estimated disk space required: 426 MB (with tests)

- Estimated build time: 3.4 SBU (with tests)

#### Gtkmm Dependencies

##### Required

Atkmm-2.28.2, GTK+-2.24.33 and Pangomm-2.46.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtkmm2

### Installation of Gtkmm

First, fix the documents directory name:

    sed -e '/^libdocdir =/ s/$(book_name)/gtkmm-2.24.5/' \
        -i docs/Makefile.in

Install Gtkmm by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: libgdkmm-2.4.so and libgtkmm-2.4.so
Installed Directories: /usr/include/gdkmm-2.4, /usr/include/gtkmm-2.4, /usr/lib/gdkmm-2.4, /usr/lib/gtkmm-2.4, and /usr/share/{devhelp/books/gtkmm-2.4,doc/gtkmm-2.24.5}

#### Short Descriptions

`libgdkmm-2.4.so` | contains the GDK API classes
`libgtkmm-2.4.so` | contains the GTK+ API classes

Last updated on

## Gtkmm-3.24.5

### Introduction to Gtkmm

The Gtkmm package provides a C++ interface to GTK+ 3.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtkmm/3.24/gtkmm-3.24.5.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtkmm/3.24/gtkmm-3.24.5.tar.xz

- Download MD5 sum: 27af20542aaeb8a31a2ebaa267244bdb

- Download size: 13 MB

- Estimated disk space required: 230 MB (with tests)

- Estimated build time: 1.0 SBU (Using parallelism=4; with tests)

#### Gtkmm Dependencies

##### Required

Atkmm-2.28.2, GTK+-3.24.30, and Pangomm-2.46.1

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtkmm3

### Installation of Gtkmm

Install Gtkmm by running the following commands:

    mkdir gtkmm3-build &&
    cd    gtkmm3-build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. Note that you must be in a graphical environment, as the tests try to open some windows.

Now, as the `root` user:

    ninja install

If you have built the documentation (see Command Explanations below) it was installed to `/usr/share/doc/gtkmm-3.0`. For consistency, move it to a versioned directory as the `root` user:

    mv -v /usr/share/doc/gtkmm-3.0 /usr/share/doc/gtkmm-3.24.5

### Command Explanations

`-Dbuild-documentation=true`: If you have installed Doxygen-1.9.2 this define will build and install the documentation.

### Contents

Installed Programs: None
Installed Libraries: libgdkmm-3.0.so and libgtkmm-3.0.so
Installed Directories: /usr/include/gdkmm-3.0, /usr/include/gtkmm-3.0, /usr/lib/gdkmm-3.0, /usr/lib/gtkmm-3.0, and optionally /usr/share/{devhelp/books/gtkmm-3.0,doc/gtkmm-3.24.5}

#### Short Descriptions

`libgdkmm-3.0.so` | contains the GDK API classes
`libgtkmm-3.0.so` | contains the GTK+ 3 API classes

Last updated on

## gtk-vnc-1.2.0

### Introduction to Gtk VNC

The Gtk VNC package contains a VNC viewer widget for GTK+. It is built using coroutines allowing it to be completely asynchronous while remaining single threaded.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtk-vnc/1.2/gtk-vnc-1.2.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtk-vnc/1.2/gtk-vnc-1.2.0.tar.xz

- Download MD5 sum: 37c36412593d73f6a090b4545d1b0364

- Download size: 216 KB

- Estimated disk space required: 4.6 MB

- Estimated build time: 0.1 SBU

#### Gtk VNC Dependencies

##### Required

GnuTLS-3.7.2, GTK+-3.24.30 and libgcrypt-1.9.4

##### Recommended

gobject-introspection-1.68.0, Python-2.7.18, and Vala-0.52.5

##### Optional

Cyrus SASL-2.1.27 and PulseAudio-15.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtk-vnc

### Installation of Gtk VNC

Install Gtk VNC by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a testsuite.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dwith-vala=false`: This switch disables building of the Vala bindings. Add this if you decide to build gtk-vnc without vala installed.

### Contents

Installed Program: gvnccapture
Installed Libraries: libgtk-vnc-2.0.so, libgvnc-1.0.so and libgvncpulse-1.0.so
Installed Directories: /usr/include/gtk-vnc-2.0, /usr/include/gvnc-1.0 and /usr/include/gvncpulse-1.0

#### Short Descriptions

gvnccapture | is used to capture image from VNC server
`libgtk-vnc-2.0.so` | contains the GTK+ 3 bindings for Gtk VNC
`libgvnc-1.0.so` | contains the GObject bindings for Gtk VNC
`libgvncpulse-1.0.so` | is the PulseAudio bridge for Gtk VNC

Last updated on

## gtksourceview-3.24.11

### Introduction to GtkSourceView

The GtkSourceView package contains libraries used for extending the GTK+ text functions to include syntax highlighting.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtksourceview/3.24/gtksourceview-3.24.11.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtksourceview/3.24/gtksourceview-3.24.11.tar.xz

- Download MD5 sum: b748da426a7d64e1304f0c532b0f2a67

- Download size: 1.4 MB

- Estimated disk space required: 80 MB (with tests)

- Estimated build time: 0.2 SBU (using parallelism=4; with tests)

#### GtkSourceView Dependencies

##### Required

GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0

##### Optional

Vala-0.52.5, Valgrind-3.17.0, GTK-Doc-1.33.2, itstool-2.0.6, fop-2.6 (or dblatex), and Glade

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtksourceview

### Installation of GtkSourceView

Install GtkSourceView by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue make check. The tests need to be run in a graphical environment.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libgtksourceview-3.0.so
Installed Directories: /usr/{include,share,share/gtk-doc/html}/gtksourceview-3.0

#### Short Descriptions

`libgtksourceview-3.0.so` | contains function extensions for the GtkTextView widget

Last updated on

## gtksourceview4-4.8.1

### Introduction to GtkSourceView

The GtkSourceView package contains libraries used for extending the GTK+ text functions to include syntax highlighting.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtksourceview/4.8/gtksourceview-4.8.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtksourceview/4.8/gtksourceview-4.8.1.tar.xz

- Download MD5 sum: d10c624feb48412542f9e3447e75d6bc

- Download size: 1.1 MB

- Estimated disk space required: 63 MB (with tests)

- Estimated build time: 0.1 SBU (with tests; both using parallelism=4)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/gtksourceview4-4.8.1-buildfix-1.patch

#### GtkSourceView Dependencies

##### Required

GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0 and libxml2-2.9.12

##### Optional

Vala-0.52.5, Valgrind-3.17.0, GTK-Doc-1.33.2, itstool-2.0.6, fop-2.6 (or dblatex), and Glade

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtksourceview4

### Installation of GtkSourceView

First, apply a patch to prevent a race condition:

    patch -Np1 -i ../gtksourceview4-4.8.1-buildfix-1.patch

Install GtkSourceView by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue ninja test. The tests need to be run in a graphical environment.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dgtk_doc=true`: This option is normally used if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libgtksourceview-4.so
Installed Directories: /usr/{include,share,share/gtk-doc/html}/gtksourceview-4

#### Short Descriptions

`libgtksourceview-4.so` | contains function extensions for the GtkTextView widget

Last updated on

## gtksourceview5-5.0.0

### Introduction to GtkSourceView

The GtkSourceView package contains a library used for extending the GTK text functions to include syntax highlighting.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gtksourceview/5.0/gtksourceview-5.0.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gtksourceview/5.0/gtksourceview-5.0.0.tar.xz

- Download MD5 sum: 5e2241325697706341b5f6e6edba617e

- Download size: 1.1 MB

- Estimated disk space required: 31 MB

- Estimated build time: 0.2 SBU

#### GtkSourceView Dependencies

##### Required

GTK-4.4.0 and pcre2-10.37

##### Recommended

gobject-introspection-1.68.0 and libxml2-2.9.12

##### Optional

GTK-Doc-1.33.2, sysprof-3.40.1, Vala-0.52.5, and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gtksourceview5

### Installation of GtkSourceView

Install GtkSourceView by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dgtk_doc=true`: Use this switch if you have GTK-Doc-1.33.2 installed and wish to generate the API documentation.

`-Dsysprof=true`: Use this switch if you have sysprof-3.40.1 installed and wish to build with sysprof profiler support.

### Contents

Installed Programs: None
Installed Libraries: libgtksourceview-5.so
Installed Directories: /usr/include/gtksourceview-5 and /usr/share/gtksourceview-5

#### Short Descriptions

`libgtksourceview-5.so` | contains function extensions for the GtkTextView widget

Last updated on

## imlib2-1.7.2

### Introduction to imlib2

imlib2 is a graphics library for fast file loading, saving, rendering and manipulation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/enlightenment/imlib2-1.7.2.tar.bz2

- Download MD5 sum: d24dc90ac08810d0a66bcd226e35a451

- Download size: 876 KB

- Estimated disk space required: 11 MB

- Estimated build time: 0.2 SBU

#### imlib2 Dependencies

##### Required

Xorg Libraries

##### Recommended

giflib-5.2.1

##### Optional

libpng-1.6.37, libjpeg-turbo-2.1.1, libtiff-4.3.0, and libid3tag

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/imlib2

### Installation of imlib2

Install imlib2 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/imlib2-1.7.2 &&
    install -v -m644    doc/{*.gif,index.html} /usr/share/doc/imlib2-1.7.2

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: imlib2_bumpmap, imlib2_colorspace, imlib2-config, imlib2_conv, imlib2_grab, imlib2_poly, imlib2_show, imlib2_test, and imlib2_view
Installed Libraries: libImlib2.so and various filters and image loader modules.
Installed Directories: /usr/lib/imlib2, /usr/share/doc/imlib2-1.7.2, and /usr/share/imlib2

#### Short Descriptions

imlib2_bumpmap | is to test the imlib2 bumpmap function
imlib2_colorspace | is to test the imlib2 colorspace function
imlib2-config | is a script used to obtain imlib2 building informations
imlib2_poly | is to test the imlib2 poly function
imlib2_conv | converts images between formats
imlib2_grab | takes screenshots
imlib2_show | is an imlib2 program test
imlib2_test | is an imlib2 program test
imlib2_view | diplays images files
`libImlib2.so` | provides the functions for programs to handle various image data formats

Last updated on

## keybinder-0.3.1

### Introduction to keybinder

The keybinder package contains a utility library registering global X keyboard shortcuts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/kupferlauncher/keybinder/releases/download/v0.3.1/keybinder-0.3.1.tar.gz

- Download MD5 sum: a6d7caae0dcb040b08692b008a68a507

- Download size: 384 KB

- Estimated disk space required: 2.8 MB

- Estimated build time: less than 0.1 SBU

#### keybinder Dependencies

##### Required

GTK+-2.24.33

##### Recommended

gobject-introspection-1.68.0 and PyGTK-2.24.0

##### Optional

GTK-Doc-1.33.2 and Lua-5.4.3 (currently broken because an older lua version is required)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/keybinder

### Installation of keybinder

Install keybinder by running the following commands:

    ./configure --prefix=/usr --disable-lua &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-lua`: Use this switch to disable Lua-5.4.3 bindings (currently broken, because older lua version is required).

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libkeybinder.so and /usr/lib/python2.7/site-packages/keybinder/_keybinder.so
Installed Directories: /usr/lib/python2.7/site-packages/keybinder and /usr/share/gtk-doc/html/keybinder

#### Short Descriptions

`libkeybinder.so` | is the library that registers global X keyboard shortcuts

Last updated on

## keybinder-3.0-0.3.2

### Introduction to keybinder-3.0

The keybinder-3.0 package contains a utility library registering global X keyboard shortcuts for GTK+-3.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/kupferlauncher/keybinder/releases/download/keybinder-3.0-v0.3.2/keybinder-3.0-0.3.2.tar.gz

- Download MD5 sum: 97260321fda721fce799174ea6ba10cf

- Download size: 370 KB

- Estimated disk space required: 2.6 MB

- Estimated build time: less than 0.1 SBU

#### keybinder-3.0 Dependencies

##### Required

GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/keybinder-3.0

### Installation of keybinder-3.0

Install keybinder-3.0 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

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libkeybinder-3.0.so
Installed Directories: /usr/include/keybinder-3.0 and /usr/share/gtk-doc/html/keybinder-3.0

#### Short Descriptions

`libkeybinder-3.0.so` | is the library that registers global X keyboard shortcuts

Last updated on

## libdazzle-3.40.0

### Introduction to libdazzle

libdazzle is a companion library to GObject and GTK+ that adds APIs for special graphical effects.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libdazzle/3.40/libdazzle-3.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libdazzle/3.40/libdazzle-3.40.0.tar.xz

- Download MD5 sum: 14381d1c64f14655da61c6094356d1d9

- Download size: 440 KB

- Estimated disk space required: 42 MB (with tests)

- Estimated build time: 0.2 SBU (using parallelism=4; with tests)

#### libdazzle Dependencies

##### Required

GTK+-3.24.30

##### Recommended

Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdazzle

### Installation of libdazzle

Install libdazzle by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Program: dazzle-list-counters
Installed Library: libdazzle-1.0.so
Installed Directory: /usr/include/libdazzle-1.0

#### Short Descriptions

dazzle-list-counters | lists counters that are in use by a process
`libdazzle-1.0.so` | contains API functions for graphical effects

Last updated on

## Libhandy-1.2.3

### Introduction to libhandy

The libhandy package provides additional GTK UI widgets for use in developing user interfaces.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libhandy/1.2/libhandy-1.2.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libhandy/1.2/libhandy-1.2.3.tar.xz

- Download MD5 sum: f468e27518d393961e3fa8803d4550d5

- Download size: 480 KB

- Estimated disk space required: 26 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### libhandy Dependencies

##### Required

GTK+-3.24.30

##### Recommended

Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and Glade

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libhandy1

### Installation of libhandy

Install libhandy by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. The tests must be run from a graphical session.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this option if you have GTK-Doc-1.33.2 installed and wish to install the documentation.

### Contents

Installed Programs: handy-1-demo
Installed Libraries: libhandy-1.so
Installed Directories: /usr/include/libhandy-1

#### Short Descriptions

handy-1-demo | provides an example of how to use the libhandy library
`libhandy-1.so` | provides additional GTK widgets for use in creating user interfaces

Last updated on

## libdrm-2.4.107

### Introduction to libdrm

libdrm provides a user space library for accessing the DRM, direct rendering manager, on operating systems that support the ioctl interface. libdrm is a low-level library, typically used by graphics drivers such as the Mesa DRI drivers, the X drivers, libva and similar projects.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://dri.freedesktop.org/libdrm/libdrm-2.4.107.tar.xz

- Download MD5 sum: 252175d363e3dbc4ffe32faaa8e93494

- Download size: 415 KB

- Estimated disk space required: 10 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### libdrm Dependencies

##### Recommended

Xorg Libraries (for Intel KMS API support required by Mesa)

##### Optional

Cairo-1.17.4 (for tests), CMake-3.21.2 (could be used to find dependencies without pkgconfig files), docbook-xml-4.5, docbook-xsl-1.79.2, docutils-0.17.1, and libxslt-1.1.34 (to build manual pages), libatomic_ops-7.6.10 (required by architectures without native atomic operations), Valgrind-3.17.0, and CUNIT (for AMDGPU tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdrm

### Installation of libdrm

Install libdrm by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=$XORG_PREFIX \
          --buildtype=release   \
          -Dudev=true           \
          -Dvalgrind=false      &&
    ninja

To check the results, issue ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dudev=true`: This parameter enables support for using Udev instead of mknod.

`-Dvalgrind=false`: This parameter disables building libdrm with valgrind support. This fixes building sysprof and other packages that use libdrm. Change this parameter to "true" if you need support for valgrind.

### Contents

Installed Programs: None
Installed Libraries: libdrm_amdgpu.so, libdrm_intel.so, libdrm_nouveau.so, libdrm_radeon.so, libdrm.so, and libkms.so
Installed Directories: /usr/include/libdrm, /usr/include/libkms, and /usr/share/libdrm

#### Short Descriptions

`libdrm_amdgpu.so` | contains the AMDGPU specific Direct Rendering Manager functions
`libdrm_intel.so` | contains the Intel specific Direct Rendering Manager functions
`libdrm_nouveau.so` | contains the open source nVidia (Nouveau) specific Direct Rendering Manager functions
`libdrm_radeon.so` | contains the AMD Radeon specific Direct Rendering Manager functions
`libdrm.so` | contains the Direct Rendering Manager API functions
`libkms.so` | contains API functions for kernel mode setting abstraction

Last updated on

## libepoxy-1.5.9

### Introduction to libepoxy

libepoxy is a library for handling OpenGL function pointer management.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/anholt/libepoxy/releases/download/1.5.9/libepoxy-1.5.9.tar.xz

- Download MD5 sum: ecd74bc119637f5aac8e2cf6ee8c3899

- Download size: 220 KB

- Estimated disk space required: 17 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### libepoxy Dependencies

##### Required

Mesa-21.2.1

##### Optional

Doxygen-1.9.2 (for documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libepoxy

### Installation of libepoxy

Install libepoxy by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddocs=true`: If you have Doxygen-1.9.2 installed, add this option to generate additional documentation.

### Contents

Installed Programs: None
Installed Libraries: libepoxy.so
Installed Directories: /usr/include/epoxy

#### Short Descriptions

`libepoxy.so` | contains API functions for handling OpenGL function pointer management

Last updated on

## libglade-2.6.4

### Introduction to libglade

The libglade package contains `libglade` libraries. These are useful for loading Glade interface files in a program at runtime.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libglade/2.6/libglade-2.6.4.tar.bz2

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libglade/2.6/libglade-2.6.4.tar.bz2

- Download MD5 sum: d1776b40f4e166b5e9c107f1c8fe4139

- Download size: 348 KB

- Estimated disk space required: 5 MB

- Estimated build time: 0.1 SBU

#### libglade Dependencies

##### Required

libxml2-2.9.12 and GTK+-2.24.33

##### Optional

Python-2.7.18 and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libglade

### Installation of libglade

Install libglade by running the following commands:

    sed -i '/DG_DISABLE_DEPRECATED/d' glade/Makefile.in &&
    ./configure --prefix=/usr --disable-static &&
    make

To test the results, issue: make check. One of the tests, test-convert, is known to fail.

Now, as the `root` user:

    make install

### Command Explanations

sed -i '/DG_DISABLE_DEPRECATED/d': Some of the glib functions that libglade uses were declared deprecated in glib-2.30. This sed removes the G_DISABLE_DEPRECATED CFLAG.

`--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.

### Contents

Installed Program: libglade-convert (requires python)
Installed Library: libglade-2.0.so
Installed Directories: /usr/{include/libglade-2.0/glade,share/{gtk-doc/html/libglade, xml/libglade}}

#### Short Descriptions

libglade-convert | is used to convert old Glade interface files to Glade-2.0 standards
`libglade-2.0.so` | contains the functions necessary to load Glade interface files

Last updated on

## libnotify-0.7.9

### Introduction to libnotify

The libnotify library is used to send desktop notifications to a notification daemon, as defined in the Desktop Notifications spec. These notifications can be used to inform the user about an event or display some form of information without getting in the user's way.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libnotify/0.7/libnotify-0.7.9.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libnotify/0.7/libnotify-0.7.9.tar.xz

- Download MD5 sum: ccd9c53364174cc8d13e18a1988faa76

- Download size: 96 KB

- Estimated disk space required: 2.9 MB

- Estimated build time: 0.1 SBU

#### libnotify Dependencies

##### Required

GTK+-3.24.30

##### Optional (Required if building GNOME)

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 and xmlto-0.0.28

##### Required (runtime)

notification-daemon-3.20.0 or xfce4-notifyd-0.6.2

### Note

GNOME Shell and KDE KWin provide their own notification daemons.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libnotify

### Installation of libnotify

Install libnotify by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dgtk_doc=false     \
          -Dman=false .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: Remove this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Program: notify-send
Installed Library: libnotify.so
Installed Directories: /usr/include/libnotify and /usr/share/gtk-doc/html/libnotify

#### Short Descriptions

notify-send | is a command used to send notifications
`libnotify.so` | contains the libnotify API functions

Last updated on

## libxklavier-5.4

### Introduction to libxklavier

The libxklavier package contains a utility library for X keyboard.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://people.freedesktop.org/~svu/libxklavier-5.4.tar.bz2

- Download MD5 sum: 13af74dcb6011ecedf1e3ed122bd31fa

- Download size: 384 KB

- Estimated disk space required: 5.2 MB

- Estimated build time: less than 0.1 SBU

#### libxklavier Dependencies

##### Required

GLib-2.68.4, ISO Codes-4.7.0, libxml2-2.9.12 and Xorg Libraries

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 and Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxklavier

### Installation of libxklavier

Install libxklavier 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

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Library: libxklavier.so
Installed Directories: /usr/include/libxklavier and /usr/share/gtk-doc/html/libxklavier

#### Short Descriptions

`libxklavier.so` | contains XKB utility functions

Last updated on

## Pango-1.48.9

### Introduction to Pango

Pango is a library for laying out and rendering text, with an emphasis on internationalization. It can be used anywhere that text layout is needed, though most of the work on Pango so far has been done in the context of the GTK+ widget toolkit.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/pango/1.48/pango-1.48.9.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/pango/1.48/pango-1.48.9.tar.xz

- Download MD5 sum: 243f05e6b2de17e5129402307e323e14

- Download size: 1.9 MB

- Estimated disk space required: 43 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### Pango Dependencies

##### Required

Fontconfig-2.13.1 (must be built with FreeType-2.11.0 using HarfBuzz-2.9.0), FriBidi-1.0.9, and GLib-2.68.4

##### Recommended

Cairo-1.17.4, gobject-introspection-1.68.0 (Required if building GNOME), and Xorg Libraries

##### Optional

Cantarell fonts (for tests), sysprof-3.40.1, gi-docgen (to generate documentation), help2man, and libthai

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pango

### Installation of Pango

Install Pango by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release --wrap-mode=nofallback .. &&
    ninja

To test the results, issue: ninja test. One test, `test-font`, is known to fail.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dintrospection=false`: Use this switch if you do not want to use gobject-introspection-1.68.0.

`--wrap-mode=nofallback`: This switch prevents meson from iusing subproject fallbacks for any dependency declarations in the build files, stopping it downloading any optional dependency which is not installed on the system.

### Configuring Pango

#### Config Files

`/etc/pango/pangorc`, `~/.pangorc` and the file specified in the environment variable `PANGO_RC_FILE`

### Contents

Installed Programs: pango-list, pango-segmentation, and pango-view
Installed Libraries: libpango-1.0.so, libpangocairo-1.0.so, libpangoft2-1.0.so, and libpangoxft-1.0.so
Installed Directories: /usr/include/pango-1.0 and /usr/share/gtk-doc/html/pango

#### Short Descriptions

pango-list | displays a list of fonts that Pango can use that are currently installed on the system
pango-segmentation | shows text segmentation as determined by Pango.
pango-view | renders a given text file through Pango for viewing purposes
`libpango-1.0.so` | contains low level layout rendering routines, a high level driver for laying out entire blocks of text, and routines to assist in editing internationalized text

Last updated on

## Pangomm-2.46.1

### Introduction to Pangomm

The Pangomm package provides a C++ interface to Pango.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/pangomm/2.46/pangomm-2.46.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/pangomm/2.46/pangomm-2.46.1.tar.xz

- Download MD5 sum: 62665f7ace9e282a0c563b40a15627f5

- Download size: 660 KB

- Estimated disk space required: 11 MB

- Estimated build time: 0.2 SBU

#### Pangomm Dependencies

##### Required

libcairomm-1.14.0, GLibmm-2.66.1 and Pango-1.48.9

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pangomm

### Installation of Pangomm

Install Pangomm by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Library: libpangomm-1.4.so
Installed Directories: /usr/include/pangomm-1.4, /usr/lib/pangomm-1.4, and /usr/share/{devhelp/books/pangomm-1.4,doc/pangomm-2.46.1}

#### Short Descriptions

`libpangomm-1.4.so` | contains the Pango API classes

Last updated on

## Qt-5.15.2

### Introduction to Qt5

Qt5 is a cross-platform application framework that is widely used for developing application software with a graphical user interface (GUI) (in which cases Qt5 is classified as a widget toolkit), and also used for developing non-GUI programs such as command-line tools and consoles for servers. One of the major users of Qt is KDE Frameworks 5 (KF5).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz

- Download MD5 sum: e1447db4f06c841d8947f0a6ce83a7b5

- Download size: 560 MB

- Estimated disk space required: 15 GB (257 MB installed)

- Estimated build time: 22 SBU (using parallelism=4)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/qt-everywhere-src-5.15.2-CVE-2021-3481-1.patch

#### Qt5 Dependencies

##### Required

Xorg Libraries

##### Recommended

alsa-lib-1.2.5.1, make-ca-1.7, Cups-2.3.3op2, GLib-2.68.4, gst-plugins-base-1.18.4 (QtMultimedia backend), HarfBuzz-2.9.0, ICU-69.1, JasPer-2.0.33, libjpeg-turbo-2.1.1, libmng-2.0.3, libpng-1.6.37, libtiff-4.3.0, libwebp-1.2.1, libxkbcommon-1.3.0, Mesa-21.2.1, MIT Kerberos V5-1.19.2, mtdev-1.1.6, pcre2-10.37, SQLite-3.36.0, Wayland-1.19.0 (Mesa must be built with Wayland EGL backend), xcb-util-image-0.4.0, xcb-util-keysyms-0.4.0, xcb-util-renderutil-0.3.9, and xcb-util-wm-0.4.1

##### Optional

BlueZ-5.61 (for sdpscanner, and at runtime for QtConnectivity module), ibus-1.5.25, libinput-1.18.1, MariaDB-10.6.4 or MySQL, pciutils-3.7.0 (required for QtWebEngine), PostgreSQL-13.4, Python-2.7.18 (required for QtWebEngine), PulseAudio-15.0, SDL2-2.0.16, unixODBC-2.3.9, assimp, Flite, Firebird, FreeTDS, libproxy, OpenAL, speech-dispatcher, tslib, and Vulkan

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/qt5

### Setting the installation prefix

#### Installing in /opt/qt5

The BLFS editors recommend installing Qt5 in a directory other than `/usr`, ie `/opt/qt5`. To do this, set the following environment variable:

    export QT5PREFIX=/opt/qt5

### Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why `/opt/qt5` is used as installation prefix instead of `/opt/qt-5.15.2`. To create a versioned Qt5 directory after the installation is complete, you may rename the directory and create a symlink:

    mkdir /opt/qt-5.15.2
    ln -sfnv qt-5.15.2 /opt/qt5

Later on, you may want to install other versions of Qt5. To do that, just remove the symlink and use `/opt/qt5` as the prefix again. Which version of Qt5 you use depends only on where the symlink points.

### Note

If qca-2.3.3 has been installed and you are reinstalling or updating this package, then qca will need to be reinstalled.

### Installation of Qt5

### Warning

If Qt5 is being reinstalled into the same directory as an existing instance, run the commands done by `root`, such as make install, from a console or non-Qt5 based window manager. It overwrites Qt5 libraries that should not be in use during the install process.

### Caution

If you did not install some of the recommended dependencies, examine ./configure --help output to check how to disable them or use internal versions bundled in the source tarball.

### Note

The build time and space required for the full Qt5 is quite long. The instructions below do not build the tutorials and examples. Removing the `-nomake` line will create a complete build.

### Note

The BLFS editors do not recommend installing Qt5 into the /usr hierarchy because it becomes difficult to find components and to update to a new version. If you do want to install Qt5 in /usr, the directories need to be specified explicitly. In this case, set QT5PREFIX=/usr and add the following to the configure arguments below:

                -archdatadir    /usr/lib/qt5                \
                -bindir         /usr/bin                    \
                -plugindir      /usr/lib/qt5/plugins        \
                -importdir      /usr/lib/qt5/imports        \
                -headerdir      /usr/include/qt5            \
                -datadir        /usr/share/qt5              \
                -docdir         /usr/share/doc/qt5          \
                -translationdir /usr/share/qt5/translations \
                -examplesdir    /usr/share/doc/qt5/examples

First apply a patch to fix an Out Of Bounds read in QtSVG:

    patch -Np1 -i ../qt-everywhere-src-5.15.2-CVE-2021-3481-1.patch

Next fix some issues using gcc-11:

    sed -i '/utility/a #include <limits>'     qtbase/src/corelib/global/qglobal.h         &&
    sed -i '/string/a #include <limits>'      qtbase/src/corelib/global/qfloat16.h        &&
    sed -i '/qbytearray/a #include <limits>'  qtbase/src/corelib/text/qbytearraymatcher.h &&
    sed -i '/type_traits/a #include <limits>' qtdeclarative/src/qmldebug/qqmlprofilerevent_p.h

Install Qt5 by running the following commands:

    ./configure -prefix $QT5PREFIX                        \
                -sysconfdir /etc/xdg                      \
                -confirm-license                          \
                -opensource                               \
                -dbus-linked                              \
                -openssl-linked                           \
                -system-harfbuzz                          \
                -system-sqlite                            \
                -nomake examples                          \
                -no-rpath                                 \
                -journald                                 \
                -skip qtwebengine                         &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

Remove references to the build directory from installed library dependency (prl) files by running the following command as the `root` user:

    find $QT5PREFIX/ -name \*.prl \
       -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Install images and create the menu entries for installed applications. The `QT5BINDIR` variable is used here to point to the directory for the executable programs. If you have changed the bindir above, `QT5BINDIR` will need to be adjusted below. Be sure that the `QT5BINDIR` variable is defined in root's environment and as the `root` user:

    QT5BINDIR=$QT5PREFIX/bin

    install -v -dm755 /usr/share/pixmaps/                  &&

    install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \
                      /usr/share/pixmaps/assistant-qt5.png &&

    install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \
                      /usr/share/pixmaps/designer-qt5.png  &&

    install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \
                      /usr/share/pixmaps/linguist-qt5.png  &&

    install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \
                      /usr/share/pixmaps/qdbusviewer-qt5.png &&

    install -dm755 /usr/share/applications &&

    cat > /usr/share/applications/assistant-qt5.desktop << EOF
    [Desktop Entry]
    Name=Qt5 Assistant
    Comment=Shows Qt5 documentation and examples
    Exec=$QT5BINDIR/assistant
    Icon=assistant-qt5.png
    Terminal=false
    Encoding=UTF-8
    Type=Application
    Categories=Qt;Development;Documentation;
    EOF

    cat > /usr/share/applications/designer-qt5.desktop << EOF
    [Desktop Entry]
    Name=Qt5 Designer
    GenericName=Interface Designer
    Comment=Design GUIs for Qt5 applications
    Exec=$QT5BINDIR/designer
    Icon=designer-qt5.png
    MimeType=application/x-designer;
    Terminal=false
    Encoding=UTF-8
    Type=Application
    Categories=Qt;Development;
    EOF

    cat > /usr/share/applications/linguist-qt5.desktop << EOF
    [Desktop Entry]
    Name=Qt5 Linguist
    Comment=Add translations to Qt5 applications
    Exec=$QT5BINDIR/linguist
    Icon=linguist-qt5.png
    MimeType=text/vnd.trolltech.linguist;application/x-linguist;
    Terminal=false
    Encoding=UTF-8
    Type=Application
    Categories=Qt;Development;
    EOF

    cat > /usr/share/applications/qdbusviewer-qt5.desktop << EOF
    [Desktop Entry]
    Name=Qt5 QDbusViewer
    GenericName=D-Bus Debugger
    Comment=Debug D-Bus applications
    Exec=$QT5BINDIR/qdbusviewer
    Icon=qdbusviewer-qt5.png
    Terminal=false
    Encoding=UTF-8
    Type=Application
    Categories=Qt;Development;Debugger;
    EOF

Some packages such as VLC-3.0.16 look for certain executables with a -qt5 suffix. Run the following command as the `root` user to create the necessary symlinks:

    for file in moc uic rcc qmake lconvert lrelease lupdate; do
      ln -sfrvn $QT5BINDIR/$file /usr/bin/$file-qt5
    done

### Command Explanations

sed ...: Allows using Python 3 instead of Python 2. This command destroys the build for QtWebEngine, so do not use it if you remove the `-skip qtwebengine` switch.

`-confirm-license`: Accept license without prompting user during configuration.

`-opensource`: Install the opensource version of Qt.

`-nomake examples`: This switch disables building of the example programs included in the source tarball. Remove it if you want to build them.

`-system-sqlite`: This switch enables use of the system version of SQLite.

`-dbus-linked -openssl-linked`: These switches enable explicit linking of the D-Bus and OpenSSL libraries into Qt5 libraries instead of dlopen()-ing them.

`-journald`: This switch allows to send Qt messages to the journald logging system.

`-skip qtwebengine`: This switch disables building the QtWebEngine. The BLFS editors have chosen to build qtwebengine-5.15.6 separately.

`-system-harfbuzz`: This switch enables use of the system version of Harfbuzz.

### Configuring Qt5

#### Configuration Information

If you installed Qt5 in `/usr`, create an environment variable needed by certain packages. As the `root` user:

    cat > /etc/profile.d/qt5.sh << "EOF"
    # Begin /etc/profile.d/qt5.sh

    QT5DIR=/usr
    export QT5DIR
    pathappend $QT5DIR/bin

    # End /etc/profile.d/qt5.sh
    EOF

If Sudo-1.9.7p2 is installed, QT5DIR should be available to the super user as well. Execute the following commands as the `root` user:

    cat > /etc/sudoers.d/qt << "EOF"
    Defaults env_keep += QT5DIR
    EOF

If you installed Qt5 in a location other than `/usr`, you need to update the following configuration files so that Qt5 is correctly found by other packages and system processes.

As the `root` user, update the `/etc/ld.so.conf` file and the dynamic linker's run-time cache file:

    cat >> /etc/ld.so.conf << EOF
    # Begin Qt addition

    /opt/qt5/lib

    # End Qt addition
    EOF

    ldconfig

As the `root` user, create the `/etc/profile.d/qt5.sh` file:

    cat > /etc/profile.d/qt5.sh << "EOF"
    # Begin /etc/profile.d/qt5.sh

    QT5DIR=/opt/qt5

    pathappend $QT5DIR/bin           PATH
    pathappend $QT5DIR/lib/pkgconfig PKG_CONFIG_PATH

    export QT5DIR

    # End /etc/profile.d/qt5.sh
    EOF

### Contents

Installed Programs: assistant, balsam, canbusutil, designer, fixqt4headers.pl, lconvert, linguist, lprodump, lrelease, lrelease-pro, lupdate, lupdate-pro, meshdebug, moc, pixeltool, qcollectiongenerator, qdbus, qdbuscpp2xml, qdbusviewer, qdbusxml2cpp, qdistancefieldgenerator, qdoc, qgltf, qhelpgenerator, qlalr, qmake, qml, qmlcachegen, qmleasing, qmlformat, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlpreview, qmlprofiler, qmlscene, qmltestrunner, qscxmlc, qtattributionscanner, qtdiag, qtpaths, qtplugininfo, qtwaylandscanner, qvkgen, rcc, repc, sdpscanner, syncqt.pl, tracegen, uic, xmlpatterns, and xmlpatternsvalidator
Installed Libraries: libQt53DAnimation.so, libQt53DCore.so, libQt53DExtras.so, libQt53DInput.so, libQt53DLogic.so, libQt53DQuick.so, libQt53DQuickAnimation.so, libQt53DQuickExtras.so, libQt53DQuickInput.so, libQt53DQuickRender.so, libQt53DQuickScene2D.so, libQt53DRender.so, libQt5AccessibilitySupport.a, libQt5Bluetooth.so, libQt5Bodymovin.so, libQt5Bootstrap.a, libQt5Charts.so, libQt5Concurrent.so, libQt5Core.so, libQt5DataVisualization.so, libQt5DBus.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5DeviceDiscoverySupport.a, libQt5EdidSupport.a, libQt5EglFSDeviceIntegration.so, libQt5EglFsKmsSupport.so, libQt5EglSupport.a, libQt5EventDispatcherSupport.a, libQt5FbSupport.a, libQt5FontDatabaseSupport.a, libQt5Gamepad.so, libQt5GlxSupport.a, libQt5Gui.so,libQt5Help.so, libQt5InputSupport.a, libQt5KmsSupport.a, libQt5LinuxAccessibilitySupport.a, libQt5Location.so, libQt5Multimedia.so, libQt5MultimediaGstTools.so, libQt5MultimediaQuick.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5NetworkAuth.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PacketProtocol.a, libQt5PlatformCompositorSupport.a, libQt5Positioning.so, libQt5PositioningQuick.so, libQt5PrintSupport.so, libQt5Purchasing.so, libQt5Qml.so, libQt5QmlDebug.a, libQt5QmlDevTools.a, libQt5QmlModels.so, libQt5QmlWorkerScript.so, libQt5Quick.so, libQt5Quick3D.so, libQt5Quick3DAssetImport.so, libQt5Quick3DRender.so, libQt5Quick3DRuntimeRender.so, libQt5Quick3DUtils.so, libQt5QuickControls2.so, libQt5QuickParticles.so, libQt5QuickShapes.so, libQt5QuickTemplates2.so, libQt5QuickTest.so, libQt5QuickWidgets.so, libQt5RemoteObjects.so, libQt5Script.so, libQt5ScriptTools.so, libQt5Scxml.so, libQt5Sensors.so, libQt5SerialBus.so, libQt5SerialPort.so, libQt5ServiceSupport.a, libQt5Sql.so, libQt5Svg.so, libQt5Test.so, libQt5TextToSpeech.so, libQt5ThemeSupport.a, libQt5UiTools.a, libQt5VirtualKeyboard.so, libQt5WaylandClient.so, libQt5WaylandCompositor.so, libQt5WebChannel.so, libQt5WebSockets.so, libQt5WebView.so, libQt5Widgets.so, libQt5X11Extras.so, libQt5XcbQpa.so, libQt5XkbCommonSupport.a, libQt5Xml.so, libQt5XmlPatterns.so, and several plugins under /opt/qt5/{plugins,qml}
Installed Directories: /usr/include/qt5, /usr/lib/qt5, /usr/share/doc/qt5, and /usr/share/qt5 OR /opt/qt5 and /opt/qt-5.15.2

#### Short Descriptions

assistant | is a tool for presenting on-line documentation
balsam | is a tool to convert 3D scenes from various creation tools to QML format, for use by the new QtQuick 3D library
canbustil | is a tool to deal with arbitrary CAN bus frames. A Controller Area Network (CAN) is a vehicle bus standard designed to allow microcontrollers and devices to communicate with each other in applications without a host computer
designer | is a full-fledged GUI builder. It includes powerful features such as preview mode, automatic widget layout, support for custom widgets, and an advanced property editor
fixqt4headers.pl | is a script to replace all Qt 4 style includes with Qt 5 includes
lconvert | is part of Qt5's Linguist tool chain. It can be used as a standalone tool to convert and filter translation data files
linguist | provides support for translating applications into local languages
lrelease | is a simple command line tool. It reads XML-based translation file in TS format and produces message files used by the application
lrelease-pro | extracts project information from qmake projects and passes it to lrelease
lupdate | finds the translatable strings in the specified source, header and Qt Designer interface files, and stores the extracted messages in translation files to be processed by lrelease
lupdate-pro | reads a Qt project file, an passes the collected information to lupdate
meshdebug | displays information about qtquick-3d mesh files
moc | generates Qt meta object support code
pixeltool | is a desktop magnifier and as you move your mouse around the screen it will show the magnified contents in its window
qcollectiongenerator | processes and converts Qt help files
qdbuscpp2xml | takes a C++ source file and generates a D-Bus XML definition of the interface
qdbus | lists available services, object paths, methods, signals, and properties of objects on a bus
qdbusviewer | is a graphical D-Bus browser
qdbusxml2cpp | is a tool that can be used to parse interface descriptions and produce static code representing those interfaces,
qdistancefieldgenerator | allows a font cache to be pregenerated for Text.QtRendering to speed up an application's startup if the user interface has a lot of text, or multiple fonts, or a large amount of distinct characters, e.g. in CJK writing systems
qdoc | is a tool used by Qt Developers to generate documentation for software projects
qgltf | imports a a variety of 3D model formats and exports into fast-to-load, optimized glTF assets embedded into Qt resource files
qhelpgenerator | is a tool used to generate a Qt compressed help file
qlalr | is a tool used to generate code from grammar specifications
qmake | uses information stored in project files to determine what should go in the makefiles it generates
qml | executes a QML file
qmlcachegen | supports the creation of cache files at build time
qmleasing | is a tool used to define the easing curves using an interactive curve editor
qmlformat | formats QML files according to the QML coding conventions
qmlimportscanner | is a tool used to import QML files from a directory
qmllint | is a syntax checker for QML files
qmlmin | removes comments and layout characters from a QML file
qmlplugindump | is a tool to create a qmltypes file
qmlpreview | is a tool used to analyze QML applications
qmlprofiler | is a tool which watches QML and JavaScript files on disk and updates the application live with any changes
qmlscene | is a utility that loads and displays QML documents even before the application is complete
qmltestrunner | is a tool used to make tests
qscxml | converts an input.scxml file to a header and cpp file
qtattributionsscanner | processes qt_attribution.json files in Qt sources
qtdiag | is a tool for reporting diagnostic information about Qt and its environment
qtpaths | is a tool to query Qt path information
qtplugininfo | dumps meta-data about Qt plugins in JSON format
qtwaylandscanner | converts Wayland specfiles to C++ headers and code needed for QtWayland
qvkgen | converts Vulkan specfiles to C++ headers and code
rcc | is a resource compiler used in conjunction with designer
repc | is the Replica Compiler, which generates QObject header files based on an API definition file
sdpscanner | performs a Session Description Protocol scan on a remote device, using the SDP server represented by the local Bluetooth device
syncqt.pl | is a script to create the forwarding headers in the include directories. It is an internal development tool
tracegen | is a trace generator for LTTng or ETW
uic | is a Qt user interface compiler
xmlpatterns | provides support for XPath, XQuery, XSLT, and XML Schema validation
xmlpatternsvalidator | is a tool used to validate XML documents

Last updated on

## QtWebEngine-5.15.6

### Introduction to QtWebEngine

QtWebEngine integrates chromium's web capabilities into Qt. It ships with its own copy of ninja which it uses for the build if it cannot find a system copy, and various copies of libraries from ffmpeg, icu, libvpx, and zlib (including libminizip) which have been forked by the chromium developers.

This package and browsers using it may be useful if you need to use a website designed for google chrome, or chromium, browsers.

### Warning

QtWebEngine uses a forked copy of chromium, and is therefore vulnerable to many issues found there. The Qt developers have always preferred to make releases at the same time as the rest of Qt (rather than adding emergency fixes), but with stable versions getting released after the current development version. Now that they are keen to move to Qt6, the 5.15.3 and later Qt-5.15 releases are initially only available to paying customers. QtWebEngine is something of an exception because of its LGPL licence, but getting the git sources (with the forked chromium submodule) to a position where they will successfully build on a current BLFS system can take a lot of effort and therefore updates to the book may be delayed.

It seems likely that future 5.15-series versions will also be released long after the chromium vulnerabilities are known, but fixes for QtWebEngine can be found in git and the editors take the view that known vulnerabilities in browsers should be fixed.

The tarball linked to below was created from the 5.15.6 git branch and the 87-branch of the chromium submodule (which is forked from chromium). See the GIT-VERSIONS file in the tarball (after applying any patches) for details of the latest commits.

This package is known to build and work properly using an LFS-11.0 platform.

### Warning

By default, ninja will use all online CPUs +2 (if at least 4 exist), even if they are not available to the current task because the build terminal has been restricted with 'taskset'. In BLFS, this package takes more time to build than than any other. In one example, the build of this package crashed at about the 90 percent point due to an out of memory problem on a system with 24 cores and 32 GB of memory.

To work around this, see the Command Explanations below.

### Note

Unusually, the shipped GN build system (used to create the Ninja files) requires a static `libstdc++.a` although the installed libraries correctly use the shared version. If that static library is not present, the build will fail quite quickly. Please note that if you try to build webengine as part of Qt and the static library is not available, that build will either complete without installing webengine, or else fail during the install (both variants were observed in 5.12.0).

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/qtwebengine/qtwebengine-5.15.6.tar.xz

- Download MD5 sum: af799617842cca0b765102c312fbdd46

- Download size: 306 MB

- Estimated disk space required: 5.1 GB (154 MB installed)

- Estimated build time: 97 SBU (typical, Using parallelism=4)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/qtwebengine-5.15.6-build_fixes-1.patch

#### qtwebengine Dependencies

##### Required

nodejs-14.17.5, NSS-3.69, Python-2.7.18, and Qt-5.15.2

##### Recommended

### Note

If these packages are not installed, the build process will compile and install its own (perhaps older) version, with the side effect of increasing build and installed disk space and build time.

either alsa-lib-1.2.5.1 or PulseAudio-15.0 (or both), FFmpeg-4.4, ICU-69.1 (built before libxml2-2.9.12) , libwebp-1.2.1, libxslt-1.1.34, and Opus-1.3.1

##### Optional

libevent-2.1.12, pipewire-0.3.34, Poppler-21.08.0, jsoncpp, libsrtp, snappy

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/qtwebengine

### Installation of qtwebengine

### Note

Unlike version 5.15.2, the chromium-derived build system now needs python to be available and to be python2. In BLFS-10.1 the creation of the python symlink was removed as a step towards eventually getting rid of python2 (other old packages which need python2 usually work by invoking python2). If you are still using an earlier version of BLFS where `/usr/bin/python` exists, you can skip the commands to create the symlink, and to later remove it.

First, as the `root` user, create the python symlink:

    ln -svf /usr/bin/python{2,}

Apply apply a patch to fix several issues that can prevent the build working:

    patch -Np1 -i ../qtwebengine-5.15.6-build_fixes-1.patch

Although the patch has ensured that git is not invoked during the build, the build system has labyrinthine rules of byzantine complexity, and in particular trying to build without two `.git` directories will lead to it eventually falling into unexpected and unbuildable code which references a private header that has not been created. Avoid this by creating the required directories:

    mkdir -pv .git src/3rdparty/chromium/.git

Because this version of qtwebengine is aimed at a later release than the current public releases, change it to build for qt-5.15.2 using a sed:

    sed -e '/^MODULE_VERSION/s/5.*/5.15.2/' -i .qmake.conf

Now, ensure that the local headers are available when not building as part of the complete Qt-5.15.2:

    find -type f -name "*.pr[io]" |
      xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'

Next, allow the pulseaudio library to be linked at build time, instead of run time. This also prevents an issue with newer pulseaudio:

    sed -e '/link_pulseaudio/s/false/true/' \
        -i src/3rdparty/chromium/media/media_options.gni

Finally, fix a change in the build system which allows its developers to pass e.g. -j20 to make (for quick tests of some areas) but breaks the build with LFS's use of the NINJAJOBS environment variable:

    sed -i 's/NINJAJOBS/NINJA_JOBS/' src/core/gn_run.pro

Install qtwebengine by running the following commands:

    mkdir build &&
    cd    build &&
    qmake .. -- -system-ffmpeg -webengine-icu &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

Remove references to the build directory from installed library dependency (prl) files by running the following commands as the `root` user:

    find $QT5DIR/ -name \*.prl \
       -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Finally, as the `root` user, remove the python symlink:

    rm -v /usr/bin/python

### Command Explanations

qmake: This will build the included copy of ninja if it is not already installed and use it to configure the build.

-- -system-ffmpeg -webengine-icu: If any options are passed to qmake they must come after '--' which must follow '..' that points to the main directory. The options here cause it to use system ffmpeg and system icu. If built as part of full Qt5, the system icu is automatically used (only) by Qt5Core if it is available, but unless this option is used webengine will always use its shipped copy of icu, adding time and space to the build.

`-webengine-jumbo-build 0`: If this is added to the qmake command it will cause the 'Jumbo Build Merge Limit' to be reported as 'no' instead of 8. That turns off the jumbo build. Some distros do that to get a smaller build on some architectures such as MIPS. On x86_64 it might save a little space in the build, but the build time will increase by a very large amount.

`NINJAJOBS=4 make`: If you patched system ninja in LFS to recognize the NINJAJOBS environment variable, this command will run system ninja with the specified number of jobs (i.e. 4). There are several reasons why you might want to use options like this this:

- Building on a subset of CPUs allows measuring the build time for a smaller number of processors, and/or running other CPU-intensive tasks at the same time. For an editor on a machine with a lot of CPUs, trying to measure the build time for a 4-CPU machine, `NINJAJOBS=4 make` will give a reasonable approximation (there is a short period where N+2 python2 and node jobs run).

- On a machine with only 4 CPUs online, the default of scheduling N+2 jobsi for qtwebengine is slower by between 3% and 7%, probably because of the size of the C++ files and their many includes and templates. Therefore, if in doubt set NINJAJOBS to the number of CPUs.

- Reducing the number of cores being used on long running, CPU intensive packages may alleviate heat problems.

- Reducing the number of cores will prevent potential out-of-memory problems on systems that do not have enough memory (or swap) when all cores are active. A suggested approach is to limit the number of cores to about one core for each 1.5 GB of combined RAM and swap space.

### Configuring QtWebEngine

#### Configuration Information

If you are upgrading from an older minor version of this application, for some webpages to load you may need to clear the browser caches, e.g. for falkon they will be found in `~/.cache/falkon/`. You will need to do this if the browser starts to render the page and then changes to a blank tab with a message that something went wrong, and a button to Retry. Even after removing the old caches, you may need to retry a few times for each affected tab.

If a browser using this package fails to run and when run from a term it reports 'Trace/breakpoint trap' that is probably a kernel configuration issue - there is no need to rebuild QtWebEngine, see the next section, recompile the kernel and reboot to the new kernel.

### Kernel Configuration

This package does not require any of the optional kernel namespace items, but if User namespace is enabled (as happens in some unit files, for hardening) PID namespace must also be enabled. In that case enable the following options in the kernel configuration and recompile the kernel if necessary:

    General setup --->
      -*- Namespaces support --->
        [ ]     User namespace                    [CONFIG_USER_NS]
        [*]     PID namespace                     [CONFIG_PID_NS]

### Contents

Installed Programs: qtwebengine_convert_dict and QtWebEngineProcess (in $QT5DIR/libexec)
Installed Libraries: libQt5Pdf.so, libQt5PdfWidgets.so, libQt5WebEngineCore.so, libQt5WebEngine.so, and libQt5WebEngineWidgets.so
Installed Directories: $QT5DIR/include/QtPdf, $QT5DIR/include/QtPdfWidgets, $QT5DIR/include/QtWebEngine, $QT5DIR/include/QtWebEngineCore, $QT5DIR/include/QtWebEngineWidgets, $QT5DIR/qml/QtWebEngine, and $QT5DIR/translations/qtwebengine_locales

#### Short Descriptions

qtwebengine_convert_dict | converts hunspell dictionaries (`.dic`) to chromium format (`.bdic`)
QtWebEngineProcess | is a libexec program which runs a zygote process (one that listens for spawn requests from a master process and will fork itself in response)
`libQtWebEngine.so` | provides QML types for rendering web content within a QML application
`libQtWebEngineCore.so` | provides public API shared by both QtWebEngine and QtWebEngineWidgets
`libQtWebEngineWidgets.so` | provides a web browser engine as well as C++ classes to render and interact with web content

Last updated on

## startup-notification-0.12

### Introduction to startup-notification

The startup-notification package contains `startup-notification` libraries. These are useful for building a consistent manner to notify the user through the cursor that the application is loading.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/startup-notification/releases/startup-notification-0.12.tar.gz

- Download MD5 sum: 2cd77326d4dcaed9a5a23a1232fb38e9

- Download size: 347 KB

- Estimated disk space required: 4 MB

- Estimated build time: less than 0.1 SBU

#### startup-notification Dependencies

##### Required

Xorg Libraries and xcb-util-0.4.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/startup-notification

### Installation of startup-notification

Install startup-notification 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 -m644 -D doc/startup-notification.txt \
        /usr/share/doc/startup-notification-0.12/startup-notification.txt

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libstartup-notification-1.so
Installed Directories: /usr/include/startup-notification-1.0 and /usr/share/doc/startup-notification-0.12

#### Short Descriptions

`libstartup-notification-1.so` | provides the functions to assist applications in communicating with the cursor system to provide feedback to the user that the application is loading

Last updated on

## Tepl-6.00.0

### Introduction to Tepl

The Tepl package contains a library that eases the development of GtkSourceView-based text editors and IDEs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/tepl/6.00/tepl-6.00.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/tepl/6.00/tepl-6.00.0.tar.xz

- Download MD5 sum: 08248e527cc87a4bf7300c04d1babcb9

- Download size: 140 KB

- Estimated disk space required: 7.5 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### Tepl Dependencies

##### Required

amtk-5.2.0, gtksourceview4-4.8.1, ICU-69.1, and uchardet-0.0.7

##### Optional

GTK-Doc-1.33.2 (for documentation) and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tepl

### Installation of Tepl

Install Tepl by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dgtk_doc=true`: Use this option if GTK-Doc is installed and you wish to build and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libtepl-6.so
Installed Directories: /usr/include/tepl-6 and /usr/share/gtk-doc/html/tepl-6.0

#### Short Descriptions

`libtepl-5.so` | contains convenience functions for GtkSourceView4-based programs

Last updated on

## WebKitGTK-2.32.3

### Introduction to WebKitGTK

The WebKitGTK package is a port of the portable web rendering engine WebKit to the GTK+ 3 and GTK+ 2 platforms.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://webkitgtk.org/releases/webkitgtk-2.32.3.tar.xz

- Download MD5 sum: f31b802de421865ea9f1391ec8190519

- Download size: 22 MB

- Estimated disk space required: 909 MB (127 MB installed)

- Estimated build time: 29 SBU (using parallelism=4, estimated 97 SBU using one core)

#### WebKitGTK Dependencies

##### Required

Cairo-1.17.4, CMake-3.21.2, gst-plugins-base-1.18.4, gst-plugins-bad-1.18.4, GTK+-3.24.30, ICU-69.1, libgudev-237, libsecret-0.20.4, libsoup-2.74.0, libtasn1-4.17.0, libwebp-1.2.1, Mesa-21.2.1, OpenJPEG-2.4.0, Ruby-3.0.2, SQLite-3.36.0, Which-2.21, and wpebackend-fdo-1.10.0

##### Recommended

enchant-2.3.1, GeoClue-2.5.7, gobject-introspection-1.68.0, hicolor-icon-theme-0.17, and libnotify-0.7.9

##### Optional

bubblewrap-0.5.0, GTK-Doc-1.33.2, GTK-4.4.0, HarfBuzz-2.9.0, Wayland-1.19.0, WOFF2-1.0.2, ccache, Hyphen, MathML, libmanette, and xdg-dbus-proxy

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/webkitgtk

### Installation of WebKitGTK

Install WebKitGTK by running the following commands:

    mkdir -vp build &&
    cd        build &&

    cmake -DCMAKE_BUILD_TYPE=Release  \
          -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_SKIP_RPATH=ON       \
          -DPORT=GTK                  \
          -DLIB_INSTALL_DIR=/usr/lib  \
          -DUSE_LIBHYPHEN=OFF         \
          -DENABLE_GAMEPAD=OFF        \
          -DENABLE_MINIBROWSER=ON     \
          -DUSE_WOFF2=OFF             \
          -DUSE_WPE_RENDERER=ON       \
          -DENABLE_BUBBLEWRAP_SANDBOX=OFF \
          -Wno-dev -G Ninja ..        &&
    ninja

This package does not have a working testsuite. However, there is a usable basic graphical web browser in the build directory, build/bin/MiniBrowser. If launching it fails, there is a problem with the build.

### Note

When installing, the Makefile does some additional compiling and linking. If you do not have Xorg in /usr, the LIBRARY_PATH and PKG_CONFIG_PATH variables need to be defined for the root user. If using sudo to assume root, use the -E option to pass your current environment variables for the install process.

Now, as the `root` user:

    ninja install &&

    install -vdm755 /usr/share/gtk-doc/html/webkit{2,dom}gtk-4.0 &&
    install -vm644  ../Documentation/webkit2gtk-4.0/html/*   \
                    /usr/share/gtk-doc/html/webkit2gtk-4.0       &&
    install -vm644  ../Documentation/webkitdomgtk-4.0/html/* \
                    /usr/share/gtk-doc/html/webkitdomgtk-4.0

### Command Explanations

`-DUSE_LIBHYPHEN=OFF`: This switch disables default automatic hyphenation implementation. You need to install Hyphen, if you wish to enable it (replacing OFF with ON or just removing the switch).

`-DENABLE_GAMEPAD=OFF`: This switch disables gamepad support. Remove this switch if you have libmanette installed and wish to enable it.

`-DENABLE_MINIBROWSER=ON`: This switch enables compiling and installing the MiniBrowser.

`-DUSE_WPE_RENDERER=ON`: This switch uses the WPE renderer, which is recommended by upstream.

`-DENABLE_BUBBLEWRAP_SANDBOX=OFF`: Remove this switch if the optional packages bubblewrap-0.5.0 and xdg-dbus-proxy are installed.

`-DUSE_LIBNOTIFY=OFF`: Use this switch if you do not have libnotify installed.

`-DUSE_SYSTEM_MALLOC=ON`: This switch enables building against the system installed malloc.

`-DENABLE_GEOLOCATION=OFF`: Use this switch if you don't want to install GeoClue-2.5.7.

`-DENABLE_GTKDOC=ON`: Use this switch if GTK-Doc-1.33.2 is installed and you wish to rebuild and install the API documentation.

`-DUSE_WOFF2=ON`: Use this switch if the optional package WOFF2-1.0.2 is installed. This adds additional support for fonts.

### Contents

Installed Program: WebKitWebDriver
Installed Libraries: libjavascriptcoregtk-4.0.so and libwebkit2gtk-4.0.so
Installed Directories: /usr/include/webkitgtk-4.0, /usr/lib{,exec}/webkit2gtk-4.0, and /usr/share/gtk-doc/html/webkit{2,dom}gtk-4.0

#### Short Descriptions

WebKitWebDriver | allows debugging and automation of web pages and browsers
`libjavascriptcoregtk-4.0.so` | contains core JavaScript API functions used by jsc and `libwebkit2gtk-4.0`
`libwebkit2gtk-4.0.so` | contains the WebKit2 API functions

Last updated on

## Chapter 26. Display Managers

Display Managers are graphical programs used for starting the graphical display (currently, the X server) and providing a login capability for a Window Manager or Desktop Environment.

There are many Display Managers available. Some of the more well known include: GDM, KDM (deprecated), LightDM, LXDM, Slim, and SDDM.

Among the Desktop Environments available for Linux you find: Enlightenment, GNOME, KDE, LXDE, LXQt, and XFce.

Choosing a Display Manager or Desktop Environment is highly subjective. The choice depends on the look and feel of the packages, the resources (memory and disk space) required, and the utilities included.

In this chapter, the installation instructions of some Display Managers are presented. Later in the book, you will find other ones, which are provided as part of some Desktop Environments.

## lightdm-1.30.0

### Introduction to Lightdm

The lightdm package contains a lightweight display manager based upon GTK.

This package is known to build and work properly using an LFS-11.0 platform.

#### Lightdm Package Information

- Download (HTTP): https://github.com/CanonicalLtd/lightdm/releases/download/1.30.0/lightdm-1.30.0.tar.xz

- Download MD5 sum: c566ea595f2b81e68684be9f8dbcbb42

- Download size: 500 KB

- Estimated disk space required: 21 MB

- Estimated build time: 0.2 SBU

#### Additional download

### Note

The greeter is a program to present a graphical login screen. There are several alternative greeters, but the gtk+ package is the reference implementation. For a list of other greeters, see https://en.wikipedia.org/wiki/LightDM.

- Download (HTTP): https://github.com/Xubuntu/lightdm-gtk-greeter/releases/download/lightdm-gtk-greeter-2.0.8/lightdm-gtk-greeter-2.0.8.tar.gz

- Download MD5 sum: 373c73c67367df511eb544e09a2da281

- Download size: 569.7 KB

- Estimated disk space required: 5.5 MB

- Estimated build time: less than 0.1 SBU

#### Lightdm Dependencies

##### Required

Exo-4.16.2 (for the greeter), libgcrypt-1.9.4, itstool-2.0.6, Linux-PAM-1.5.1, and PCRE-8.45

##### Recommended

gobject-introspection-1.68.0, libxklavier-5.4, and Vala-0.52.5

##### Optional

AccountsService-0.6.55 (run time), at-spi2-core-2.40.3, GTK-Doc-1.33.2, Qt-5.15.2, libido, and libindicator

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lightdm

### Installation of Lightdm

First, create a dedicated user and group to take control of the lightdm daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 65 lightdm       &&
    useradd  -c "Lightdm Daemon" \
             -d /var/lib/lightdm \
             -u 65 -g lightdm    \
             -s /bin/false lightdm

Install lightdm by running the following commands:

    ./configure                          \
           --prefix=/usr                 \
           --libexecdir=/usr/lib/lightdm \
           --localstatedir=/var          \
           --sbindir=/usr/bin            \
           --sysconfdir=/etc             \
           --disable-static              \
           --disable-tests               \
           --with-greeter-user=lightdm   \
           --with-greeter-session=lightdm-gtk-greeter \
           --docdir=/usr/share/doc/lightdm-1.30.0 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install                                                  &&
    cp tests/src/lightdm-session /usr/bin                         &&
    sed -i '1 s/sh/bash --login/' /usr/bin/lightdm-session        &&
    rm -rf /etc/init                                              &&
    install -v -dm755 -o lightdm -g lightdm /var/lib/lightdm      &&
    install -v -dm755 -o lightdm -g lightdm /var/lib/lightdm-data &&
    install -v -dm755 -o lightdm -g lightdm /var/cache/lightdm    &&
    install -v -dm770 -o lightdm -g lightdm /var/log/lightdm

Now build the greeter:

    tar -xf ../lightdm-gtk-greeter-2.0.8.tar.gz &&
    cd lightdm-gtk-greeter-2.0.8 &&

    ./configure                      \
       --prefix=/usr                 \
       --libexecdir=/usr/lib/lightdm \
       --sbindir=/usr/bin            \
       --sysconfdir=/etc             \
       --with-libxklavier            \
       --enable-kill-on-sigterm      \
       --disable-libido              \
       --disable-libindicator        \
       --disable-static              \
       --disable-maintainer-mode     \
       --docdir=/usr/share/doc/lightdm-gtk-greeter-2.0.8 &&

    make

Now, as the `root` user:

    make install

### Note

If you installed Xorg in /opt, you will need to create a symbolic link so lightdm can find the Xorg server. As the `root` user:

    ln -sf /opt/xorg/bin/Xorg /usr/bin/X

### Command Explanations

sed ... /usr/bin/lightdm-session: This command ensures that the initial login via the greeter sources /etc/profile and ~/.bash_profile. Without this, commands that depend on different environment variables may not work as expected.

### Configuring lightdm

#### Config Files

/etc/lightdm/{lightdm,users,keys}.conf

#### Systemd Unit

Install and enable the systemd unit. From the blfs-systemd-units-20210819 package:

    make install-lightdm &&
    systemctl enable lightdm

#### Available Sessions

The greeter offers a list of available sessions, depending on the Window Managers and Desktop Environments installed. The list includes sessions which have a corresponding `.desktop` file installed under `/usr/share/xsessions`. Most of the Window Managers and Desktop Environments automatically provide those files, but if necessary, you may include a custom one.

### Contents

Installed Programs: dm-tool, lightdm, and lightdm-gtk-greeter
Installed Libraries: liblightdm-gobject-1.so
Installed Directories: /etc/lightdm, /etc/apparmor.d, /usr/lib/lightdm, /usr/include/lightdm-gobject-1, /usr/share/help/C/lightdm /usr/share/gtk-doc/html/lightdm-gobject-1, /usr/share/doc/lightdm-gtk-greeter-2.0.8, /var/lib/lightdm, /var/lib/lightdm-data, /var/cache/lightdm, and /var/log/lightdm

#### Short Descriptions

lightdm | is a display and login manager
lightdm-gtk-greeter | is an auxiliary process that displays the greeter, a graphical user interface that performs user authentication and initiates the selected window manager or display environment

Last updated on

## lxdm-0.5.3

### Introduction to LXDM

The LXDM is a lightweight Display Manager for the LXDE desktop. It can also be used as an alternative to other Display Managers such as GNOME's GDM or LightDM.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxdm/lxdm-0.5.3.tar.xz

- Download MD5 sum: 061caae432634e6db38bbdc84bc6ffa0

- Download size: 236 KB

- Estimated disk space required: 5.6 MB

- Estimated build time: less than 0.1 SBU

#### LXDM Dependencies

##### Required

GTK+-2.24.33, ISO Codes-4.7.0, and librsvg-2.50.7 (runtime, for default theme background)

##### Recommended

LXSession-0.5.5 (for lxpolkit) or polkit-gnome-0.105

##### Optional

GTK+-3.24.30

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxdm

### Installation of LXDM

First, some fixes.

    cat > pam/lxdm << "EOF"
    # Begin /etc/pam.d/lxdm

    auth     requisite      pam_nologin.so
    auth     required       pam_env.so
    auth     required       pam_succeed_if.so uid >= 1000 quiet
    auth     include        system-auth

    account  include        system-account

    password include        system-password

    session  required       pam_limits.so
    session  include        system-session

    # End /etc/pam.d/lxdm
    EOF

    sed -i 's:sysconfig/i18n:profile.d/i18n.sh:g' data/lxdm.in &&
    sed -i 's:/etc/xprofile:/etc/profile:g' data/Xsession &&
    sed -e 's/^bg/#&/'        \
        -e '/reset=1/ s/# //' \
        -e 's/logou$/logout/' \
        -e "/arg=/a arg=$XORG_PREFIX/bin/X" \
        -i data/lxdm.conf.in

Install LXDM by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --with-pam        \
                --with-systemdsystemunitdir=/lib/systemd/system &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

cat > pam/lxdm << "EOF" ...: Replace default `/etc/pam.d/lxdm` by another one appropriate for BLFS.

sed -i ... data/lxdm.conf.in: Modifications in the default configuration: (1) fix the background to the default one; (2) restart X when session is close; (3) typo; and (4) include `XORG_PREFIX`, which may be different from `/usr`.

sed -i ... data/Xsession: Source `/etc/profile`, instead of other file, according to BLFS standard.

sed -i ... data/lxdm.in: Fix greeter's locale for BLFS specification.

`--with-pam`: This parameter enables use of pam authentication.

### Configuring LXDM

#### Config Files

`/etc/lxdm/lxdm.conf`

#### Systemd Unit

To start LXDM at boot execute the following command as the `root` user:

    systemctl enable lxdm

#### Configuration Information

The LXDM daemon configuration file (`/etc/lxdm/lxdm.conf`) specifies options that include numlock on/off, background image (bg), session, etc. You can set a default session by uncommenting the line: session=/usr/bin/startlxde and replacing startlxde with your session of choice. For GNOME session=/usr/bin/gnome-session. For OPENBOX session=/usr/bin/openbox-session and for XFCE session=/usr/bin/startxfce4.

It is also possible to set the preferred session on a per-user basis by editing the ~/.dmrc file for each user and adding:

    [Desktop]
            Session=xfce

You can replace the default dummy face in the greeting screen by another image representing your user. For that, copy or symlink the desired image to your home directory with the name `.face`.

### Contents

Installed Programs: lxdm, lxdm-binary and lxdm-config
Installed Libraries: None
Installed Directories: /etc/lxdm and /usr/share/lxdm

#### Short Descriptions

lxdm | is a script to execute lxdm-binary
lxdm-binary | is the actual Display Manager; needs to be executed with option `-d` to daemonize
lxdm-config | is a graphical customizing program

Last updated on

## Chapter 27. Window Managers

Window Managers and Desktop Environments are the primary user interfaces into the X Window System. A window manager is a program that controls the appearance of windows and provides the means by which the user can interact with them. A Desktop Environment provides a more complete interface to the operating system, and provides a range of integrated utilities and applications.

There are many Window Managers available. Some of the more well known ones include fvwm2, Window Maker, AfterStep, Enlightenment, Sawfish, and Blackbox.

The Desktop Environments available for Linux are GNOME, KDE, and XFce.

Choosing a Window Manager or Desktop Environment is highly subjective. The choice depends on the look and feel of the packages, the resources (RAM, disk space) required, and the utilities included. One web site that provides a very good summary of what is available, screenshots, and their respective features is Window Managers for X .

In this chapter, the installation instructions of several Window Managers and one lightweight Desktop Environment are presented. Later in the book, both KDE and GNOME have their own sections.

## Fluxbox-1.3.7

### Introduction to Fluxbox

The Fluxbox package contains a window manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/fluxbox/fluxbox-1.3.7.tar.xz

- Download MD5 sum: b44afd10ee1e64624c23115aa51dcd55

- Download size: 772 KB

- Estimated disk space required: 101 MB

- Estimated build time: 0.9 SBU

#### Fluxbox Dependencies

##### Required

X Window System

##### Optional

dbus-1.12.20 (runtime), FriBidi-1.0.9, and imlib2-1.7.2 (if you wish to use other image formats in addition to XPM)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fluxbox

### Installation of Fluxbox

First, fix a build failure when building with gcc-11.1:

    sed -i '/text_prop.value > 0/s/>/!=/' util/fluxbox-remote.cc

Install Fluxbox by running the following commands:

    ./configure --prefix=/usr &&
    make

This package does not have a working testsuite.

Now, as the `root` user:

    make install

### Configuring Fluxbox

#### Config Files

`~/.fluxbox/init`, `~/.fluxbox/keys`, and `~/.fluxbox/menu`

#### Configuration Information

If Fluxbox is the only Window Manager you want to use, you can start it with an `.xinitrc` file in your home folder. Be sure to backup your current `.xinitrc` before proceeding.

    echo startfluxbox > ~/.xinitrc

Or alternatively, if you use a login manager like GDM-40.1 or lightdm-1.30.0, and would like to be able to choose Fluxbox at the login prompt, create a `fluxbox.desktop` file. As `root`:

    mkdir -pv /usr/share/xsessions &&
    cat > /usr/share/xsessions/fluxbox.desktop << "EOF"
    [Desktop Entry]
    Encoding=UTF-8
    Name=Fluxbox
    Comment=This session logs you into Fluxbox
    Exec=startfluxbox
    Type=Application
    EOF

If you didn't install GDM-40.1 or lightdm-1.30.0 in `/usr`, then change that command to fit the prefix you chose.

Now create the Fluxbox configuration files:

    mkdir -v ~/.fluxbox &&
    cp -v /usr/share/fluxbox/init ~/.fluxbox/init &&
    cp -v /usr/share/fluxbox/keys ~/.fluxbox/keys

To generate the application menu, first you may wish to run fluxbox-generate_menu -h, in order to choose any `<user_options>`, then issue:

    cd ~/.fluxbox &&
    fluxbox-generate_menu <user_options>

Alternately, copy a pregenerated menu:

    cp -v /usr/share/fluxbox/menu ~/.fluxbox/menu

Menu items are added by editing `~/.fluxbox/menu`. The syntax is explained on the fluxbox man page.

If you want to use an image as your desktop background, copy the theme you like into `~/.fluxbox`. Then add a line to make it use the correct image. In the following command, change `<theme>` for the name of the theme you want and change `</path/to/nice/image.ext>` to point to the actual image you want to use, where `ext` must be “xpm”, if imlib2-1.7.2 is not installed to allow other image formats.

    cp -r /usr/share/fluxbox/styles/<theme> ~/.fluxbox/theme &&

    sed -i 's,\(session.styleFile:\).*,\1 ~/.fluxbox/theme,' ~/.fluxbox/init &&

    [ -f ~/.fluxbox/theme ] &&
    echo "background.pixmap: </path/to/nice/image.ext>" >> ~/.fluxbox/theme ||
    [ -d ~/.fluxbox/theme ] &&
    echo "background.pixmap: </path/to/nice/image.ext>" >> ~/.fluxbox/theme/theme.cfg

In some locales the font specified in the theme may not contain the needed characters. This results in menus with blank items. You can fix this by editing `~/.fluxbox/theme` with a text editor and altering it so that it names a suitable font.

### Contents

Installed Programs: fluxbox, fbsetbg, fbsetroot, fluxbox-generate_menu, startfluxbox, fbrun, fluxbox-remote, and fluxbox-update_configs
Installed Libraries: None
Installed Directories: /usr/share/fluxbox and ~/.fluxbox

#### Short Descriptions

fluxbox | is a window manager for X11 based on Blackbox 0.61.0
fbsetbg | is a utility that sets the background image. It requires one of the following at runtime: Esetroot, wmsetbg, feh, hsetroot, chbg, display, qiv, xv, xsri, xli, or xsetbg. It also requires which if Esetroot is found
fbsetroot | is a utility to change root window appearance based on the Blackbox application bsetroot
fluxbox-generate_menu | is a utility that generates a menu by scanning your `PATH`
startfluxbox | is a session startup script that allows for command executions prior to fluxbox starting
fbrun | displays a run dialog window
fluxbox-remote | provides command line access to key commands for Fluxbox
fluxbox-update_configs | use to manage config files (reload, update, test)

Last updated on

## IceWM-2.7.0

### Introduction to IceWM

IceWM is a window manager with the goals of speed, simplicity, and not getting in the user's way.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/ice-wm/icewm/archive/2.7.0/icewm-2.7.0.tar.gz

- Download MD5 sum: 4114f69e87441e81427ab1dea169acd0

- Download size: 2.2 MB

- Estimated disk space required: 44 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### IceWM Dependencies

##### Required

CMake-3.21.2, X Window System, and gdk-pixbuf-xlib-2.40.2

##### Optional

asciidoc-9.1.0 (for regenerating the HTML documentation), FriBidi-1.0.9 (for languages written right to left), imlib2-1.7.2, librsvg-2.50.7, libao-1.2.0, libsndfile-1.0.31, and alsa-lib-1.2.5.1 (for the experimental icesound program)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/icewm

### Installation of IceWM

Install IceWM by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -DCFGDIR=/etc               \
          -DENABLE_LTO=ON             \
          -DCONFIG_GDK_PIXBUF_XLIB=ON \
          -DCONFIG_IMLIB2=OFF         \
          -DDOCDIR=/usr/share/doc/icewm-2.7.0  \
          .. &&
    make

This package does not have a working testsuite.

Now, as the `root` user:

    make install

### Command Explanations

`-DENABLE_LTO=ON`: This option enables Link Time Optimization and is required for this package.

### Configuring IceWM

#### Config Files

`~/.icewm/keys`, `~/.icewm/menu`, and `~/.icewm/preferences`, and `~/.icewm/toolbar`, and `~/.icewm/winoptions`. The default versions are installed in `/usr/share/icewm/` and will be used if you have not copied them to `~/.icewm`.

#### Configuration Information

If IceWM is the only Window Manager you want to use, you can start it with an `.xinitrc` file in your home folder. Be sure to backup your current `.xinitrc` before proceeding.

    echo icewm-session > ~/.xinitrc

Now create the IceWM configuration files:

    mkdir -pv ~/.icewm                                      &&
    cp -v /usr/share/icewm/keys ~/.icewm/keys               &&
    cp -v /usr/share/icewm/menu ~/.icewm/menu               &&
    cp -v /usr/share/icewm/preferences ~/.icewm/preferences &&
    cp -v /usr/share/icewm/toolbar ~/.icewm/toolbar         &&
    cp -v /usr/share/icewm/winoptions ~/.icewm/winoptions

You can now edit these files to meet your requirements. In particular, review the `preferences` file. You can use Logout -> Restart-IceWM on the main menu to load your changed preferences, but changes to the background only take effect when IceWM is started.

At this point you can either modify the traditional menu files to suit your requirements, or use the newer icewm-menu-fdo described later.

The syntax of the menus is explained in the help files, which you can access by running help from the menu, but some of the detail is out of date and the default selections in the menus (a few old applications on the main menu, everything else on the Programs menu) will benefit from being updated to meet your needs. The following examples are provided to encourage you to think about how you wish to organise your menus. Please note the following:

- If a program listed in the menu has not been installed, it will not appear when the menu is displayed. Similarly, if the program exists but the specified icon does not, no icon will be displayed in the menu.

- The icons can be either `.xpm` or `.png` files, and there is no need to specify the extension. If the icon is located in the "library" (`/usr/share/icewm/icons`) there is no need to specifiy the path.

- Most programs are in sub-menus, and the main menu will always append entries for `windows, help, settings, logout` at the bottom.

- An icon for firefox was copied to the library directory and given a meaningful name. The icon for xine is `xine.xpm` which was installed to a pixmap directory.

- The default toolbar is not altered.

If you wish to use this traditional method, there are more examples in previous releases of this book (e.g. BLFS-7.8).

Alternatively, you can create a menu which conforms to the FDO Desktop Menu Specifications, where programs can be found because they have a .desktop file in the XDG_DATA_HOME or XDG_DATA_DIR directories. Unlike most windowmanagers, icewm does not search for programs when the menu is invoked, so if you take this route you will need to rerun the following command after installing or removing programs:

    icewm-menu-fdo >~/.icewm/menu

If you wish to put icons on your desktop, you will need to install a program such as Rox-Filer-2.11 which provides a pinboard. If you do that you will no longer be able to access the menu by right-clicking on the desktop, you will have to use the IceWM button. To ensure that the rox pinboard is running, the following commands will put it in the startup file:

    cat > ~/.icewm/startup << "EOF"
    rox -p Default &
    EOF &&
    chmod +x ~/.icewm/startup

### Tip

There are a number of keyboard shortcuts in IceWM:

- Ctrl + Alt + F`N` : go to `tty`N``.

- Ctrl + Alt + `N` : go to desktop number `N`

- Ctrl + Alt + Space : open a box on the taskbar where you can key in the name of an application and run it.

### Contents

Installed Programs: icehelp, icesh, icesound, icewm, icewm-menu-fdo, icewm-menu-xrandr, icewm-session, icewm-set-gnomewm, icewmbg, and icewmhint
Installed Libraries: None
Installed Directories: /usr/share/doc/icewm-2.7.0, /usr/share/icewm and ~/.icewm

#### Short Descriptions

icehelp | is used to display the html manual
icesh | is a command-line window manager which can be used in `~/.icewm/startup`
icesound | plays audio files on GUI events raised by IceWM
icewm | is the window manager
icewm-menu-fdo | can create a file in a format suitable for an IceWM menu, which lists those programs currently installed in a layout conforming to the FDO Desktop Menu Specifications
icewm-menu-xrandr | is a helper program used to manage multi-screen configurations
icewm-session | runs icewmbg, icewm, icewmtray, startup, shutdown (i.e. startup and shutdown scripts are run if installed)
icewm-set-gnomewm | is a script to set the GNOME window manager to icewm using gconftool
icewmbg | is used to set the background, according to the various `DesktopBackground` settings in the preferences
icewmhint | is used internally
icewmtray | provides the tray

Last updated on

## openbox-3.6.1

### Introduction to openbox

Openbox is a highly configurable desktop window manager with extensive standards support. It allows you to control almost every aspect of how you interact with your desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://openbox.org/dist/openbox/openbox-3.6.1.tar.gz

- Download MD5 sum: b72794996c6a3ad94634727b95f9d204

- Download size: 944 KB

- Estimated disk space required: 21 MB

- Estimated build time: 0.3 SBU

#### Openbox Dependencies

##### Required

X Window System and Pango-1.48.9 (compiled with support for libXft)

##### Optional

dbus-1.12.20 (runtime), imlib2-1.7.2 (to enable icons in the right click menu), ImageMagick-7.1.0-4 (to show desktop backgrounds as seen in the Configuration Information section below), PyXDG-0.27, startup-notification-0.12, and librsvg-2.50.7

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/openbox

### Installation of Openbox

### Note

If XORG_PREFIX is not `/usr`, tell gcc about it:

    export LIBRARY_PATH=$XORG_PREFIX/lib

If you only installed the Python 3 PyXDG module convert one of the scripts to Python 3:

    2to3-3.9 -w data/autostart/openbox-xdg-autostart &&
    sed 's/python/python3/' -i data/autostart/openbox-xdg-autostart

Install Openbox by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  \
                --docdir=/usr/share/doc/openbox-3.6.1 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--sysconfdir=/etc`: This option puts Openbox's configuration files in /etc/xdg/openbox instead of /usr/etc/xdg/openbox.

`--docdir=/usr/share/doc/openbox-3.6.1`: this puts a few files in a versioned directory in `/usr/share/doc`.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Configuring Openbox

#### Config Files

`/etc/xdg/openbox/autostart`, `/etc/xdg/openbox/menu.xml`, `/etc/xdg/openbox/rc.xml`, `~/.config/openbox/autostart`, `~/.config/openbox/menu.xml` and `~/.config/openbox/rc.xml`

#### Configuration Information

Openbox's right click menu can be used to launch programs. The menu itself is configured with 2 files, `/etc/xdg/openbox/menu.xml` and `~/.config/openbox/menu.xml`. To make changes to the menu, copy /etc/xdg/openbox/menu.xml to ~/.config/openbox/menu.xml and edit it:

    cp -rf /etc/xdg/openbox ~/.config

`~/.config/openbox/menu.xml` can be edited with a text editor or you can install Obmenu (requires pyxml and PyGTK-2.24.0).

To have icons in your right click menu requires installing imlib2-1.7.2 before you install Openbox. To set an icon for an entry in the menu edit `~/.config/openbox/menu.xml` and add an icon to the <item> tag like this:

                    <item label="Mplayer" icon="/usr/share/pixmaps/mplayer.png">

Many other aspects of Openbox's behaviour are configured with `~/.config/openbox/rc.xml` such as what keybindings are used to launch programs or which mouse button launches the main menu.

Details of the theme that Openbox applies to window decorations are configured in `~/.config/openbox/rc.xml`. You can get a list of the available themes with the command:

    ls -d /usr/share/themes/*/openbox-3 | sed 's#.*es/##;s#/o.*##'

#### Starting Openbox

To automatically start openbox when you start Xorg:

    echo openbox > ~/.xinitrc

If you want to set a background image to your desktop you can use display and launch it from ~/.xinitrc just before openbox:

    cat > ~/.xinitrc << "EOF"
    display -backdrop -window root /path/to/beautiful/picture.jpeg
    exec openbox
    EOF

Or if you like a bit of variety, put a selection of images in a folder (in this example, the directory ~/.config/backgrounds) and choose one at random each time you xinit:

    cat > ~/.xinitrc << "EOF"
    # make an array which lists the pictures:
    picture_list=(~/.config/backgrounds/*)
    # create a random integer between 0 and the number of pictures:
    random_number=$(( ${RANDOM} % ${#picture_list[@]} ))
    # display the chosen picture:
    display -backdrop -window root "${picture_list[${random_number}]}"
    exec openbox
    EOF

If you like to have the numlock key set whan you start Xorg, install Numlockx and add that to your xinitrc. Another useful application is dbus-1.12.20:

    cat > ~/.xinitrc << "EOF"
    . /etc/profile
    picture_list=(~/.config/backgrounds/*)
    random_number=$(( ${RANDOM} % ${#picture_list[*]} ))
    display -backdrop -window root "${picture_list[${random_number}]}"
    numlockx
    eval $(dbus-launch --auto-syntax --exit-with-session)
    lxpanel &
    exec openbox
    EOF

### Contents

Installed Programs: gdm-control, gnome-panel-control, obxprop, openbox, openbox-gnome-session, openbox-kde-session and openbox-session
Installed Libraries: libobrender.so and libobt.so
Installed Directories: /etc/xdg/openbox, /usr/include/openbox, /usr/share/doc/openbox-3.6.1 and /usr/share/themes.

#### Short Descriptions

gdm-control | is a command line tool to send signals to GDM
gnome-panel-control | is a command line utility to invoke the Gnome Panel run dialog/menu
obxprop | is a tool for displaying the properties on an x window. It has a similar functionality to xprop, but allows you to see UTF-8 strings as text
openbox | is a standards compliant, highly configurable, window manager
openbox-gnome-session | is a script to launch an Gnome session with Openbox as your window manager from your `~/.xinitrc`
openbox-kde-session | is a script to launch an KDE session with Openbox as your window manager from your `~/.xinitrc`
openbox-session | is a script to launch an Openbox session from your `~/.xinitrc`
`libobrender.so` | contains the functions used by Openbox for theme rendering
`libobt.so` | is the Openbox toolkit library

Last updated on

## sawfish-1.12.0

### Introduction to sawfish

The sawfish package contains a window manager. This is useful for organizing and displaying windows where all window decorations are configurable and all user-interface policy is controlled through the extension language.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.tuxfamily.org/sawfish/sawfish_1.12.0.tar.xz

- Download MD5 sum: 074446085b2518a07cf0e0c8c8b6df41

- Download size: 2.7 MB

- Estimated disk space required: 53 MB

- Estimated build time: 0.4 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/sawfish-1.12.0-gcc10_fixes-1.patch

#### sawfish Dependencies

##### Required

gdk-pixbuf-xlib-2.40.2, rep-gtk-0.90.8.3, and Which-2.21

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sawfish

### Installation of sawfish

First, adapt sawfish to build with GCC-10:

    patch -Np1 -i ../sawfish-1.12.0-gcc10_fixes-1.patch

Install sawfish by running the following commands:

    ./configure --prefix=/usr --with-pango  &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Configuring sawfish

#### Configuration Information

Be sure to backup your current `.xinitrc` before proceeding.

    cat >> ~/.xinitrc << "EOF"
    exec sawfish
    EOF

Optionally, you can use a Display Manager, such as lxdm-0.5.3.

From the developers: “The default menu binding is somewhat obscure; you must middle-click on the background to bring up the menus. (If you have a two-button mouse, try clicking both buttons simultaneously)”. You can find this at sawfish's FAQ.

### Contents

Installed Programs: sawfish, sawfish-about, sawfish-client, sawfish-config, sawfish-kde4-session, sawfish-kde5-session, sawfish-lumina-session, sawfish-mate-session, and sawfish-xfce-session
Installed Libraries: Several internal modules under /usr/lib/sawfish tree
Installed Directory: /usr/include/sawfish, /usr/lib/sawfish, /usr/lib/rep/sawfish, and /usr/share/sawfish

#### Short Descriptions

sawfish | is the extensible window manager using a Lisp-based scripting language
sawfish-about | is the sawfish about window
sawfish-client | allows you to connect to a window manager process and evaluate arbitrary Lisp forms
sawfish-config | is the sawfish configuration manager
sawfish-kde4-session | is a script to run KDE4 using sawfish
sawfish-kde5-session | is a script to run Plasma 5 using sawfish
sawfish-mate-session | is a script to run mate using sawfish
sawfish-lumina-session | is a script to run Lumina using sawfish
sawfish-xfce-session | is a script to run xfce using sawfish

Last updated on

## Chapter 28. Icons

Window Managers and Desktop Environments can use icons from different sources. Generally icons are installed in `/usr/share/icons` and are independent of distribution.

## adwaita-icon-theme-40.1.1

### Introduction to Adwaita Icon Theme

The Adwaita Icon Theme package contains an icon theme for Gtk+ 3 applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/adwaita-icon-theme/40/adwaita-icon-theme-40.1.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/adwaita-icon-theme/40/adwaita-icon-theme-40.1.1.tar.xz

- Download MD5 sum: 6f1248c72896ac9364a408cfa7261370

- Download size: 16 MB

- Estimated disk space required: 91 MB

- Estimated build time: 0.5 SBU (Using parallelism=4)

#### Adwaita Icon Theme Dependencies

##### Optional

git-2.33.0, GTK+-2.24.33 or GTK+-3.24.30 (if present, librsvg-2.50.7 is also required, and gtk-update-icon-cache and gtk-encode-symbolic-svg are run after installing), Inkscape-1.1 and Icon Tools

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/adwaita-icon-theme

### Installation of Adwaita Icon Theme

Install Adwaita Icon Theme 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

### Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/share/icons/Adwaita

Last updated on

## breeze-icons-5.85.0

### Introduction to Breeze Icons

The Breeze Icons package contains the default icons for KDE Plasma 5 applications, but it can be used for other window environments.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/frameworks/5.85/breeze-icons-5.85.0.tar.xz

- Download MD5 sum: 42665314255bdf88736973c28c8c0a65

- Download size: 2.0 MB

- Estimated disk space required: 300 MB

- Estimated build time: 0.1 SBU

#### Breeze Icons Dependencies

##### Required

extra-cmake-modules-5.85.0 and Qt-5.15.2

##### Optional

KDE Frameworks-5.85.0, libxml2-2.9.12, and lxml-4.6.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/breeze-icons

### Installation of Breeze Icons

Install Breeze Icons by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DBUILD_TESTING=OFF         \
          -Wno-dev ..

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DBUILD_TESTING=OFF`: This parameter disables building the testing framework, which requires some modules from KDE Frameworks-5.85.0.

### Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/share/icons/breeze{,-dark}

Last updated on

## gnome-icon-theme-3.12.0

### Introduction to GNOME Icon Theme

The GNOME Icon Theme package contains an assortment of non-scalable icons of different sizes and themes.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-icon-theme/3.12/gnome-icon-theme-3.12.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-icon-theme/3.12/gnome-icon-theme-3.12.0.tar.xz

- Download MD5 sum: f14bed7f804e843189ffa7021141addd

- Download size: 17 MB

- Estimated disk space required: 85 MB

- Estimated build time: 0.5 SBU

#### GNOME Icon Theme Dependencies

##### Required

GTK+-3.24.30 or GTK+-2.24.33, hicolor-icon-theme-0.17, and icon-naming-utils-0.8.90

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme

### Installation of GNOME Icon Theme

Install GNOME Icon Theme 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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/gnome

Last updated on

## gnome-icon-theme-extras-3.12.0

### Introduction to GNOME Icon Theme Extras

The GNOME Icon Theme Extras package contains extra icons for the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-icon-theme-extras/3.12/gnome-icon-theme-extras-3.12.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-icon-theme-extras/3.12/gnome-icon-theme-extras-3.12.0.tar.xz

- Download MD5 sum: 91f8f7e35a3d8d926716d88b8b1e9a29

- Download size: 1.7 MB

- Estimated disk space required: 12 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Icon Theme Extras Dependencies

##### Required

gnome-icon-theme-3.12.0

##### Optional

git-2.33.0 and Inkscape-1.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme-extras

### Installation of GNOME Icon Theme Extras

Install GNOME Icon Theme Extras 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

Last updated on

## gnome-icon-theme-symbolic-3.12.0

### Introduction to GNOME Icon Theme Symbolic

The GNOME Icon Theme Symbolic package contains symbolic icons for the default GNOME icon theme.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-icon-theme-symbolic/3.12/gnome-icon-theme-symbolic-3.12.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-icon-theme-symbolic/3.12/gnome-icon-theme-symbolic-3.12.0.tar.xz

- Download MD5 sum: 3c9c0e6b9fa04b3cbbb84da825a26fd9

- Download size: 228 KB

- Estimated disk space required: 6.8 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Icon Theme Symbolic Dependencies

##### Required

gnome-icon-theme-3.12.0

##### Optional

git-2.33.0 and Inkscape-1.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme-symbolic

### Installation of GNOME Icon Theme Symbolic

Install GNOME Icon Theme Symbolic 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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/icons/gnome/scalable

Last updated on

## gnome-themes-extra-3.28

### Introduction to GNOME Themes Extra

The GNOME Themes Extra package, formerly known as GNOME Themes Standard, contains various components of the default GNOME theme.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-themes-extra/3.28/gnome-themes-extra-3.28.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-themes-extra/3.28/gnome-themes-extra-3.28.tar.xz

- Download MD5 sum: f9f2c6c521948da427f702372e16f826

- Download size: 2.8 MB

- Estimated disk space required: 40 MB

- Estimated build time: 0.3 SBU

#### GNOME Themes Extra Dependencies

##### Required

GTK+-2.24.33 or GTK+-3.24.30 with librsvg-2.50.7 or both

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-themes-extra

### Installation of GNOME Themes Extra

Install GNOME Themes Extra 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

### Command Explanations

`--disable-gtk2-engine`: This switch disables the GTK+-2 theming engine.

`--disable-gtk3-engine`: This switch disables the GTK+-3 theming engine.

### Contents

Installed Programs: None
Installed Library: libadwaita.so
Installed Directories: /usr/lib/gtk-2.0/2.10.0/engines, /usr/share/icons/HighContrast, /usr/share/themes/Adwaita, /usr/share/themes/Adwaita-dark, and /usr/share/themes/HighContrast

#### Short Descriptions

`libadwaita.so` | is the Adwaita GTK+-2 engine theme

Last updated on

## hicolor-icon-theme-0.17

### Introduction to hicolor-icon-theme

The hicolor-icon-theme package contains a default fallback theme for implementations of the icon theme specification.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://icon-theme.freedesktop.org/releases/hicolor-icon-theme-0.17.tar.xz

- Download MD5 sum: 84eec8d6f810240a069c731f1870b474

- Download size: 52 KB

- Estimated disk space required: 340 KB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/hicolor-icon-theme

### Installation of hicolor-icon-theme

Install hicolor-icon-theme by running the following commands:

    ./configure --prefix=/usr

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/hicolor

#### Short Descriptions

/usr/share/icons/hicolor/* | contains icon definitions used as defaults

Last updated on

## icon-naming-utils-0.8.90

### Introduction to icon-naming-utils

The icon-naming-utils package contains a Perl script used for maintaining backwards compatibility with current desktop icon themes, while migrating to the names specified in the Icon Naming Specification.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://tango.freedesktop.org/releases/icon-naming-utils-0.8.90.tar.bz2

- Download MD5 sum: dd8108b56130b9eedc4042df634efa66

- Download size: 57 KB

- Estimated disk space required: 440 KB

- Estimated build time: less than 0.1 SBU

#### icon-naming-utils Dependencies

##### Required

XML-Simple-2.25

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/icon-naming-utils

### Installation of icon-naming-utils

Install icon-naming-utils 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

### Contents

Installed Programs: icon-name-mapping
Installed Libraries: None
Installed Directories: /usr/share/dtds and /usr/share/icon-naming-utils

#### Short Descriptions

icon-name-mapping | is a Perl script used for maintaining backwards compatibility with current desktop icon themes, while migrating to the names specified in the Icon Naming Specification

Last updated on

## lxde-icon-theme-0.5.1

### Introduction to LXDE Icon Theme

The LXDE Icon Theme package contains nuoveXT 2.2 Icon Theme for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxde-icon-theme-0.5.1.tar.xz

- Download MD5 sum: 7467133275edbbcc79349379235d4411

- Download size: 4.3 MB

- Estimated disk space required: 18 MB

- Estimated build time: less than 0.1 SBU

#### LXDE Icon Theme Dependencies

##### Optional

GTK+-2.24.33 or GTK+-3.24.30 (for gtk-update-icon-cache command)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxde-icon-theme

### Installation of LXDE Icon Theme

Install LXDE Icon Theme by running the following commands:

    ./configure --prefix=/usr

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have installed one of the optional dependencies, run the following command as the `root` user:

    gtk-update-icon-cache -qf /usr/share/icons/nuoveXT2

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/nuoveXT2

Last updated on

## oxygen-icons5-5.85.0

### Introduction to oxygen-icons5

The oxygen icons 5 theme is a photo-realistic icon style, with a high standard of graphics quality.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/frameworks/5.85/oxygen-icons5-5.85.0.tar.xz

- Download MD5 sum: b6cad03903a685db1b323db2165355eb

- Download size: 228 MB

- Estimated disk space required: 452 MB

- Estimated build time: less than 0.1 SBU

#### oxygen-icons5 Dependencies

##### Required

extra-cmake-modules-5.85.0 and Qt-5.15.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/oxygen-icons5

### Installation of oxygen-icons5

First, enable scalable icons:

    sed -i '/( oxygen/ s/)/scalable )/' CMakeLists.txt

Install oxygen-icons5 by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr -Wno-dev ..

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: none
Installed Libraries: none
Installed Directory: /usr/share/icons/oxygen

Last updated on

# Part VII. KDE

KDE is a comprehensive desktop environment with a huge number of applications written for it and a huge amount of users. It is based on the Qt framework.

For more information visit the official KDE project site at http://www.kde.org/.

## Chapter 29. Introduction to KDE

## KDE Preliminaries

KDE is a comprehensive desktop environment with a huge number of applications written for it and a huge amount of users. It is based on the Qt framework.

The KDE5 system has two main blocks: the libraries, called KDE Frameworks 5 or KF5, which can be used in other environments, and the desktop environment called KDE Plasma 5. Most of the applications written by the KDE team only use KF5, and do not need the plasma environment.

For more information visit the official KDE project site at http://www.kde.org/.

Last updated on

## extra-cmake-modules-5.85.0

### Introduction to Extra Cmake Modules

The Extra Cmake Modules package contains extra CMake modules used by KDE Frameworks 5 and other packages.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/frameworks/5.85/extra-cmake-modules-5.85.0.tar.xz

- Download MD5 sum: e4d8d5d70334eb9f40feb14c0e5fa1c3

- Download size: 312 KB

- Estimated disk space required: 4.2 MB

- Estimated build time: less than 0.1 SBU

#### Extra Cmake Modules Dependencies

##### Required

CMake-3.21.2

##### Optional

PyQt (experimental support for building KDE Python bindings), and Sphinx (for building documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/extra-cmake-modules

### Installation of Extra Cmake Modules

Install Extra Cmake Modules by running the following commands:

    sed -i '/"lib64"/s/64//' kde-modules/KDEInstallDirs.cmake &&

    sed -e '/PACKAGE_INIT/i set(SAVE_PACKAGE_PREFIX_DIR "${PACKAGE_PREFIX_DIR}")' \
        -e '/^include/a set(PACKAGE_PREFIX_DIR "${SAVE_PACKAGE_PREFIX_DIR}")' \
        -i ECMConfig.cmake.in &&

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr .. &&
    make

This package does not come with a test suite.

### Note

Unlike other KF5 packages, this module is installed in /usr because it can be used by some non-KF5 packages.

Now, as the `root` user:

    make install

### Command Explanations

sed ... Modules/KDEInstallDirs.cmake: This command disables applications using cmake from attempting to install files in a `lib64` sub-directory.

sed ... ECMConfig.cmake.in: This command protects the global cmake variable `PACKAGE_PREFIX_DIR` from being changed when checking ECM presence: since we install ECM into `/usr`, the check would set that variable to `/usr`, while most KDE packages expect it to be set to `/opt/kf5` and would fail to build if it is set to something else.

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/ECM and /usr/share/doc/ECM (if documentation was built)

Last updated on

## Phonon-4.11.1

### Introduction to Phonon

Phonon is the multimedia API for KDE. It replaces the old aRts package. Phonon needs either the GStreamer or VLC backend.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/phonon/4.11.1/phonon-4.11.1.tar.xz

- Download MD5 sum: d3df5ba646e4b3f11623d998caa40e74

- Download size: 308 KB

- Estimated disk space required: 12 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### Phonon Dependencies

##### Required

CMake-3.21.2, extra-cmake-modules-5.85.0, GLib-2.68.4, and Qt-5.15.2

At least one of phonon-backend-gstreamer-4.10.0 or phonon-backend-vlc-0.11.3 needs to be installed afterwards for multimedia operation in KDE.

##### Optional

PulseAudio-15.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/phonon

### Installation of Phonon

Install Phonon by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          .. &&
    make

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply higher level of the compiler optimizations.

### Contents

Installed Programs: phononsettings
Installed Libraries: libphonon4qt5.so and libphonon4qt5experimental.so
Installed Directories: /usr/include/phonon4qt5, /usr/lib/cmake/phonon4qt5, and /usr/share/phonon4qt5

Last updated on

## Phonon-backend-gstreamer-4.10.0

### Introduction to the Phonon-backend-gstreamer

This package provides a Phonon backend which utilizes the GStreamer media framework.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/phonon/phonon-backend-gstreamer/4.10.0/phonon-backend-gstreamer-4.10.0.tar.xz

- Download MD5 sum: 60abf634e961160cd1772d486f4a7097

- Download size: 100 KB

- Estimated disk space required: 7.2 MB

- Estimated build time: 0.1 SBU (Using paraleleism=4)

#### Phonon-backend-gstreamer Dependencies

##### Required

gstreamer-1.18.4, libxml2-2.9.12, and phonon-4.11.1

##### Recommended

gst-plugins-base-1.18.4 (needed for output to ALSA), gst-plugins-good-1.18.4 (needed for output to PulseAudio), gst-plugins-bad-1.18.4 (needed for AAC/M4A support), and gst-plugins-ugly-1.18.4 (needed for MP3 support)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/phonon-backend-gstreamer

### Installation of Phonon-backend-gstreamer

Install Phonon-backend-gstreamer by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr    \
          -DCMAKE_BUILD_TYPE=Release     \
          .. &&
    make

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply higher level of compiler optimizations.

### Contents

Installed Programs: none
Installed Libraries: phonon_gstreamer.so
Installed Directories: /usr/lib/qt5/plugins/phonon4qt5_backend

Last updated on

## Phonon-backend-vlc-0.11.3

### Introduction to the Phonon-backend-vlc

This package provides a Phonon backend which utilizes the VLC media framework.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/phonon/phonon-backend-vlc/0.11.3/phonon-backend-vlc-0.11.3.tar.xz

- Download MD5 sum: 5ed16d3290b1ca5ed0bafb90e2ffb02e

- Download size: 68 KB

- Estimated disk space required: 6.5 MB

- Estimated build time: 0.2 SBU

#### Phonon-backend-vlc Dependencies

##### Required

phonon-4.11.1 and VLC-3.0.16

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/phonon-backend-vlc

### Installation of Phonon-backend-vlc

Install Phonon-backend-vlc by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          .. &&
    make

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply higher level of compiler optimizations.

### Contents

Installed Program: none
Installed Libraries: phonon_vlc.so
Installed Directory: /usr/lib/qt5/plugins/phonon4qt5_backend

Last updated on

## Polkit-Qt-0.114.0

### Introduction to Polkit-Qt

Polkit-Qt provides an API to PolicyKit in the Qt environment.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/polkit-qt-1/polkit-qt-1-0.114.0.tar.xz

- Download MD5 sum: 2d20b02bd7ad1cd3f6ce235fc6d7de60

- Download size: 6o KB

- Estimated disk space required: 3.5 MB

- Estimated build time: 0.1 SBU

#### Polkit-Qt Dependencies

##### Required

CMake-3.21.2, Polkit-0.119, and Qt-5.15.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/polkit-qt

### Installation of Polkit-Qt

Install Polkit-Qt by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -Wno-dev .. &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply higher level of the compiler optimizations.

### Contents

Installed Programs: none
Installed Libraries: libpolkit-qt5-agent-1.so, libpolkit-qt5-core-1.so, and libpolkit-qt5-gui-1.so
Installed Directories: /usr/include/polkit-qt5-1 and /usr/lib/cmake/PolkitQt5-1

Last updated on

## libdbusmenu-qt-0.9.3+16.04.20160218

### Introduction to libdbusmenu-qt

This library provides a Qt implementation of the DBusMenu specification that exposes menus via DBus.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://launchpad.net/ubuntu/+archive/primary/+files/libdbusmenu-qt_0.9.3+16.04.20160218.orig.tar.gz

- Download MD5 sum: 8b90312bd8654e026d814d4db986ce5e

- Download size: 48 KB

- Estimated disk space required: 4.6 MB

- Estimated build time: 0.4 SBU

#### libdbusmenu-qt Dependencies

##### Required

Qt-5.15.2

##### Optional

Doxygen-1.9.2 (for building the API documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdbusmenu-qt

### Installation of libdbusmenu-qt

Install libdbusmenu-qt by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -DWITH_DOC=OFF              \
          -Wno-dev .. &&
    make

This packages does not come with a working test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to build without debugging symbols and apply a higher level of compiler optimizations.

`-DWITH_DOC=OFF`: This option is set to avoid building the API documentation. Omit it if you have doxygen installed and want the documentation.

### Contents

Installed Programs: None
Installed Library: libdbusmenu-qt5.so
Installed Directory: /usr/lib/cmake/dbusmenu-qt5 and /usr/include/dbusmenu-qt5

Last updated on

## Plasma-wayland-protocols-1.3.0

### Introduction to the Plasma-wayland-protocols

This package provides a custom set of protocol definitions for KDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/plasma-wayland-protocols/plasma-wayland-protocols-1.3.0.tar.xz

- Download MD5 sum: ff5193b515decd1eb8393fed1cfa5bf3

- Download size: 40 KB

- Estimated disk space required: 672 KB

- Estimated build time: less than 0.1 SBU

#### Plasma-wayland-protocols Dependencies

##### Required

extra-cmake-modules-5.85.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/plasma-wayland-protocols

### Installation of Plasma-wayland-protocols

Install Plasma-wayland-protocols by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr ..

Now, as the `root` user:

    make install

### Contents

Installed Programs: none
Installed Libraries: none
Installed Directories: $KF5_PREFIX/share/plasma-wayland-protocols and $KF5_PREFIX/lib/cmake/PlasmaWaylandProtocols

Last updated on

## Chapter 30. KDE Frameworks 5

## KDE Frameworks 5 Pre-installation Configuration

KF5 can be installed in `/usr` or `/opt/kf5`. The BLFS editors recommend the latter in the BLFS environment.

### Installing in /usr

One option is to install KDE Frameworks 5 into the `/usr` hierarchy. This creates a simpler setup but makes it more difficult to try multiple versions of KDE Frameworks.

    export KF5_PREFIX=/usr

It is a good idea to add the following variables to your system or personal profiles:

    cat >> /etc/profile.d/qt5.sh << "EOF"
    # Begin kf5 extension for /etc/profile.d/qt5.sh

    pathappend /usr/lib/qt5/plugins    QT_PLUGIN_PATH
    pathappend $QT5DIR/lib/plugins     QT_PLUGIN_PATH

    pathappend /usr/lib/qt5/qml        QML2_IMPORT_PATH
    pathappend $QT5DIR/lib/qml         QML2_IMPORT_PATH

    # End extension for /etc/profile.d/qt5.sh
    EOF

    cat > /etc/profile.d/kf5.sh << "EOF"
    # Begin /etc/profile.d/kf5.sh

    export KF5_PREFIX=/usr

    # End /etc/profile.d/kf5.sh
    EOF

### Note

If qt5 was installed in `/usr`, the `$QT5DIR/lib/` portions of the above paths may need to be changed to `$QT5DIR/lib/qt5/`.

Additionally, if Sudo-1.9.7p2 is installed, these variables should be available to the super user. Execute the following commands as the `root` user:

    cat >> /etc/sudoers.d/qt << "EOF"
    Defaults env_keep += QT_PLUGIN_PATH
    Defaults env_keep += QML2_IMPORT_PATH
    EOF

    cat >> /etc/sudoers.d/kde << "EOF"
    Defaults env_keep += KF5_PREFIX
    EOF

### Installing in /opt

A method of building multiple versions installs KDE Frameworks 5 in the `/opt` hierarchy:

    export KF5_PREFIX=/opt/kf5

If you are not installing KDE Frameworks 5 in `/usr`, you will need to make some additional configuration changes. Best practice is to add those to your system or personal profile:

    cat > /etc/profile.d/kf5.sh << "EOF"
    # Begin /etc/profile.d/kf5.sh

    export KF5_PREFIX=/opt/kf5

    pathappend $KF5_PREFIX/bin              PATH
    pathappend $KF5_PREFIX/lib/pkgconfig    PKG_CONFIG_PATH

    pathappend $KF5_PREFIX/etc/xdg          XDG_CONFIG_DIRS
    pathappend $KF5_PREFIX/share            XDG_DATA_DIRS

    pathappend $KF5_PREFIX/lib/plugins      QT_PLUGIN_PATH
    pathappend $KF5_PREFIX/lib/plugins/kcms QT_PLUGIN_PATH

    pathappend $KF5_PREFIX/lib/qml          QML2_IMPORT_PATH

    pathappend $KF5_PREFIX/lib/python3.9/site-packages PYTHONPATH

    pathappend $KF5_PREFIX/share/man        MANPATH
    # End /etc/profile.d/kf5.sh
    EOF

    cat >> /etc/profile.d/qt5.sh << "EOF"
    # Begin Qt5 changes for KF5

    pathappend $QT5DIR/plugins             QT_PLUGIN_PATH
    pathappend $QT5DIR/qml                 QML2_IMPORT_PATH

    # End Qt5 changes for KF5
    EOF

Expand your `/etc/ld.so.conf` file:

    cat >> /etc/ld.so.conf << "EOF"
    # Begin KF5 addition

    /opt/kf5/lib

    # End KF5 addition
    EOF

Several KDE Frameworks 5 and KDE Plasma 5 packages install files into D-Bus, Polkit, and systemd directories. When installing KDE 5 in a location other than `/usr`, D-Bus, Polkit, and systemd need to be able to find these files. The easiest way to achieve this is to create the following symlinks (as the `root` user):

    install -v -dm755           $KF5_PREFIX/{etc,share} &&
    ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
    ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share       &&
    ln -sfv /usr/share/polkit-1 $KF5_PREFIX/share       &&
    install -v -dm755           $KF5_PREFIX/lib         &&
    ln -sfv /usr/lib/systemd    $KF5_PREFIX/lib

Some packages may also install icons from the "hicolor" icon set. Since that icon set is used by many packages, it is a good idea to create a symlink to the one in `/usr/share` to avoid having multiple installations of hicolor-icon-theme-0.17. Run the following commands as the `root` user:

    install -v -dm755                $KF5_PREFIX/share/icons &&
    ln -sfv /usr/share/icons/hicolor $KF5_PREFIX/share/icons

### Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why `/opt/kf5` is used as installation prefix instead of `/opt/kf5-5.85.0`. After installing KDE Frameworks, you may rename the directory and create a symlink:

    mv /opt/kf5{,-5.85.0}
    ln -sfv kf5-5.85.0 /opt/kf5

Later on, you may want to install other versions of KDE Frameworks 5. To do that, just remove the symlink and use `/opt/kf5` as the prefix again. Which version of KDE Frameworks 5 you use depends only on where the symlink points. No other reconfiguration will be needed.

Last updated on

## Building KDE Frameworks 5 (KF5)

KDE Frameworks 5 is a collection of libraries based on top of Qt5 and QML derived from the monolithic KDE 4 libraries. They can be used independent of the KDE Display Environment (Plasma 5).

This package is known to build and work properly using an LFS-11.0 platform.

The instructions below build all of the KDE Frameworks packages in one step by using a bash script.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/frameworks/5.85

- Download MD5 sum: See Below

- Download size: 266 MB

- Estimated disk space required: 1.3 GB (241 MB installed)

- Estimated build time: 14 SBU (using parallelism=4)

#### KF5 Dependencies

##### Required

Boost-1.77.0, extra-cmake-modules-5.85.0, docbook-xml-4.5, docbook-xsl-1.79.2, giflib-5.2.1, libepoxy-1.5.9, libgcrypt-1.9.4, libical-3.0.10, libjpeg-turbo-2.1.1, libpng-1.6.37, libxslt-1.1.34, lmdb-0.9.29, qrencode-4.1.1, phonon-4.11.1, plasma-wayland-protocols-1.3.0, shared-mime-info-2.1, URI-5.09, and Wget-1.21.1 (required to download the packages)

##### Recommended

Aspell-0.60.8 (Dictionary backend for Sonnet), Avahi-0.8 (DNS-SD backend for KDNSSD), libdbusmenu-qt-0.9.3+16.04.20160218 (built with qt5), NetworkManager-1.32.10 (needed to build NetworkManager-Qt), and polkit-qt-0.114.0 (Authentication backend for KAuth)

Furthermore, the instructions below assume that the environment has been set up as described in Introduction to KF5.

##### Optional

BlueZ-5.61 (needed to build Bluez-Qt), ModemManager-1.16.10 (needed to build ModemManager-Qt), Datamatrix (deemed recommended for Prison by upstream)

##### Runtime dependency for FrameworkIntegration

Oxygen fonts and Noto fonts

##### Additional recommended dependencies for kapidox

Doxygen-1.9.2 (Run time), Jinja2-3.0.1, and PyYAML-5.3.1 (if those python modules are not present at build time, they will be downloaded)

##### Other python modules needed by kapidox

requests, doxyqml, doxypypy, urllib3, idna, charset-normalizer, and certifi (all will be automatically installed at build time if not present on the system)

##### Additional image formats support in KImageFormats

JasPer-2.0.33 and OpenEXR

##### Optional dependencies for KIO

MIT Kerberos V5-1.19.2

##### Optional dependencies for Solid

UDisks-2.9.3, UPower-0_99_13 and media-player-info (runtime)

##### Optional dependency for KWallet

GPGME-1.16.0, built with C++ bindings (which is the default).

##### Optional dictionary backends for Sonnet

Hspell and Hunspell

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kf5

### Downloading KDE Frameworks

The easiest way to get the KDE Frameworks packages is to use a single wget to fetch them all at once:

    url=https://download.kde.org/stable/frameworks/5.85/
    wget -r -nH -nd -A '*.xz' -np $url

    The options used here are:
      -r            recurse through child directories
      -nH           disable generation of host-prefixed directories
      -nd           do not create a hierarchy of directories
      -A '*.xz'     just get the *.xz files
      -np           don't get parent directories

### Setting Package Order

The order of building files is important due to internal dependencies. Create the list of files in the proper order as follows:

    cat > frameworks-5.85.0.md5 << "EOF"
    06d286995319fd9565d43bf736576a82  attica-5.85.0.tar.xz
    #e4d8d5d70334eb9f40feb14c0e5fa1c3  extra-cmake-modules-5.85.0.tar.xz
    007581e41e7c13cc52f03c50f65c9826  kapidox-5.85.0.tar.xz
    deee0085dbd22032a437106ba01ba7b2  karchive-5.85.0.tar.xz
    3fb5aba8c68be4c384ee17a91798ddec  kcodecs-5.85.0.tar.xz
    eef295c85781ddf9a3abbd95a4da5df3  kconfig-5.85.0.tar.xz
    d7a2748aebb1206fc38cb00bb39bc0eb  kcoreaddons-5.85.0.tar.xz
    c9b3062073d8fb0977aa63fab7582d1e  kdbusaddons-5.85.0.tar.xz
    510b0e437a855592d3512faa94fcd4ba  kdnssd-5.85.0.tar.xz
    7b5b4d7610c45895ac5138c1e762ef41  kguiaddons-5.85.0.tar.xz
    e9463a50c2bc56a6cebc70c487b5a45d  ki18n-5.85.0.tar.xz
    58a3e469ac54cb78469b27f216c87c0a  kidletime-5.85.0.tar.xz
    5cb4de5a5215b8f9412bbff02ac59f11  kimageformats-5.85.0.tar.xz
    3f00cbe1c9ded4b9f061f0dcc3c38071  kitemmodels-5.85.0.tar.xz
    5ed293814f6ca4c37a9fef6963431db0  kitemviews-5.85.0.tar.xz
    040eaecd9952dc73b11ab4570f7b93f8  kplotting-5.85.0.tar.xz
    381c75cf800cfe1483ea3493e2de245c  kwidgetsaddons-5.85.0.tar.xz
    4d9cca227b795280ee920156cdec4859  kwindowsystem-5.85.0.tar.xz
    f530333f5635266765b9d998ddc51d33  networkmanager-qt-5.85.0.tar.xz
    254a03e4914ad144126a615ebbcbc11c  solid-5.85.0.tar.xz
    6883eeb4c62837d70c6d6cbd01ba4cb8  sonnet-5.85.0.tar.xz
    ceb00c86052dd1c9e4bef970c19f46d4  threadweaver-5.85.0.tar.xz
    7e097f4474c43e08b2540a8883dc1e00  kauth-5.85.0.tar.xz
    dcf9b03389d733eac8ae930b26d5389a  kcompletion-5.85.0.tar.xz
    cc72c9ac7cba7207ef1a170bb2e4719e  kcrash-5.85.0.tar.xz
    2676c29e1d3a93bd42e4f84f86961c4d  kdoctools-5.85.0.tar.xz
    f85fe1b8f7319ed6e69d562671a705d0  kpty-5.85.0.tar.xz
    298c9df17377b26ccd76d34f54ffad6c  kunitconversion-5.85.0.tar.xz
    530e29b6a5993c0f23adbe09c48a7f16  kconfigwidgets-5.85.0.tar.xz
    3081cf3c1eae4121b9b1fb71a1aa7c64  kservice-5.85.0.tar.xz
    c3a62eeaf5d94bf326cab38dd1380204  kglobalaccel-5.85.0.tar.xz
    5203415a3948fb0c3c1937bcba5c5758  kpackage-5.85.0.tar.xz
    f57850b50533be59335bdf2d76fcfc76  kdesu-5.85.0.tar.xz
    c4c930b28e1c5bd4e2a1aad9e8c328b0  kemoticons-5.85.0.tar.xz
    edf31862bd801304fdb578050b0326d2  kiconthemes-5.85.0.tar.xz
    b73b00a29afcf70d964190219ee6ccbc  kjobwidgets-5.85.0.tar.xz
    8b7c4520f6ffc7cfc1fbd22e0c9ffa18  knotifications-5.85.0.tar.xz
    fd3490e92465f433a5576b40ac348cbd  ktextwidgets-5.85.0.tar.xz
    5b2362e1d485d80c3111679ae4cad68b  kxmlgui-5.85.0.tar.xz
    679bb7a808f2d51e43f9dc26ce3f62d1  kbookmarks-5.85.0.tar.xz
    ceaebee871b3f792766377c1074216a3  kwallet-5.85.0.tar.xz
    aa1168d883e43dc304bbd809c9aa2f3d  kded-5.85.0.tar.xz
    30c8871003edb993afc385e16f8b1a64  kio-5.85.0.tar.xz
    1da45e0185075d0c384100c17d8a789f  kdeclarative-5.85.0.tar.xz
    2e11d1726375387f2942cf9f3845760a  kcmutils-5.85.0.tar.xz
    975fa5fd7a1db023639eb26f0d5e6809  kirigami2-5.85.0.tar.xz
    8de5ea8546df1d8a23a2eb1ce465dbc9  syndication-5.85.0.tar.xz
    7b1926330878c8c9c8a28f2403ff2e81  knewstuff-5.85.0.tar.xz
    f6178e5a138b0fe4260bb74bfabd2a5f  frameworkintegration-5.85.0.tar.xz
    e86d84f9d34aa94e55d0ca177f49a57c  kinit-5.85.0.tar.xz
    14c79ffe82f063ff67392f64005477d2  kparts-5.85.0.tar.xz
    0fef80b90c110adfe7c775f93e1f3e1d  kactivities-5.85.0.tar.xz
    #3557d248cdecb2bd03e0a00b0dab7ae2  kdewebkit-5.85.0.tar.xz
    1ef1c6039a3e91ec533af11af19539ec  syntax-highlighting-5.85.0.tar.xz
    535adfca5246321df0f69de579c5f29c  ktexteditor-5.85.0.tar.xz
    6f09f3c76f6a698ede4fb67f6bb709cc  kdesignerplugin-5.85.0.tar.xz
    5253a422ba21dcb9bf92ffb53c035f2a  kwayland-5.85.0.tar.xz
    fa2e79613982549dca6e20ecd0907fa5  plasma-framework-5.85.0.tar.xz
    #1ad46346789bc04b7ff10bb4bb257e84  modemmanager-qt-5.85.0.tar.xz
    424f8cbccde63734ca9a41d2be38ce44  kpeople-5.85.0.tar.xz
    148e239b5fd08a66e655116a7399c22d  kxmlrpcclient-5.85.0.tar.xz
    0a90f655455ab7dcbe5e652a84a06a6e  bluez-qt-5.85.0.tar.xz
    866ba6788b62d46011d6d23f4195230d  kfilemetadata-5.85.0.tar.xz
    e4fa06ec978fece6eb13c2a9e6749fcc  baloo-5.85.0.tar.xz
    #42665314255bdf88736973c28c8c0a65  breeze-icons-5.85.0.tar.xz
    #b6cad03903a685db1b323db2165355eb  oxygen-icons5-5.85.0.tar.xz
    65e8097e66204a7b8ae8fd616a9789a9  kactivities-stats-5.85.0.tar.xz
    0da888b4320299c93b56259da68563a8  krunner-5.85.0.tar.xz
    baf7228889d33913fffd26faedca61e5  prison-5.85.0.tar.xz
    daf55ba893a81e851c42507cb7b99e48  qqc2-desktop-style-5.85.0.tar.xz
    5c1a1d58b3ad5bb0d7fbbf427fc0dff1  kjs-5.85.0.tar.xz
    f5e0ca6f84d143f216a38cfb0c083267  kdelibs4support-5.85.0.tar.xz
    06c9c414894382a06a150967d2b1bbee  khtml-5.85.0.tar.xz
    e8f677e831ec75d8894ab77b139b0d77  kjsembed-5.85.0.tar.xz
    346789a75525372ac67d46c39834b150  kmediaplayer-5.85.0.tar.xz
    2e92ff7e9cc04bd2a3e06dfa24cf0f1f  kross-5.85.0.tar.xz
    75032ec4d4b432c7e3bb83b0bdbe0cac  kholidays-5.85.0.tar.xz
    7921bd89698216109cde504e59e115c0  purpose-5.85.0.tar.xz
    eaee772562d93a2752547c09427679cc  kcalendarcore-5.85.0.tar.xz
    565639b8a34802e97efaeac520d894a3  kcontacts-5.85.0.tar.xz
    07a1780a5e1cb8479232cf2244b69f7a  kquickcharts-5.85.0.tar.xz
    345e20cbc8d815173ab5861a72b084bb  knotifyconfig-5.85.0.tar.xz
    fc2b4c6df2f4f7c50955b31445774d3a  kdav-5.85.0.tar.xz
    EOF

In the above list, notice that some files have been commented out with a hash (#) character. The extra-cmake-modules entry has been commented out because it was built earlier in the Introduction to KDE. The icon packages are covered separately at breeze-icons-5.85.0 and oxygen-icons5-5.85.0. The modemmanager-qt package may be built if its optional dependency has been installed. The kdewebkit may be built if the external package QtWebkit has been built.

### Installation of KDE Frameworks

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

### Caution

If installing in `/opt` and there is an existing /opt/kf5 either as a regular directory or a symbolic link, it should be reinitialized (as `root`):

    mv -v /opt/kf5 /opt/kf5.old                         &&
    install -v -dm755           $KF5_PREFIX/{etc,share} &&
    ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
    ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share       &&
    ln -sfv /usr/share/polkit-1 $KF5_PREFIX/share       &&
    install -v -dm755           $KF5_PREFIX/lib         &&
    ln -sfv /usr/lib/systemd    $KF5_PREFIX/lib

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    while read -r line; do

        # Get the file name, ignoring comments and blank lines
        if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
        file=$(echo $line | cut -d" " -f2)

        pkg=$(echo $file|sed 's|^.*/||')          # Remove directory
        packagedir=$(echo $pkg|sed 's|\.tar.*||') # Package directory

        name=$(echo $pkg|sed 's|-5.*$||') # Isolate package name

        tar -xf $file
        pushd $packagedir
          case $name in
            plasma-framework*)
              sed -i 's/${EGL_TARGET}/GL EGL/' src/declarativeimports/core/CMakeLists.txt ;;
          esac

          mkdir build
          cd    build

          cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
                -DCMAKE_PREFIX_PATH=$QT5DIR        \
                -DCMAKE_BUILD_TYPE=Release         \
                -DBUILD_TESTING=OFF                \
                -Wno-dev ..
          make
          as_root make install
        popd

      as_root rm -rf $packagedir
      as_root /sbin/ldconfig

    done < frameworks-5.85.0.md5

    exit

### Note

Any modules that have been omitted can be installed later by using the same mkdir build; cd build; cmake; make; make install procedure as above.

Sometimes the installation paths are hardcoded into installed files. If the installed directory is not /usr, rename the directory and create a symlink:

    mv -v /opt/kf5 /opt/kf5-5.85.0
    ln -sfvn kf5-5.85.0 /opt/kf5

### Command Explanations

`-DCMAKE_PREFIX_PATH=$QT5DIR`: This switch is used to allow cmake to find the proper Qt libraries.

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to apply higher level of the compiler optimizations.

`-DBUILD_TESTING=OFF`: This switch is used to prevent building test programs and libraries that are of no use to an end user.

### Contents

Installed Programs: balooctl, baloo_file, baloo_file_extractor, baloosearch, balooshow, checkXML5, depdiagram-generate, depdiagram-generate-all, depdiagram-prepare, desktoptojson, gentrigrams, kactivities-cli, kapidox_generate, kate-syntax-highlighter, kbuildsycoca5, kcookiejar5, kdebugdialog5, kded5, kdeinit5, kdeinit5_shutdown, kdeinit5_wrapper, kf5-config, kf5kross, kgendesignerplugin, kglobalaccel5, kiconfinder5, kjs5, kjscmd5, kjsconsole, knewstuff-dialog, kpackagelauncherqml, kpackagetool5, kquitapp5, kreadconfig5, kshell5, ktelnetservice5, ktrash5, kwalletd5, kwallet-query, kwrapper5, kwriteconfig5, meinproc5, parsetrigrams, plasmapkg2, preparetips5, protocoltojson, and solid-hardware5
Installed Libraries: libkdeinit5_klauncher.so, libKF5Activities.so, libKF5ActivitiesStats.so, libKF5Archive.so, libKF5Attica.so, libKF5AuthCore.so, libKF5Auth.so, libKF5Baloo.so, libKF5BluezQt.so, libKF5Bookmarks.so, libKF5CalendarCore.so, libKF5CalendarEvents.so, libKF5Codecs.so, libKF5Completion.so, libKF5ConfigCore.so, libKF5ConfigGui.so, libKF5ConfigWidgets.so, libKF5Contacts.so, libKF5CoreAddons.so, libKF5Crash.so, libKF5DAV.so, libKF5DBusAddons.so, libKF5Declarative.so, libKF5DNSSD.so, libKF5DocTools.so, libKF5Emoticons.so, libKF5FileMetaData.so, libKF5GlobalAccel.so, libKF5GuiAddons.so, libKF5Holidays.so, libKF5I18n.so, libKF5IconThemes.so, libKF5IdleTime.so, libKF5ItemModels.so, libKF5ItemViews.so, libKF5JobWidgets.so, libKF5JSApi.so, libKF5JsEmbed.so, libKF5JS.so, libKF5KCMUtils.so, libKF5KDELibs4Support.so, libKF5KHtml.so, libKF5KIOCore.so, libKF5KIOFileWidgets.so, libKF5KIOGui.so, libKF5KIONTLM.so, libKF5KIOWidgets.so, libKF5Kirigami2.so, libKF5KrossCore.so, libKF5KrossUi.so, libKF5MediaPlayer.so, libKF5NetworkManagerQt.so, libKF5NewStuffCore.so, libKF5NewStuff.so, libKF5Notifications.so, libKF5NotifyConfig.so, libKF5Package.so, libKF5Parts.so, libKF5PeopleBackend.so, libKF5People.so, libKF5PeopleWidgets.so, libKF5PlasmaQuick.so, libKF5Plasma.so, libKF5Plotting.so, libKF5Prison.so, libKF5Pty.so, libKF5Purpose.so, libKF5PurposeWidgets.so, libKF5QuickAddons.so, libKF5Runner.so, libKF5Service.so, libKF5Solid.so, libKF5SonnetCore.so, libKF5SonnetUi.so, libKF5Style.so, libKF5Su.so, libKF5SyntaxHighlighting.so, libKF5TextEditor.so, libKF5TextWidgets.so, libKF5ThreadWeaver.so, libKF5UnitConversion.so, libKF5Wallet.so, libKF5WaylandClient.so, libKF5WaylandServer.so, libKF5WidgetsAddons.so, libKF5WindowSystem.so, libKF5XmlGui.so, libKF5XmlRpcClient.so, and libkwalletbackend5.so
Installed Directories: /opt/kf5 (symlink to /opt/kf5-5.85.0) if installing in /opt

#### Short Descriptions

checkXML5 | is a tool to check for syntax errors in KDE DocBook XML files
depdiagram-generate | is a tool to generate a dependency diagram
depdiagram-generate-all | is a tool to generate a dependency diagram for all frameworks at once
depdiagram-prepare | is a tool to prepare dot files
desktoptojson | is a tool to convert a .desktop file to a .json file
kbuildsycoca5 | rebuilds the KService desktop file system configuration cache
kcookiejar5 | is a command line interface to the HTTP cookie store used by KDE, a D-BUS service to store/retrieve/clean cookies
kded5 | consolidates several small services in one process
kdeinit5 | is a process launcher somewhat similar to the famous init used for booting UNIX
kf5-config | is a command line program used to retrieve information about KDE installation or user paths
kf5kross | executes kross scripts written in KDE Javascript, Python, Ruby, Java and Falcon
kgendesignerplugin | generates widget plugins for Qt(TM) Designer
kglobalaccel5 | is a daemon use to register the key bindings and for getting notified when the action triggered
kjs5 | is KDE ECMAScript/JavaScript engine
kjscmd5 | is a tool for launching KJSEmbed scripts from the command line
kjsconsole | is a console for kjs5
kpackagelauncherqml | is a commandline tool for launching kpackage QML application
kpackagetool5 | is a command line kpackage tool
kreadconfig5 | is a command line tool to retrieve values from KDE configuration files
kshell5 | start applications via kdeinit
ktelnetservice5 | is a telnet service
ktrash5 | is a helper program to handle the KDE trash can
kwalletd5 | is the wallet manager daemon
kwriteconfig5 | is a command line tool to write values in KDE configuration files
meinproc5 | converts DocBook files to HTML
plasmapkg2 | is a tool to install, list, remove Plasma packages
preparetips5 | is a script to extract the text from a tips file
solid-hardware5 | is a command line tool to investigate available devices

Last updated on

## Chapter 31. KDE Frameworks 5 Based Applications

## Ark-21.08.0

### Introduction to Ark

The Ark package is a KF5 archive tool. It is a graphical front end to tar and similar tools.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/ark-21.08.0.tar.xz

- Download MD5 sum: dc58af57fa3cf6f32076ad44d2f5c36f

- Download size: 2.6 MB

- Estimated disk space required: 31 MB

- Estimated build time: 0.4 SBU (using parallelism=4)

#### Ark Dependencies

##### Required

KDE Frameworks-5.85.0 and libarchive-3.5.2

##### Recommended

cpio-2.13, p7zip-17.04, UnRar-6.0.7, UnZip-6.0, and Zip-3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ark5

### Installation of Ark

Install Ark 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

### Contents

Installed Programs: ark
Installed Libraries: libkerfuffle.so
Installed Directories: $KF5_PREFIX/lib/plugins/kerfuffle, $KF5_PREFIX/share/doc/HTML/*/ark, and $KF5_PREFIX/share/kxmlgui5/ark

#### Short Descriptions

ark | is a KF5-based Archive Manager

Last updated on

## Kdenlive-21.08.0

### Introduction to Kdenlive

The Kdenlive package is a KF5 based video editor.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/kdenlive-21.08.0.tar.xz

- Download MD5 sum: af9df34cdbef3aaa878d5fa889de3190

- Download size: 11 MB

- Estimated disk space required: 182 MB

- Estimated build time: 1.6 SBU (using parallelism=4)

#### Kdenlive Dependencies

##### Required

KDE Frameworks-5.85.0, mlt-7.0.1, and v4l-utils-1.20.0 (runtime)

##### Recommended

breeze-icons-5.85.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kdenlive5

### Installation of Kdenlive

Install Kdenlive 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

### Contents

Installed Programs: kdenlive and kdenlive_render
Installed Libraries: mltpreview.so
Installed Directories: $KF5_PREFIX/share/doc/HTML/*/kdenlive, $KF5_PREFIX/share/kdenlive, and $KF5_PREFIX/share/kxmlgui5/kdenlive

#### Short Descriptions

kdenlive | is an open source non-linear video editor which supports a large number of formats
kdenlive_render | is a render program for kdenlive

Last updated on

## KMix-21.08.0

### Introduction to KMix

The KMix package contains a KF5 based Sound Mixer application.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/kmix-21.08.0.tar.xz

- Download MD5 sum: 6a032471af1093ecdd71b0dbc2c37eb9

- Download size: 1.1 MB

- Estimated disk space required: 17 MB

- Estimated build time: 0.2 SBU (using parallelism=4)

#### KMix Dependencies

##### Required

KDE Frameworks-5.85.0

##### Recommended

alsa-lib-1.2.5.1

##### Optional

libcanberra-0.30 and PulseAudio-15.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kmix5

### Installation of KMix

Install KMix 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

### Contents

Installed Programs: kmix, kmixctrl, and kmixremote
Installed Libraries: libkmixcore.so
Installed Directories: $KF5_PREFIX/share/kmix, $KF5_PREFIX/share/kxmlgui5/kmix, and $KF5_PREFIX/share/doc/HTML/*/kmix

#### Short Descriptions

kmix | is a mini audio mixer for kde
kmixctrl | is used to save or restore the settings of kmix
kmixremote | is a utility to mute, get and set volume levels

Last updated on

## Khelpcenter-21.08.0

### Introduction to Khelpcenter

Khelpcenter is an application to show KDE Applications' documentation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/khelpcenter-21.08.0.tar.xz

- Download MD5 sum: 0225b861015c6b75c00248f32562678a

- Download size: 4.1 MB

- Estimated disk space required: 26 MB

- Estimated build time: 0.1 SBU (using parallelism=4)

#### Khelpcenter Dependencies

##### Required

grantlee-5.2.0, KDE Frameworks-5.85.0, libxml2-2.9.12, and xapian-1.4.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/khelpcenter

### Installation of Khelpcenter

Install khelpcenter 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  &&

    mv -v $KF5_PREFIX/share/kde4/services/khelpcenter.desktop /usr/share/applications/ &&
    rm -rv $KF5_PREFIX/share/kde4

### Contents

Installed Program: khelpcenter
Installed Libraries: libkdeinit5_khelpcenter.so
Installed Directories: $KF5_PREFIX/share/khelpcenter, $KF5_PREFIX/share/kxmlgui5/khelpcenter, and $KF5_PREFIX/share/doc/HTML/*/{khelpcenter,fundamentals,onlinehelp}

#### Short Descriptions

khelpcenter | is the help viewer for KDE applications

Last updated on

## Konsole-21.08.0

### Introduction to Konsole

The Konsole package is a KF5 based terminal emulator.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/konsole-21.08.0.tar.xz

- Download MD5 sum: 220c82eb5827952034aa4ad2924685c6

- Download size: 1.3 MB

- Estimated disk space required: 40 MB

- Estimated build time: 0.5 SBU (using parallism=4)

#### Additional Downloads

- Optional patch: https://www.linuxfromscratch.org/patches/blfs/11.0/konsole-21.08.0-scrollbar-1.patch

#### Konsole Dependencies

##### Required

KDE Frameworks-5.85.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/konsole5

### Installation of Konsole

### Note

In non-plasma environments, the konsole scrollbar and its handle do not show up well. If desired, apply the optional patch to the package:

    patch -Np1 -i ../konsole-21.08.0-scrollbar-1.patch

The patch makes the scrollbar light gray with a small white border. The handle is dark gray. If desired, the colors may be changed to taste by editing the patch.

Install Konsole 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

### Contents

Installed Programs: konsole and konsoleprofile
Installed Libraries: libkdeinit5_konsole.so and libkonsoleprivate.so
Installed Directories: $KF5_PREFIX/share/doc/HTML/*/konsole, $KF5_PREFIX/share/konsole, and $KF5_PREFIX/share/kxmlgui5/konsole

#### Short Descriptions

konsole | is an X terminal emulation which provides a command-line interface
konsoleprofile | is a command-line tool to change the current tab's profile options

Last updated on

## libkexiv2-21.08.0

### Introduction to libkexiv2

Libkexiv2 is a KDE wrapper around the Exiv2 library for manipulating image metadata.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/libkexiv2-21.08.0.tar.xz

- Download MD5 sum: 20eb9223aec6e407f388643163880f25

- Download size: 60 KB

- Estimated disk space required: 3.2 MB

- Estimated build time: 0.2 SBU

#### libkexiv2 Dependencies

##### Required

KDE Frameworks-5.85.0 and Exiv2-0.27.4

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libkexiv2

### Installation of libkexiv2

Install libkexiv2 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

### Contents

Installed Programs: None
Installed Library: libKF5KExiv2.so
Installed Directories: $KF5_PREFIX/include/KF5/KExiv2 and $KF5_PREFIX/lib/cmake/KF5KExiv2

Last updated on

## Okular-21.08.0

### Introduction to Okular

Okular is a document viewer for KDE. It can view documents of many types including PDF, PostScript, TIFF, Microsoft CHM, DjVu, DVI, XPS and ePub.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/okular-21.08.0.tar.xz

- Download MD5 sum: 6e1244b7145c0f7e22442bfd47777193

- Download size: 7.7 MB

- Estimated disk space required: 73 MB

- Estimated build time: 0.8 SBU (using parallelism=4)

#### Okular Dependencies

##### Required

KDE Frameworks-5.85.0

##### Recommended

libkexiv2-21.08.0, libtiff-4.3.0, and Poppler-21.08.0 (built with Qt5, required for PDF support)

##### Optional

qca-2.3.3, DjVuLibre, kpimtextedit, libspectre (for PostScript support), libchm, libepub, and Mobipocket

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/okular5

### Installation of Okular

Install Okular 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

### Contents

Installed Program: okular
Installed Library: libOkular5Core.so
Installed Directories: $KF5_PREFIX/include/okular, $KF5_PREFIX/lib/cmake/Okular5, $KF5_PREFIX/lib/plugins/okular, $KF5_PREFIX/share/kxmlgui5/okular, $KF5_PREFIX/share/okular, $KF5_PREFIX/share/doc/HTML/*/okular, and

#### Short Descriptions

okular | is a document viewer

Last updated on

## libkdcraw-21.08.0

### Introduction to libkdcraw

Libkdcraw is a KDE wrapper around the libraw-0.20.2 library for manipulating image metadata.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/libkdcraw-21.08.0.tar.xz

- Download MD5 sum: 8096110c82b3a4cdc4895b4bd09c2a64

- Download size: 40 KB

- Estimated disk space required: 1.4 MB

- Estimated build time: less than 0.1 SBU

#### libkdcraw Dependencies

##### Required

KDE Frameworks-5.85.0 and libraw-0.20.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libkdcraw

### Installation of libkdcraw

Install libkdcraw 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

### Contents

Installed Programs: None
Installed Library: libKF5KDcraw.so
Installed Directories: $KF5_PREFIX/include/KF5/KDCRAW and $KF5_PREFIX/lib/cmake/KF5KDcraw

Last updated on

## Gwenview-21.08.0

### Introduction to Gwenview

Gwenview is a fast and easy-to-use image viewer for KDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/gwenview-21.08.0.tar.xz

- Download MD5 sum: 3e16bc1a6e99599db0caad2d032313e6

- Download size: 6.5 MB

- Estimated disk space required: 45 MB

- Estimated build time: 0.6 SBU (using parallelism=4)

#### Gwenview Dependencies

##### Required

Exiv2-0.27.4, KDE Frameworks-5.85.0, and Little CMS-2.12

##### Recommended

libkdcraw-21.08.0

##### Optional

KF5Kipi

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gwenview

### Installation of Gwenview

Install Gwenview 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

### Contents

Installed Program: gwenview and gwenview_importer
Installed Libraries: libgwenviewlib.so and gvpart.so
Installed Directories: $KF5_PREFIX/share/{kxmlgui5/gvpart,gwenview,doc/HTML/*/gwenview}

#### Short Descriptions

gwenview | is the KDE image viewer
gwenview_importer | is a Photo importer

Last updated on

## libkcddb-21.08.0

### Introduction to libkcddb

The libkcddb package contains a library used to retrieve audio CD meta data from the internet.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/libkcddb-21.08.0.tar.xz

- Download MD5 sum: b02e916532f0438b596f7e740a6e2ed9

- Download size: 424 KB

- Estimated disk space required: 8.5 MB

- Estimated build time: 0.1 SBU (Using parallelism=4)

#### libkcddb Dependencies

##### Required

KDE Frameworks-5.85.0 and libmusicbrainz-5.1.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libkcddb

### Installation of libkcddb

Install libkcddb 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

### Contents

Installed Programs: None
Installed Libraries: libKF5Cddb.so and kcm_cddb.so
Installed Directories: $KF5_PREFIX/include/KF5/KCddb and $KF5_PREFIX/lib/cmake/KF5Cddb $KF5_PREFIX/share/doc/HTML/*/kcontrol

#### Short Descriptions

`libkcddb.so` | contains functions used to retrieve audio CD meta data from the internet

Last updated on

## k3b-21.08.0

### Introduction to K3b

The K3b package contains a KF5-based graphical interface to the Cdrtools and dvd+rw-tools CD/DVD manipulation tools. It also combines the capabilities of many other multimedia packages into one central interface to provide a simple-to-operate application that can be used to handle many of your CD/DVD recording and formatting requirements. It is used for creating audio, data, video and mixed-mode CDs as well as copying, ripping and burning CDs and DVDs.

Though k3b can be used to copy almost any DVD to similar medium, it does not provide a way to copy, or reproduce a double-layer DVD onto single-layer medium. Of course, there is not a program anywhere on any platform that can make an exact duplicate of a double-layer DVD onto a single-layer disk, there are programs on some platforms that can compress the data on a double-layer DVD to fit on a single-layer DVD producing a duplicate, but compressed, image. If you need to copy the contents of a double-layer DVD to single-layer medium, you may want to look at the RMLCopyDVD package.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/k3b-21.08.0.tar.xz

- Download MD5 sum: 43f8a86887670d148123a8ec80b80a29

- Download size: 10 MB

- Estimated disk space required: 118 MB

- Estimated build time: 1.2 SBU (using parallelism=4)

#### K3b Dependencies

##### Required

KDE Frameworks-5.85.0, libkcddb-21.08.0, libsamplerate-0.2.1, and shared-mime-info-2.1

The CD/DVD drive is detected at run time using UDisks-2.9.3, which must therefore be installed before running k3b.

##### Recommended

FFmpeg-4.4, libburn-1.5.4, libdvdread-6.1.2, and taglib-1.12

There are programs from three packages that k3b will look for at runtime: Cdrtools-3.02a09 (required to burn CD-ROM media), dvd+rw-tools-7.1 (required to burn or format DVD media), and Cdrdao-1.2.4 (required to burn CD-ROM media in DAO (Disk At Once) mode). If you don't need the capability provided by any of the three packages, you don't have to install it. However, a warning message will be generated every time you run the k3b program if any are not installed.

##### Optional

FLAC-1.3.3, LAME-3.100, libmad-0.15.1b, libsndfile-1.0.31, libvorbis-1.3.7, libmusicbrainz-2.1.5, and Musepack (libmpcdec)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/k3b

### Installation of K3b

Install K3b 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

### Contents

Installed Programs: k3b
Installed Libraries: libk3bdevice.so, libk3blib.so, and numerous plugin modules for the installed dependencies
Installed Directories: $KF5_PREFIX/share/{,kxmlgui5/}k3b and $KF5_PREFIX/share/doc/HTML/*/k3b

#### Short Descriptions

k3b | is the graphical CD/DVD program

Last updated on

## Further KDE5 packages

This section did not provide instructions for all of the available packages in the KDE5 Software Compilation. The included packages were selected based on what most people would want to use on a standard desktop computer.

For a full list of available packages, have a look on the KDE5 servers at https://download.kde.org/stable/release-service/21.08.0/src.

Some additional packages worth mentioning are:

- Juk: A lightweight music player.

- Dragon: A video player.

- Kcalc: A scientific calculator.

- Kaccessible: Integration of accessibility utilities.

- Kio-extras: various plugins for urls like man:// or smb://.

- Kwalletmanager: A credentials management application.

- Marble: A global map program.

- A variety (about 40) of KDE games including: kpat, kfourinline, and kmines.

### Note

Some packages will require additional dependencies. To determine what dependencies are needed, run from the top of the source tree:

    cmake -Wno-dev -L .

Most of these packages can be built with the standard KDE5 instructions:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
          -DCMAKE_BUILD_TYPE=Release         \
          -DBUILD_TESTING=OFF                \
          -Wno-dev .. &&
    make

And as the `root` user:

    make install

Last updated on

## Chapter 32. KDE Plasma 5

KDE Plasma 5 is a desktop environment built using KDE Frameworks 5 and QML which runs on top of a fully hardware accelerated graphics stack using Qt5, QtQuick 2 and an OpenGL(-ES) scenegraph.

No additional configuration is needed before building the KDE Plasma 5 because it uses the same configuration that KDE Frameworks 5 uses.

## Building Plasma 5

KDE Plasma 5 is a collection of packages based on top of KDE Frameworks 5 and QML. They implement the KDE Display Environment (Plasma 5).

This package is known to build and work properly using an LFS-11.0 platform.

The instructions below build all of the Plasma 5 packages in one step by using a bash script.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/plasma/5.22.4

- Download MD5 sum: See Below

- Download size: 140 MB

- Estimated disk space required: 1.6 GB (355 MB installed)

- Estimated build time: 18 SBU (using parallelism=4)

#### Plasma 5 Dependencies

##### Required

GTK+-2.24.33, GTK+-3.24.30, KDE Frameworks-5.85.0, libpwquality-1.4.4, libxkbcommon-1.3.0, Mesa-21.2.1 built with Wayland-1.19.0, NetworkManager-1.32.10, pipewire-0.3.34, PulseAudio-15.0, qca-2.3.3, sassc-3.6.2, taglib-1.12, and xcb-util-cursor-0.1.3

##### Recommended

fftw-3.3.9, gsettings-desktop-schemas-40.0, libdbusmenu-qt-0.9.3+16.04.20160218, libcanberra-0.30, libinput-1.18.1, libpcap-1.10.1, Linux-PAM-1.5.1, lm-sensors-3-6-0, oxygen-icons5-5.85.0, and pciutils-3.7.0

##### Recommended (runtime)

AccountsService-0.6.55 and smartmontools-7.2

##### Optional

GLU-9.0.2, ibus-1.5.25, qtwebengine-5.15.6, Xorg Synaptics Driver-1.9.1, appstream-qt, KDevPlatform, libgps, libhybris, libraw1394, mockcpp, packagekit-qt, Qalculate, Qapt, SCIM, and socat (for pam_kwallet)

### Note

Only two plasma packages optionally use qtwebengine-5.15.6: libksysguard and kdeplasma-addons. If QtWebEngine is installed later, only those two packages have to be rebuilt. This allows to provide a more complete display in the system monitor application.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kf5

### Downloading KDE Plasma5

The easiest way to get the KDE Plasma5 packages is to use a single wget to fetch them all at once:

    url=https://download.kde.org/stable/plasma/5.22.4/
    wget -r -nH -nd -A '*.xz' -np $url

    The options used here are:
      -r            recurse through child directories
      -nH           disable generation of host-prefixed directories
      -nd           do not create a hierarchy of directories
      -A '*.xz'     just get the *.xz files
      -np           don't get parent directories

### Setting Package Order

The order of building files is important due to internal dependencies. Create the list of files in the proper order as follows:

    cat > plasma-5.22.4.md5 << "EOF"
    7fab69fa5fc3211b35e3d03f1172831a  kdecoration-5.22.4.tar.xz
    a587fecf0473c225f39a7f8a7c611d3b  libkscreen-5.22.4.tar.xz
    115f8e14d6ef58715183eb8036c431c1  libksysguard-5.22.4.tar.xz
    516a58571f6daeb60a2509057e67712b  breeze-5.22.4.tar.xz
    3b06f3768fc345893625ef44d7e72a98  breeze-gtk-5.22.4.tar.xz
    049dabd694abed120b4f84d37f05de8c  layer-shell-qt-5.22.4.tar.xz
    17af84caeb942de9a8e3d819f20645b0  kscreenlocker-5.22.4.tar.xz
    ffe09b47f6cc20d13ec311edeb13a9b3  oxygen-5.22.4.tar.xz
    916bfa4ce6b40ca8ef80b75018d63ab1  kinfocenter-5.22.4.tar.xz
    365f7cd632d41447561ec1bdf7497bba  kwayland-server-5.22.4.tar.xz
    09cf360780185b33fca9561684a0f41f  kwin-5.22.4.tar.xz
    5cb1ab2a9d3ce0c05eba07ef4c8ac478  plasma-workspace-5.22.4.tar.xz
    75dd5e0fed93781f0ae031a091dcce4b  plasma-disks-5.22.4.tar.xz
    3d7abfe0952b356cc12cbd75be14f5e0  bluedevil-5.22.4.tar.xz
    2515439a0daaf325b0fcf9ce1a537660  kde-gtk-config-5.22.4.tar.xz
    8f2f4b902c98d7890dc1ec3756c27871  khotkeys-5.22.4.tar.xz
    aa03bf8d1c799a4410b567b44b47f6cd  kmenuedit-5.22.4.tar.xz
    6fab0d760e9e6a33255441aab3874b2f  kscreen-5.22.4.tar.xz
    3dae9ce525c52ac3bacaff464dc4264c  kwallet-pam-5.22.4.tar.xz
    fa9772ef7737037992aea52739aea95a  kwayland-integration-5.22.4.tar.xz
    51502b6a48f2b7790364881a578cdd1b  kwrited-5.22.4.tar.xz
    6d85652d5fa13953370bc4f37247e3b4  milou-5.22.4.tar.xz
    61c7fc4c00637715e8d0c4491298b5b7  plasma-nm-5.22.4.tar.xz
    31272515681adc5d0ca987a9dc182de5  plasma-pa-5.22.4.tar.xz
    95aefdbfd0a3cd6b871e50968ccf43d9  plasma-workspace-wallpapers-5.22.4.tar.xz
    9a36fb70a6d1f1f637d75a75e77eb9ba  polkit-kde-agent-1-5.22.4.tar.xz
    f7860ee18c994a8b87f39965b53f4f1f  powerdevil-5.22.4.tar.xz
    ba7687bdea331a62127f7cc69029c194  plasma-desktop-5.22.4.tar.xz
    9c393f6da042841ed8cf41f9ad126b5c  kdeplasma-addons-5.22.4.tar.xz
    bf508d7b503f1923fdb5fbd22f957981  kgamma5-5.22.4.tar.xz
    239d00ede4c0e941dc6407f8510f1678  ksshaskpass-5.22.4.tar.xz
    #ba59a194b4812db25022c189e129151f  plasma-sdk-5.22.4.tar.xz
    3ecfe0501ce2ec0f8c8bda3a01c78be7  sddm-kcm-5.22.4.tar.xz
    a81e62bd36f3db28712274da80ed52a4  discover-5.22.4.tar.xz
    #9abba589089c1088e1836cabe9e593f6  breeze-grub-5.22.4.tar.xz
    #d038d1db0f1ed5e80b9d22a537dd1872  breeze-plymouth-5.22.4.tar.xz
    7aef306ec8c2131f0fa22d2b558f73fb  kactivitymanagerd-5.22.4.tar.xz
    8c30da2b1dbcfbfaa715c050339b0e0a  plasma-integration-5.22.4.tar.xz
    006171ce3edae4b67d27b1577cdc84a1  plasma-tests-5.22.4.tar.xz
    #442fd33f46a982eeeb925fd6f7d919b1  plymouth-kcm-5.22.4.tar.xz
    900994c0628b8b3767c83db0b4f16e0c  xdg-desktop-portal-kde-5.22.4.tar.xz
    61ebe5891cf9adcd62d32c5069573ff0  drkonqi-5.22.4.tar.xz
    d464d91d37cf12da1721abc18ec94140  plasma-vault-5.22.4.tar.xz
    8c9a2286634cb89fb04d0278c6af8f8c  plasma-browser-integration-5.22.4.tar.xz
    257e25f2388014932ecf786dd9e49bd5  kde-cli-tools-5.22.4.tar.xz
    9314599d78ed6683018ff5a7b69d2a08  systemsettings-5.22.4.tar.xz
    3ea20e78932f2a487d932acd1eff10f7  plasma-thunderbolt-5.22.4.tar.xz
    #0ecfa8ed1962f4f842967ed7b66d14f8  plasma-nano-5.22.4.tar.xz
    #157a441ad0519936dcb75856ae83010e  plasma-phone-components-5.22.4.tar.xz
    71b0da480c6b91b6445b6bdbe452bdae  plasma-firewall-5.22.4.tar.xz
    026a4d3cd063ba86e77c9ffa711aa769  plasma-systemmonitor-5.22.4.tar.xz
    0d72d2e9f5d6a3975068e1a472ce9982  qqc2-breeze-style-5.22.4.tar.xz
    171c556167b17fd2b16783015c3f8ae6  ksystemstats-5.22.4.tar.xz
    EOF

### Note

The breeze-grub, breeze-plymouth, and plymouth-kcm packages above are all for customized support of Plymouth which is designed to be run within an initial ram disk during boot (see the section called “About initramfs”). The plasma-sdk package is optional and used for software development. The plasma-nano package is used for embedded systems and plasma-phone-components provides phone functionality for Plasma.

### Installation of Plasma5

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

First, start a subshell that will exit on error:

    bash -e

Install all of the packages by running the following commands:

    while read -r line; do

        # Get the file name, ignoring comments and blank lines
        if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
        file=$(echo $line | cut -d" " -f2)

        pkg=$(echo $file|sed 's|^.*/||')          # Remove directory
        packagedir=$(echo $pkg|sed 's|\.tar.*||') # Package directory

        tar -xf $file
        pushd $packagedir

           mkdir build
           cd    build

           cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
                 -DCMAKE_BUILD_TYPE=Release         \
                 -DBUILD_TESTING=OFF                \
                 -Wno-dev ..  &&

            make
            as_root make install
        popd

        as_root rm -rf $packagedir
        as_root /sbin/ldconfig

    done < plasma-5.22.4.md5

    exit

If you did not set `$KF5_PREFIX` to `/usr`, create symlinks to allow display managers to find Plasma:

    as_root install -dvm 755 /usr/share/xsessions              &&
    cd /usr/share/xsessions/                                   &&
    [ -e plasma.desktop ]                                      ||
    as_root ln -sfv $KF5_PREFIX/share/xsessions/plasma.desktop &&
    as_root install -dvm 755 /usr/share/wayland-sessions       &&
    cd /usr/share/wayland-sessions/                            &&
    [ -e plasmawayland.desktop ]                               ||
    as_root ln -sfv $KF5_PREFIX/share/wayland-sessions/plasmawayland.desktop

### Configuring Plasma

#### Linux PAM Configuration

If you built Plasma with the recommended Linux PAM support, create necessary configuration files by running the following commands as the `root` user:

    cat > /etc/pam.d/kde << "EOF"
    # Begin /etc/pam.d/kde

    auth     requisite      pam_nologin.so
    auth     required       pam_env.so

    auth     required       pam_succeed_if.so uid >= 1000 quiet
    auth     include        system-auth

    account  include        system-account
    password include        system-password
    session  include        system-session

    # End /etc/pam.d/kde
    EOF

    cat > /etc/pam.d/kde-np << "EOF"
    # Begin /etc/pam.d/kde-np

    auth     requisite      pam_nologin.so
    auth     required       pam_env.so

    auth     required       pam_succeed_if.so uid >= 1000 quiet
    auth     required       pam_permit.so

    account  include        system-account
    password include        system-password
    session  include        system-session

    # End /etc/pam.d/kde-np
    EOF

    cat > /etc/pam.d/kscreensaver << "EOF"
    # Begin /etc/pam.d/kscreensaver

    auth    include system-auth
    account include system-account

    # End /etc/pam.d/kscreensaver
    EOF

### Starting Plasma5

You can start Plasma5 from a TTY, using xinit-1.4.1.

To start Plasma 5 using xinit-1.4.1, run the following commands:

    cat > ~/.xinitrc << "EOF"
    dbus-launch --exit-with-session $KF5_PREFIX/bin/startplasma-x11
    EOF

    startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debugging purposes. This can be done starting X with:

    startx &> ~/x-session-errors

When shutting down or rebooting, the shutdown messages appear on the vt where X was running. If you wish to see those messages, simultaneously press keys Alt-F7 (assuming that X was running on vt7).

### Contents

Installed Programs: There are too many plasma programs (63 in /opt/kf5/bin) to list separately here.
Installed Libraries: There are too many plasma libraries (40 in /opt/kf5/lib) to list separately here.
Installed Directories: There are too many plasma directories (over 1000 in /opt/kf5) to list separately here.

Last updated on

# Part VIII. GNOME

## Chapter 33. GNOME Libraries and Desktop

The objective of this section is to build a GNOME desktop.

## Libraries

Last updated on

## Gcr-3.40.0

### Introduction to Gcr

The Gcr package contains libraries used for displaying certificates and accessing key stores. It also provides the viewer for crypto files on the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gcr/3.40/gcr-3.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gcr/3.40/gcr-3.40.0.tar.xz

- Download MD5 sum: fa34048b5562f80587a71d11931a7c29

- Download size: 998 KB

- Estimated disk space required: 39 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### Gcr Dependencies

##### Required

GLib-2.68.4, libgcrypt-1.9.4, and p11-kit-0.24.0

##### Recommended

GnuPG-2.2.29, gobject-introspection-1.68.0, GTK+-3.24.30, libxslt-1.1.34, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gcr

### Installation of Gcr

Install Gcr by running the following commands:

    sed -i 's:"/desktop:"/org:' schema/*.xml &&

    sed -e '208 s/@BASENAME@/gcr-viewer.desktop/'   \
        -e '231 s/@BASENAME@/gcr-prompter.desktop/' \
        -i ui/meson.build                           &&

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dgtk_doc=false .. &&
    ninja

To test the results, issue: ninja test. The tests must be run from an X Terminal or similar.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

sed ... schema/*.xml: This command fixes a deprecated entry in the schema template.

sed ... ui/meson.build: This command fixes a problem when building with meson-0.59.0.

`-Dgtk=false`: Use this switch if you haven't installed GTK+-3.24.30. Note that gcr-viewer will not be installed if this is passed to meson.

`-Dgtk_doc=true`: Use this switch if you wish to generate the API reference documentation. Note that you must have GTK-Doc installed.

### Contents

Installed Program: gcr-viewer
Installed Libraries: libgck-1.so, libgcr-base-3.so and libgcr-ui-3.so
Installed Directories: /usr/include/gck-1, /usr/include/gcr-3, and /usr/share/gtk-doc/html/{gcr,gck}

#### Short Descriptions

gcr-viewer | is used to view certificates and key files
`libgck-1.so` | contains GObject bindings for PKCS#11

Last updated on

## gsettings-desktop-schemas-40.0

### Introduction to GSettings Desktop Schemas

The GSettings Desktop Schemas package contains a collection of GSettings schemas for settings shared by various components of a GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gsettings-desktop-schemas/40/gsettings-desktop-schemas-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gsettings-desktop-schemas/40/gsettings-desktop-schemas-40.0.tar.xz

- Download MD5 sum: 345e5b2340f4c6fd1b90597745761ddf

- Download size: 688 KB

- Estimated disk space required: 12 MB

- Estimated build time: less than 0.1 SBU

#### GSettings Desktop Schemas Dependencies

##### Required

GLib-2.68.4 and gobject-introspection-1.68.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gsettings-desktop-schemas

### Installation of GSettings Desktop Schemas

Install GSettings Desktop Schemas by running the following commands:

    sed -i -r 's:"(/system):"/org/gnome\1:g' schemas/*.in &&

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

sed ... schemas/*.in: This command fixes some deprecated entries in the schema templates.

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/include/gsettings-desktop-schemas and /usr/share/GConf/gsettings

Last updated on

## libsecret-0.20.4

### Introduction to libsecret

The libsecret package contains a GObject based library for accessing the Secret Service API.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libsecret/0.20/libsecret-0.20.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libsecret/0.20/libsecret-0.20.4.tar.xz

- Download MD5 sum: bf92f48afab2891f644f311e0f37683f

- Download size: 520 KB

- Estimated disk space required: 14 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libsecret Dependencies

##### Required

GLib-2.68.4

##### Recommended

gobject-introspection-1.68.0, libgcrypt-1.9.4, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and docbook-xml-4.5, docbook-xsl-1.79.2, libxslt-1.1.34 (to build manual pages), and Valgrind-3.17.0 (can be used in tests)

##### Optional (Required for the testsuite)

D-Bus Python-1.2.18, Gjs-1.68.3, and PyGObject-3.40.1 (Python 3 module)

##### Runtime Dependency

gnome-keyring-40.0

### Note

Any package requiring libsecret expects GNOME Keyring to be present at runtime.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsecret

### Installation of libsecret

Install libsecret by running the following commands:

    mkdir bld &&
    cd bld &&

    meson --prefix=/usr --buildtype=release -Dgtk_doc=false .. &&
    ninja

Now, as the `root` user:

    ninja install

To test the results, issue: ninja test, after the package is installed. The test suite should be run from a local GUI session started with dbus-launch.

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: Remove this if you have GTK-Doc-1.33.2 installed and want to rebuild the documentation with it.

`-Dmanpage=false`: Use this switch if you have not installed libxslt-1.1.34 and DocBook packages.

`-Dgcrypt=false`: Use this switch if you have not installed the recommended dependency of libgcrypt-1.9.4.

### Contents

Installed Program: secret-tool
Installed Library: libsecret-1.so
Installed Directories: /usr/include/libsecret-1 and /usr/share/gtk-doc/html/libsecret-1

#### Short Descriptions

secret-tool | is a command line tool that can be used to store and retrieve passwords
`libsecret-1.so` | contains the libsecret API functions

Last updated on

## rest-0.8.1

### Introduction to rest

The rest package contains a library that was designed to make it easier to access web services that claim to be "RESTful". It includes convenience wrappers for libsoup and libxml to ease remote use of the RESTful API.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/rest/0.8/rest-0.8.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/rest/0.8/rest-0.8.1.tar.xz

- Download MD5 sum: ece4547298a81105f307369d73c21b9d

- Download size: 332 KB

- Estimated disk space required: 12.5 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### rest Dependencies

##### Required

make-ca-1.7 and libsoup-2.74.0

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 and LCOV

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rest

### Installation of rest

Install rest by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check. The flickr test will fail due to Public API changes on their site. The OAuth tests will fail because the website that it uses to test connectivity via OAuth no longer exists.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: librest-0.7.so and librest-extras-0.7.so
Installed Directories: /usr/include/rest-0.7 and /usr/share/gtk-doc/html/rest-0.7

#### Short Descriptions

`librest-0.7.so` | contains the RESTful Web API Query functions
`librest-extras-0.7.so` | contains extra RESTful Web API Query functions

Last updated on

## totem-pl-parser-3.26.6

### Introduction to Totem PL Parser

The Totem PL Parser package contains a simple GObject-based library used to parse multiple playlist formats.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/totem-pl-parser/3.26/totem-pl-parser-3.26.6.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/totem-pl-parser/3.26/totem-pl-parser-3.26.6.tar.xz

- Download MD5 sum: 69dc2cf0e61e6df71ed45156b24b14da

- Download size: 1.4 MB

- Estimated disk space required: 9.6 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Totem PL Parser Dependencies

##### Required

libsoup-2.74.0

##### Recommended

gobject-introspection-1.68.0, libarchive-3.5.2, and libgcrypt-1.9.4

##### Optional

CMake-3.21.2, GTK-Doc-1.33.2, Gvfs-1.48.1 (for some tests), LCOV, and libquvi >= 0.9.1 and libquvi-scripts - if they are installed, then lua-socket (git) is necessary for the tests

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/totem-pl-parser

### Installation of Totem PL Parser

Install Totem PL Parser by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libtotem-plparser-mini.so and libtotem-plparser.so
Installed Directories: /usr/include/totem-pl-parser and /usr/share/gtk-doc/html/totem-pl-parser

#### Short Descriptions

`libtotem-plparser.so` | is the Totem Playlist Parser library
`libtotem-plparser-mini.so` | is the Totem Playlist Parser library, mini version

Last updated on

## VTE-0.64.2

### Introduction to VTE

The VTE package contains a termcap file implementation for terminal emulators.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.gnome.org/GNOME/vte/-/archive/0.64.2/vte-0.64.2.tar.gz

- Download MD5 sum: 692a2656eaf84165e2c8ffe9d84137d9

- Download size: 604 KB

- Estimated disk space required: 10 MB (with tests)

- Estimated build time: 0.3 SBU (using parallelism=4; with tests)

#### VTE Dependencies

##### Required

GTK+-3.24.30, libxml2-2.9.12, and pcre2-10.37

##### Recommended

ICU-69.1, GnuTLS-3.7.2, gobject-introspection-1.68.0, and Vala-0.52.5

##### Optional

FriBidi-1.0.9, GTK-Doc-1.33.2, and GTK-4.4.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vte

### Installation of VTE

Install VTE by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dfribidi=false .. &&
    ninja

To test the results, issue ninja test.

Now, as the `root` user:

    ninja install &&
    rm -v /etc/profile.d/vte.*

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

rm -v /etc/profile.d/vte.*: This command removes two files installed in /etc/profile.d that have no use on a LFS system.

`-Dfribidi=false`: Omit this switch if want to enable bidirectional capabilities.

`-Dgnutls=false`: Add this switch if you do not want to enable GnuTLS support.

`-Dvapi=false`: Add this switch if you do not want to enable vala bindings.

`-Ddocs=true`: Add this switch if wish to build the documentation.

### Contents

Installed Program: vte-2.91
Installed Library: libvte-2.91.so
Installed Directories: /usr/include/vte-2.91 and /usr/share/gtk-doc/html/vte-2.91

#### Short Descriptions

vte-2.91 | is a test application for the VTE libraries
`libvte-2.91.so` | is a library which implements a terminal emulator widget for GTK+ 3

Last updated on

## yelp-xsl-40.2

### Introduction to Yelp XSL

The Yelp XSL package contains XSL stylesheets that are used by the Yelp help browser to format Docbook and Mallard documents.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/yelp-xsl/40/yelp-xsl-40.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/yelp-xsl/40/yelp-xsl-40.2.tar.xz

- Download MD5 sum: bc6b359d67ef5de6669acbda4daa843b

- Download size: 648 KB

- Estimated disk space required: 10 MB

- Estimated build time: less than 0.1 SBU

#### Yelp XSL Dependencies

##### Required

libxslt-1.1.34 and itstool-2.0.6

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/yelp-xsl

### Installation of Yelp XSL

Install Yelp XSL by running the following commands:

    ./configure --prefix=/usr

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/yelp-xsl

Last updated on

## GConf-3.2.6

### Introduction to GConf

The GConf package contains a configuration database system used by many GNOME applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/GConf/3.2/GConf-3.2.6.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/GConf/3.2/GConf-3.2.6.tar.xz

- Download MD5 sum: 2b16996d0e4b112856ee5c59130e822c

- Download size: 1.5 MB

- Estimated disk space required: 45 MB

- Estimated build time: 0.3 SBU

#### GConf Dependencies

##### Required

dbus-glib-0.112 and libxml2-2.9.12

##### Recommended

gobject-introspection-1.68.0, GTK+-3.24.30 and Polkit-0.119

##### Optional

OpenLDAP-2.5.7

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gconf

### Installation of GConf

Install GConf by running the following commands:

    ./configure --prefix=/usr \
                --sysconfdir=/etc \
                --disable-orbit \
                --disable-static &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    ln -s gconf.xml.defaults /etc/gconf/gconf.xml.system

### Command Explanations

`--disable-orbit`: This switch is required if ORBit2 is not installed. ORBit2 is a deprecated package.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: gconf-merge-tree, gconftool-2, gsettings-data-convert and gsettings-schema-convert
Installed Libraries: libgconf-2.so and libgsettingsgconfbackend.so (GIO Module installed in `/usr/lib/gio/modules`)
Installed Directories: /etc/gconf, /usr/include/gconf, /usr/lib/GConf, /usr/share/gtk-doc/html/gconf and /usr/share/sgml/gconf

#### Short Descriptions

gconf-merge-tree | merges an XML filesystem hierarchy
gconftool-2 | is a command line tool used for manipulating the GConf database
gsettings-data-convert | reads values out of the users GConf database and stores them in GSettings
gsettings-schemas-convert | converts between GConf and GSettings schema file formats
`libgconf-2.so` | provides the functions necessary to maintain the configuration database

Last updated on

## geocode-glib-3.26.2

### Introduction to Geocode GLib

The Geocode GLib is a convenience library for the Yahoo! Place Finder APIs. The Place Finder web service allows to do geocoding (finding longitude and latitude from an address), and reverse geocoding (finding an address from coordinates).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/geocode-glib/3.26/geocode-glib-3.26.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/geocode-glib/3.26/geocode-glib-3.26.2.tar.xz

- Download MD5 sum: e1ef140a11a543643d170dc701009e39

- Download size: 72 KB

- Estimated disk space required: 5.1 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Geocode GLib Dependencies

##### Required

JSON-GLib-1.6.6 and libsoup-2.74.0

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/geocode-glib

### Installation of Geocode GLib

Install Geocode GLib by running the following commands:

    mkdir build                                   &&
    cd    build                                   &&
    meson --prefix /usr --buildtype=release -Denable-gtk-doc=false .. &&
    ninja

To test the results, issue: LANG=C ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Denable-gtk-doc=false`: Allow this package to be built without GTK-Doc. Remove this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libgeocode-glib.so
Installed Directories: /usr/include/geocode-glib-1.0, /usr/libexec/installed-tests/geocode-glib, /usr/share/icons/gnome/scalable/places, and /usr/share/gtk-doc/html/geocode-glib

#### Short Descriptions

`libgeocode-glib.so` | contains the Geocode GLib API functions

Last updated on

## Gjs-1.68.3

### Introduction to Gjs

Gjs is a set of Javascript bindings for GNOME.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gjs/1.68/gjs-1.68.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gjs/1.68/gjs-1.68.3.tar.xz

- Download MD5 sum: 031e5a1c3712d43d7130d4b3e11d5bbc

- Download size: 548 KB

- Estimated disk space required: 27 MB (with tests)

- Estimated build time: 0.9 SBU (with tests)

#### Gjs Dependencies

##### Required

Cairo-1.17.4, dbus-1.12.20, gobject-introspection-1.68.0, and js78-78.13.0

##### Recommended (required for GNOME)

GTK+-3.24.30 and GTK-4.4.0

##### Optional

sysprof-3.40.1, Valgrind-3.17.0 (for tests), DTrace, LCOV, and Systemtap

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gjs

### Installation of Gjs

Install Gjs by running the following commands:

    mkdir gjs-build &&
    cd    gjs-build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. The GTK and Cairo tests will fail if not running in an Xorg session. The `gjs:JS / Gtk4` test is known to exit with an ERROR on some systems.

Now, as the `root` user:

    ninja install &&
    ln -sfv gjs-console /usr/bin/gjs

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gjs (symlink) and gjs-console
Installed Library: libgjs.so
Installed Directories: /usr/include/gjs-1.0, /usr/lib/gjs, /usr/libexec/installed-tests/gjs, /usr/share/gjs-1.0, and /usr/share/installed-tests/gjs

#### Short Descriptions

gjs-console | contains a console to run JavaScript commands
`libgjs.so` | contains the GNOME JavaScript bindings

Last updated on

## gnome-autoar-0.4.0

### Introduction to gnome-autoar

The gnome-autoar package provides a framework for automatic archive extraction, compression, and management.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-autoar/0.4/gnome-autoar-0.4.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-autoar/0.4/gnome-autoar-0.4.0.tar.xz

- Download MD5 sum: bef689989c88e3f0712dd4cf1edeac8c

- Download size: 52 KB

- Estimated disk space required: 2.8 MB

- Estimated build time: less than 0.1 SBU

#### gnome-autoar Dependencies

##### Required

libarchive-3.5.2 and GTK+-3.24.30

##### Recommended

Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 (for building documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-autoar

### Installation of gnome-autoar

Install gnome-autoar by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dvapi=true -Dtests=true &&
    ninja

To test the results, issue: ninja test

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libgnome-autoar-0.so and libgnome-autoar-gtk-0.so
Installed Directories: /usr/include/gnome-autoar-0 and /usr/share/gtk-doc/html/gnome-autoar

#### Short Descriptions

`libgnome-autoar-0.so` | provides API functions for automatic archive management
`libgnome-autoar-gtk-0.so` | provides GTK+ widgets to aid in automatic archive management

Last updated on

## gnome-desktop-40.4

### Introduction to GNOME Desktop

The GNOME Desktop package contains a library that provides an API shared by several applications on the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-desktop/40/gnome-desktop-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-desktop/40/gnome-desktop-40.4.tar.xz

- Download MD5 sum: d4b0b08b41560a4ef68bae91c3a8b781

- Download size: 708 KB

- Estimated disk space required: 18 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### GNOME Desktop Dependencies

##### Required

gsettings-desktop-schemas-40.0, GTK+-3.24.30, ISO Codes-4.7.0, itstool-2.0.6, libseccomp-2.5.1, libxml2-2.9.12, and xkeyboard-config-2.33

##### Recommended

bubblewrap-0.5.0 (needed for thumbnailers in Nautilus) and gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-desktop

### Installation of GNOME Desktop

Install GNOME Desktop by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr                 \
          --buildtype=release           \
          -Dgnome_distributor="BLFS" .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgnome_distributor="Some Name"`: Use this parameter to supply a custom name in the “Distributor:” field of the “GNOME About” display window.

`-Dgtk_doc=true`: Use this parameter if you wish to build the API documentation.

`-Dinstalled_tests=true`: Use this parameter you wish to enable the installed tests.

### Contents

Installed Programs: None
Installed Library: libgnome-desktop-3.so
Installed Directories: /usr/include/gnome-desktop-3.0, /usr/libexec/gnome-desktop-debug, /usr/share/gnome, /usr/share/gtk-doc/html/gnome-desktop3, and /usr/share/help/*/{fdl,gpl,lgpl}

#### Short Descriptions

`libgnome-desktop-3.so` | contains functions shared by several GNOME applications

Last updated on

## gnome-menus-3.36.0

### Introduction to GNOME Menus

The GNOME Menus package contains an implementation of the draft Desktop Menu Specification from freedesktop.org. It also contains the GNOME menu layout configuration files and `.directory` files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-menus/3.36/gnome-menus-3.36.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-menus/3.36/gnome-menus-3.36.0.tar.xz

- Download MD5 sum: a8fd71fcf31a87fc799d80396a526829

- Download size: 492 KB

- Estimated disk space required: 8.5 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Menus Dependencies

##### Required

GLib-2.68.4

##### Recommended

gobject-introspection-1.68.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-menus

### Installation of GNOME Menus

Install GNOME Menus 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Libraries: libgnome-menu-3.so
Installed Directories: /etc/xdg/menus, /usr/include/gnome-menus-3.0, and /usr/share/desktop-directories

#### Short Descriptions

`libgnome-menu-3.so` | contains functions required to support GNOME's implementation of the Desktop Menu Specification

Last updated on

## gnome-video-effects-0.5.0

### Introduction to GNOME Video Effects

The GNOME Video Effects package contains a collection of GStreamer effects.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-video-effects/0.5/gnome-video-effects-0.5.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-video-effects/0.5/gnome-video-effects-0.5.0.tar.xz

- Download MD5 sum: 0c81bfafa7fc5c88cb0834d0026ad001

- Download size: 84 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-video-effects

### Installation of GNOME Video Effects

Install GNOME Video Effects by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a testsuite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/gnome-video-effects

Last updated on

## gnome-online-accounts-3.40.0

### Introduction to GNOME Online Accounts

The GNOME Online Accounts package contains a framework used to access the user's online accounts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-online-accounts/3.40/gnome-online-accounts-3.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-online-accounts/3.40/gnome-online-accounts-3.40.0.tar.xz

- Download MD5 sum: fcfa7f4b37c5d63a5c5dea28840279f3

- Download size: 844 KB

- Estimated disk space required: 28 MB

- Estimated build time: 0.4 SBU

#### GNOME Online Accounts Dependencies

##### Required

Gcr-3.40.0, JSON-GLib-1.6.6, rest-0.8.1, Vala-0.52.5, and WebKitGTK-2.32.3

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2, MIT Kerberos V5-1.19.2, and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-online-accounts

### Installation of GNOME Online Accounts

### Note

The Google API Key and OAuth tokens below are specific to LFS. If using these instructions for another distro, or if you intend to distribute binary copies of the software using these instructions, please obtain your own keys following the instructions located at http://www.chromium.org/developers/how-tos/api-keys.

Install GNOME Online Accounts by running the following commands:

    ./configure --prefix=/usr \
                --disable-static \
                --with-google-client-secret=5ntt6GbbkjnTVXx-MSxbmx5e \
                --with-google-client-id=595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-google-client-*`: These switches use the BLFS OAuth ID and secret for Google services.

`--enable-kerberos`: Use this switch if you have installed MIT Kerberos V5-1.19.2 and wish to use it with GNOME Online Accounts.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: goa-daemon and goa-identity-service (library executables)
Installed Libraries: libgoa-1.0.so and libgoa-backend-1.0.so
Installed Directories: /usr/include/goa-1.0, /usr/lib/goa-1.0, and /usr/share/gtk-doc/html/goa

#### Short Descriptions

goa-daemon | is the GNOME Online Accounts Daemon
`libgoa-1.0.so` | contains the GNOME Online Accounts API functions
`libgoa-backend-1.0.so` | contains functions used by GNOME Online Accounts backends

Last updated on

## Grilo-0.3.13

### Introduction to Grilo

Grilo is a framework focused on making media discovery and browsing easy for applications and application developers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/grilo/0.3/grilo-0.3.13.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/grilo/0.3/grilo-0.3.13.tar.xz

- Download MD5 sum: 737b76fc194878eac2ca45a78175aa9f

- Download size: 232 KB

- Estimated disk space required: 16 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### Grilo Dependencies

##### Required

GLib-2.68.4 and libxml2-2.9.12

##### Recommended

gobject-introspection-1.68.0, GTK+-3.24.30, libsoup-2.74.0, totem-pl-parser-3.26.6, and Vala-0.52.5

##### Optional

Avahi-0.8, DocBook-utils-0.6.14, liboauth-1.0.3, and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/grilo

### Installation of Grilo

Install Grilo by running the following commands:

    mkdir build &&
    cd    build    &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Denable-gtk-doc=false .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Denable-gtk-doc=false`: This option disables generating documentation. If you have GTK-Doc-1.33.2 installed and wish to generate documentation, remove this option. Note that building the documentation is currently broken due to an incompatibility with gtk-doc.

### Contents

Installed Programs: grilo-test-ui-0.3, grl-inspect-0.3 and grl-launch-0.3
Installed Libraries: libgrilo-0.3.so, libgrlnet-0.3.so and libgrlpls-0.3.so
Installed Directories: /usr/include/grilo-0.3

#### Short Descriptions

grilo-test-ui-0.3 | is a simple playground application that you can use to test the framework and its plugins
grl-inspect-0.3 | is a tool that prints out information on available Grilo sources
grl-launch-0.3 | is a tool to run Grilo operations from command line
`libgrilo.so` | provides the Grilo framework
`libgrlnet.so` | provides Grilo networking helpers for plug-ins
`libgrlpls.so` | provides playlist handling functions

Last updated on

## libchamplain-0.12.20

### Introduction to libchamplain

The libchamplain package contains a Clutter-based widget that is used to display rich and interactive maps.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libchamplain/0.12/libchamplain-0.12.20.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libchamplain/0.12/libchamplain-0.12.20.tar.xz

- Download MD5 sum: e58b364ffc2ea6bba9e58f95ee2a5229

- Download size: 220 KB

- Estimated disk space required: 7.8 MB

- Estimated build time: less than 0.1 SBU

#### libchamplain Dependencies

##### Required

clutter-gtk-1.8.4, GTK+-3.24.30, libsoup-2.74.0, and SQLite-3.36.0

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and libmemphis

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libchamplain

### Installation of libchamplain

Install libchamplain by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libchamplain-0.12.so and libchamplain-gtk-0.12.so
Installed Directories: /usr/include/champlain-0.12 and /usr/share/gtk-doc/html/champlain-0.12

#### Short Descriptions

`libchamplain-0.12.so` | contains the libchamplain API functions
`libchamplain-gtk-0.12.so` | contains the libchamplain GTK+ bindings

Last updated on

## libgdata-0.18.1

### Introduction to libgdata

The libgdata package is a GLib-based library for accessing online service APIs using the GData protocol, most notably, Google's services. It provides APIs to access the common Google services and has full asynchronous support.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgdata/0.18/libgdata-0.18.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgdata/0.18/libgdata-0.18.1.tar.xz

- Download MD5 sum: 92b058d1a0af5d1b96c86c21820f1eff

- Download size: 832 KB

- Estimated disk space required: 54 MB (with tests)

- Estimated build time: 0.5 SBU (with tests)

#### libgdata Dependencies

##### Required

libsoup-2.74.0, gnome-online-accounts-3.40.0, GTK+-3.24.30, JSON-GLib-1.6.6, and Vala-0.52.5

##### Recommended

Gcr-3.40.0, git-2.33.0, and gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 (for documentation), liboauth-1.0.3 (for OAuth v1 support), and uhttpmock-0.5.3 (required for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libgdata

### Installation of libgdata

Install libgdata by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr                 \
          --buildtype=release           \
          -Dgtk_doc=false               \
          -Dalways_build_tests=false .. &&
    ninja

If you wish to run the test suite, make sure uhttpmock-0.5.3 is installed and remove `-Dalways_build_tests=false` in the meson command line. To test the results, issue: ninja test. Note that the tests need network access.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: Remove this if you have GTK-Doc-1.33.2 installed and want to rebuild the documentation with it.

`-Doauth1=enabled`: Use this option if you wish to build in support for OAuth v1. Note that you must have liboauth-1.0.3 installed in order to enable this option.

### Contents

Installed Programs: None
Installed Libraries: libgdata.so
Installed Directories: /usr/include/libgdata and /usr/share/gtk-doc/html/gdata

#### Short Descriptions

`libgdata.so` | contains the libgdata API functions

Last updated on

## libgee-0.20.4

### Introduction to libgee

The libgee package is a collection library providing GObject based interfaces and classes for commonly used data structures.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgee/0.20/libgee-0.20.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgee/0.20/libgee-0.20.4.tar.xz

- Download MD5 sum: 4d7d6f1f8054f1b3466c752ac2e50946

- Download size: 672 KB

- Estimated disk space required: 42 MB (add 3 MB for tests)

- Estimated build time: 0.1 SBU (using parallelism=4; add 0.1 SBU for tests)

#### libgee Dependencies

##### Required

GLib-2.68.4

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

Vala-0.52.5 (with Valadoc) and LCOV

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libgee

### Installation of libgee

Install libgee by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libgee-0.8.so
Installed Directory: /usr/include/gee-0.8

#### Short Descriptions

`libgee-0.8.so` | contains the libgee API functions

Last updated on

## libgtop-2.40.0

### Introduction to libgtop

The libgtop package contains the GNOME top libraries.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgtop/2.40/libgtop-2.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgtop/2.40/libgtop-2.40.0.tar.xz

- Download MD5 sum: c6d67325cd97b2208b41e07e6cc7b947

- Download size: 728 KB

- Estimated disk space required: 20 MB

- Estimated build time: 0.2 SBU

#### libgtop Dependencies

##### Required

GLib-2.68.4 and Xorg Libraries

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libgtop

### Installation of libgtop

Install libgtop 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

### Command Explanations

`--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.

### Contents

Installed Programs: libgtop_daemon2 and libgtop_server2
Installed Library: libgtop-2.0.so
Installed Directories: /usr/include/libgtop-2.0 and /usr/share/gtk-doc/html/libgtop

#### Short Descriptions

`libgtop-2.0.so` | contains functions that allow access to system performance data

Last updated on

## libgweather-40.0

### Introduction to libgweather

The libgweather package is a library used to access weather information from online services for numerous locations.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libgweather/40/libgweather-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libgweather/40/libgweather-40.0.tar.xz

- Download MD5 sum: a9c0989890a837982defd8238e1eb356

- Download size: 2.6 MB

- Estimated disk space required: 94 MB

- Estimated build time: 0.2 SBU

#### libgweather Dependencies

##### Required

geocode-glib-3.26.2, GTK+-3.24.30, and libsoup-2.74.0

##### Recommended

gobject-introspection-1.68.0, libxml2-2.9.12, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2, Glade, and pylint

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libgweather

### Installation of libgweather

Install libgweather by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: LANG=C ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libgweather-3.so
Installed Directories: /usr/lib/libgweather, /usr/include/libgweather-3.0, /usr/share/gtk-doc/html/libgweather-3.0 and /usr/share/libgweather

#### Short Descriptions

`libgweather-3.so` | contains functions that allow the retrieval of weather information

Last updated on

## libpeas-1.30.0

### Introduction to libpeas

libpeas is a GObject based plugins engine, and is targeted at giving every application the chance to assume its own extensibility.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libpeas/1.30/libpeas-1.30.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libpeas/1.30/libpeas-1.30.0.tar.xz

- Download MD5 sum: 60b9d9fe2ee9dd518fb12d5d404e296a

- Download size: 192 KB

- Estimated disk space required: 12 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### libpeas Dependencies

##### Required

gobject-introspection-1.68.0 and GTK+-3.24.30

##### Recommended

libxml2-2.9.12 and PyGObject-3.40.1

##### Optional

GTK-Doc-1.33.2, Glade, embed, LGI (for LUA bindings, built with LUA-5.1), with either luajit or LUA-5.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libpeas

### Installation of libpeas

Install libpeas by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. An active graphical session with bus address is necessary to run the tests.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dvapi=true`: Add this switch if you wish to generate vapi (vala) data.

`-Ddemos=false`: Add this switch if you do not wish to build the demo programs.

`-Dgtk_doc=true`: Add this switch if wish to build the reference manual.

### Contents

Installed Program: peas-demo
Installed Libraries: libpeas-1.0.so and libpeas-gtk-1.0.so
Installed Directories: /usr/include/libpeas-1.0, /usr/lib/libpeas-1.0, /usr/lib/peas-demo and /usr/share/gtk-doc/html/libpeas

#### Short Descriptions

peas-demo | is the Peas demo program
`libpeas-1.0.so` | contains the libpeas API functions
`libpeas-gtk-1.0.so` | contains the libpeas GTK+ widgets

Last updated on

## libwnck-40.0

### Introduction to libwnck

The libwnck package contains the Window Navigator Construction Kit.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libwnck/40/libwnck-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libwnck/40/libwnck-40.0.tar.xz

- Download MD5 sum: 653f4221010e775f246a9cc6452d15cd

- Download size: 448 KB

- Estimated disk space required: 8.8 MB

- Estimated build time: 0.1 SBU

#### libwnck Dependencies

##### Required

GTK+-3.24.30

##### Recommended

gobject-introspection-1.68.0 and startup-notification-0.12

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libwnck

### Installation of libwnck

Install libwnck by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this option to build the API reference manual.

### Contents

Installed Program: wnckprop and wnck-urgency-monitor
Installed Library: libwnck-3.so
Installed Directories: /usr/include/libwnck-3.0 and /usr/share/gtk-doc/html/libwnck-3.0

#### Short Descriptions

wnckprop | is used to print or modify the properties of a screen/workspace/window, or to interact with it
`libwnck-3.so` | contains functions for writing pagers and task lists

Last updated on

## evolution-data-server-3.40.4

### Introduction to Evolution Data Server

The Evolution Data Server package provides a unified backend for programs that work with contacts, tasks, and calendar information. It was originally developed for Evolution (hence the name), but is now used by other packages as well.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/evolution-data-server/3.40/evolution-data-server-3.40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/evolution-data-server/3.40/evolution-data-server-3.40.4.tar.xz

- Download MD5 sum: eb47d38b72b64e863f2c960d37be311e

- Download size: 4.4 MB

- Estimated disk space required: 215 MB (with tests)

- Estimated build time: 1.2 SBU (using parallelism=4, with tests)

#### Evolution Data Server Dependencies

##### Required

Berkeley DB-5.3.28, Gcr-3.40.0, libical-3.0.10, libsecret-0.20.4, NSS-3.69, and SQLite-3.36.0.

##### Recommended

gnome-online-accounts-3.40.0, gobject-introspection-1.68.0, GTK+-3.24.30, ICU-69.1, libcanberra-0.30, libgdata-0.18.1, libgweather-40.0, and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2, MIT Kerberos V5-1.19.2, a MTA (that provides a sendmail command), OpenLDAP-2.5.7, and libphonenumber

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/evolution-data-server

### Installation of Evolution Data Server

First, as the `root` user, remove old and incompatible versions of the systemd units:

    rm -fv /usr/lib/systemd/user/evolution-*.service

Install Evolution Data Server by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr   \
          -DSYSCONF_INSTALL_DIR=/etc    \
          -DENABLE_VALA_BINDINGS=ON     \
          -DENABLE_INSTALLED_TESTS=ON   \
          -DENABLE_GOOGLE=ON            \
          -DWITH_OPENLDAP=OFF           \
          -DWITH_KRB5=OFF               \
          -DENABLE_INTROSPECTION=ON     \
          -DENABLE_GTK_DOC=OFF          \
          .. &&
    make

To test the results, issue: make test.

Now, as the `root` user:

    make install

### Command Explanations

`-DENABLE_GOOGLE=ON`: This switch enables access to google services via libgdata-0.18.1 and also enables the Google Authentication option.

`-DENABLE_VALA_BINDINGS=ON`: This switch enables building the Vala bindings. Remove if you don't have Vala-0.52.5 installed.

`-DENABLE_GTK_DOC=OFF`: This switch disables building 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.

### Note

To enable many of the optional dependencies, review the information from cmake -L CMakeLists.txt for the necessary parameters you must pass to the cmake command.

### Contents

Installed Programs: None
Installed Libraries: libcamel-1.2.so, libebackend-1.2.so, libebook-1.2.so, libebook-contacts-1.2.so, libecal-2.0.so, libedata-book-1.2.so, libedata-cal-2.0.so, libedataserver-1.2.so, libedataserverui-1.2.so, and libetestserverutils.so
Installed Directories: /usr/include/evolution-data-server, /usr/lib{,exec}/evolution-data-server, /usr/share/installed-tests/evolution-data-server, and /usr/share/pixmaps/evolution-data-server

#### Short Descriptions

`libcamel-1.2.so` | is the Evolution MIME message handling library
`libebackend-1.2.so` | is the utility library for Evolution Data Server Backends
`libebook-1.2.so` | is the client library for Evolution address books
`libebook-contacts-1.2.so` | is the client library for Evolution contacts
`libecal-1.2.so` | is the client library for Evolution calendars
`libedata-book-1.2.so` | is the backend library for Evolution address books
`libedata-cal-1.2.so` | is the backend library for Evolution calendars
`libedataserver-1.2.so` | is the utility library for Evolution Data Server
`libedataserverui-3.0.so` | is the GUI utility library for Evolution Data Server
`libetestserverutils.so` | is the server test utility library for Evolution Data Server

Last updated on

## Folks-0.15.3

### Introduction to Folks

Folks is a library that aggregates people from multiple sources (e.g, Telepathy connection managers and Evolution Data Server, Facebook, etc.) to create metacontacts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/folks/0.15/folks-0.15.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/folks/0.15/folks-0.15.3.tar.xz

- Download MD5 sum: 5835eaea7db9630457b6a1b564efcd09

- Download size: 480 KB

- Estimated disk space required: 22 MB (add 27 MB for tests)

- Estimated build time: 0.2 SBU (Using parallelism=4, add 0.3 SBU for tests)

#### Folks Dependencies

##### Required

evolution-data-server-3.40.4, gobject-introspection-1.68.0, libgee-0.20.4, dbusmock-0.23.1, and telepathy-glib-0.24.2

##### Recommended

BlueZ-5.61 and Vala-0.52.5

##### Optional

libsocialweb and Zeitgeist

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/folks

### Installation of Folks

Install Folks by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue ninja test from a local X session started with dbus-launch.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Ddocs=true`: This switch enables documentation generation.

### Contents

Installed Programs: folks-import and folks-inspect
Installed Libraries: libfolks-dummy.so, libfolks-eds.so, libfolks.so, and libfolks-telepathy.so
Installed Directories: /usr/include/folks and /usr/lib/folks

#### Short Descriptions

folks-import | is used to import meta-contact information to libfolks
folks-inspect | is used to inspect meta-contact information in libfolks
`libfolks-eds.so` | contains Evolution specific implementations of the libfolks classes
`libfolks.so` | contains the Folks API functions
`libfolks-telepathy.so` | contains Telepathy specific implementations of the libfolks classes

Last updated on

## gfbgraph-0.2.4

### Introduction to gfbgraph

The gfbgraph package contains a GObject wrapper for the Facebook Graph API.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gfbgraph/0.2/gfbgraph-0.2.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gfbgraph/0.2/gfbgraph-0.2.4.tar.xz

- Download MD5 sum: c38af63e49f8fe8baad99537956b69ba

- Download size: 40 KB

- Estimated disk space required: 7.0 MB

- Estimated build time: 0.1 SBU

#### gfbgraph Dependencies

##### Required

gnome-online-accounts-3.40.0 and rest-0.8.1

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gfbgraph

### Installation of gfbgraph

Install gfbgraph by running the following commands:

    ./autogen.sh --prefix=/usr --disable-static &&
    make

This package does not have a working testsuite.

Now, as the `root` user:

    make libgfbgraphdocdir=/usr/share/doc/gfbgraph-0.2.4 install

### Command Explanations

`--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.

### Contents

Installed Programs: None
Installed Libraries: libgfbgraph-0.2.so
Installed Directories: /usr/include/gfbgraph-0.2, /usr/share/doc/gfbgraph-0.2.4, and /usr/share/gtk-doc/html/gfbgraph

#### Short Descriptions

`libgfbgraph-0.2.so` | is a GObject wrapper for the Facebook Graph API

Last updated on

## Tracker-3.1.2

### Introduction to Tracker

Tracker is the file indexing and search provider used in the GNOME desktop environment.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/tracker/3.1/tracker-3.1.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/tracker/3.1/tracker-3.1.2.tar.xz

- Download MD5 sum: c2a38ecdfb792b25f6190092b69b15d3

- Download size: 1.4 MB

- Estimated disk space required: 82 MB (with tests)

- Estimated build time: 0.8 SBU (with tests)

#### Tracker Dependencies

##### Required

JSON-GLib-1.6.6, libseccomp-2.5.1, libsoup-2.74.0, and Vala-0.52.5

##### Recommended

gobject-introspection-1.68.0, ICU-69.1, and SQLite-3.36.0

##### Optional

asciidoc-9.1.0, GTK-Doc-1.33.2, bash-completion, and libstemmer

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tracker3

### Installation of Tracker

Install Tracker by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Ddocs=false        \
          -Dman=false ..      &&
    ninja

To test the results, issue: ninja test. The tests should be run from a graphical session. One test, `tracker:functional/portal`, is known to timeout.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddocs=false`: This switch prevents the build process from generating API documentation. Omit this switch if you have GTK-Doc-1.33.2 installed and wish to generate and install the API documentation.

`-Dman=false`: This switch prevents the build process from generating man pages. Omit this switch if you have asciidoc-9.1.0 installed and wish to generate and install the man pages.

### Contents

Installed Programs: tracker3
Installed Library: libtracker-sparql-3.0.so
Installed Directories: /usr/{include,lib}/tracker-3.0, /usr/libexec/tracker3, /usr/share/tracker3, and /usr/share/gtk-doc/html/{libtracker-sparql,ontology}-3

#### Short Descriptions

tracker3 | is a control program for the indexer
`libtracker-sparql-3.0.so` | contains resource management and database functions

Last updated on

## Tracker-miners-3.1.2

### Introduction to Tracker-miners

The Tracker-miners package contains a set of data extractors for Tracker.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/tracker-miners/3.1/tracker-miners-3.1.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/tracker-miners/3.1/tracker-miners-3.1.2.tar.xz

- Download MD5 sum: 51978c7f6ba10dfda2ad377f3ded85f1

- Download size: 3.9 MB

- Estimated disk space required: 37 MB (with tests)

- Estimated build time: 1.0 SBU (with tests)

#### Tracker-miners Dependencies

##### Required

gst-plugins-base-1.18.4, Tracker-3.1.2, Exempi-2.5.2, and gexiv2-0.12.3

##### Recommended

FFmpeg-4.4, giflib-5.2.1, ICU-69.1, libexif-0.6.22, libgrss-0.7.0, libgxps-0.3.2, and Poppler-21.08.0

##### Optional

asciidoc-9.1.0, CMake-3.21.2, DConf-0.40.0, libgsf-1.14.47, libseccomp-2.5.1, taglib-1.12, totem-pl-parser-3.26.6, UPower-0_99_13, libcue, libitpcdata, libosinfo, and gupnp

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tracker-miners

### Installation of Tracker-miners

First, as the `root` user, remove some files from tracker-2 which will conflict with tracker-miners-3:

    rm -v /etc/xdg/autostart/tracker-miner-*

Install Tracker-miners by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dman=false .. &&
    ninja

To test the results, as the `root` user, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dman=false`: This switch prevents the build process from generating man pages. Omit this switch if you have asciidoc-9.1.0 installed and wish to generate and install the man pages.

`-Dseccomp=false`: This option disables the seccomp system call filter. On some architectures, such as i686 and ARM, the functions that tracker-miners uses are not guarded properly, and tracker-miners will get killed with a SIGSYS as a result.

`-Dminer_rss=false`: Use this option if you have not installed the recommended dependency libgrss.

### Contents

Installed Programs: None
Installed Libraries: Several modules under /usr/lib/tracker-miners-3.0
Installed Directories: /usr/lib/tracker-miners-3.0, /usr/libexec/tracker3, and /usr/share/tracker3-miners

Last updated on

## GSound-1.0.3

### Introduction to GSound

The gsound package contains a small library for playing system sounds.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gsound/1.0/gsound-1.0.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gsound/1.0/gsound-1.0.3.tar.xz

- Download MD5 sum: 7338c295034432a6e782fd20b3d04b68

- Download size: 24 KB

- Estimated disk space required: 864 KB

- Estimated build time: less than 0.1 SBU

#### gsound Dependencies

##### Required

libcanberra-0.30

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 (for generating documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gsound

### Installation of GSound

Install gsound by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gsound-play
Installed Libraries: libgsound.so
Installed Directories: /usr/share/gtk-doc/html/gsound

#### Short Descriptions

gsound-play | plays system sounds through the libgsound interface
`libgsound.so` | contains API functions for playing system sounds

Last updated on

## GNOME Desktop Components

Last updated on

## DConf-0.40.0 / DConf-Editor-3.38.3

### Introduction to DConf

The DConf package contains a low-level configuration system. Its main purpose is to provide a backend to GSettings on platforms that don't already have configuration storage systems.

The DConf-Editor, as the name suggests, is a graphical editor for the DConf database. Installation is optional, because gsettings from GLib-2.68.4 provides similar functionality on the commandline.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/dconf/0.40/dconf-0.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/dconf/0.40/dconf-0.40.0.tar.xz

- Download MD5 sum: ac8db20b0d6b996d4bbbeb96463d01f0

- Download size: 115 KB

- Estimated disk space required: 7.0 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

#### Additional Downloads

- Download (HTTP): https://download.gnome.org/sources/dconf-editor/3.38/dconf-editor-3.38.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/dconf-editor/3.38/dconf-editor-3.38.3.tar.xz

- Download MD5 sum: 06d64abca0673761cf320145e9977b9c

- Download size: 584 KB

- Estimated disk space required: 37 MB

- Estimated build time: 0.2 SBU

#### DConf Dependencies

##### Required

dbus-1.12.20, GLib-2.68.4, GTK+-3.24.30 (for the editor), and libxml2-2.9.12 (for the editor)

##### Recommended

libxslt-1.1.34 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 and bash-completion

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dconf

### Installation of DConf

Install DConf by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dbash_completion=false .. &&
    ninja

To test the results, issue: ninja test

As the `root` user:

    ninja install

Now, optionally install the editor:

    cd ..              &&
    tar -xf ../dconf-editor-3.38.3.tar.xz &&
    cd dconf-editor-3.38.3                &&

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

As the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=true`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: dconf and dconf-editor
Installed Libraries: libdconf.so, and libdconfsettings.so (GIO Module installed in `/usr/lib/gio/modules`)
Installed Directories: /usr/{include,share/gtk-doc/html}/dconf

#### Short Descriptions

dconf | is a simple tool for manipulating the DConf database
dconf-editor | is a graphical program for editing the DConf database
`libdconf.so` | contains the DConf client API functions

Last updated on

## gnome-backgrounds-40.1

### Introduction to GNOME Backgrounds

The GNOME Backgrounds package contains a collection of graphics files which can be used as backgrounds in the GNOME Desktop environment. Additionally, the package creates the proper framework and directory structure so that you can add your own files to the collection.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-backgrounds/40/gnome-backgrounds-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-backgrounds/40/gnome-backgrounds-40.1.tar.xz

- Download MD5 sum: 1d0a89993d466806b81c267aede098e4

- Download size: 48 MB

- Estimated disk space required: 97 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-backgrounds

### Installation of GNOME Backgrounds

Install GNOME Backgrounds by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/backgrounds/gnome and /usr/share/gnome-background-properties

#### Short Descriptions

`GNOME Backgrounds` | are background images for the GNOME Desktop

Last updated on

## Gvfs-1.48.1

### Introduction to Gvfs

The Gvfs package is a userspace virtual filesystem designed to work with the I/O abstractions of GLib's GIO library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gvfs/1.48/gvfs-1.48.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gvfs/1.48/gvfs-1.48.1.tar.xz

- Download MD5 sum: a801309d09457bbd0c8a0a871fec0ac3

- Download size: 1.2 MB

- Estimated disk space required: 51 MB

- Estimated build time: 0.4 SBU

#### Gvfs Dependencies

##### Required

dbus-1.12.20, GLib-2.68.4, libusb-1.0.24, libsecret-0.20.4 and libsoup-2.74.0

##### Recommended

Gcr-3.40.0, GTK+-3.24.30, libcdio-2.1.0, libgdata-0.18.1, libgudev-237, Systemd-249, and UDisks-2.9.3

##### Optional

Apache-2.4.48, Avahi-0.8, BlueZ-5.61, dbus-glib-0.112, Fuse-3.10.4, gnome-online-accounts-3.40.0, GTK-Doc-1.33.2, libarchive-3.5.2, libgcrypt-1.9.4, libxml2-2.9.12, libxslt-1.1.34, OpenSSH-8.7p1, Samba-4.14.7, libbluray, libgphoto2, libimobiledevice, libmtp, libnfs, and Twisted

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gvfs

### Installation of Gvfs

Install Gvfs by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dfuse=false        \
          -Dgphoto2=false     \
          -Dafc=false         \
          -Dbluray=false      \
          -Dnfs=false         \
          -Dmtp=false         \
          -Dsmb=false         \
          -Ddnssd=false       \
          -Dgoa=false         \
          -Dgoogle=false      .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-D<option>=false`: These switches are required if the corresponding optional dependency is not installed. Remove those where you have installed the corresponding application and wish to use it with Gvfs. The dnssd option requires avahi and both goa/google require GNOME Online Accounts.

`-Dcdda=false`: This switch is required if libcdio is not installed. The cdda backend is useless on machines without a CDROM/DVD drive.

### Contents

Installed Programs: None
Installed Library: libgvfscommon.so, libgvfsdaemon.so and some under /usr/lib/gio/modules/
Installed Directories: /usr/include/gvfs-client and /usr/{lib,share}/gvfs

#### Short Descriptions

`libgvfscommon.so` | contains the common API functions used in Gvfs programs

Last updated on

## gexiv2-0.12.3

### Introduction to gexiv2

gexiv2 is a GObject-based wrapper around the Exiv2 library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gexiv2/0.12/gexiv2-0.12.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gexiv2/0.12/gexiv2-0.12.3.tar.xz

- Download MD5 sum: 9667fc1b35e79834191262f4aec17b72

- Download size: 372 KB

- Estimated disk space required: 3.7 MB

- Estimated build time: 0.1 SBU

#### gexiv2 Dependencies

##### Required

Exiv2-0.27.4

##### Recommended

Vala-0.52.5

##### Optional

GTK-Doc-1.33.2 (for documentation) and Python-2.7.18 (for the Python2 module)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gexiv2

### Installation of gexiv2

Install gexiv2 by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, run ninja test.

As the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libgexiv2.so
Installed Directories: /usr/include/gexiv2

Last updated on

## Nautilus-40.2

### Introduction to Nautilus

The Nautilus package contains the GNOME file manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/nautilus/40/nautilus-40.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/nautilus/40/nautilus-40.2.tar.xz

- Download MD5 sum: 62f856359dcb2964b5cb2e02e90ad2dd

- Download size: 3.1 MB

- Estimated disk space required: 160 MB (with tests)

- Estimated build time: 0.3 SBU (with tests, at -j4)

#### Nautilus Dependencies

##### Required

bubblewrap-0.5.0, gexiv2-0.12.3, gnome-autoar-0.4.0, gnome-desktop-40.4, libhandy-1.2.3, libnotify-0.7.9, libseccomp-2.5.1, and tracker-miners-3.1.2

##### Recommended

desktop-file-utils-0.26, Exempi-2.5.2, gobject-introspection-1.68.0, gst-plugins-base-1.18.4, libexif-0.6.22, and libportal-0.4

##### Optional

GTK-Doc-1.33.2

##### Recommended (Runtime)

adwaita-icon-theme-40.1.1 and Gvfs-1.48.1 (For hotplugging and device mounting to work)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nautilus

### Installation of Nautilus

Install Nautilus by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Dselinux=false     \
          -Dpackagekit=false  \
          .. &&

    ninja

To test the results, issue: ninja test. The tests need to be run in a graphical environment.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dselinux=false`: This switch disables the use of selinux which isn't supported by BLFS.

`-Dpackagekit=false`: This switch disables the use of PackageKit which isn't suitable for BLFS.

`-Dlibportal=false`: Use this switch if you do not have libportal-0.4 installed.

### Contents

Installed Programs: nautilus and nautilus-autorun-software
Installed Library: libnautilus-extension.so
Installed Directories: /usr/{include,lib,share}/nautilus, /usr/share/gnome-shell/search-providers, and /usr/share/gtk-doc/html/libnautilus-extension (optional)

#### Short Descriptions

nautilus | is the GNOME file manager
`libnautilus-extension.so` | supplies the functions needed by the file manager extensions

Last updated on

## Zenity-3.32.0

### Introduction to Zenity

Zenity is a rewrite of gdialog, the GNOME port of dialog which allows you to display GTK+ dialog boxes from the command line and shell scripts.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/zenity/3.32/zenity-3.32.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/zenity/3.32/zenity-3.32.0.tar.xz

- Download MD5 sum: ba2b2a13248773b4ec0fd323d95e6d5a

- Download size: 4.5 MB

- Estimated disk space required: 27 MB

- Estimated build time: 0.1 SBU

#### Zenity Dependencies

##### Required

GTK+-3.24.30 and itstool-2.0.6

##### Recommended

libnotify-0.7.9 and libxslt-1.1.34

##### Optional

WebKitGTK-2.32.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/zenity

### Installation of Zenity

Install Zenity 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

### Contents

Installed Programs: gdialog and zenity
Installed Libraries: None
Installed Directories: /usr/share/help/*/zenity and /usr/share/zenity

#### Short Descriptions

gdialog | is a Perl wrapper script which can be used with legacy scripts
zenity | is a program that will display GTK+ dialogs, and return the user's input

Last updated on

## gnome-bluetooth-3.34.5

### Introduction to GNOME Bluetooth

The GNOME Bluetooth package contains tools for managing and manipulating Bluetooth devices using the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-bluetooth/3.34/gnome-bluetooth-3.34.5.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-bluetooth/3.34/gnome-bluetooth-3.34.5.tar.xz

- Download MD5 sum: d83faa54abaf64bb40b5313bc233e74e

- Download size: 348 KB

- Estimated disk space required: 17 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### GNOME Bluetooth Dependencies

##### Required

GTK+-3.24.30, itstool-2.0.6, libcanberra-0.30, and libnotify-0.7.9

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK-Doc-1.33.2 and dbusmock-0.23.1

##### Runtime Dependencies

BlueZ-5.61 and Systemd-249

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-bluetooth

### Installation of GNOME Bluetooth

Install GNOME Bluetooth by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: bluetooth-sendto
Installed Libraries: libgnome-bluetooth.so
Installed Directories: /usr/include/gnome-bluetooth and /usr/share/gnome-bluetooth

#### Short Descriptions

bluetooth-sendto | is a GTK+ application for transferring files over Bluetooth
`libgnome-bluetooth.so` | contains the GNOME Bluetooth API functions

Last updated on

## gnome-keyring-40.0

### Introduction to GNOME Keyring

The GNOME Keyring package contains a daemon that keeps passwords and other secrets for users.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-keyring/40/gnome-keyring-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-keyring/40/gnome-keyring-40.0.tar.xz

- Download MD5 sum: f404b61683a0ff54fb264b337772cff2

- Download size: 1.3 MB

- Estimated disk space required: 155 MB

- Estimated build time: 0.2 SBU (Using parallelism=4; add 0.3 SBU for tests)

#### GNOME Keyring Dependencies

##### Required

dbus-1.12.20 and Gcr-3.40.0

##### Recommended

Linux-PAM-1.5.1, libxslt-1.1.34, and OpenSSH-8.7p1

##### Optional

LCOV, libcap-ng, GnuPG-2.2.29, and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-keyring

### Installation of GNOME Keyring

Install GNOME Keyring by running the following commands:

    sed -i 's:"/desktop:"/org:' schema/*.xml &&

    ./configure --prefix=/usr     \
                --sysconfdir=/etc &&
    make

A session bus address is necessary to run the tests. To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

sed ... schema/*.xml: This command fixes a deprecated entry in the schema template.

### Contents

Installed Programs: gnome-keyring (symlink), gnome-keyring-3, and gnome-keyring-daemon
Installed Libraries: gnome-keyring-pkcs11.so (PKCS#11 module) and pam_gnome_keyring.so (PAM module)
Installed Directory: /usr/lib/gnome-keyring and /usr/share/xdg-desktop-portal

#### Short Descriptions

gnome-keyring-daemon | is a session daemon that keeps passwords for users

Last updated on

## gnome-settings-daemon-40.0.1

### Introduction to GNOME Settings Daemon

The GNOME Settings Daemon is responsible for setting various parameters of a GNOME Session and the applications that run under it.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-settings-daemon/40/gnome-settings-daemon-40.0.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-settings-daemon/40/gnome-settings-daemon-40.0.1.tar.xz

- Download MD5 sum: b5cbe98f5d5fe430e402048d5817f875

- Download size: 1.4 MB

- Estimated disk space required: 29 MB

- Estimated build time: 0.1 SBU (Using parallelism=4)

#### GNOME Settings Daemon Dependencies

##### Required

alsa-lib-1.2.5.1, colord-1.4.5, Fontconfig-2.13.1, Gcr-3.40.0, GeoClue-2.5.7, geocode-glib-3.26.2, gnome-desktop-40.4, Little CMS-2.12, libcanberra-0.30, libgweather-40.0, libnotify-0.7.9, librsvg-2.50.7, libwacom-1.11, PulseAudio-15.0, Systemd-249, UPower-0_99_13, and Xorg Wacom Driver-0.40.0

##### Recommended

ALSA-1.2.5, Cups-2.3.3op2, NetworkManager-1.32.10, NSS-3.69, and Wayland-1.19.0

### Note

Recommended dependencies are not strictly required for this package to build and function, but you may not get expected results at runtime if you don't install them.

##### Optional

Mutter-40.4, dbusmock-0.23.1, and umockdev-0.16.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-settings-daemon

### Installation of GNOME Settings Daemon

First, remove older versions of the systemd units:

    rm -v /usr/lib/systemd/user/gsd-*

Install GNOME Settings Daemon by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To check the results, execute: ninja test. Note that you must have python-dbusmock installed in order for the tests to complete successfully. Some tests may fail depending on the init system in use.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: libgsd.so
Installed Directories: /etc/xdg/Xwayland-session.d, /usr/include/gnome-settings-daemon-40, /usr/lib/gnome-settings-daemon-40, and /usr/share/gnome-settings-daemon

Last updated on

## gnome-control-center-40.0

### Introduction to GNOME Control Center

The GNOME Control Center package contains the GNOME settings manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-control-center/40/gnome-control-center-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-control-center/40/gnome-control-center-40.0.tar.xz

- Download MD5 sum: d704e59afe2df9c24ed876841adb3e0a

- Download size: 6.2 MB

- Estimated disk space required: 187 MB (with tests)

- Estimated build time: 0.4 SBU (Using parallelism=4; with tests)

#### GNOME Control Center Dependencies

##### Required

AccountsService-0.6.55, clutter-gtk-1.8.4, colord-gtk-0.2.0, gnome-online-accounts-3.40.0, gnome-settings-daemon-40.0.1, Grilo-0.3.13, gsound-1.0.3, libgtop-2.40.0, libpwquality-1.4.4, MIT Kerberos V5-1.19.2, shared-mime-info-2.1, and UDisks-2.9.3

##### Recommended

Cheese-3.38.0, Cups-2.3.3op2 and Samba-4.14.7 (for the Printers Panel), gnome-bluetooth-3.34.5, ibus-1.5.25, libhandy-1.2.3, and ModemManager-1.16.10 and libnma-1.8.32 (for the Network Panel)

##### Optional

dbusmock-0.23.1 (for tests)

##### Optional Runtime Dependencies

cups-pk-helper-0.2.6 (Printers panel), gnome-color-manager-3.36.0 (Color panel), and sound-theme-freedesktop-0.8 (Additional Sound Effects in Sound panel)

### Note

Recommended dependencies are not strictly required for this package to build and function, but you may not get expected results at runtime if you don't install them.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-control-center

### Installation of GNOME Control Center

Install GNOME Control Center by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. Note that you must have python-dbusmock module installed in order for the tests to complete successfully.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dcheese=false`: Use this switch if you have not installed recommended dependency Cheese.

`-Dibus=false`: Use this switch if you have not installed recommended dependency IBus.

### Contents

Installed Programs: gnome-control-center
Installed Libraries: None
Installed Directories: /usr/share/gnome-control-center, /usr/share/pixmaps/faces, and /usr/share/sounds/gnome

#### Short Descriptions

gnome-control-center | is a graphical user interface used to configure various aspects of GNOME

Last updated on

## Mutter-40.4

### Introduction to Mutter

Mutter is the window manager for GNOME. It is not invoked directly, but from GNOME Session (on a machine with a hardware accelerated video driver).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/mutter/40/mutter-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/mutter/40/mutter-40.4.tar.xz

- Download MD5 sum: bbfb54fba942b4f388e5b89759f2e9a6

- Download size: 2.6 MB

- Estimated disk space required: 296 MB

- Estimated build time: 2.1 SBU (Using parallelism=4)

#### Mutter Dependencies

##### Required

gnome-settings-daemon-40.0.1, graphene-1.10.6, libxkbcommon-1.3.0, pipewire-0.3.34, and Zenity-3.32.0

##### Recommended

desktop-file-utils-0.26, gobject-introspection-1.68.0, startup-notification-0.12, and sysprof-3.40.1

##### Recommended (Required to build the Wayland compositor)

libinput-1.18.1, Wayland-1.19.0, wayland-protocols-1.21, and Xorg-Server-1.20.13 (with Xwayland). Additionally, GTK+-3.24.30 needs to be built with Wayland support.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mutter

### Installation of Mutter

First, fix a race condition that sometimes occurs due to meson dependency ordering:

    sed -i '/libmutter_dep = declare_dependency(/a sources: mutter_built_sources,' src/meson.build

Install Mutter by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=debugoptimized .. &&
    ninja

To test the results, issue: dbus-run-session ninja test. The tests require an active X session to run correctly. It is not necessary to run a separate D-bus session if not in a GNOME session, but it provides a clean environment in any case. One test, `native-headless`, is known to fail.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=debugoptimized`: Override the default buildtype (“debug”), which would produce unoptimized binaries. The test suite of this package needs debug to be enabled.

`-Dprofiler=false`: Use this option if Sysprof is not installed, and you don't want meson to download Sysprof source code.

### Contents

Installed Programs: mutter
Installed Libraries: libmutter-8.so
Installed Directories: /usr/{lib,include,libexec/installed-tests,share/{installed-tests}}/mutter-8

#### Short Descriptions

mutter | is a Clutter based compositing GTK+ Window Manager
`libmutter-8.so` | contains the Mutter API functions

Last updated on

## gnome-shell-40.4

### Introduction to GNOME Shell

The GNOME Shell is the core user interface of the GNOME Desktop environment.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-shell/40/gnome-shell-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-shell/40/gnome-shell-40.4.tar.xz

- Download MD5 sum: 079b731cafd4db458b5d357c9a6ae697

- Download size: 1.8 MB

- Estimated disk space required: 69 MB (including tests)

- Estimated build time: 0.2 SBU (Using parallelism=4, with tests)

#### GNOME Shell Dependencies

##### Required

evolution-data-server-3.40.4, Gjs-1.68.3, gnome-autoar-0.4.0, gnome-control-center-40.0, GTK-4.4.0, Mutter-40.4, sassc-3.6.2, startup-notification-0.12, and Systemd-249

##### Recommended

asciidoc-9.1.0, desktop-file-utils-0.26, gnome-bluetooth-3.34.5, gst-plugins-base-1.18.4, and NetworkManager-1.32.10

##### Optional

GTK-Doc-1.33.2 and bash-completion

##### Runtime Dependencies

adwaita-icon-theme-40.1.1, DConf-0.40.0, GDM-40.1, gnome-backgrounds-40.1, gnome-menus-3.36.0, and telepathy-mission-control-5.16.6

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-shell

### Installation of GNOME Shell

Install GNOME Shell by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. You must be running an X session to run the tests. Some will fail if GDM-40.1 is not installed.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dextensions=false`: This option disables building the gnome-extensions CLI tool. Using this option removes the need for asciidoc-9.1.0.

### Contents

Installed Programs: gnome-extensions, gnome-extensions-app, gnome-shell, gnome-shell-extension-prefs, gnome-shell-extension-tool, and gnome-shell-perf-tool
Installed Libraries: None
Installed Directories: /usr/lib/gnome-shell, /usr/share/gnome-shell, /usr/share/gtk-doc/html/{shell,st}, and /usr/share/xdg-desktop-portal/

#### Short Descriptions

gnome-shell | provides the core user interface functions for the GNOME 3 Desktop

Last updated on

## gnome-shell-extensions-40.4

### Introduction to GNOME Shell Extensions

The GNOME Shell Extensions package contains a collection of extensions providing additional and optional functionality to the GNOME Shell.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-shell-extensions/40/gnome-shell-extensions-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-shell-extensions/40/gnome-shell-extensions-40.4.tar.xz

- Download MD5 sum: 25a9bd6a27a0fb34f31e256e842058ca

- Download size: 216 KB

- Estimated disk space required: 4.4 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Shell Extensions Dependencies

##### Required

libgtop-2.40.0

##### Optional

sassc-3.6.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-shell-extensions

### Installation of GNOME Shell Extensions

Install GNOME Shell Extensions by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr ..

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/gnome-shell/extensions

Last updated on

## gnome-session-40.1.1

### Introduction to GNOME Session

The GNOME Session package contains the GNOME session manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-session/40/gnome-session-40.1.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-session/40/gnome-session-40.1.1.tar.xz

- Download MD5 sum: 4fe52c247137b0c9329ca4ddfe9f0070

- Download size: 472 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.1 SBU

#### GNOME Session Dependencies

##### Required

dbus-glib-0.112, gnome-desktop-40.4, JSON-GLib-1.6.6, Mesa-21.2.1, Systemd-249, and UPower-0_99_13

##### Optional

GConf-3.2.6, xmlto-0.0.28, and libxslt-1.1.34 with docbook-xml-4.5 and docbook-xsl-1.79.2 (to build the documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-session

### Installation of GNOME Session

When running GNOME under Wayland-1.19.0, environment settings are not imported for the user using the system profile. The Wayland developers are currently undecided on a standard method to provide system environment settings for user sessions. To work around this limitation, execute the following command to make gnome-session use a login shell:

    sed 's@/bin/sh@/bin/sh -l@' -i gnome-session/gnome-session.in

Install GNOME Session by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

Move the documentation to a versioned directory:

    mv -v /usr/share/doc/gnome-session{,-40.1.1}

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gnome-session, gnome-session-custom-session, gnome-session-inhibit, and gnome-session-quit
Installed Libraries: None
Installed Directories: /usr/share/doc/gnome-session-40.1.1 and /usr/share/gnome-session

#### Short Descriptions

gnome-session | is used to start up the GNOME Desktop environment
gnome-session-inhibit | is used to inhibit certain GNOME Session functionality while executing the given command
gnome-session-quit | is used to end the GNOME Session

Last updated on

## GDM-40.1

### Introduction to GDM

GDM is a system service that is responsible for providing graphical logins and managing local and remote displays.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gdm/40/gdm-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gdm/40/gdm-40.1.tar.xz

- Download MD5 sum: fa32fee88d242ebf5d1c2fb69e74457e

- Download size: 788 KB

- Estimated disk space required: 36 MB

- Estimated build time: 0.1 SBU

#### GDM Dependencies

##### Required

AccountsService-0.6.55, GTK+-3.24.30, ISO Codes-4.7.0, itstool-2.0.6, libcanberra-0.30, libdaemon-0.14, and Linux-PAM-1.5.1

##### Optional

keyutils-1.6.1

##### Runtime Dependencies

gnome-session-40.1.1, gnome-shell-40.4, and Systemd-249

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gdm

### Installation of GDM

It is recommended to have a dedicated user and group to take control of the gdm daemon after it is started. Issue the following commands as the `root` user:

    groupadd -g 21 gdm &&
    useradd -c "GDM Daemon Owner" -d /var/lib/gdm -u 21 \
            -g gdm -s /bin/false gdm &&
    passwd -ql gdm

Install GDM by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr               \
          --buildtype=release         \
          -Dgdm-xsession=true ..      &&
    ninja

This package does not come with a usable test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dinitial-vt=7`: Use this switch to make GDM start on VT7 instead of the first free VT.

`-Ddefault-pam-config=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 GDM.

`-Dgdm-xsession=true`: This enables the installation of the GDM Xsession file.

### Configuring GDM

#### Config Files

`/etc/gdm/custom.conf`

#### Configuration Information

The GDM daemon is configured using the `/etc/gdm/custom.conf` file. Default values are stored in GSettings in the `gdm.schemas` file. It is recommended that end-users modify the `/etc/gdm/custom.conf` file because the schemas file may be overwritten when the user updates their system to have a newer version of GDM.

#### Systemd Unit

To start the gdm daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable gdm

### Contents

Installed Programs: gdm, gdmflexiserver, and gdm-screenshot
Installed Libraries: libgdm.so and pam_gdm.so (PAM Module)
Installed Directories: /etc/gdm, /usr/include/gdm, /usr/share/gdm, /usr/share/help/*/gdm, /var/cache/gdm, /var/lib/gdm, /var/log/gdm, and /var/run/gdm

#### Short Descriptions

gdm | is a login prompt for GNOME
gdm-screenshot | is a screenshot tool for GDM

Last updated on

## gnome-user-docs-40.4

### Introduction to GNOME User Docs

The GNOME User Docs package contains documentation for GNOME.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-user-docs/40/gnome-user-docs-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-user-docs/40/gnome-user-docs-40.4.tar.xz

- Download MD5 sum: 2c5e4db3786e047a32bce3492df0c35d

- Download size: 8.8 MB

- Estimated disk space required: 233 MB

- Estimated build time: 0.6 SBU (using parallelism=4)

#### GNOME User Docs Dependencies

##### Required

itstool-2.0.6 and libxml2-2.9.12

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-user-docs

### Installation of GNOME User Docs

Install GNOME User Docs 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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/help/*/gnome-help and /usr/share/help/*/system-admin-guide

Last updated on

## Yelp-40.3

### Introduction to Yelp

The Yelp package contains a help browser used for viewing help files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/yelp/40/yelp-40.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/yelp/40/yelp-40.3.tar.xz

- Download MD5 sum: e9d25bcdd9550d742b1f48a62a218955

- Download size: 1.4 MB

- Estimated disk space required: 22 MB

- Estimated build time: 0.1 SBU

#### Yelp Dependencies

##### Required

gsettings-desktop-schemas-40.0, WebKitGTK-2.32.3 and yelp-xsl-40.2

##### Recommended

desktop-file-utils-0.26

##### Optional

GTK-Doc-1.33.2

### Note

The Yelp package is not required for a functional GNOME Desktop. Note, however, that without Yelp you will not be able to view the built-in Help provided by core GNOME and many of the support applications.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/yelp

### Installation of Yelp

Install Yelp 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

Still as the `root` user, ensure that `/usr/share/applications/mimeinfo.cache` will be updated and therefore the help in gnome applications will work.

    update-desktop-database

### Command Explanations

`--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.

### Contents

Installed Program: gnome-help (symlink) and yelp
Installed Library: libyelp.so
Installed Directories: /usr/{include,share/gtk-doc/html}/libyelp and /usr/{lib,share}/yelp

#### Short Descriptions

yelp | is the GNOME Help Browser
`libyelp.so` | contains the Yelp API functions

Last updated on

## Chapter 34. GNOME Applications

These packages are desktop applications and assorted utilities from the GNOME project. Feel free to install them on an as needed or as desired basis.

## Baobab-40.0

### Introduction to Baobab

The Baobab package contains a graphical directory tree analyzer.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/baobab/40/baobab-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/baobab/40/baobab-40.0.tar.xz

- Download MD5 sum: 7b95ce82fa0607104fee9da78f3b17c7

- Download size: 572 KB

- Estimated disk space required: 7.4 MB

- Estimated build time: 0.1 SBU (Using parallelism=4)

#### Baobab Dependencies

##### Required

adwaita-icon-theme-40.1.1, GTK+-3.24.30, itstool-2.0.6, libhandy-1.2.3, and Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/baobab

### Installation of Baobab

Install Baobab by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Program: baobab
Installed Libraries: None
Installed Directories: /usr/share/help/*/baobab

#### Short Descriptions

baobab | is a graphical tool used to analyze disk usage

Last updated on

## Brasero-3.12.2

### Introduction to Brasero

Brasero is an application used to burn CD/DVD on the GNOME Desktop. It is designed to be as simple as possible and has some unique features that enable users to create their discs easily and quickly.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/brasero/3.12/brasero-3.12.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/brasero/3.12/brasero-3.12.2.tar.xz

- Download MD5 sum: 2dec59c179e49e37f1cfc0dd26344a2e

- Download size: 3.6 MB

- Estimated disk space required: 82 MB

- Estimated build time: 1.7 SBU

#### Brasero Dependencies

##### Required

gst-plugins-base-1.18.4, itstool-2.0.6, libcanberra-0.30, and libnotify-0.7.9

##### Recommended

gobject-introspection-1.68.0, libburn-1.5.4, libisoburn-1.5.4, and libisofs-1.5.4, Nautilus-40.2, and totem-pl-parser-3.26.6

##### Optional

GTK-Doc-1.33.2

##### Recommended (Runtime)

dvd+rw-tools-7.1 and Gvfs-1.48.1

##### Optional (Runtime)

Cdrdao-1.2.4, libdvdcss-1.4.3, Cdrtools-3.02a09, and VCDImager

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/brasero

### Installation of Brasero

Install Brasero by running the following commands:

    ./configure --prefix=/usr                \
                --enable-compile-warnings=no \
                --enable-cxx-warnings=no     &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-*-warnings=no`: These switches fix build problems under GCC-6.x compilers.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: brasero
Installed Libraries: libbrasero-{burn,media,utils}3.so, and /usr/lib/nautilus/extensions-3.0/libnautilus-brasero-extension.so
Installed Directories: /usr/include/brasero3, /usr/lib/brasero3, /usr/share/brasero, /usr/share/gtk-doc/html/libbrasero-{burn,media}, and /usr/share/help/*/brasero

#### Short Descriptions

brasero | is a simple and easy to use CD/DVD burning application for the GNOME Desktop
`libbrasero-burn3.so` | contains the Burning API functions
`libbrasero-media3.so` | contains the Media API functions
`libbrasero-utils3.so` | contains the Brasero API functions

Last updated on

## Cheese-3.38.0

### Introduction to Cheese

Cheese is used to take photos and videos with fun graphical effects.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/cheese/3.38/cheese-3.38.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/cheese/3.38/cheese-3.38.0.tar.xz

- Download MD5 sum: 83b580b1451b27d43403d3ae5829e08c

- Download size: 1.0 MB

- Estimated disk space required: 21 MB

- Estimated build time: 0.2 SBU (Using paralleism=4)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/cheese-3.38.0-upstream_fixes-1.patch

#### Cheese Dependencies

##### Required

clutter-gst-3.0.27, clutter-gtk-1.8.4, gnome-desktop-40.4, gst-plugins-bad-1.18.4, gst-plugins-good-1.18.4 (built with v4l-utils-1.20.0), libcanberra-0.30, and libgudev-237

##### Recommended

gnome-video-effects-0.5.0 (at runtime, for video effects), gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

GTK-Doc-1.33.2, libxslt-1.1.34, appstream-glib, LCOV , and Nautilus SendTo

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cheese

### Kernel Configuration

Depending on your camera, enable the appropriate options and recompile the kernel if necessary:

    Device Drivers  --->
      Multimedia support --->
        <*> Autoselect ancillary drivers (tuners, sensors, i2c, spi, frontends) [CONFIG_MEDIA_SUBDRV_AUTOSELECT]
        Media device types --->
          <*> Cameras/video grabbers support  [CONFIG_MEDIA_CAMERA_SUPPORT]
        Media drivers --->
          <*> Media USB Adapters  --->         [CONFIG_MEDIA_USB_SUPPORT]
                      Select device(s) as needed

### Installation of Cheese

First, fix a problem generating the man page:

    sed -i "s/&version;/3.38.0/" docs/reference/cheese{,-docs}.xml

Next, fix some build issues due to removed Vala functions:

    patch -Np1 -i ../cheese-3.38.0-upstream_fixes-1.patch

Install Cheese by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dgtk_doc=false .. &&
    ninja

This package does not have a working testsuite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dgtk_doc=false`: This switch prevents the build system from generating and installing the API documentation. Omit this switch if you have GTK-Doc-1.33.2 installed and wish to generate and install the API documentation. Building the documentation is broken due to an incompatibility with gtk-doc.

### Contents

Installed Program: cheese
Installed Library: libcheese.so and libcheese-gtk.so
Installed Directories: /usr/{include,share/gtk-doc/html,share/help/*}/cheese

#### Short Descriptions

cheese | is a webcam tool with graphical effects
`libcheese.so` | contains the Cheese API functions
`libcheese-gtk.so` | contains the Cheese GTK+ widgets

Last updated on

## EOG-40.3

### Introduction to EOG

EOG is an application used for viewing and cataloging image files on the GNOME Desktop. It also has basic editing capabilites.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/eog/40/eog-40.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/eog/40/eog-40.3.tar.xz

- Download MD5 sum: 7ed0133cd59b1fed88f2f9513d0de27a

- Download size: 3.4 MB

- Estimated disk space required: 46 MB

- Estimated build time: 0.3 SBU

#### EOG Dependencies

##### Required

adwaita-icon-theme-40.1.1, Exempi-2.5.2, gnome-desktop-40.4, itstool-2.0.6, libjpeg-turbo-2.1.1, libpeas-1.30.0, and shared-mime-info-2.1

##### Recommended

gobject-introspection-1.68.0, Little CMS-2.12, libexif-0.6.22, and librsvg-2.50.7

##### Optional

GTK-Doc-1.33.2 and libportal-0.4

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/eog

### Installation of EOG

Install EOG by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dlibportal=false .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

Still as the `root` user, rebuild the cache database of MIME types handled by desktop files so Nautilus-40.2 will be able to open image files with EOG.

    update-desktop-database

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dlibportal=false`: This parameter disables building EOG with support for flatpak portals. Remove this parameter if you have libportal-0.4 installed and wish to have support for flatpak portals.

`-Dgtk_doc=true`: Use this option if GTK-Doc-1.33.2 is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Program: eog
Installed Library: libeog.so
Installed Directories: /usr/include/eog-3.0 and /usr/{lib,share,share/gtk-doc/html,share/help/*}/eog

#### Short Descriptions

eog | is a fast and functional image viewer as well as an image cataloging program. It has basic editing capabilites

Last updated on

## Evince-40.4

### Introduction to Evince

Evince is a document viewer for multiple document formats. It supports PDF, Postscript, DjVu, TIFF and DVI. It is useful for viewing documents of various types using one simple application instead of the multiple document viewers that once existed on the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/evince/40/evince-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/evince/40/evince-40.4.tar.xz

- Download MD5 sum: bf78a8e8c384bbd2780b7be0ac917e79

- Download size: 2.8 MB

- Estimated disk space required: 63 MB

- Estimated build time: 0.4 SBU (Using parallelism=4)

#### Evince Dependencies

##### Required

adwaita-icon-theme-40.1.1, gsettings-desktop-schemas-40.0, GTK+-3.24.30, itstool-2.0.6, libhandy-1.2.3, libxml2-2.9.12, and OpenJPEG-2.4.0

##### Recommended

gnome-keyring-40.0, gobject-introspection-1.68.0, libarchive-3.5.2, libsecret-0.20.4, Nautilus-40.2 (to build the plugin), and Poppler-21.08.0

##### Optional

Cups-2.3.3op2 (to enable printing if support is built into GTK+ 3), gnome-desktop-40.4, gspell-1.8.4, gst-plugins-base-1.18.4, GTK-Doc-1.33.2, libgxps-0.3.2, libtiff-4.3.0, texlive-20210325 (or install-tl-unx), DjVuLibre, libspectre, Synctex, and t1lib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/evince

### Installation of Evince

First, make sure that meson can find TeXLive if it is installed. This has no effect on systems without TeXLive installed.

    export CPPFLAGS="-I/opt/texlive/2021/include" &&
    export LDFLAGS="$LDFLAGS -L/opt/texlive/2021/lib"

Install Evince by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dgtk_doc=false .. &&
    ninja

This package does not have a working testsuite.

Now, as the `root` user:

    ninja install

### Note

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

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`CPPFLAGS="..." LDFLAGS="$LDFLAGS ..."`: If TeXLive has been installed in `/opt/texlive/2021` the configure script will find `libkpathsea.so` and enable the DVI backend, but without this addition the compile will fail because it cannot find the required headers. Adding this to a system where TeXLive has not been installed does not break the build.

`-Dgtk_doc=false`: This switch disables generating the gtk-doc API reference documentation. If you have GTK-Doc-1.33.2 installed and wish to generate the API reference documentation, remove this switch.

`-Dgspell=false`: This switch turns off support for the spell checking plugin.

`-Dintrospection=false`: Use this option if you don't have gobject-introspection-1.68.0 installed and don't wish to have introspection support built into Evince.

`-Dnautilus=false`: This switch disables building the Nautilus Plugin. Use this switch if Nautilus is not installed.

`-Dkeyring=false`: This switch disables the use of libsecret. Use this switch if libsecret is not installed.

`-Dps=enabled`: Use this switch if libspectre is installed and you want to view PostScript files with Evince.

### Contents

Installed Programs: evince, evince-previewer, and evince-thumbnailer
Installed Libraries: libevdocument3.so, libevview3.so, and /usr/lib/nautilus/extensions-3.0/libevince-properties-page.so
Installed Directories: /usr/{include,lib,share}/evince, /usr/share/gtk-doc/html/{evince,libevdocument-3.0,libevview-3.0}, and /usr/share/help/*/evince

#### Short Descriptions

evince | is a multiple format document viewer
evince-previewer | is an applicaton that implements the printing previewer
evince-thumbnailer | is a simple program used to create thumbnail images of supported documents

Last updated on

## Evolution-3.40.4

### Introduction to Evolution

The Evolution package contains an integrated mail, calendar and address book suite designed for the GNOME environment.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/evolution/3.40/evolution-3.40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/evolution/3.40/evolution-3.40.4.tar.xz

- Download MD5 sum: ec866ca2cb5ee60c00de9be0beec5f2a

- Download size: 12 MB

- Estimated disk space required: 349 MB

- Estimated build time: 1.2 SBU (Using parallelism=4)

#### Evolution Dependencies

##### Required

adwaita-icon-theme-40.1.1, evolution-data-server-3.40.4, gnome-autoar-0.4.0, itstool-2.0.6, libgdata-0.18.1, shared-mime-info-2.1, and WebKitGTK-2.32.3

##### Recommended

Bogofilter-1.2.5, enchant-2.3.1, gnome-desktop-40.4, gspell-1.8.4, Highlight-4.1, libcanberra-0.30, libgweather-40.0, libnotify-0.7.9, OpenLDAP-2.5.7, and Seahorse-40.0

##### Optional

clutter-gtk-1.8.4, GeoClue-2.5.7, geocode-glib-3.26.2, and libchamplain-0.12.20 (Contact Maps plugin), GTK-Doc-1.33.2, Glade, libpst, libunity, libytnef

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/evolution

### Installation of Evolution

Install Evolution by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DSYSCONF_INSTALL_DIR=/etc  \
          -DENABLE_INSTALLED_TESTS=ON \
          -DENABLE_PST_IMPORT=OFF     \
          -DENABLE_YTNEF=OFF          \
          -DENABLE_CONTACT_MAPS=OFF   \
          -G Ninja .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`-DENABLE_YTNEF=OFF`: This switch is used to disable the yTNEF library usage because libytnef is not part of BLFS.

`-DENABLE_PST_IMPORT=OFF`: This switch is used to disable the pst-import plugin because libpst is not part of BLFS.

`-DENABLE_CONTACT_MAPS=ON`: Use this switch if you have installed the necessary dependencies and wish to build the Contact Maps plugin.

### Contents

Installed Programs: evolution
Installed Libraries: libeabutil.so, libeabwidgets.so, libecontacteditor.so, libecontactlisteditor.so, libecontactprint.so, libemail-engine.so, libessmime.so, libevolution-addressbook-importers.so, libevolution-calendar-importers.so, libevolution-calendar.so, libevolution-mail-composer.so, libevolution-mail-formatter.so, libevolution-mail-importers.so, libevolution-mail.so, libevolution-shell.so, libevolution-smime.so, libevolution-util.so, libgnomecanvas.so, and several modules and plugins in /usr/lib/evolution/{modules,plugins,web-extensions}
Installed Directories: /usr/include/evolution, /usr/lib/evolution, /usr/libexec/evolution, /usr/share/evolution, /usr/share/installed-tests/evolution, /usr/share/help/*/evolution, and optionally /usr/share/gtk-doc/html/{evolution-mail-composer,evolution-mail-engine}, /usr/share/gtk-doc/html/{evolution-mail-formatter,evolution-shell}, and /usr/share/gtk-doc/html/evolution-util

#### Short Descriptions

evolution | is an email, calendar and address book suite for the GNOME Desktop

Last updated on

## File-Roller-3.40.0

### Introduction to File Roller

File Roller is an archive manager for GNOME with support for tar, bzip2, gzip, zip, jar, compress, lzop, zstd, and many other archive formats.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

File Roller is only a graphical interface to archiving utilities such as tar and zip.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/file-roller/3.40/file-roller-3.40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/file-roller/3.40/file-roller-3.40.0.tar.xz

- Download MD5 sum: b38c3eaea9aba5f44d2701fa23a7a0ff

- Download size: 856 KB

- Estimated disk space required: 25 MB

- Estimated build time: 0.1 SBU (Using parallelism=4)

#### File Roller Dependencies

##### Required

GTK+-3.24.30 and itstool-2.0.6

##### Recommended

cpio-2.13, desktop-file-utils-0.26, JSON-GLib-1.6.6, libarchive-3.5.2, libnotify-0.7.9, and Nautilus-40.2

##### Optional (Runtime)

UnRar-6.0.7, UnZip-6.0, and Zip-3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/file-roller

### Installation of File Roller

Install File Roller by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release -Dpackagekit=false .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install &&
    chmod -v 0755 /usr/libexec/file-roller/isoinfo.sh

### Note

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

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dpackagekit=false`: This switch disables the use of PackageKit which isn't suitable for BLFS.

### Contents

Installed Program: file-roller
Installed Libraries: libnautilus-fileroller.so
Installed Directories: /usr/{libexec,share{,/help/*}}/file-roller

#### Short Descriptions

file-roller | is an archive manager for GNOME

Last updated on

## gnome-calculator-40.1

### Introduction to GNOME Calculator

GNOME Calculator is a powerful graphical calculator with financial, logical and scientific modes. It uses a multiple precision package to do its arithmetic to give a high degree of accuracy.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-calculator/40/gnome-calculator-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-calculator/40/gnome-calculator-40.1.tar.xz

- Download MD5 sum: 57e05479d89a68a3649aa4bad69a02da

- Download size: 1000 KB

- Estimated disk space required: 36 MB (with tests)

- Estimated build time: 0.4 SBU (with tests)

#### GNOME Calculator Dependencies

##### Required

GTK+-3.24.30, gtksourceview4-4.8.1, itstool-2.0.6, libgee-0.20.4, libhandy-1.2.3, and libsoup-2.74.0

##### Recommended

Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-calculator

### Installation of GNOME Calculator

Install GNOME Calculator by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gcalccmd and gnome-calculator
Installed Library: libgcalc-2.so and libgci-1.so
Installed Directories: /usr/include/gcalc-2, /usr/include/gci-2, /usr/share/devhelp/books/{GCalc-2,GCi-1}, and /usr/share/help/*/gnome-calculator

#### Short Descriptions

gnome-calculator | is the official calculator of the GNOME Desktop
gcalccmd | is a command line version of gnome-calculator

Last updated on

## gnome-color-manager-3.36.0

### Introduction to GNOME Color Manager

GNOME Color Manager is a session framework for the GNOME desktop environment that makes it easy to manage, install and generate color profiles.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-color-manager/3.36/gnome-color-manager-3.36.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-color-manager/3.36/gnome-color-manager-3.36.0.tar.xz

- Download MD5 sum: c5360705a68e88455b1801200e9aaa2e

- Download size: 2.1 MB

- Estimated disk space required: 12 MB

- Estimated build time: 0.1 SBU

#### GNOME Color Manager Dependencies

##### Required

colord-1.4.5, GTK+-3.24.30, itstool-2.0.6, Little CMS-2.12, libcanberra-0.30, and libexif-0.6.22

##### Recommended

desktop-file-utils-0.26

##### Optional

appstream-glib and DocBook-utils-0.6.14 (currently causes build to fail)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-color-manager

### Installation of GNOME Color Manager

If DocBook-utils-0.6.14 is installed, disable installation of the man pages to avoid a build failure:

    sed /subdir\(\'man/d -i meson.build

Install GNOME Color Manager by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test. The tests must be run from an X session.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gcm-import, gcm-inspect, gcm-picker, and gcm-viewer
Installed Libraries: None
Installed Directories: /usr/share/gnome-color-manager and /usr/share/help/*/gnome-color-manager

#### Short Descriptions

gcm-import | allows you to import ICC profiles supplied by vendors
gcm-inspect | allows you to inspect your session color-management settings
gcm-picker | allows you to pick spot colors for use by an attached colorimeter
gcm-viewer | allows you to view properties of ICC profiles

Last updated on

## gnome-disk-utility-40.2

### Introduction to GNOME Disk Utility

The GNOME Disk Utility package provides applications used for dealing with storage devices.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-disk-utility/40/gnome-disk-utility-40.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-disk-utility/40/gnome-disk-utility-40.2.tar.xz

- Download MD5 sum: 10a01b70d411f5e6c6d1fbf16e07458d

- Download size: 1.3 MB

- Estimated disk space required: 32 MB

- Estimated build time: 0.1 SBU

#### GNOME Disk Utility Dependencies

##### Required

gnome-settings-daemon-40.0.1, itstool-2.0.6, libdvdread-6.1.2, libhandy-1.2.3, libpwquality-1.4.4, libsecret-0.20.4, and UDisks-2.9.3

##### Optional

appstream-glib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-disk-utility

### Installation of GNOME Disk Utility

Install GNOME Disk Utility by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gnome-disk-image-mounter and gnome-disks
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

gnome-disk-image-mounter | is used to set up disk images
gnome-disks | is used to inspect, format, partition and configure disks and block devices

Last updated on

## gnome-logs-3.36.0

### Introduction to GNOME Logs

The GNOME Logs package contains a log viewer for the systemd journal.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-logs/3.36/gnome-logs-3.36.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-logs/3.36/gnome-logs-3.36.0.tar.xz

- Download MD5 sum: fc25928b4ffad25e27b3755751b4b323

- Download size: 728 KB

- Estimated disk space required: 37 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Logs Dependencies

##### Required

GTK+-3.24.30, gsettings-desktop-schemas-40.0, and itstool-2.0.6

##### Optional

desktop-file-utils-0.26 (for the test suite), and docbook-xml-4.5, docbook-xsl-1.79.2, libxslt-1.1.34 (to build manual pages), appstream-glib, and dogtail

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-logs

### Installation of GNOME Logs

Install GNOME Logs by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gnome-logs
Installed Libraries: None
Installed Directories: /usr/share/gnome-logs and /usr/share/help/*/gnome-logs

#### Short Descriptions

gnome-logs | is a GNOME log viewer for the systemd journal

Last updated on

## gnome-maps-40.4

### Introduction to GNOME Maps

GNOME Maps is a map application for GNOME.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-maps/40/gnome-maps-40.4.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-maps/40/gnome-maps-40.4.tar.xz

- Download MD5 sum: 508309d2942484a239cffe62b1fdea05

- Download size: 3.4 MB

- Estimated disk space required: 16 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Maps Dependencies

##### Required

clutter-gtk-1.8.4, desktop-file-utils-0.26, Folks-0.15.3, GeoClue-2.5.7, geocode-glib-3.26.2, gfbgraph-0.2.4, Gjs-1.68.3, libchamplain-0.12.20, libgee-0.20.4, libhandy-1.2.3, and rest-0.8.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-maps

### Installation of GNOME Maps

Install GNOME Maps by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gnome-maps
Installed Libraries: libgnome-maps.so
Installed Directories: /usr/lib/gnome-maps and /usr/share/gnome-maps

#### Short Descriptions

gnome-maps | is a map application for GNOME

Last updated on

## gnome-nettool-3.8.1

### Introduction to GNOME Nettool

The GNOME Nettool package is a network information tool which provides GUI interface for some of the most common command line network tools.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-nettool/3.8/gnome-nettool-3.8.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-nettool/3.8/gnome-nettool-3.8.1.tar.xz

- Download MD5 sum: d4fc944b7ba8fd5f49f04a73e0d37e80

- Download size: 576 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/gnome-nettool-3.8.1-ping_and_netstat_fixes-1.patch

#### GNOME Nettool Dependencies

##### Required

GTK+-3.24.30, itstool-2.0.6, and libgtop-2.40.0

##### Runtime Dependencies

BIND Utilities-9.16.20, Nmap-7.92, Net-tools-2.10, Traceroute-2.1.0, and Whois-5.4.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-nettool

### Installation of GNOME Nettool

First, adapt GNOME Nettool to changes in the ping, ping6, and netstat utilities:

    patch -Np1 -i ../gnome-nettool-3.8.1-ping_and_netstat_fixes-1.patch

Install GNOME Nettool 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

### Contents

Installed Program: gnome-nettool
Installed Libraries: None
Installed Directories: /usr/share/gnome-nettool and /usr/share/help/*/gnome-nettool

#### Short Descriptions

gnome-nettool | is a network information tool

Last updated on

## gnome-power-manager-3.32.0

### Introduction to GNOME Power Manager

The GNOME Power Manager package contains a tool used to report on power management on the system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-power-manager/3.32/gnome-power-manager-3.32.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-power-manager/3.32/gnome-power-manager-3.32.0.tar.xz

- Download MD5 sum: 9349e6447c80bcbd71d5a4f1469f508e

- Download size: 372 KB

- Estimated disk space required: 4.3 MB

- Estimated build time: less than 0.1 SBU (with tests)

#### GNOME Power Manager Dependencies

##### Required

GTK+-3.24.30 and UPower-0_99_13

##### Optional

DocBook-utils-0.6.14 and appstream-glib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-power-manager

### Installation of GNOME Power Manager

Install GNOME Power Manager by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr  --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Contents

Installed Programs: gnome-power-statistics
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

gnome-power-statistics | is used to visualize the power consumption of laptop hardware

Last updated on

## gnome-screenshot-40.0

### Introduction to GNOME Screenshot

The GNOME Screenshot is a utility used for taking screenshots of the entire screen, a window or a user-defined area of the screen, with optional beautifying border effects.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-screenshot/40/gnome-screenshot-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-screenshot/40/gnome-screenshot-40.0.tar.xz

- Download MD5 sum: 9300f1ef8edd9f1ec7903c4121dea247

- Download size: 352 KB

- Estimated disk space required: 3.8 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Screenshot Dependencies

##### Required

GTK+-3.24.30, libcanberra-0.30 (Compiled with GTK+3 support), and libhandy-1.2.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-screenshot

### Installation of GNOME Screenshot

Install GNOME Screenshot by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Note

In order to best run GNOME Screenshot from the command line, the -i option needs to be specified.

### Contents

Installed Program: gnome-screenshot
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

gnome-screenshot | is used to capture the screen, a window, or a user-defined area and save the snapshot image to a file

Last updated on

## gnome-system-monitor-40.1

### Introduction to GNOME System Monitor

The GNOME System Monitor package contains GNOME's replacement for gtop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-system-monitor/40/gnome-system-monitor-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-system-monitor/40/gnome-system-monitor-40.1.tar.xz

- Download MD5 sum: aad861b88ccd59a6a41217457600ba13

- Download size: 748 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.2 SBU (with parallelism=4)

#### GNOME System Monitor Dependencies

##### Required

adwaita-icon-theme-40.1.1, Gtkmm-3.24.5, itstool-2.0.6, libgtop-2.40.0, and librsvg-2.50.7

##### Optional

desktop-file-utils-0.26 and appstream-glib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-system-monitor

### Installation of GNOME System Monitor

Install GNOME System Monitor by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Contents

Installed Program: gnome-system-monitor
Installed Libraries: None
Installed Directories: /usr/{libexec,share,share/help/*}/gnome-system-monitor

#### Short Descriptions

gnome-system-monitor | is used to display the process tree and hardware meters

Last updated on

## gnome-terminal-3.40.3

### Introduction to GNOME Terminal

The GNOME Terminal package contains the terminal emulator for GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-terminal/3.40/gnome-terminal-3.40.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-terminal/3.40/gnome-terminal-3.40.3.tar.xz

- Download MD5 sum: 06db1340df1c10a1b159b940c30db87c

- Download size: 2.5 MB

- Estimated disk space required: 48 MB

- Estimated build time: 0.1 SBU

#### GNOME Terminal Dependencies

##### Required

DConf-0.40.0, gnome-shell-40.4, gsettings-desktop-schemas-40.0, itstool-2.0.6, pcre2-10.37, and VTE-0.64.2

##### Recommended

Nautilus-40.2

##### Optional

desktop-file-utils-0.26, and appstream-glib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-terminal

### Installation of GNOME Terminal

Install GNOME Terminal 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

### Note

To run GNOME Terminal, the environment variable `LANG` must be set to a UTF-8 locale prior to starting the graphical environment.

### Command Explanations

`--disable-search-provider`: This switch disables the “search gnome-shell” provider. Use this option if you do not have gnome-shell installed.

`--without-nautilus-extension`: This switch disables a dependency on the nautilus file manager. Use this option if you do not have Nautilus installed.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: gnome-terminal
Installed Libraries: /usr/lib/nautilus/extensions-3.0/libterminal-nautilus.so (Nautilus Extension)
Installed Directories: /usr/share/help/*/gnome-terminal

#### Short Descriptions

gnome-terminal | is the GNOME Terminal Emulator

Last updated on

## gnome-tweaks-40.0

### Introduction to GNOME Tweaks

GNOME Tweaks is a simple program used to tweak advanced GNOME settings.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-tweaks/40/gnome-tweaks-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-tweaks/40/gnome-tweaks-40.0.tar.xz

- Download MD5 sum: 81b5883a6f0046f1b63cc998829d83e4

- Download size: 248 KB

- Estimated disk space required: 5.3 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Tweaks Dependencies

##### Required

GTK+-3.24.30, gsettings-desktop-schemas-40.0, libhandy-1.2.3, PyGObject-3.40.1, and sound-theme-freedesktop-0.8

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-tweaks

### Installation of GNOME Tweaks

First, if you are upgrading from gnome-tweaks-3.34.x, remove some incompatible files as the `root` user:

    rm -rf /usr/lib/python3.9/site-packages/gtweak

Install GNOME Tweaks by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gnome-tweaks
Installed Libraries: None
Installed Directories: /usr/lib/python3.9/site-packages/gtweak and /usr/share/gnome-tweaks

#### Short Descriptions

gnome-tweaks | is used to tweak advanced GNOME settings

Last updated on

## gnome-weather-40.1

### Introduction to GNOME Weather

GNOME Weather is a small application that allows you to monitor the current weather conditions for your city, or anywhere in the world, and to access updated forecasts provided by various internet services.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnome-weather/40/gnome-weather-40.1.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnome-weather/40/gnome-weather-40.1.tar.xz

- Download MD5 sum: 8cb2525bb9321ff27889877bbd735d7d

- Download size: 920 KB

- Estimated disk space required: 4.7 MB

- Estimated build time: less than 0.1 SBU

#### GNOME Weather Dependencies

##### Required

Gjs-1.68.3, libgweather-40.0, and libhandy-1.2.3

##### Optional

appstream-glib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnome-weather

### Installation of GNOME Weather

Install GNOME Weather by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gnome-weather
Installed Libraries: None
Installed Directories: /usr/share/org.gnome.Weather

#### Short Descriptions

gnome-weather | is a small application that allows you to monitor the current weather conditions anywhere in the world

Last updated on

## Gucharmap-13.0.8

### Introduction to Gucharmap

Gucharmap is a Unicode character map and font viewer. It allows you to browse through all the available Unicode characters and categories for the installed fonts, and to examine their detailed properties. It is an easy way to find the character you might only know by its Unicode name or code point.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.gnome.org/GNOME/gucharmap/-/archive/13.0.8/gucharmap-13.0.8.tar.bz2

- Download MD5 sum: 5dbe3a3f6d063f819f82f15d6613a7a4

- Download size: 1.3 MB

- Estimated disk space required: 68 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

##### Unicode Character Database files

- Download: https://www.unicode.org/Public/zipped/13.0.0/UCD.zip (Unicode Character Database)

- Download: https://www.unicode.org/Public/zipped/13.0.0/Unihan.zip (CJK Unified Ideographs)

#### Gucharmap Dependencies

##### Required

desktop-file-utils-0.26, gsettings-desktop-schemas-40.0, GTK+-3.24.30, itstool-2.0.6, and UnZip-6.0

##### Recommended

gobject-introspection-1.68.0 and Vala-0.52.5

##### Optional

appstream-glib and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gucharmap

### Installation of Gucharmap

Install Gucharmap by running the following commands:

    mkdir build                   &&
    cd    build                   &&
    mkdir ucd                     &&
    pushd ucd                     &&
      unzip ../../../UCD.zip      &&
      cp -v ../../../Unihan.zip . &&
    popd                          &&

    meson --prefix=/usr         \
          --strip               \
          --buildtype=release   \
          -Ducd_path=./ucd      \
          -Ddocs=false ..       &&
    ninja

This package does not have a testsuite.

Now, as the `root` user:

    rm  -fv /usr/share/glib-2.0/schemas/org.gnome.Charmap.enums.xml &&
    ninja install

### Command Explanations

`--strip`: Although the package defaults to a release build without debug information, without this switch there will be some debug information in the binaries.

`-Ducd_path=./ucd`: This points to where the extracted main Unicode data files, and the zipped Unihan archive can be found.

rm -fv /usr/share/glib-2.0/schemas/org.gnome.Charmap.enums.xml: Old versions of this package installed an obsolete file that prevents the program from running, as if the main schema has not been installed. Forcibly removing works even if the old file is not present.

`-Ddocs=false`: This allows the package to build even if gtk-doc has not been installed. Remove this if you have installed that and wish to build the documentation.

`-Dgir=false`: Use this if you have not installed gobject-introspection-1.68.0.

`-Dvapi=false`: Use this if you have not installed Vala-0.52.5.

### Contents

Installed Program: gucharmap
Installed Library: libgucharmap_2_90.so
Installed Directories: /usr/include/gucharmap-2.90 and /usr/share/help/*/gucharmap

#### Short Descriptions

gucharmap | is a Unicode character map and font viewer
`libgucharmap_2_90.so` | contains the Gucharmap API functions

Last updated on

## Seahorse-40.0

### Introduction to Seahorse

Seahorse is a graphical interface for managing and using encryption keys. Currently it supports PGP keys (using GPG/GPGME) and SSH keys.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/seahorse/40/seahorse-40.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/seahorse/40/seahorse-40.0.tar.xz

- Download MD5 sum: c6c11d77e64c4efc31f02c7127327be8

- Download size: 1.3 MB

- Estimated disk space required: 58 MB

- Estimated build time: 0.4 SBU

#### Seahorse Dependencies

##### Required

Gcr-3.40.0, GnuPG-2.2.29, GPGME-1.16.0, itstool-2.0.6, libhandy-1.2.3, libpwquality-1.4.4 and libsecret-0.20.4

##### Recommended

libsoup-2.74.0, p11-kit-0.24.0, OpenLDAP-2.5.7, OpenSSH-8.7p1 (for managing SSH keys) and Vala-0.52.5

##### Optional

Avahi-0.8

##### Runtime Dependency

gnome-keyring-40.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/seahorse

### Installation of Seahorse

Install Seahorse by running the following commands:

    sed -i -r 's:"(/apps):"/org/gnome\1:' data/*.xml &&

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

sed ... data/*.xml: This command fixes some deprecated entries in the schema templates.

`-Dldap-support=false`: Add this switch if you have not installed openldap. Note that you will have to use the following 'sed' command to fix the build: sed -i "448 s/g_list/if (ssrc) &/" pgp/seahorse-pgp-backend.c

### Contents

Installed Program: seahorse
Installed Libraries: None
Installed Directories: /usr/{libexec,share,share/help/*}/seahorse

#### Short Descriptions

seahorse | is the graphical interface for managing and using encryption keys

Last updated on

## Vinagre-3.22.0

### Introduction to Vinagre

Vinagre is a VNC client for the GNOME Desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/vinagre/3.22/vinagre-3.22.0.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/vinagre/3.22/vinagre-3.22.0.tar.xz

- Download MD5 sum: 451554ddf46636105cd5f0330e98d254

- Download size: 1.5 MB

- Estimated disk space required: 25 MB

- Estimated build time: 0.2 SBU

#### Vinagre Dependencies

##### Required

gtk-vnc-1.2.0, itstool-2.0.6, and libsecret-0.20.4

##### Recommended

telepathy-glib-0.24.2, Vala-0.52.5, and VTE-0.64.2

##### Optional

Avahi-0.8, appstream-glib, FreeRDP (For connecting to Windows desktops), and Spice-GTK

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vinagre

### Installation of Vinagre

First fix an issue exposed by GCC-10:

    sed -e '/_VinagreVnc/i gboolean scaling_command_line;' \
        -i plugins/vnc/vinagre-vnc-connection.c &&
    sed -e '/scaling_/s/^/extern /' \
        -i plugins/vnc/vinagre-vnc-connection.h

Install Vinagre by running the following commands:

    ./configure --prefix=/usr \
                --enable-compile-warnings=minimum &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-compile-warnings=minimum`: This switch disables compiler warnings that can cause the build to fail when built under GCC6.

### Contents

Installed Programs: vinagre
Installed Libraries: None
Installed Directories: /usr/share/help/*/vinagre and /usr/share/vinagre

#### Short Descriptions

vinagre | is a remote desktop viewer for the GNOME Desktop

Last updated on

# Part IX. Xfce

## Chapter 35. Xfce Desktop

Xfce is a desktop environment that aims to be fast and low on system resources, while still being visually appealing and user friendly.

Xfce embodies the traditional UNIX philosophy of modularity and re-usability. It consists of a number of components that provide the full functionality one can expect of a modern desktop environment. They are packaged separately and you can pick among the available packages to create the optimal personal working environment.

Build Xfce core packages in the order presented in the book for the easiest resolution of dependencies.

## libxfce4util-4.16.0

### Introduction to libxfce4util

The libxfce4util package is a basic utility library for the Xfce desktop environment.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/libxfce4util/4.16/libxfce4util-4.16.0.tar.bz2

- Download MD5 sum: 5a2a7b72c0357f410d8e0d4190beeae2

- Download size: 500 KB

- Estimated disk space required: 5.3 MB

- Estimated build time: less than 0.1 SBU

#### libxfce4util Dependencies

##### Required

GLib-2.68.4 and gobject-introspection-1.68.0

##### Recommended

Vala-0.52.5

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxfce4util

### Installation of libxfce4util

Install libxfce4util 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

### Contents

Installed Program: xfce4-kiosk-query
Installed Library: libxfce4util.so
Installed Directories: /usr/include/xfce4 and /usr/share/gtk-doc/html/libxfce4util

#### Short Descriptions

xfce4-kiosk-query | Queries the given capabilities of <module> for the current user and reports whether the user has the capabilities or not. This tool is mainly meant for system administrators to test their Kiosk setup
`libxfce4util.so` | contains basic utility functions for the Xfce desktop environment

Last updated on

## Xfconf-4.16.0

### Introduction to Xfconf

Xfconf is the configuration storage system for Xfce.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfconf/4.16/xfconf-4.16.0.tar.bz2

- Download MD5 sum: ac204fcc17fd4299d59e619aadbc6194

- Download size: 620 KB

- Estimated disk space required: 9.3 MB

- Estimated build time: 0.1 SBU

#### Xfconf Dependencies

##### Required

libxfce4util-4.16.0

##### Optional

GTK-Doc-1.33.2 and Vala-0.52.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfconf

### Installation of Xfconf

Install Xfconf 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

### Contents

Installed Program: xfconf-query
Installed Library: libxfconf-0.so
Installed Directories: /usr/include/xfce4/xfconf-0, /usr/lib/xfce4/xfconf, and /usr/share/gtk-doc/html/xfconf

#### Short Descriptions

xfconf-query | is a commandline utility to view or change any setting stored in Xfconf
`libxfconf-0.so` | contains basic functions for Xfce configuration

Last updated on

## libxfce4ui-4.16.0

### Introduction to libxfce4ui

The libxfce4ui package contains GTK+ 2 widgets that are used by other Xfce applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/libxfce4ui/4.16/libxfce4ui-4.16.0.tar.bz2

- Download MD5 sum: 4a7035374f016efa968b776a110065d9

- Download size: 820 KB

- Estimated disk space required: 12 MB

- Estimated build time: 0.1 SBU

#### libxfce4ui Dependencies

##### Required

GTK+-3.24.30 and Xfconf-4.16.0

##### Recommended

startup-notification-0.12

##### Optional

GTK-Doc-1.33.2, gobject-introspection-1.68.0, libgtop-2.40.0, libgudev-237, and Glade

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libxfce4ui

### Installation of libxfce4ui

Install libxfce4ui by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: None
Installed Libraries: libxfce4kbd-private-{2,3}.so and libxfce4ui-{1,2}.so
Installed Directories: /etc/xdg/xfce4, /usr/include/xfce4/libxfce4kbd-private-2, /usr/include/xfce4/libxfce4ui-{1,2}, and /usr/share/gtk-doc/html/libxfce4ui

#### Short Descriptions

`libxfce4kbd-private-2.so` | is a private Xfce library for sharing code between Xfwm4 and Xfce4 Settings
`libxfce4ui-1.so` | contains widgets that are used by other Xfce applications

Last updated on

## Exo-4.16.2

### Introduction to Exo

Exo is a support library used in the Xfce desktop. It also has some helper applications that are used throughout Xfce.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/exo/4.16/exo-4.16.2.tar.bz2

- Download MD5 sum: c75bace01ab779afef911d8a3823c8fa

- Download size: 864 KB

- Estimated disk space required: 18 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

#### Exo Dependencies

##### Required

GTK+-3.24.30, libxfce4ui-4.16.0, and libxfce4util-4.16.0

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/exo

### Installation of Exo

Install Exo 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

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: exo-desktop-item-edit and exo-open
Installed Libraries: libexo-2.so
Installed Directories: /usr/include/exo-2 and /usr/share/gtk-doc/html/exo-2

#### Short Descriptions

exo-desktop-item-edit | is a command line utility to create or edit icons on the desktop
exo-open | is a command line frontend to the Xfce Preferred Applications framework. It can either be used to open a list of urls with the default URL handler or launch the preferred application for a certain category
`libexo-2.so` | contains additional widgets, a framework for editable toolbars, light-weight session management support and functions to automatically synchronise object properties (based on GObject Binding Properties)

Last updated on

## Garcon-4.16.1

### Introduction to Garcon

The Garcon package contains a freedesktop.org compliant menu implementation based on GLib and GIO.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/garcon/4.16/garcon-4.16.1.tar.bz2

- Download MD5 sum: 0a8b96a47e375055fd7ebf41f495add5

- Download size: 509 KB

- Estimated disk space required: 8.2 MB

- Estimated build time: 0.1 SBU

#### Garcon Dependencies

##### Required

libxfce4ui-4.16.0 and GTK+-3.24.30

##### Optional

gobject-introspection-1.68.0 and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/garcon

### Installation of Garcon

Install Garcon by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Library: libgarcon-1.so and libgarcon-gtk3-1.so
Installed Directory: /usr/include/garcon-1, /usr/include/garcon-gtk3-1, and /usr/share/gtk-doc/html/garcon

#### Short Descriptions

`libgarcon-1.so` | contains functions that provide a freedesktop.org compliant menu implementation based on GLib and GIO

Last updated on

## thunar-4.16.8

### Introduction to thunar

Thunar is the Xfce file manager, a GTK+ 3 GUI to organise the files on your computer.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/thunar/4.16/thunar-4.16.8.tar.bz2

- Download MD5 sum: 7bdf84a1eb6bf7a033cf4df031e8715d

- Download size: 2.4 MB

- Estimated disk space required: 53 MB

- Estimated build time: 0.5 SBU

#### Thunar Dependencies

##### Required

Exo-4.16.2

##### Required (Runtime)

hicolor-icon-theme-0.17

##### Recommended

libgudev-237, libnotify-0.7.9, and PCRE-8.45

##### Optional

GTK-Doc-1.33.2 (for documentation), Gvfs-1.48.1 (for remote browsing and automounting), libexif-0.6.22 and tumbler-4.16.0 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/thunar

### Installation of Thunar

Install Thunar by running the following commands:

    ./configure --prefix=/usr \
                --sysconfdir=/etc \
                --docdir=/usr/share/doc/Thunar-4.16.8 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: Thunar (symlink to thunar), thunar, and thunar-settings
Installed Libraries: libthunarx-3.so, thunar-apr.so, thunar-sbr.so, thunar-uca.so, thunar-wallpaper-plugin.so, and libthunar-tpa.so
Installed Directories: /etc/xdg/Thunar, /usr/include/thunarx-3, /usr/lib/Thunar, /usr/lib/thunarx-3, /usr/lib/xfce4, /usr/share/Thunar, /usr/share/doc/thunar-4.16.8, /usr/share/gtk-doc/html/thunarx, and /usr/share/xfce4

#### Short Descriptions

thunar | is the Xfce file manager
thunar-settings | is a shell script that launches a dialog box to allow you to alter the behaviour of Thunar
`libthunarx-3.so` | contains the Thunar extension library which permits adding new features to the Thunar file manager

Last updated on

## thunar-volman-4.16.0

### Introduction to the Thunar Volume Manager

The Thunar Volume Manager is an extension for the Thunar file manager, which enables automatic management of removable drives and media.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/thunar-volman/4.16/thunar-volman-4.16.0.tar.bz2

- Download MD5 sum: 50ccc0e9a4eb7b5a6e9e498823c577f9

- Download size: 492 KB

- Estimated disk space required: 6.8 MB

- Estimated build time: less than 0.1 SBU

#### Thunar Volume Manager Dependencies

##### Required

Exo-4.16.2 and libgudev-237

##### Recommended

libnotify-0.7.9

##### Recommended Runtime Dependencies

Gvfs-1.48.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/thunar-volman

### Installation of the Thunar Volume Manager

Install the Thunar Volume Manager 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

### Contents

Installed Programs: thunar-volman and thunar-volman-settings
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

thunar-volman | is the Thunar Volume Manager, a command line utility to automatically mount or unmount removable media
thunar-volman-settings | is a small GTK+ 3 application for changing Thunar Volume Manager settings

Last updated on

## tumbler-4.16.0

### Introduction to tumbler

The Tumbler package contains a D-Bus thumbnailing service based on the thumbnail management D-Bus specification. This is useful for generating thumbnail images of files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/tumbler/4.16/tumbler-4.16.0.tar.bz2

- Download MD5 sum: 3ab8fc5ea03e975c6df2ac1c81fbfc68

- Download size: 596 KB

- Estimated disk space required: 13 MB

- Estimated build time: 0.1 SBU

#### Tumbler Dependencies

##### Required

GLib-2.68.4

##### Optional

cURL-7.78.0, FreeType-2.11.0, gdk-pixbuf-2.42.6, gst-plugins-base-1.18.4, GTK-Doc-1.33.2, libjpeg-turbo-2.1.1, libgsf-1.14.47, libpng-1.6.37, Poppler-21.08.0, FFmpegThumbnailer, libgepub, and libopenraw

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tumbler

### Installation of Tumbler

Install Tumbler by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: tumblerd
Installed Library: libtumbler-1.so and several under /usr/lib/tumbler-1/plugins/
Installed Directories: /etc/xdg/tumbler, /usr/include/tumbler-1, /usr/lib/tumbler-1 and /usr/share/gtk-doc/html/tumbler

#### Short Descriptions

tumblerd | is a D-Bus service for applications such as Thunar and Ristretto to use thumbnail images
`libtumbler-1.so` | contains functions that the Tumbler daemon uses to create thumbnail images

Last updated on

## xfce4-appfinder-4.16.1

### Introduction to Xfce4 Appfinder

Xfce4 Appfinder is a tool to find and launch installed applications by searching the .desktop files installed on your system.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfce4-appfinder/4.16/xfce4-appfinder-4.16.1.tar.bz2

- Download MD5 sum: 1007ec4307822c0b881d63b9ec56e60b

- Download size: 567 KB

- Estimated disk space required: 6.9 MB

- Estimated build time: less than 0.1 SBU

#### Xfce4 Appfinder Dependencies

##### Required

Garcon-4.16.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-appfinder

### Installation of Xfce4 Appfinder

Install Xfce4 Appfinder 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

### Contents

Installed Programs: xfce4-appfinder and xfrun4 (symlink)
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

xfce4-appfinder | Is a GTK+ 3 application that enables you to quickly search through the .desktop files installed on your system looking for an application

Last updated on

## xfce4-panel-4.16.3

### Introduction to Xfce4 Panel

The Xfce4 Panel package contains the Xfce4 Panel.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfce4-panel/4.16/xfce4-panel-4.16.3.tar.bz2

- Download MD5 sum: 7a1d1d405e15240c3bbcfa56c4f32efc

- Download size: 1.4 MB

- Estimated disk space required: 37 MB

- Estimated build time: 0.4 SBU

#### Xfce4 Panel Dependencies

##### Required

Cairo-1.17.4, Exo-4.16.2, Garcon-4.16.1, and libwnck-40.0

##### Optional

GTK-Doc-1.33.2 and libdbusmenu

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-panel

### Installation of Xfce4 Panel

Install Xfce4 Panel by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: xfce4-panel, xfce4-popup-applicationsmenu, xfce4-popup-directorymenu, and xfce4-popup-windowmenu
Installed Library: libxfce4panel-2.0.so
Installed Directories: /etc/xdg/xfce4/panel, /usr/include/xfce4/libxfce4panel-1.0, /usr/lib/xfce4/panel, /usr/share/gtk-doc/html/libxfce4panel-1.0 and /usr/share/xfce4/panel

#### Short Descriptions

xfce4-panel | is the Xfce panel
xfce4-popup-applicationsmenu | is a shell script that uses D-Bus and Xfce Panel to display a popup menu of the installed applications
xfce4-popup-directorymenu | is a shell script that uses D-Bus and Xfce Panel to display a popup menu of your home folder and its subdirectories
xfce4-popup-windowmenu | is a shell script that uses DBus to display the Xfwm4 a popup menu
`libxfce4panel-2.0.so` | contains the Xfce Panel API functions

Last updated on

## xfce4-power-manager-4.16.0

### Introduction to Xfce4 Power Manager

The Xfce4 Power Manager is a power manager for the Xfce desktop, Xfce power manager manages the power sources on the computer and the devices that can be controlled to reduce their power consumption (such as LCD brightness level, monitor sleep, CPU frequency scaling). In addition, Xfce4 Power Manager provides a set of freedesktop-compliant DBus interfaces to inform other applications about current power level so that they can adjust their power consumption.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfce4-power-manager/4.16/xfce4-power-manager-4.16.0.tar.bz2

- Download MD5 sum: 6fbf95dcfe2154be4ff252545c7c887b

- Download size: 1.2 MB

- Estimated disk space required: 18 MB

- Estimated build time: 0.1 SBU

#### Xfce4 Power Manager Dependencies

##### Required

libnotify-0.7.9, UPower-0_99_13, and xfce4-panel-4.16.3

##### Optional

NetworkManager-1.32.10 and Polkit-0.119

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-power-manager

### Installation of Xfce4 Power Manager

Install Xfce4 Power Manager by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: xfce4-power-manager, xfce4-power-manager-settings, xfce4-pm-helper, and xfpm-power-backlight-helper
Installed Libraries: libxfce4powermanager.so
Installed Directories: None

#### Short Descriptions

xfce4-pm-helper | is a helper program for the suspend and hibernate functions of xfce4-power-manager
xfce4-power-manager | is the Xfce Power Manager
xfce4-power-manager-settings | is a utility that comes with the Xfce Power Manager to access/change its configuration
xfpm-power-backlight-helper | is a command line utility to get or set the brightness of your screen

Last updated on

## xfce4-settings-4.16.2

### Introduction to Xfce4 Settings

The Xfce4 Settings package contains a collection of programs that are useful for adjusting your Xfce preferences.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfce4-settings/4.16/xfce4-settings-4.16.2.tar.bz2

- Download MD5 sum: 66828054b7c745dde39f1d4031ef0291

- Download size: 1.4 MB

- Estimated disk space required: 38 MB

- Estimated build time: 0.2 SBU

#### Xfce4 Settings Dependencies

##### Required

Exo-4.16.2 and Garcon-4.16.1

##### Required (Runtime)

gnome-icon-theme-3.12.0 or lxde-icon-theme-0.5.1

##### Recommended

libcanberra-0.30, libnotify-0.7.9 and libxklavier-5.4

##### Optional

colord-1.4.5, libinput-1.18.1, and UPower-0_99_13

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-settings

### Installation of Xfce4 Settings

Install Xfce4 Settings by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-sound-settings`: Use this switch to enable sound settings in GUI.

`--enable-pluggable-dialogs`: Use this switch to enable support for embedded settings dialogs.

### Contents

Installed Programs: xfce4-accessibility-settings, xfce4-appearance-settings, xfce4-color-settings, xfce4-display-settings, xfce4-find-cursor, xfce4-keyboard-settings, xfce4-mime-helper, xfce4-mime-settings, xfce4-mouse-settings, xfce4-settings-editor, xfce4-settings-manager and xfsettingsd
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

xfce4-accessibility-settings | is a GTK+ 3 GUI to allow you to change some of your keyboard and mouse preferences
xfce4-appearance-settings | is a GTK+ 3 GUI to allow you to change some of your theme, icon and font preferences
xfce4-display-settings | is a GTK+ 3 GUI to allow you to change some of your screen preferences
xfce4-keyboard-settings | is a GTK+ 3 GUI to allow you to change some of your keyboard preferences
xfce4-mime-settings | is a GTK+ 3 GUI to allow you to change which applications are used to handle different mime types
xfce4-mouse-settings | is a GTK+ 3 GUI to allow you to change some of your mouse preferences
xfce4-settings-editor | is a GTK+ 3 GUI to allow you to change your preferences stored in Xfconf
xfce4-settings-manager | is a GTK+ 3 GUI to allow you to change many of your Xfce preferences
xfsettingsd | is the Xfce settings daemon

Last updated on

## Xfdesktop-4.16.0

### Introduction to Xfdesktop

Xfdesktop is a desktop manager for the Xfce Desktop Environment. Xfdesktop sets the background image / color, creates the right click menu and window list and displays the file icons on the desktop using Thunar libraries.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfdesktop/4.16/xfdesktop-4.16.0.tar.bz2

- Download MD5 sum: 20de956693011c429e3ec2928f535b7a

- Download size: 1.9 MB

- Estimated disk space required: 19 MB

- Estimated build time: 0.1 SBU

#### Xfdesktop Dependencies

##### Required

Exo-4.16.2 and libwnck-40.0

##### Recommended

libnotify-0.7.9, startup-notification-0.12 and thunar-4.16.8

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfdesktop

### Installation of Xfdesktop

Install Xfdesktop 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

### Contents

Installed Programs: xfdesktop and xfdesktop-settings
Installed Libraries: None
Installed Directories: /usr/share/backgrounds/xfce and /usr/share/pixmaps/xfdesktop

#### Short Descriptions

xfdesktop | is the Xfce Desktop Environment's desktop manager
xfdesktop-settings | is a GTK+ 3 application that allows you to change your desktop background, some preferences for the right click menu and what icons are displayed on the desktop

Last updated on

## Xfwm4-4.16.1

### Introduction to Xfwm4

Xfwm4 is the window manager for Xfce.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfwm4/4.16/xfwm4-4.16.1.tar.bz2

- Download MD5 sum: 7fd137caeb5b9a17f38e14641c638111

- Download size: 1.1 MB

- Estimated disk space required: 33 MB

- Estimated build time: 0.2 SBU

#### Xfwm4 Dependencies

##### Required

libwnck-40.0 and libxfce4ui-4.16.0

##### Recommended

startup-notification-0.12

##### Optional

libxpresent

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfwm4

### Installation of Xfwm4

Install Xfwm4 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

### Contents

Installed Programs: xfwm4, xfwm4-settings, xfwm4-tweaks-settings and xfwm4-workspace-settings
Installed Libraries: None
Installed Directories: /usr/lib/xfce4/xfwm4, /usr/share/themes/{Daloa,Default{,-hdpi,-xhdpi},Kokodi,Moheli}, and /usr/share/xfwm4

#### Short Descriptions

xfwm4 | is the Xfce window manager
xfwm4-settings | is a GTK+ 3 application that allows setting some preferences such as your theme, keyboard shortcuts and mouse focus behaviour
xfwm4-tweaks-settings | is a GTK+ 3 application that allows setting some more preferences for Xfwm4
xfwm4-workspace-settings | is a GTK+ 3 application that allows setting your workspace preferences

Last updated on

## xfce4-session-4.16.0

### Introduction to Xfce4 Session

Xfce4 Session is a session manager for Xfce. Its task is to save the state of your desktop (opened applications and their location) and restore it during a next startup. You can create several different sessions and choose one of them on startup.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/xfce/xfce4-session/4.16/xfce4-session-4.16.0.tar.bz2

- Download MD5 sum: 2bb95124f91e9469ea5571c94d6034fe

- Download size: 856 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.1 SBU

#### Xfce4 Session Dependencies

##### Required

libwnck-40.0 and libxfce4ui-4.16.0

##### Recommended

desktop-file-utils-0.26, shared-mime-info-2.1 and polkit-gnome-0.105

##### Required Runtime

Xfdesktop-4.16.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-session

### Installation of Xfce4 Session

Install Xfce4 Session by running the following commands:

    ./configure --prefix=/usr \
                --sysconfdir=/etc \
                --disable-legacy-sm &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-legacy-sm`: This switch disables legacy session management which isn't necessary on modern system.

### Configuring Xfce4 Session

There are several optional run time dependencies for Xfce4: dbus-1.12.20, GnuPG-2.2.29, hicolor-icon-theme-0.17 and OpenSSH-8.7p1

When building an Xfce4 package, some configuration files are installed in `/usr/share/applications`, `/usr/share/icons`, and `/usr/share/mime`. In order to use those files in your Xfce4 session, you need to update various databases. Do that by running, as the `root` user (you need to have the recommended dependencies installed):

    update-desktop-database &&
    update-mime-database /usr/share/mime

### Starting Xfce4

You can start Xfce4 from a TTY using xinit-1.4.1, or from a graphical display manager, such as lightdm-1.30.0.

To start Xfce4 using xinit-1.4.1, run the following commands:

    cat > ~/.xinitrc << "EOF"
    dbus-launch --exit-with-session startxfce4
    EOF

    startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debugging purposes. This can be done starting X with:

    startx &> ~/.x-session-errors

When shutting down or rebooting, the shutdown messages appear on the vt where X was running. If you wish to see those messages, simultaneously press keys Alt-F7 (assuming that X was running on vt7).

### Contents

Installed Programs: startxfce4, xfce4-session, xfce4-session-logout, xfce4-session-settings, and xflock4
Installed Library: None
Installed Directories: /usr/lib/xfce4/session

#### Short Descriptions

xfce4-session | starts up the Xfce Desktop Environment
xfce4-session-logout | logs out from Xfce
xfce4-session-settings | is a GTK+ 3 GUI which allows you to alter your preferences for your Xfce Session

Last updated on

## Chapter 36. Xfce Applications

This is a small collection of optional applications that add extra capabilities to your Xfce desktop.

## Parole-4.16.0

### Introduction to Parole

Parole is a DVD/CD/music player for Xfce that uses GStreamer.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

Although this version of parole works with most files, it is unable to play DVDs, reporting an error in the gstreamer backend.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/parole/4.16/parole-4.16.0.tar.bz2

- Download MD5 sum: b9adffdef4bab6ca454569d562051843

- Download size: 904 KB

- Estimated disk space required: 22 MB

- Estimated build time: 0.2 SBU

#### Parole Dependencies

##### Required

gst-plugins-base-1.18.4, gst-plugins-good-1.18.4 and libxfce4ui-4.16.0

##### Recommended

libnotify-0.7.9 and taglib-1.12

##### Optional

GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/parole

### Installation of Parole

Install Parole 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

### Using Parole

If you have installed Gstreamer Plugins Ugly with support for libdvdnav and libdvdread and would like to use Parole to play a DVD, click Media> Open location and enter dvd:// into the box.

Similarly, to play a CD, click Media> Open location and enter cdda:// into the box.

### Contents

Installed Program: parole
Installed Libraries: Two libraries under /usr/lib/parole-0/
Installed Directories: /usr/include/parole, /usr/lib/parole-0 and /usr/share/parole

#### Short Descriptions

parole | is a GTK+ 3 media player that uses GStreamer

Last updated on

## xfce4-terminal-0.8.10

### Introduction to Xfce4 Terminal

Xfce4 Terminal is a GTK+3 terminal emulator. This is useful for running commands or programs in the comfort of an Xorg window; you can drag and drop files into the Xfce4 Terminal or copy and paste text with your mouse.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/xfce4-terminal/0.8/xfce4-terminal-0.8.10.tar.bz2

- Download MD5 sum: 6e18bad7109c33486cd26ef59a319f0d

- Download size: 956 KB

- Estimated disk space required: 15 MB

- Estimated build time: 0.1 SBU

#### Xfce4 Terminal Dependencies

##### Required

libxfce4ui-4.16.0 and VTE-0.64.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-terminal

### Installation of Xfce4 Terminal

Install Xfce4 Terminal 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

### Contents

Installed Program: xfce4-terminal
Installed Libraries: None
Installed Directory: /usr/share/xfce4/terminal

#### Short Descriptions

xfce4-terminal | is a GTK+ 3 terminal emulator

Last updated on

## Xfburn-0.6.2

### Introduction to Xfburn

Xfburn is a GTK+ 3 GUI frontend for Libisoburn. This is useful for creating CDs and DVDs from files on your computer or ISO images downloaded from elsewhere.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/xfburn/0.6/xfburn-0.6.2.tar.bz2

- Download MD5 sum: f4666de100f62fac070b5840e8b98014

- Download size: 852 KB

- Estimated disk space required: 16 MB

- Estimated build time: less than 0.1 SBU

#### Xfburn Dependencies

##### Required

Exo-4.16.2, libburn-1.5.4, libisofs-1.5.4, and libxfce4ui-4.16.0

##### Optional

gst-plugins-base-1.18.4 and Cdrdao-1.2.4 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfburn

### Installation of Xfburn

Install Xfburn 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: xfburn
Installed Libraries: None
Installed Directory: /usr/share/xfburn

#### Short Descriptions

xfburn | is a GTK+ 3 application for creating CDs and DVDs

Last updated on

## Ristretto-0.11.0

### Introduction to Ristretto

Ristretto is a fast and lightweight image viewer for the Xfce desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/ristretto/0.11/ristretto-0.11.0.tar.bz2

- Download MD5 sum: 134d4a49a98b28ba6e91b862fb9a24cc

- Download size: 576 KB

- Estimated disk space required: 9.6 MB

- Estimated build time: 0.1 SBU

#### Ristretto Dependencies

##### Required

libexif-0.6.22 and libxfce4ui-4.16.0

##### Optional

tumbler-4.16.0 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ristretto

### Installation of Ristretto

Install Ristretto 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

### Contents

Installed Program: ristretto
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

ristretto | is a fast and lightweight image viewer

Last updated on

## xfce4-notifyd-0.6.2

### Introduction to the Xfce4 Notification Daemon

The Xfce4 Notification Daemon is a small program that implements the "server-side" portion of the Freedesktop desktop notifications specification. Applications that wish to pop up a notification bubble in a standard way can use Xfce4-Notifyd to do so by sending standard messages over D-Bus using the org.freedesktop.Notifications interface.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/apps/xfce4-notifyd/0.6/xfce4-notifyd-0.6.2.tar.bz2

- Download MD5 sum: 7e4c7f8d922abc74b0a2e33fb123986a

- Download size: 536 KB

- Estimated disk space required: 7.7 MB

- Estimated build time: 0.1 SBU

#### The Xfce4 Notification Daemon Dependencies

##### Required

libnotify-0.7.9, libxfce4ui-4.16.0, and xfce4-panel-4.16.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-notifyd

### Installation of the Xfce4 Notification Daemon

Install the Xfce4 Notification Daemon by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    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:

    notify-send -i info Information "Hi ${USER}, This is a Test"

### Contents

Installed Program: xfce4-notifyd-config
Installed Libraries: libnotification-plugin.so
Installed Directories: /usr/share/themes/Bright/xfce-notify-4.0, /usr/share/themes/Default/xfce-notify-4.0, /usr/share/themes/Retro/xfce-notify-4.0, /usr/share/themes/Smoke/xfce-notify-4.0 and /usr/share/themes/ZOMG-PONIES!/xfce-notify-4.0

#### Short Descriptions

xfce4-notifyd-config | is a GTK+ GUI that allows you to change some of your preferences (theme and screen position) for the notifications that the Xfce4 Notification Daemon displays

Last updated on

## xfce4-pulseaudio-plugin-0.4.3

### Introduction to the Xfce4 Pulseaudio Plugin

The Xfce4 Pulseaudio Plugin is a plugin for the Xfce panel which provides a convenient way to adjust the audio volume of the PulseAudio sound system and to an auto mixer tool like pavucontrol. It can optionally handle multimedia keys for controlling the audio volume.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.xfce.org/src/panel-plugins/xfce4-pulseaudio-plugin/0.4/xfce4-pulseaudio-plugin-0.4.3.tar.bz2

- Download MD5 sum: 3d86032acb9364d47e0a144350c63e1a

- Download size: 422 KB

- Estimated disk space required: 8.3 MB

- Estimated build time: 0.1 SBU

#### Xfce4 Pulseaudio Plugin Dependencies

##### Required

dbus-glib-0.112, libnotify-0.7.9, PulseAudio-15.0, and xfce4-panel-4.16.3

##### Recommended

keybinder-3.0-0.3.2 and pavucontrol-5.0 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xfce4-pulseaudio-plugin

### Installation of the Xfce4 Pulseaudio Plugin

Install the Xfce4 Pulseaudio Plugin 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

### Contents

Installed Program: None
Installed Libraries: libpulseaudio-plugin.so
Installed Directories: None

Last updated on

# Part X. LXDE

## Chapter 37. LXDE Desktop

LXDE is an extremely fast-performing and energy-saving desktop environment.

LXDE comes with a beautiful interface, multi-language support, standard keyboard shortcuts and additional features like tabbed file browsing. LXDE uses less CPU and less RAM than other environments. It is especially designed for cloud computers with low hardware specifications, such as netbooks, mobile devices (e.g. MIDs) or older computers.

Build LXDE core packages in the order presented in the book for the easiest resolution of dependencies.

## lxmenu-data-0.1.5

### Introduction to LXMenu Data

The LXMenu Data package provides files required to build freedesktop.org menu spec-compliant desktop menus for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxmenu-data-0.1.5.tar.xz

- Download MD5 sum: cc1989444284a65dbc7047348a68d6d4

- Download size: 196 KB

- Estimated disk space required: 2.1 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxmenu-data

### Installation of LXMenu Data

Install LXMenu Data by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /etc/xdg/menus and /usr/share/desktop-directories

Last updated on

## libfm-extra-1.3.2

### Introduction to libfm-extra

The libfm-extra package contains a library and other files required by menu-cache-gen libexec of menu-cache-1.1.0.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/pcmanfm/libfm-1.3.2.tar.xz

- Download MD5 sum: c87a0ff41ae77825079b2f785ec0741e

- Download size: 924 KB

- Estimated disk space required: 11 MB

- Estimated build time: less than 0.1 SBU

#### libfm-extra Dependencies

##### Required

GLib-2.68.4

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libfm-extra

### Installation of libfm-extra

Install libfm-extra by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --with-extra-only \
                --with-gtk=no     \
                --disable-static  &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--with-extra-only`: This switch disables all components except for the libfm-extra library.

`--with-gtk=no`: This switch disables support for GTK+ because it is not necessary for this package.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libfm-extra.so
Installed Directories: /usr/include/libfm (symlink) and /usr/include/libfm-1.0

#### Short Descriptions

`libfm-extra.so` | contains the libfm-extra API functions

Last updated on

## menu-cache-1.1.0

### Introduction to Menu Cache

The Menu Cache package contains a library for creating and utilizing caches to speed up the manipulation for freedesktop.org defined application menus.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/menu-cache-1.1.0.tar.xz

- Download MD5 sum: 99999a0bca48b980105208760c8fd893

- Download size: 260 KB

- Estimated disk space required: 3.7 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/menu-cache-1.1.0-consolidated_fixes-1.patch

#### Menu Cache Dependencies

##### Required

libfm-extra-1.3.2

##### Optional

GTK-Doc-1.33.2 and xdg-utils-1.1.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/menu-cache

### Installation of Menu Cache

First fix a memory leak and “multiple definitions” issues:

    patch -Np1 -i ../menu-cache-1.1.0-consolidated_fixes-1.patch

Install Menu Cache 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-gtk-doc`: Use this option if GTK-Doc is installed and you wish to build and install the API documentation.

### Contents

Installed Programs: None
Installed Library: libmenu-cache.so
Installed Directories: /usr/{include,libexec,share/gtk-doc/html}/menu-cache

#### Short Descriptions

`libmenu-cache.so` | contains the menu-cache API functions

Last updated on

## libfm-1.3.2

### Introduction to libfm

The libfm package contains a library used to develop file managers providing some file management utilities.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/pcmanfm/libfm-1.3.2.tar.xz

- Download MD5 sum: c87a0ff41ae77825079b2f785ec0741e

- Download size: 924 KB

- Estimated disk space required: 36 MB

- Estimated build time: 0.3 SBU

#### libfm Dependencies

##### Required

GTK+-3.24.30 or GTK+-2.24.33, and menu-cache-1.1.0

##### Recommended

libexif-0.6.22, Vala-0.52.5, and lxmenu-data-0.1.5

##### Optional

GTK-Doc-1.33.2, dbus-glib-0.112 and Gvfs-1.48.1 or udisks (for volume management - experimental)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libfm

### Installation of libfm

Install libfm by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--with-gtk=3`: This option selects the version of gtk+ to use. The default is gtk+-2.

`--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.

### Contents

Installed Program: libfm-pref-apps and lxshortcut
Installed Libraries: libfm.so, libfm-extra.so and libfm-gtk.so
Installed Directories: /etc/xdg/libfm, /usr/lib/libfm, /usr/share/gtk-doc/html/libfm and /usr/share/libfm

#### Short Descriptions

libfm-pref-apps | sets preferred applications for programs based on libfm
lxshortcut | is a small program used to edit application shortcuts
`libfm.so` | contains the libfm API functions

Last updated on

## PCManFM-1.3.2

### Introduction to PCManFM

The PCManFM package contains an extremely fast, lightweight, yet feature-rich file manager with tabbed browsing.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/pcmanfm/pcmanfm-1.3.2.tar.xz

- Download MD5 sum: ef7c4417d2697ef138d175db7aeae15a

- Download size: 416 KB

- Estimated disk space required: 11 MB

- Estimated build time: 0.1 SBU

#### PCManFM Dependencies

##### Required

libfm-1.3.2

##### Recommended

adwaita-icon-theme-40.1.1 or oxygen-icons5-5.85.0 or lxde-icon-theme-0.5.1, and FriBidi-1.0.9

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pcmanfm

### Installation of PCManFM

Install PCManFM by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Program: pcmanfm
Installed Libraries: None
Installed Directories: /etc/xdg/pcmanfm, /usr/lib/pcmanfm and /usr/share/pcmanfm

#### Short Descriptions

pcmanfm | is a lightweight GTK+ based file manager for X Window System

Last updated on

## libwnck-2.30.7

### Introduction to libwnck

The libwnck package contains a Window Navigator Construction Kit.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/libwnck/2.30/libwnck-2.30.7.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/libwnck/2.30/libwnck-2.30.7.tar.xz

- Download MD5 sum: 3d20f26105a2fd878899d6ecdbe9a082

- Download size: 612 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### libwnck Dependencies

##### Required

GTK+-2.24.33

##### Recommended

startup-notification-0.12

##### Optional

gobject-introspection-1.68.0 and GTK-Doc-1.33.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libwnck2

### Installation of libwnck

Install libwnck by running the following commands:

    ./configure --prefix=/usr \
                --disable-static \
                --program-suffix=-1 &&
    make GETTEXT_PACKAGE=libwnck-1

This package does not come with a test suite.

Now, as the `root` user:

    make GETTEXT_PACKAGE=libwnck-1 install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--program-suffix=-1`: This option adds -1 to the end of the names of the installed programs to avoid overwriting the programs installed by libwnck-40.0.

`GETTEXT_PACKAGE=libwnck-1`: This parameter adds -1 to the end of the names of the gettext files installed by the package to avoid overwriting the files installed by libwnck-40.0.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Contents

Installed Programs: wnckprop-1 and wnck-urgency-monitor-1
Installed Library: libwnck-1.so
Installed Directories: /usr/include/libwnck-1.0 and /usr/share/gtk-doc/html/libwnck-1.0

#### Short Descriptions

wnckprop-1 | Prints, modifies, or interacts with the properties of a screen/workspace/window
`libwnck-1.so` | contains functions for writing pagers and task lists

Last updated on

## LXPanel-0.10.1

### Introduction to LXPanel

The LXPanel package contains a lightweight X11 desktop panel.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxpanel-0.10.1.tar.xz

- Download MD5 sum: c922d044789c3d7ae028f0e80dea18b0

- Download size: 1.5 MB

- Estimated disk space required: 30 MB

- Estimated build time: 0.3 SBU

#### LXPanel Dependencies

##### Required

gdk-pixbuf-xlib-2.40.2, keybinder-0.3.1, libwnck-2.30.7, lxmenu-data-0.1.5 and menu-cache-1.1.0

##### Recommended

alsa-lib-1.2.5.1, gnome-screenshot-40.0 (to take screenshots using PrtScr), libxml2-2.9.12 (weather plugin), and Wireless Tools-29

##### Optional

libindicator (indicator plugin)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxpanel

### Installation of LXPanel

Install LXPanel 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

### Contents

Installed Programs: lxpanel and lxpanelctl
Installed Libraries: liblxpanel.so and several under /usr/lib/lxpanel/plugins
Installed Directories: /etc/xdg/lxpanel, /usr/include/lxpanel, /usr/lib/lxpanel, and /usr/share/lxpanel

#### Short Descriptions

lxpanel | is a lightweight GTK+ based panel for the LXDE Desktop
lxpanelctl | is a program that controls lxpanel

Last updated on

## LXAppearance-0.6.3

### Introduction to LXAppearance

The LXAppearance package contains a desktop-independent theme switcher for GTK+.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxappearance-0.6.3.tar.xz

- Download MD5 sum: f10345313e2c12bad51c1b58bd46b454

- Download size: 164 KB

- Estimated disk space required: 3.2 MB

- Estimated build time: less than 0.1 SBU

#### LXAppearance Dependencies

##### Required

GTK+-2.24.33

##### Recommended

dbus-glib-0.112

##### Optional

libxslt-1.1.34 with docbook-xml-4.5 and docbook-xsl-1.79.2 (to build man pages)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxappearance

### Installation of LXAppearance

Install LXAppearance by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --enable-dbus     &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-dbus`: This switch enables DBus support in LXAppearance which is useful for communicating with LXSession. Remove it if you are not building LXDE or have not installed dbus-glib-0.112.

`--enable-man`: Use this switch if you have installed optional dependencies and wish to rebuild the manual pages.

### Contents

Installed Program: lxappearance
Installed Libraries: None
Installed Directories: /usr/include/lxappearance and /usr/share/lxappearance

#### Short Descriptions

lxappearance | is a program used to change GTK+ themes, icon themes, and fonts used by applications

Last updated on

## LXSession-0.5.5

### Introduction to LXSession

The LXSession package contains the default session manager for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxsession-0.5.5.tar.xz

- Download MD5 sum: e8380acef215ee7c99c067a2241c2c7b

- Download size: 416 KB

- Estimated disk space required: 22 MB

- Estimated build time: 0.1 SBU

#### LXSession Dependencies

##### Required

dbus-glib-0.112, libunique-1.1.6, Polkit-0.119, and Vala-0.52.5

##### Optional

lsb-tools-0.9 (may be used at runtime to display the distribution release in the logout dialog), GTK+-3.24.30, and libxslt-1.1.34 with docbook-xml-4.5 and docbook-xsl-1.79.2 (to build man pages)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxsession

### Installation of LXSession

Install LXSession by running the following commands:

    ./configure --prefix=/usr --disable-man &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-man`: This switch disables building of the manual pages. Remove it if you have installed optional dependencies and wish to build the manual pages.

`--enable-gtk3`: Builds against GTK+-3 instead of GTK+-2, which is required anyway by libunique.

### Contents

Installed Programs: lxclipboard, lxlock, lxpolkit, lxsession, lxsession-db, lxsession-default, lxsession-default-apps, lxsession-default-terminal, lxsession-edit, lxsession-logout, lxsession-xdg-autostart, lxsession-xsettings, and lxsettings-daemon
Installed Libraries: None
Installed Directory: /usr/share/lxsession

#### Short Descriptions

lxclipboard | is a clipboard utility for LXSession and LXDE
lxlock | locks the local X display until a password is entered
lxpolkit | is a polkit agent
lxsession | is a lightweight X session manager
lxsession-db | is used to modify the database for managing sessions in lxsession
lxsession-default | launch default applications set by LXsession
lxsession-default-apps | is an utility to configure lxsession and its default applications
lxsession-default-terminal | launch the default terminal set by LXSession
lxsession-edit | is the standard session edit manager used by LXDE
lxsession-logout | is a program to logout from LXSession
lxsession-xdg-autostart | handles the autostart spec of freedesktop.org
lxsession-xsettings | is a tool to configure gtk+ themes, keyboard, and mouse for you on session startup
lxsettings-daemon | is the settings daemon for LXsession

Last updated on

## lxde-common-0.99.2

### Introduction to LXDE Common

The LXDE Common package provides a set of default configuration for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxde-common-0.99.2.tar.xz

- Download MD5 sum: 14a9d19c4576dc15d985453ccb8ca9f6

- Download size: 869 KB

- Estimated disk space required: 2.7 MB

- Estimated build time: less than 0.1 SBU

#### LXDE Common Dependencies

##### Required

lxde-icon-theme-0.5.1, LXPanel-0.10.1, LXSession-0.5.5, openbox-3.6.1 (runtime), and PCManFM-1.3.2

##### Recommended

desktop-file-utils-0.26, hicolor-icon-theme-0.17, and shared-mime-info-2.1

##### Optional Runtime Dependencies

A notification daemon such as notification-daemon-3.20.0 or xfce4-notifyd-0.6.2, and a display manager such as lxdm-0.5.3 or lightdm-1.30.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxde-common

### Installation of LXDE Common

Install LXDE Common by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have installed recommended dependencies, run the following commands as the `root` user:

    update-mime-database /usr/share/mime &&
    gtk-update-icon-cache -qf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Starting LXDE

You can start LXDE from runlevel 3, using xinit-1.4.1, or from runlevel 5, using a Display Manager, such as lxdm-0.5.3.

To start LXDE using xinit-1.4.1, run the following commands:

    cat > ~/.xinitrc << "EOF"
    # No need to run dbus-launch, since it is run by startlxde
    startlxde
    EOF

    startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debug purposes. This can be done starting X with:

    startx &> ~/.x-session-errors

When shutting down or rebooting, the shutdown messages appear on the vt where X was running. If you wish to see those messages, simultaneously press keys Alt-F7 (assuming that X was running on vt7).

### Contents

Installed Programs: lxde-logout, openbox-lxde and startlxde
Installed Libraries: None
Installed Directories: /etc/xdg/{lxpanel,lxsession,openbox,pcmanfm}/LXDE and /usr/share/lxde

#### Short Descriptions

lxde-logout | is used to quit the desktop session for LXDE
openbox-lxde | is a wrapper script which runs Openbox with LXDE specific config file
startlxde | is used to start the desktop session for LXDE

Last updated on

## Chapter 38. LXDE Applications

This is a small collection of optional applications that add extra capabilities to the LXDE desktop.

## GPicView-0.2.5

### Introduction to GPicView

The GPicView package contains a lightweight image viewer.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/gpicview-0.2.5.tar.xz

- Download MD5 sum: 26be9b0c5a234f1afe7d83d02a4a33f4

- Download size: 344 KB

- Estimated disk space required: 6.5 MB

- Estimated build time: less than 0.1 SBU

#### GPicView Dependencies

##### Required

GTK+-2.24.33

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gpicview

### Installation of GPicView

Install GPicView 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 &&
    sed -i 's/Utility;//' /usr/share/applications/gpicview.desktop

If you have xdg-utils-1.1.3 installed, as the `root` user, you should run the xdg-icon-resource forceupdate --theme hicolor command, for the installed icon to be displayed in the menu item.

### Command Explanations

sed -i ...: Fixes submenu for GPicView.

### Contents

Installed Program: gpicview
Installed Libraries: None
Installed Directory: /usr/share/gpicview

#### Short Descriptions

gpicview | is a lightweight image viewer

Last updated on

## lxappearance-obconf-0.2.3

### Introduction to LXAppearance OBconf

The LXAppearance OBconf package contains a plugin for LXAppearance to configure OpenBox.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxappearance-obconf-0.2.3.tar.xz

- Download MD5 sum: ae0076d489aa786f5d573f7ff592a4ab

- Download size: 284 KB

- Estimated disk space required: 4.6 MB

- Estimated build time: 0.1 SBU

#### LXAppearance OBconf Dependencies

##### Required

LXAppearance-0.6.3 and openbox-3.6.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxappearance-obconf

### Installation of LXAppearance OBconf

Install LXAppearance OBconf 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: /usr/lib/lxappearance/plugins/obconf.so
Installed Directories: /usr/lib/lxappearance and /usr/share/lxappearance/obconf

Last updated on

## LXInput-0.3.5

### Introduction to LXInput

The LXInput package contains a small program used to configure keyboard and mouse for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxinput-0.3.5.tar.xz

- Download MD5 sum: 69680debaef053d540ae3a5f4b237150

- Download size: 144 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

#### LXInput Dependencies

##### Required

GTK+-2.24.33

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxinput

### Installation of LXInput

Install LXInput 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

### Contents

Installed Program: lxinput
Installed Libraries: None
Installed Directory: /usr/share/lxinput

#### Short Descriptions

lxinput | is a program used to configure keyboard and mouse

Last updated on

## LXRandR-0.3.2

### Introduction to LXRandR

The LXRandR package contains a monitor configuration tool for LXDE.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxrandr-0.3.2.tar.xz

- Download MD5 sum: 5101ab29d87fb2b56a5ec5bc8bc3f258

- Download size: 132 KB

- Estimated disk space required: 1.8 MB

- Estimated build time: less than 0.1 SBU

#### LXRandR Dependencies

##### Required

GTK+-2.24.33 and Xorg Applications

##### Optional

libxslt-1.1.34 with docbook-xml-4.5 and docbook-xsl-1.79.2 (to build man pages)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxrandr

### Installation of LXRandR

Install LXRandR 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

### Command Explanations

`--enable-man`: Use this switch if you have installed optional dependencies and wish to build the manual pages.

### Contents

Installed Program: lxrandr
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

lxrandr | is a GTK+ interface to XRandR

Last updated on

## LXTask-0.1.10

### Introduction to LXTask

The LXTask package contains a lightweight and desktop-independent task manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxtask-0.1.10.tar.xz

- Download MD5 sum: 27b5258847afc237a5b89666e7a8b45b

- Download size: 136 KB

- Estimated disk space required: 3.5 MB

- Estimated build time: less than 0.1 SBU

#### LXTask Dependencies

##### Required

GTK+-2.24.33

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxtask

### Installation of LXTask

Install LXTask 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

### Contents

Installed Program: lxtask
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

lxtask | is a lightweight and desktop-independent task manager

Last updated on

## Vte-0.28.2

### Introduction to Vte

Vte is a library (libvte) implementing a terminal emulator widget for GTK+ 2, and a minimal demonstration application (vte) that uses libvte.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/vte/0.28/vte-0.28.2.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/vte/0.28/vte-0.28.2.tar.xz

- Download MD5 sum: 497f26e457308649e6ece32b3bb142ff

- Download size: 940 KB

- Estimated disk space required: 33 MB

- Estimated build time: 0.5 SBU

#### Vte Dependencies

##### Required

GTK+-2.24.33

##### Optional

gobject-introspection-1.68.0, GTK-Doc-1.33.2 and PyGTK-2.24.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vte2

### Installation of Vte

Install Vte by running the following commands:

    ./configure --prefix=/usr \
                --libexecdir=/usr/lib/vte \
                --disable-static  &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--libexecdir=/usr/lib/vte` : both this package and VTE-0.64.2 install files of the same name. This switch ensures that they do not overwrite each other if both are installed.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: vte
Installed Library: libvte.so
Installed Directories: /usr/include/vte-0.0, /usr/lib/vte, /usr/share/gtk-doc/html/vte-0.0 and /usr/share/vte

#### Short Descriptions

vte | is a simple terminal emulator
`libvte.so` | contains the Vte API functions

Last updated on

## LXTerminal-0.4.0

### Introduction to LXTerminal

The LXTerminal package contains a VTE-based terminal emulator for LXDE with support for multiple tabs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lxde/lxterminal-0.4.0.tar.xz

- Download MD5 sum: 7938dbd50e3826c11f4735a742b278d3

- Download size: 197 KB

- Estimated disk space required: 4.5 MB

- Estimated build time: less than 0.1 SBU

#### LXTerminal Dependencies

##### Required

Vte-0.28.2

##### Optional

libxslt-1.1.34 with docbook-xml-4.5 and docbook-xsl-1.79.2 (to build man pages)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lxterminal

### Installation of LXTerminal

Install LXTerminal 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

### Command Explanations

`--enable-man`: Use this switch if you have installed optional dependencies and wish to build the manual pages.

### Contents

Installed Program: lxterminal
Installed Libraries: None
Installed Directory: /usr/share/lxterminal

#### Short Descriptions

lxterminal | a lightweight terminal emulator for the LXDE desktop

Last updated on

# Part XI. X Software

## Chapter 39. Office Programs

This chapter is a collection of programs that are useful for viewing or editing office documents. Some specialise in doing one thing (such as word processing or manipulating a spreadsheet). LibreOffice is a suite of programs that can manipulate many different formats including powerpoint presentations.

## AbiWord-3.0.5

### Introduction to AbiWord

AbiWord is a word processor which is useful for writing reports, letters and other formatted documents.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.abisource.com/downloads/abiword/3.0.5/source/abiword-3.0.5.tar.gz

- Download MD5 sum: a8f218b711450e4ccae43a0522e0e806

- Download size: 11 MB

- Estimated disk space required: 690 MB, with docs (76 MB installed)

- Estimated build time: 2.4 SBU (Using parallelism=4, with docs)

#### Additional Downloads

- AbiWord Docs: https://www.abisource.com/downloads/abiword/3.0.2/source/abiword-docs-3.0.2.tar.gz

- AbiWord Docs MD5 sum: c92c0e1e2081db20757231a53d80c338

- AbiWord Docs size: 1.5 MB

#### AbiWord Dependencies

##### Required

Boost-1.77.0, cURL-7.78.0, FriBidi-1.0.9, GOffice-0.10.50, and wv-1.2.9

##### Recommended

enchant-2.3.1

##### Optional

dbus-glib-0.112, evolution-data-server-3.40.4, gobject-introspection-1.68.0, libchamplain-0.12.20, libgcrypt-1.9.4, libical-3.0.10, libsoup-2.74.0, Redland-1.0.17, telepathy-glib-0.24.2, Valgrind-3.17.0. Aiksaurus, GtkMathView, libwmf, libwpd, libwpg, libwps, Link Grammar Parser, Loudmouth, OTS, and Psiconv

### Note

To enable many of the optional dependencies, review the information from ./configure --help for the necessary switches you must pass to the configure script.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/abiword

### Installation of AbiWord

Install AbiWord by running the following commands:

    sed -e "s/free_suggestions/free_string_list/" \
        -e "s/_to_personal//"                     \
        -e "s/in_session/added/"                  \
        -i src/af/xap/xp/enchant_checker.cpp      &&

    ./configure --prefix=/usr &&
    make

This program does not come with a functional test suite.

Now, as the `root` user:

    make install

### Note

In order to install the local help files, a graphics session is recommended.

If you wish to install the local help files, untar and build them first:

### Note

The current version of the docs expands to abiword-docs-3.0.1 and not the expected abiword-docs-3.0.2.

    tar -xf ../abiword-docs-3.0.2.tar.gz &&
    cd abiword-docs-3.0.1                &&
    ./configure --prefix=/usr            &&
    make

and then, as the `root` user:

    make install

### Command Explanations

sed ...: This command corrects the source for changes in the dependency enchant-2.3.1.

`--enable-plugins="collab openxml goffice grammar"`: Build some or all plugins. The openxml plugin enables Abiword to open some .docx files. The grammar plugin requires Link Grammar Parser

### Configuring AbiWord

#### Config File

`~/.AbiSuite/templates/normal.awt`

#### Configuration Information

Choose the right template for your language and locale from the list produced by the following command:

    ls /usr/share/abiword-3.0/templates

Create the folder `~/.AbiSuite/templates` then copy the `normal.awt` you want into it:

    install -v -m750 -d ~/.AbiSuite/templates &&
    install -v -m640    /usr/share/abiword-3.0/templates/normal.awt-<lang> \
                        ~/.AbiSuite/templates/normal.awt

Change `<lang>` by the above command to fit the name of the file you want.

If you are using multiple languages, you may need to edit the template to use a font with greater coverage (e.g. one of the Dejavu fonts, because Abiword does not use fontconfig and can only display glyphs that are provided in the chosen font.

If you have desktop-file-utils-0.26 installed, you should run the update-desktop-database command to update the mimeinfo cache and allow the Help system to work.

If you have xdg-utils-1.1.3 installed, you should run the xdg-icon-resource forceupdate --theme hicolor command, for the installed icon to be displayed in the menu item.

### Contents

Installed Program: abiword
Installed Library: libabiword-3.0.so
Installed Directories: /usr/include/abiword-3.0, /usr/lib/abiword-3.0, and /usr/share/abiword-3.0

#### Short Descriptions

abiword | is the word processor, a wrapper for the functions in libabiword-3.0 - it can also be used on the command line, see man 1 abiword
`libabiword-3.0.so` | provides functions to access MS Word documents

Last updated on

## Gnumeric-1.12.50

### Introduction to Gnumeric

The Gnumeric package contains a spreadsheet program which is useful for mathematical analysis.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/gnumeric/1.12/gnumeric-1.12.50.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/gnumeric/1.12/gnumeric-1.12.50.tar.xz

- Download MD5 sum: 06868b655c5a231a4e9c1009ed701cc1

- Download size: 17 MB

- Estimated disk space required: 280 MB (add 7 MB for tests)

- Estimated build time: 0.9 SBU (Using parallelism=4; add 8.2 SBU for tests)

#### Gnumeric Dependencies

##### Required

GOffice-0.10.50 and itstool-2.0.6

##### Recommended Runtime

an icon theme such as adwaita-icon-theme-40.1.1, oxygen-icons5-5.85.0, or gnome-icon-theme-3.12.0, X Window System, and Yelp-40.3 for the buit-in help functionality

##### Optional

DConf-0.40.0 (to prevent some test failures), gobject-introspection-1.68.0, PyGObject-3.40.1, Valgrind-3.17.0 (for some tests), dblatex (for PDF docs), libgda, Mono, pxlib, and Psiconv

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gnumeric

### Installation of Gnumeric

Install Gnumeric by running the following commands:

    ./configure --prefix=/usr  &&
    make

This package must be installed before the test suite is run.

Now, as the `root` user:

    make install

To run the tests, issue make check. Tests should be run from an active X session, and DConf-0.40.0 should be installed to prevent some failures. Three valgrind tests are known to fail.

### Command Explanations

`--enable-pdfdocs`: Use this switch if you have installed dblatex and wish to create PDF docs.

### Contents

Installed Programs: gnumeric (symlink), gnumeric-1.12.50, ssconvert, ssdiff, ssgrep, and ssindex
Installed Libraries: libspreadsheet.so
Installed Directories: /usr/include/libspreadsheet-1.12, /usr/lib/gnumeric, /usr/lib/goffice/0.10/plugins/gnumeric, /usr/share/gnumeric, and /usr/share/help/{C,cs,de,es}/gnumeric

#### Short Descriptions

gnumeric | is a symlink to gnumeric-1.12.50
gnumeric-1.12.50 | is GNOME's spreadsheet application
ssconvert | is a command line utility to convert spreadsheet files between various spreadsheet file formats
ssdiff | is a command line utility to compare two spreadsheets
ssgrep | is a command line utility to search spreadsheets for strings
ssindex | is a command line utility to generate index data for spreadsheet files
`libspreadsheet.so` | contains the gnumeric API functions

Last updated on

## LibreOffice-7.2.0

### Introduction to LibreOffice

LibreOffice is a full-featured office suite. It is largely compatible with Microsoft Office and is descended from OpenOffice.org.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Core Download: https://download.documentfoundation.org/libreoffice/src/7.2.0/libreoffice-7.2.0.4.tar.xz

- Core Download MD5 sum: a4f2e92dc6829d556156ec7a13a965b8

- Core Download size: 241 MB

- Estimated disk space required: 7.1 GB including the additional files if downloaded during the build (793 MB installed). Installing the whole set of languages requires more than 25 GB (around 3 GB installed)

- Estimated build time: 69 SBU with parallelism=4 plus download time

#### Additional Downloads

### Note

Around 80 smallish tarballs and zip files will be downloaded during the build. The download time will vary with the local internet speed and server load. The download time will probably be between 30 and 60 minutes. If you have not downloaded one or more of the following, they too will also be downloaded during the build.

- Dictionaries: https://download.documentfoundation.org/libreoffice/src/7.2.0/libreoffice-dictionaries-7.2.0.4.tar.xz

- Dictionaries MD5 sum: 885d9cb74978ac389d007a44c63f9fe9

- Dictionaries size: 48 MB

- Help Files: https://download.documentfoundation.org/libreoffice/src/7.2.0/libreoffice-help-7.2.0.4.tar.xz

- Help Files MD5 sum: 92f52be4258eb3a5e409f02a99401826

- Help Files size: 107 MB

- Translations: https://download.documentfoundation.org/libreoffice/src/7.2.0/libreoffice-translations-7.2.0.4.tar.xz

- Translations MD5 sum: 702e9c5ad967830ab1cc72a93dffb61a

- Translations size: 184 MB

- Required patch to fix building with FreeType-2.11.0: https://www.linuxfromscratch.org/patches/blfs/11.0/libreoffice-7.2.0.4-freetype_fix-1.patch

#### LibreOffice Dependencies

##### Required

Archive-Zip-1.68, UnZip-6.0, Wget-1.21.1, Which-2.21, and Zip-3.0

##### Recommended

### Note

Most of these packages are recommended because if they're not installed, the build process will compile and install its own (often older) version, with the side effect of increasing build and installed disk space and build time.

apache-ant-1.10.11, Apr-1.7.0, Boost-1.77.0, CLucene-2.3.3.4, Cups-2.3.3op2, cURL-7.78.0, dbus-glib-0.112, libepoxy-1.5.9, libjpeg-turbo-2.1.1, LLVM-12.0.1 (clang is preferred for rendering with skia), GLM-0.9.9.8, GLU-9.0.2, GPGME-1.16.0, Graphite2-1.3.14, gst-plugins-base-1.18.4, GTK+-3.24.30, HarfBuzz-2.9.0, ICU-69.1, libatomic_ops-7.6.10, Little CMS-2.12, librsvg-2.50.7, libxml2-2.9.12 and libxslt-1.1.34, lxml-4.6.3, Mesa-21.2.1, neon-0.31.2, NSS-3.69, OpenLDAP-2.5.7 (if connecting to an LDAP server), Poppler-21.08.0, PostgreSQL-13.4, Redland-1.0.17, Serf-1.3.9, and unixODBC-2.3.9

##### Optional

Avahi-0.8, BlueZ-5.61, DConf-0.40.0, desktop-file-utils-0.26, Doxygen-1.9.2 (not relevant if using --disable-odk), evolution-data-server-3.40.4, GDB-10.2, GnuTLS-3.7.2, KDE Frameworks-5.85.0, libpaper-1.1.24+nmu5, MariaDB-10.6.4 or MySQL, MIT Kerberos V5-1.19.2, NASM-2.15.05, SANE-1.0.29, telepathy-glib-0.24.2, Valgrind-3.17.0, VLC-3.0.16, Zenity-3.32.0, Apache Commons Codec, Apache Commons HttpClient, Apache Commons Lang, Apache Commons Logging, BeanShell, box2d, CoinMP, Cppunit, Firebird, glyphy, Gnome VFS, hamcrest, Hunspell, Hyphen, iwyu, junit4, libabw, libcdr, libcmis, libebook, libepubgen, libetonyek, libexttextcat, libfreehand, liblangtag, libmspub, libmwaw, libnumbertext, libodfgen, libpagemaker, libqrcodegen, libqxp, librevenge (WordPerfect Document importer), libstaroffice, libvisio, libwpd, libwpg, libwps, libzmf, lp_solve, mdds, MyThes, odfvalidator, officeotron, OpenCOLLADA, Orcus, SystemTap, and VIGRA

There are many optional dependencies not listed here. They can be found in “download.lst” (source directory).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libreoffice

### Installation of LibreOffice

### Important

Unlike the other packages, we assume that you have not yet unpacked the package. This is because the `--no-overwrite-dir` switch is needed in case you unpack as the `root` user.

    tar -xf libreoffice-7.2.0.4.tar.xz --no-overwrite-dir &&
    cd libreoffice-7.2.0.4

Fix build failures introduced by the latest freetype version:

    patch -Np1 -i ../libreoffice-7.2.0.4-freetype_fix-1.patch

If you have downloaded the dictionaries, help and translations tarballs, create symlinks to them from the source directory so they won't get downloaded again:

    install -dm755 external/tarballs &&
    ln -sv ../../../libreoffice-dictionaries-7.2.0.4.tar.xz external/tarballs/ &&
    ln -sv ../../../libreoffice-help-7.2.0.4.tar.xz         external/tarballs/ &&
    ln -sv ../../../libreoffice-translations-7.2.0.4.tar.xz external/tarballs/

The instructions in the package unpack some tarballs into a location it cannot find later. Create some symlinks to help out:

    ln -sv src/libreoffice-help-7.2.0.4/helpcontent2/ &&
    ln -sv src/libreoffice-dictionaries-7.2.0.4/dictionaries/ &&
    ln -sv src/libreoffice-translations-7.2.0.4/translations/

### Note

During the build process, some packages will be downloaded (including the ones listed as recommended and optional dependencies) if they are not present on the system. Because of this, build time may vary from the published time more than usual.

Due to the large size of the package, you may prefer to install it in `/opt`, instead of `/usr`. Depending on your choice, replace `<PREFIX>` by `/usr` or by `/opt/libreoffice-7.2.0.4`:

    export LO_PREFIX=<PREFIX>

Locales "fr" and "en-GB", you will find below, are just examples; you should change them to suit your needs - you might want to read the "Command Explanations", further below, before proceeding.

### Note

If you set the ACLOCAL environment variable to support installing Xorg in /opt, you will need to unset it for this package.

Prepare LibreOffice for compilation by running the following commands:

    sed -e "/gzip -f/d"   \
        -e "s|.1.gz|.1|g" \
        -i bin/distro-install-desktop-integration &&

    sed -e "/distro-install-file-lists/d" -i Makefile.in &&

    ./autogen.sh --prefix=$LO_PREFIX         \
                 --sysconfdir=/etc           \
                 --with-vendor=BLFS          \
                 --with-lang='fr en-GB'      \
                 --with-help                 \
                 --with-myspell-dicts        \
                 --without-junit             \
                 --without-system-dicts      \
                 --disable-dconf             \
                 --disable-odk               \
                 --enable-release-build=yes  \
                 --enable-python=system      \
                 --with-jdk-home=/opt/jdk    \
                 --with-system-apr           \
                 --with-system-boost         \
                 --with-system-clucene       \
                 --with-system-curl          \
                 --with-system-epoxy         \
                 --with-system-expat         \
                 --with-system-glm           \
                 --with-system-gpgmepp       \
                 --with-system-graphite      \
                 --with-system-harfbuzz      \
                 --with-system-icu           \
                 --with-system-jpeg          \
                 --with-system-lcms2         \
                 --with-system-libatomic_ops \
                 --with-system-libpng        \
                 --with-system-libxml        \
                 --with-system-neon          \
                 --with-system-nss           \
                 --with-system-odbc          \
                 --with-system-openldap      \
                 --with-system-openssl       \
                 --with-system-poppler       \
                 --with-system-postgresql    \
                 --with-system-redland       \
                 --with-system-serf          \
                 --with-system-zlib

The instructions below will only build the package without running any unit tests. If you prefer to run the unit tests, replace make build-nocheck with make build or (as a regular user only) just make, but do not be surprised if a unit test fails right at the end of the build and breaks it.

Build the package:

    make build-nocheck

Now, as the `root` user:

    make distro-pack-install

If installed in `/opt/libreoffice-7.2.0.4` some additional steps are necessary. Issue the following commands as the `root` user:

    if [ "$LO_PREFIX" != "/usr" ]; then

      # This symlink is necessary for the desktop menu entries
      ln -svf $LO_PREFIX/lib/libreoffice/program/soffice /usr/bin/libreoffice &&

      # Set up a generic location independent of version number
      ln -sfv libreoffice-7.2.0.4 /opt/libreoffice

      # Icons
      mkdir -vp /usr/share/pixmaps
      for i in $LO_PREFIX/share/icons/hicolor/32x32/apps/*; do
        ln -svf $i /usr/share/pixmaps
      done &&

      # Desktop menu entries
      for i in $LO_PREFIX/lib/libreoffice/share/xdg/*; do
        ln -svf $i /usr/share/applications/libreoffice-$(basename $i)
      done &&

      # Man pages
      for i in $LO_PREFIX/share/man/man1/*; do
        ln -svf $i /usr/share/man/man1/
      done

      unset i
    fi

If you have installed desktop-file-utils-0.26, and you wish to update the MIME database, issue, as the `root` user:

    update-desktop-database

The suite and main modules can be started from the menu. From a terminal, the suite can be started with the libreoffice command and the modules with the libreoffice --`<module>` command, respectively, where `<module>` is one of base, calc, draw, impress, math, web, or writer. Modules cannot be started using their shell starting script names (see "Installed Programs", below), if LO_PREFIX is other than `/usr`, unless the `$LO_PREFIX/bin` directory is appended to the PATH.

### Command Explanations

sed -e ...: The first sed prevents compression of the manual pages and the second one prevents the install from failing.

`--with-vendor=BLFS`: This switch sets BLFS as the vendor which is mentioned when you click "About" from the Help menu on the toolbar.

`--with-lang='fr en-GB'`: This switch sets what languages to support. To list several languages, separate them with a space. For all languages, use `--with-lang=ALL`. Note that the translations file is not needed and won't be downloaded if using only en_US as a language.

### Note

For a list of the available languages, look in `solenv/inc/langlist.mk`.

`--with-help`: Without this switch, the help files are not built.

`--with-jdk-home=/opt/jdk`: This parameter will silence a warning that the configure script attempted to find JAVA_HOME automatically (even though that is passed in the environment). Omit this if you disabled java.

`--with-myspell-dicts`: This switch adds myspell dictionaries to the LibreOffice installation set.

`--with-system-boost`: This switch enables using system boost. From time to time, recent versions of boost break the build of libreoffice. In this case, it is possible to use the bundled copy of boost, by removing this flag.

`--disable-dconf`: This switch disables compiling LibreOffice with the GNOME DConf configuration system support.

`--without-junit`: This switch disables the tests for the deprecated HSQLDB driver which is written in Java.

`--without-system-dicts`: This switch disables the use of dictionaries from system paths so that the ones installed by this package are used.

`--disable-odk`: This switch disables installing the office development kit. Remove if you want to develop a LibreOffice based application.

`--enable-release-build=yes`: This switch enables a Release Build. LibreOffice can be built as a Release Build or as a Developer Build, because their default installation paths and user profile paths are different. Developer Build displays the words "Dev" and "Beta" in several places (e.g, menu and splash screen).

`--enable-python=system`: This switch tells LibreOffice to use the system installed Python 3 instead of the bundled one.

`--with-system-*`: These switches prevent LibreOffice from trying to compile its own versions of these dependencies. If you've not installed some of the dependencies, remove the corresponding switches.

make distro-pack-install: This does a normal install, but if you add a DESTDIR environment variable it will also install a lot of (text) gid_Module_* files in the DESTDIR, to help distributions which want to break the package into parts.

`--with-parallelism=<count>`: This switch tells LibreOffice to use <count> CPU cores to compile in parallel. (Do not include literal angle brackets.) The default is to use all available cores on the system.

`--disable-cups`: Use this switch if you don't need printing support.

`--disable-dbus`: Use this switch if you've not installed D-Bus-1.8.0 or later. It also disables Bluetooth support and font install via PackageKit.

`--disable-firebird-sdbc`: By default, the ability to connect to a firebird database is enabled. Add this switch if you do not need that feature.

`--disable-gstreamer-1-0`: Use this switch if you have not installed gst-plugins-base-1.18.4.

`--disable-postgresql-sdbc`: This switch disables compiling LibreOffice with the ability to connect to a PostgreSQL database. Use it if you have not installed PostgreSQL and you do not want LibreOffice to compile its bundled copy.

`--disable-skia`: Use Cairo-1.17.4 for rendering instead of skia.

`--enable-gtk3-kde5`: This switch allows the Visual Class Library, which is responsible for widgets, to be built with KF5 file dialogs if GTK+-3, Qt5 and Plasma are all available.

`--enable-lto`: This switch will enable Link Time Optimization, which results in slightly smaller libraries (about 40 MB). This is said to make LibreOffice programs load faster (and possibly run faster, e.g. when recalculating a spreadsheet). On an 8-core machine with 16GB of memory, the difference in compile times was minimal, but an extra 2GB was used for the work files. On machines with fewer processors or a lack of memory, the compile might be much slower.

`--without-java`: This switch disables Java support in LibreOffice. Java is needed for the deprecated HSQLDB driver, which allows reading databases created by other programs or in earlier versions of libreoffice base.

`--without-fonts`: LibreOffice includes a number of third-party TrueType fonts. If you have already installed some or all of the same fonts, you may prefer to use the system versions.

`--enable-kf5`: Builds with KDE/Plasma integration. If Qt-5.15.2 and/or KDE Frameworks-5.85.0 are not installed in `/usr`, the include and library directories must be specified in `QT5INC`, `QT5LIB`, `KF5INC`, and `KF5LIB`, respectively.

`--enable-evolution2`: Enables support for Evolution address books through Evolution Data Server. Note that Evolution Data Server must be installed for this feature to function.

### Contents

Installed Programs: libreoffice, lobase, localc, lodraw, loffice, lofromtemplate, loimpress, lomath, loweb, lowriter, soffice and unopkg; several programs under $LO_PREFIX/lib/libreoffice/program
Installed Libraries: several libraries under $LO_PREFIX/lib/libreoffice/program
Installed Directory: $LO_PREFIX/lib/libreoffice

#### Short Descriptions

libreoffice (or soffice) | is the main libreofice suite (symlink to $LO_PREFIX/lib/libreoffice/program/soffice)
lobase | is the database manager module shell starting script
localc | is the spreadsheet module shell starting script
lodraw | is the vector graphics editor and diagramming tool module shell starting script
loimpress | is the (PowerPoint) presentations editor and displayer module shell starting script
lomath | is the mathematical formula editor module shell starting script
loweb | is the HTML editor module shell starting script
lowriter | is the word processor module shell starting script
unopkg | is a tool to manage LibreOffice extensions from the command line

Last updated on

## Chapter 40. Graphical Web Browsers

This chapter contains a wonderful selection of browsers. We hope you can find one you enjoy using or give them each a trial run.

## Epiphany-40.3

### Introduction to Epiphany

Epiphany is a simple yet powerful GNOME web browser targeted at non-technical users. Its principles are simplicity and standards compliance.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/epiphany/40/epiphany-40.3.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/epiphany/40/epiphany-40.3.tar.xz

- Download MD5 sum: 9b5709c8ff1bb5650d810a0008b9cc85

- Download size: 5.1 MB

- Estimated disk space required: 109 MB

- Estimated build time: 0.3 SBU (Using parallelism=4, including tests)

#### Epiphany Dependencies

##### Required

Gcr-3.40.0, gnome-desktop-40.4, ISO Codes-4.7.0, JSON-GLib-1.6.6, libnotify-0.7.9, libportal-0.4, Nettle-3.7.3, and WebKitGTK-2.32.3

##### Recommended

libdazzle-3.40.0 and libhandy-1.2.3

##### Optional

Appstream-Glib

##### Runtime Dependencies

gnome-keyring-40.0 (for storing passwords) and Seahorse-40.0 (for managing stored passwords)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/epiphany

### Installation of Epiphany

Install Epiphany by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

Now, as the `root` user:

    ninja install

### Note

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

One test would fail if this package is not installed, so it's better to run the test suite after installation. To test the results, issue ninja test. The tests must be run from a graphical session.

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Program: epiphany
Installed Libraries: None
Installed Directories: /usr/{lib,libexec,share,share/help/*}/epiphany

#### Short Descriptions

epiphany | is a GNOME web browser based on the WebKit2 rendering engine

Last updated on

## Falkon-3.1.0

### Introduction to falkon

Falkon is a KDE web browser using the QtWebEngine rendering engine. It was previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms.

Although falkon is now part of KDE, it can be installed without KDE (with the loss of kwallet functionality).

### Warning

Falkon relies on QtWebEngine. That uses a forked copy of chromium, and is therefore vulnerable to many issues found there. The Qt developers have always preferred to make releases at the same time as the rest of Qt (rather than adding emergency fixes). Now that they are keen to move to Qt6, the 5.15.3 and later Qt-5.15 releases are initially only available to paying customers. QtWebEngine is something of an exception because of its LGPL licence, but getting the git sources (with the forked chromium submodule) to a point where they will successfully build on a current BLFS system can take a lot of effort. Be aware that future fixes for vulnerabilities might be very delayed, to the extent that you might wish to consider using a different browser.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/falkon/3.1/falkon-3.1.0.tar.xz

- Download MD5 sum: 9255fb335d3ba361dea44b7b297ddf7d

- Download size: 2.2 MB

- Estimated disk space required: 60 MB (without optional dependencies)

- Estimated build time: 2.2 SBU (Using parallelism=4)

#### falkon Dependencies

##### Required

extra-cmake-modules-5.85.0 and qtwebengine-5.15.6

##### Optional

gnome-keyring-40.0, KDE Frameworks-5.85.0 and PySide2 for experimental Python plugins (compiling this from source is very slow).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/falkon

### Installation of falkon

Install falkon by running the following commands:

Unless you have installed both PySide2 and ki18n, remove the translations for the sample hellopython.py script:

    rm -rf po/

Fix a missing include in Qt-5.14:

    sed -i '/#include <QSettings>/a#include <QFile>' \
       src/plugins/VerticalTabs/verticaltabsplugin.cpp

Fix a build problem introduced in Qt-5.15:

    sed -i '/#include <QPainter>/a #include <QPainterPath>' \
       src/lib/tools/qztools.cpp

Now build the program:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          .. &&

    make

To test the results, issue: make test. All tests should pass. If any fail, the full results will be in `Testing/Temporary/LastTest.log`.

Now, as the `root` user:

    make install

If you have installed Pyside2 you will want to examine the hellopython.py which is in the `scripts/` directory, and perhaps copy it to your home directory.

### Command Explanations

`-DBUILD_TESTING=OFF`: This will save a little time and space by not building the test programs, use this if you do not wish to run the test.

### Contents

Installed Programs: falkon
Installed Library: libFalkonPrivate.so.3
Installed Directory: ${FALKON_PREFIX}/lib/plugins, ${FALKON_PREFIX}/share/falkon.

#### Short Descriptions

falkon | is a web browser which uses qtwebengine
`libFalkonPrivate.so.3` | contains functions used by falkon

Last updated on

## Firefox-78.13.0

### Introduction to Firefox Legacy

Firefox is a stand-alone browser based on the Mozilla codebase.

This package is known to build and work properly using an LFS-10.1 platform but cannot be built on systems using glibc-2.34.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/firefox/releases/78.13.0esr/source/firefox-78.13.0esr.source.tar.xz

- Download MD5 sum: 872623fc9f93ea8d3f3290024f0c0925

- Download size: 319 MB

- Estimated disk space required: 5.2 GB (186 MB installed) without tests

- Estimated build time: 28 SBU (on a 4-core machine) without tests

### Warning

This is the old series of firefox ESR releases, the final release is planned to be 78.15.0 in October 2021. This page is expected to be removed in November 2021 when firefox-91.3 is released.

If you are using glibc-2.34 or later, this old version of firefox will not be usable and you should use Firefox-91.0.1.

There are only two reasons to use this version: either you want to use ftp from the browser and do not yet have a workaround, or you have a system which for unexplained reasons cannot compile current firefox (there is now a patch to work around that).

### Note

The directory name is firefox-78.13.0

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.

As with other large packages which use C++ (or rust), the SBU times to build this vary more widely than you might expect. The build times will increase significantly if your machine has to swap.

Although upstream prefer to use PulseAudio, for the moment Alsa can still be used. Both may need runtime configuration to get sound working.

#### Firefox Dependencies

##### Required

Autoconf-2.13, Cbindgen-0.20.0, dbus-glib-0.112, both GTK+-3.24.30 and GTK+-2.24.33, libnotify-0.7.9, LLVM-12.0.1 (clang, used for bindgen even if using gcc), nodejs-14.17.5, NSS-3.69, PulseAudio-15.0 (or alsa-lib-1.2.5.1 if you edit the mozconfig; now deprecated by mozilla), in either case please read the Configuration Information, Python-3.9.6 (rebuilt after installing SQLite-3.36.0), startup-notification-0.12, UnZip-6.0, yasm-1.3.0, and Zip-3.0

##### Recommended

ICU-69.1, libevent-2.1.12, libwebp-1.2.1, NASM-2.15.05

### Note

If you don't install recommended dependencies, then internal copies of those packages will be used. They might be tested to work, but they can be out of date or contain security holes.

##### Optional

cURL-7.78.0, Doxygen-1.9.2, FFmpeg-4.4 (runtime, to play mov, mp3 or mp4 files), liboauth-1.0.3, OpenJDK-16.0.2, Valgrind-3.17.0, Wget-1.21.1, Wireless Tools-29, libproxy

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/firefox

### Installation of Firefox Legacy

The configuration of Firefox is accomplished by creating a `mozconfig` file containing the desired configuration options. A default `mozconfig` is created below. To see the entire list of available configuration options (and an abbreviated description of some of them), issue ./mach configure && ./configure --help | less. You may also wish to review the entire file and uncomment any other desired options. Create the file by issuing the following command:

    cat > mozconfig << "EOF"
    # If you have a multicore machine, all cores will be used by default.

    # If you have installed (or will install) wireless-tools, and you wish
    # to use geolocation web services, comment out this line
    ac_add_options --disable-necko-wifi

    # API Keys for geolocation APIs - necko-wifi (above) is required for MLS
    # Uncomment the following line if you wish to use Mozilla Location Service
    #ac_add_options --with-mozilla-api-keyfile=$PWD/mozilla-key

    # Uncomment the following line if you wish to use Google's geolocaton API
    # (needed for use with saved maps with Google Maps)
    #ac_add_options --with-google-location-service-api-keyfile=$PWD/google-key

    # startup-notification is required since firefox-78

    # Uncomment the following option if you have not installed PulseAudio
    #ac_add_options --disable-pulseaudio
    # or uncomment this if you installed alsa-lib instead of PulseAudio
    #ac_add_options --enable-alsa

    # Comment out following options if you have not installed
    # recommended dependencies:
    ac_add_options --with-system-libevent
    ac_add_options --with-system-webp
    ac_add_options --with-system-nspr
    ac_add_options --with-system-nss
    ac_add_options --with-system-icu

    # Do not specify the gold linker which is not the default. It will take
    # longer and use more disk space when debug symbols are disabled.

    # libdavid (av1 decoder) requires nasm. Uncomment this if nasm
    # has not been installed.
    #ac_add_options --disable-av1

    # You cannot distribute the binary if you do this
    ac_add_options --enable-official-branding

    # Stripping is now enabled by default.
    # Uncomment these lines if you need to run a debugger:
    #ac_add_options --disable-strip
    #ac_add_options --disable-install-strip

    # Disabling debug symbols makes the build much smaller and a little
    # faster. Comment this if you need to run a debugger. Note: This is
    # required for compilation on i686.
    ac_add_options --disable-debug-symbols

    # The elf-hack is reported to cause failed installs (after successful builds)
    # on some machines. It is supposed to improve startup time and it shrinks
    # libxul.so by a few MB - comment this if you know your machine is not affected.
    ac_add_options --disable-elf-hack

    # The BLFS editors recommend not changing anything below this line:
    ac_add_options --prefix=/usr
    ac_add_options --enable-application=browser
    ac_add_options --disable-crashreporter
    ac_add_options --disable-updater
    # enabling the tests will use a lot more space and significantly
    # increase the build time, for no obvious benefit.
    ac_add_options --disable-tests

    # The default level of optimization again produces a working build with gcc.
    ac_add_options --enable-optimize

    ac_add_options --enable-system-ffi
    ac_add_options --enable-system-pixman

    # --with-system-bz2 was removed in firefox-78
    ac_add_options --with-system-jpeg
    ac_add_options --with-system-png
    ac_add_options --with-system-zlib

    # The following option unsets Telemetry Reporting. With the Addons Fiasco,
    # Mozilla was found to be collecting user's data, including saved passwords and
    # web form data, without users consent. Mozilla was also found shipping updates
    # to systems without the user's knowledge or permission.
    # As a result of this, use the following command to permanently disable
    # telemetry reporting in Firefox.
    unset MOZ_TELEMETRY_REPORTING

    mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir
    EOF

Compile Firefox by issuing the following commands:

In the esr version of firefox-78, the code to ensure that add-ons are signed by the trusted root has been disabled, presumably for organizations which require their own add-ons. To enable it as an added security measure issue the following command:

    sed -e 's/Disable/Enable/'            \
        -e '/^MOZ_REQUIRE_SIGNING/s/0/1/' \
        -i build/mozconfig.common

If the geolocation APIs are needed:

### Note

The Google and Mozilla API Keys below are specific to LFS. If using these instructions for another distro, or if you intend to distribute binary copies of the software using these instructions, please obtain your own keys following the instructions located at http://www.chromium.org/developers/how-tos/api-keys and https://location.services.mozilla.com/api respectively.

    echo "AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ" > google-key
    echo "613364a7-9418-4c86-bcee-57e32fd70c23" > mozilla-key

### Note

If you are compiling this package in chroot you must do two things. First, as the `root` user, ensure that `/dev/shm` is mounted. If you do not do this, the Python configury will fail with a traceback report referencing `/usr/lib/pythonN.N/multiprocessing/synchronize.py`. Run:

    mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm

Second, either as the `root` user export the `$SHELL` environment variable using export SHELL=/bin/sh or else prepend `SHELL=/bin/sh` when running the ./mach commands.

Now invoke the Python script to compile the package.

    export CC=gcc CXX=g++ &&
    export MOZBUILD_STATE_PATH=${PWD}/mozbuild &&
    ./mach configure                           &&
    ./mach build

The `mozconfig` above disables the tests because they use a lot more time and disk space for no obvious benefit. If you have nevertheless enabled them, you can run the tests by executing ./mach gtest. This will require a network connection, and to be run from within an Xorg session - there is a popup dialog when it fails to connect to ALSA (that does not create a failed test). One or two tests will fail. To see the details of the failure(s) you will need to log the output from that command so that you can review it.

Now, as the `root` user:

    ./mach install

Set environment variables back to their values:

    unset CC CXX MOZBUILD_STATE_PATH

### Command Explanations

export CC=gcc CXX=g++ ...: Upstream now prefer clang so that they can use one compiler everywhere. On the X86 architectures clang now appears to support most of the same security-hardening options as GCC. With the current versions and the default flags, GCC creates a marginally bigger build but takes typically 2 SBU less time on a 4-core machine using the mozconfig above.

export MOZBUILD_STATE_PATH=${PWD}/mozbuild: The build is now supposed to tell you that it intends to create `~/.mozbuild`, and offer you an option to press <ENTER> to accept this, or Ctrl-C to cancel and restart the build after specifying the directory. In practice, the message may not appear until after <ENTER> is keyed, i.e. the build stalls.

That directory is used for a (probably random) telemetry identifier. Creating this in the build directory, and deleting that after the installation, prevents it being used. If you wish to participate in telemetry, export MOZBUILD_STATE_PATH to point to its default directory.

./mach build: Firefox now uses this python script to run the build and install.

`./mach build --verbose`: Use this alternative if you need details of which files are being compiled, together with any C or C++ flags being used. But do not add '--verbose' to the install command, it is not accepted there.

`./mach build -jN`: The build should, by default, use all the online CPU cores. If using all the cores causes the build to swap because you have insufficient memory, using fewer cores can be faster.

### Configuring Firefox

If you use a desktop environment like Gnome or KDE you may like to create a `firefox.desktop` file so that Firefox appears in the panel's menus. As the `root` user:

    mkdir -pv /usr/share/applications &&
    mkdir -pv /usr/share/pixmaps &&

    MIMETYPE="text/xml;text/mml;text/html;"                                    &&
    MIMETYPE="$MIMETYPE;application/xhtml+xml;application/vnd.mozilla.xul+xml" &&
    MIMETYPE="$MIMETYPE;x-scheme-handler/http;x-scheme-handler/https;          &&

    cat > /usr/share/applications/firefox.desktop << EOF &&
    [Desktop Entry]
    Encoding=UTF-8
    Name=Firefox Web Browser
    Comment=Browse the World Wide Web
    GenericName=Web Browser
    Exec=firefox %u
    Terminal=false
    Type=Application
    Icon=firefox
    Categories=GNOME;GTK;Network;WebBrowser;
    MimeType=$MIMETYPE
    StartupNotify=true
    EOF

    unset MIMETYPE &&

    ln -sfv /usr/lib/firefox/browser/chrome/icons/default/default128.png \
            /usr/share/pixmaps/firefox.png

#### Configuration Information

The application settings for firefox are accessible by keying about:config in the address bar.

Occasionally, getting working sound in firefox can be a problem. Although upstream prefers pulseaudio, on balance using Alsa may be easier.

If you enabled Alsa for sound, you may need to alter one variable to get working sound. If you run firefox from a term and try to play something with sound you might encounter error messages like:

`Sandbox: seccomp sandbox violation: pid 3941, tid 4030, syscall 16, args 48 2147767296 139909894784796 0 0 0.`

That was on x86_64, on i686 the syscall number is 54. To allow this syscall, in about:config change security.sandbox.content.syscall_whitelist to 16 (or 54 if using i686).

If you use pulseaudio in a Desktop Environment, it might already be started by that DE. But if it is not, although firefox-57 managed to start it, firefox-58 did not. If you run firefox from a term and this problem is present, trying to play sound will encounter error messages warning `Can't get cubeb context!`

The fix for this is to close firefox, start pulseaudio to check it does start (if not, read the information on Configuring in PulseAudio-15.0) and restart firefox to check it is working. If it now works, add the following to your `~/.xinitrc`: `pulseaudio --verbose --log-target=journald&` (unfortunately, on some systems this does not work).

You may wish to use multiple profiles within firefox. To do that, invoke firefox as firefox --ProfileManager. You can also check which profile is currently in use from about:profiles.

Although WebRender (using the GPU for compositing) is not used by default, it now appears to work well on supported hardware (ATI, Nvidia and Intel GPUs with Mesa-18 or later. For an explanation, please see hacks.mozilla.org. The only downside seems to be that on a machine with limited RAM it might use more RAM.

To check if WebRender is being used, look in about:support. In the Graphics section Compositing will either show 'Basic' (i.e. not in use) or 'WebRender'. To enable it, go to about:config and change gfx.webrender.all to True. You will need to restart firefox.

It may be useful to mention the processes from firefox which can appear in top - as well as firefox itself, there may be multiple Web Content processes, and now an RDD Process (Remote Data Decoder) which appears when playing web videos encoded with av1 (libdav1d). If WebRender has been enabled, a GPU Process will also appear when firefox has to repaint (e.g. scrolling, opening a new tab, or playing a video).

### Contents

Installed Programs: firefox
Installed Libraries: Numerous libraries, browser components, plugins, extensions, and helper modules installed in /usr/lib/firefox
Installed Directory: /usr/lib/firefox and /usr/lib/mozilla

#### Short Descriptions

firefox | is a GTK+-3 internet browser that uses the Mozilla Gecko rendering engine

Last updated on

## Firefox-91.0.1

### Introduction to Firefox

Firefox is a stand-alone browser based on the Mozilla codebase.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/firefox/releases/91.0.1esr/source/firefox-91.0.1esr.source.tar.xz

- Download MD5 sum: f81ca2f266ab3dafdd080f269bbb2286

- Download size: 366 MB

- Estimated disk space required: 6.7 GB (196 MB installed) without tests

- Estimated build time: 28 SBU (on a typical 4-core machine) without tests

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/firefox-91.0.1esr-glibc234-1.patch

- Recommended patch: https://www.linuxfromscratch.org/patches/blfs/11.0/firefox-91.0.1esr-disable_rust_test-1.patch

### Note

With the 91 ESR series, firefox no-longer works on ftp: links. If that is important to you, as a temporary measure (on non-glibc-2.34 systems) you can continue to use Firefox-78.13.0 Legacy while you explore alternative approaches.

The directory name is firefox-91.0.1

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.

As with other large packages which use C++ (or rust), the SBU times to build this vary more widely than you might expect. The build times will increase significantly if your machine has to swap.

Although upstream prefer to use PulseAudio, for the moment Alsa can still be used. Both may need runtime configuration to get sound working.

#### Firefox Dependencies

##### Required

Autoconf-2.13, Cbindgen-0.20.0, dbus-glib-0.112, both GTK+-3.24.30 and GTK+-2.24.33, libnotify-0.7.9, LLVM-12.0.1 (clang, used for bindgen even if using gcc), nodejs-14.17.5, NSS-3.69, PulseAudio-15.0 (or alsa-lib-1.2.5.1 if you edit the mozconfig; now deprecated by mozilla), in either case please read the Configuration Information, Python-3.9.6 (rebuilt after installing SQLite-3.36.0), startup-notification-0.12, UnZip-6.0, yasm-1.3.0, and Zip-3.0

##### Recommended

ICU-69.1, libevent-2.1.12, libwebp-1.2.1, NASM-2.15.05

### Note

If you don't install recommended dependencies, then internal copies of those packages will be used. They might be tested to work, but they can be out of date or contain security holes.

##### Optional

cURL-7.78.0, Doxygen-1.9.2, FFmpeg-4.4 (runtime, to play mov, mp3 or mp4 files), liboauth-1.0.3, OpenJDK-16.0.2, Valgrind-3.17.0, Wget-1.21.1, Wireless Tools-29, libproxy

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/firefox

### Installation of Firefox

The configuration of Firefox is accomplished by creating a `mozconfig` file containing the desired configuration options. A default `mozconfig` is created below. To see the entire list of available configuration options (and an abbreviated description of some of them), issue ./mach configure && ./configure --help | less. You may also wish to review the entire file and uncomment any other desired options. Create the file by issuing the following command:

    cat > mozconfig << "EOF"
    # If you have a multicore machine, all cores will be used by default.

    # If you have installed (or will install) wireless-tools, and you wish
    # to use geolocation web services, comment out this line
    ac_add_options --disable-necko-wifi

    # API Keys for geolocation APIs - necko-wifi (above) is required for MLS
    # Uncomment the following line if you wish to use Mozilla Location Service
    #ac_add_options --with-mozilla-api-keyfile=$PWD/mozilla-key

    # Uncomment the following line if you wish to use Google's geolocaton API
    # (needed for use with saved maps with Google Maps)
    #ac_add_options --with-google-location-service-api-keyfile=$PWD/google-key

    # startup-notification is required since firefox-78

    # Uncomment the following option if you have not installed PulseAudio
    #ac_add_options --disable-pulseaudio
    # or uncomment this if you installed alsa-lib instead of PulseAudio
    #ac_add_options --enable-alsa

    # Uncomment this line if you are building on an i686 system to fix a build
    # failure due to invalid ASM code.
    #ac_add_options --with-system-libvpx

    # Comment out following options if you have not installed
    # recommended dependencies:
    ac_add_options --with-system-libevent
    ac_add_options --with-system-webp
    ac_add_options --with-system-nspr
    ac_add_options --with-system-nss
    ac_add_options --with-system-icu

    # Do not specify the gold linker which is not the default. It will take
    # longer and use more disk space when debug symbols are disabled.

    # libdavid (av1 decoder) requires nasm. Uncomment this if nasm
    # has not been installed.
    #ac_add_options --disable-av1

    # You cannot distribute the binary if you do this
    ac_add_options --enable-official-branding

    # Stripping is now enabled by default.
    # Uncomment these lines if you need to run a debugger:
    #ac_add_options --disable-strip
    #ac_add_options --disable-install-strip

    # Disabling debug symbols makes the build much smaller and a little
    # faster. Comment this if you need to run a debugger. Note: This is
    # required for compilation on i686.
    ac_add_options --disable-debug-symbols

    # The elf-hack is reported to cause failed installs (after successful builds)
    # on some machines. It is supposed to improve startup time and it shrinks
    # libxul.so by a few MB - comment this if you know your machine is not affected.
    ac_add_options --disable-elf-hack

    # The BLFS editors recommend not changing anything below this line:
    ac_add_options --prefix=/usr
    ac_add_options --enable-application=browser
    ac_add_options --disable-crashreporter
    ac_add_options --disable-updater
    # enabling the tests will use a lot more space and significantly
    # increase the build time, for no obvious benefit.
    ac_add_options --disable-tests

    # The default level of optimization again produces a working build with gcc.
    ac_add_options --enable-optimize

    ac_add_options --enable-system-ffi
    ac_add_options --enable-system-pixman

    ac_add_options --with-system-jpeg
    ac_add_options --with-system-png
    ac_add_options --with-system-zlib

    # The following option unsets Telemetry Reporting. With the Addons Fiasco,
    # Mozilla was found to be collecting user's data, including saved passwords and
    # web form data, without users consent. Mozilla was also found shipping updates
    # to systems without the user's knowledge or permission.
    # As a result of this, use the following command to permanently disable
    # telemetry reporting in Firefox.
    unset MOZ_TELEMETRY_REPORTING

    mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir
    EOF

Compile Firefox by issuing the following commands:

Apply a patch which allows compilation on systems running glibc-2.34:

    patch -Np1 -i ../firefox-91.0.1esr-glibc234-1.patch

Now apply a patch which works around unexplained failures on some machines (a message that a python check on libgkrust.a identified 1 networking function, getsockname) in the rust static library.

    patch -Np1 -i ../firefox-91.0.1esr-disable_rust_test-1.patch

If the geolocation APIs are needed:

### Note

The Google and Mozilla API Keys below are specific to LFS. If using these instructions for another distro, or if you intend to distribute binary copies of the software using these instructions, please obtain your own keys following the instructions located at http://www.chromium.org/developers/how-tos/api-keys and https://location.services.mozilla.com/api respectively.

    echo "AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ" > google-key
    echo "613364a7-9418-4c86-bcee-57e32fd70c23" > mozilla-key

### Note

If you are compiling this package in chroot you must do two things. First, as the `root` user, ensure that `/dev/shm` is mounted. If you do not do this, the Python configury will fail with a traceback report referencing `/usr/lib/pythonN.N/multiprocessing/synchronize.py`. Run:

    mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm

Second, either as the `root` user export the `$SHELL` environment variable using export SHELL=/bin/sh or else prepend `SHELL=/bin/sh` when running the ./mach commands.

Now invoke the Python mach script to compile the package.

    export CC=gcc CXX=g++ &&
    export MACH_USE_SYSTEM_PYTHON=1            &&
    export MOZBUILD_STATE_PATH=${PWD}/mozbuild &&
    ./mach configure                           &&
    ./mach build

The `mozconfig` above disables the tests because they use a lot more time and disk space for no obvious benefit. If you have nevertheless enabled them, you can run the tests by executing ./mach gtest. This will require a network connection, and to be run from within an Xorg session - there is a popup dialog when it fails to connect to ALSA (that does not create a failed test). One or two tests will fail. To see the details of the failure(s) you will need to log the output from that command so that you can review it.

Now, as the `root` user:

    MACH_USE_SYSTEM_PYTHON=1 ./mach install

Empty the environment variables which were set above:

    unset CC CXX MACH_USE_SYSTEM_PYTHON MOZBUILD_STATE_PATH

### Command Explanations

export CC=gcc CXX=g++ ...: Upstream now prefer clang so that they can use one compiler everywhere. On the X86 architectures clang now appears to support most of the same security-hardening options as GCC. With the current versions and the default flags, GCC creates a marginally bigger build but takes typically 2 SBU less time on a 4-core machine using the mozconfig above.

export MOZBUILD_STATE_PATH=${PWD}/mozbuild: The build is now supposed to tell you that it intends to create `~/.mozbuild`, and offer you an option to press <ENTER> to accept this, or Ctrl-C to cancel and restart the build after specifying the directory. In practice, the message may not appear until after <ENTER> is keyed, i.e. the build stalls.

That directory is used for a (probably random) telemetry identifier. Creating this in the build directory, and deleting that after the installation, prevents it being used. If you wish to participate in telemetry, export MOZBUILD_STATE_PATH to point to its default directory and remove the entry from the `mozconfig`.

MACH_USE_SYSTEM_PYTHON=1: Use the system python to create a virtual environment for mach without downloading any python wheels.

./mach configure: This validates the supplied dependencies and the `mozconfig`.

`./mach build --verbose`: Use this alternative if you need details of which files are being compiled, together with any C or C++ flags being used. But do not add '--verbose' to the install command, it is not accepted there.

`./mach build -jN`: The build should, by default, use all the online CPU cores. If using all the cores causes the build to swap because you have insufficient memory, using fewer cores can be faster.

### Configuring Firefox

If you use a desktop environment like Gnome or KDE you may like to create a `firefox.desktop` file so that Firefox appears in the panel's menus. As the `root` user:

    mkdir -pv /usr/share/applications &&
    mkdir -pv /usr/share/pixmaps      &&

    MIMETYPE="text/xml;text/mml;text/html;"                                    &&
    MIMETYPE="$MIMETYPE;application/xhtml+xml;application/vnd.mozilla.xul+xml" &&
    MIMETYPE="$MIMETYPE;x-scheme-handler/http;x-scheme-handler/https;          &&

    cat > /usr/share/applications/firefox.desktop << EOF &&
    [Desktop Entry]
    Encoding=UTF-8
    Name=Firefox Web Browser
    Comment=Browse the World Wide Web
    GenericName=Web Browser
    Exec=firefox %u
    Terminal=false
    Type=Application
    Icon=firefox
    Categories=GNOME;GTK;Network;WebBrowser;
    MimeType=$MIMETYPE
    StartupNotify=true
    EOF

    unset MIMETYPE &&

    ln -sfv /usr/lib/firefox/browser/chrome/icons/default/default128.png \
            /usr/share/pixmaps/firefox.png

#### Configuration Information

The application settings for firefox are accessible by keying about:config in the address bar.

Occasionally, getting working sound in firefox can be a problem. Although upstream prefers pulseaudio, on balance using Alsa may be easier.

If you enabled Alsa for sound, you may need to alter one variable to get working sound. If you run firefox from a term and try to play something with sound you might encounter error messages like:

`Sandbox: seccomp sandbox violation: pid 3941, tid 4030, syscall 16, args 48 2147767296 139909894784796 0 0 0.`

That was on x86_64, on i686 the syscall number is 54. To allow this syscall, in about:config change security.sandbox.content.syscall_whitelist to 16 (or 54 if using i686).

If you use pulseaudio in a Desktop Environment, it might already be started by that DE. But if it is not, although firefox-57 managed to start it, firefox-58 did not. If you run firefox from a term and this problem is present, trying to play sound will encounter error messages warning `Can't get cubeb context!`

The fix for this is to close firefox, start pulseaudio to check it does start (if not, read the information on Configuring in PulseAudio-15.0) and restart firefox to check it is working. If it now works, add the following to your `~/.xinitrc`: `pulseaudio --verbose --log-target=journald&` (unfortunately, on some systems this does not work).

You may wish to use multiple profiles within firefox. To do that, invoke firefox as firefox --ProfileManager. You can also check which profile is currently in use from about:profiles.

Although WebRender (using the GPU for compositing) is not used by default, it now appears to work well on supported hardware (ATI, Nvidia and Intel GPUs with Mesa-18 or later. For an explanation, please see hacks.mozilla.org. The only downside seems to be that on a machine with limited RAM it might use more RAM.

To check if WebRender is being used, look in about:support. In the Graphics section Compositing will either show 'Basic' (i.e. not in use) or 'WebRender'. To enable it, go to about:config and change gfx.webrender.all to True. You will need to restart firefox.

It may be useful to mention the processes from firefox which can appear in top - as well as firefox itself, there may be multiple Web Content processes, and now an RDD Process (Remote Data Decoder) which appears when playing web videos encoded with av1 (libdav1d). If WebRender has been enabled, a GPU Process will also appear when firefox has to repaint (e.g. scrolling, opening a new tab, or playing a video).

### Contents

Installed Programs: firefox
Installed Libraries: Numerous libraries, browser components, plugins, extensions, and helper modules installed in /usr/lib/firefox
Installed Directory: /usr/lib/firefox and /usr/lib/mozilla

#### Short Descriptions

firefox | is a GTK+-3 internet browser that uses the Mozilla Gecko rendering engine

Last updated on

## SeaMonkey-2.53.9

### Introduction to SeaMonkey

SeaMonkey is a browser suite, the Open Source sibling of Netscape. It includes the browser, composer, mail and news clients, and an IRC client. It is the follow-on to the Mozilla browser suite.

The Mozilla project also hosts two subprojects that aim to satisfy the needs of users who don't need the complete browser suite or prefer to have separate applications for browsing and e-mail. These subprojects are Firefox-91.0.1 and Thunderbird-91.0.3. Both are based on the Mozilla source code.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/seamonkey/releases/2.53.9/source/seamonkey-2.53.9.source.tar.xz

- Download MD5 sum: f36c532bbd9c6903036aa02e9a40246b

- Download size: 272 MB

- Estimated disk space required: 6.1 GB (159 MB installed)

- Estimated build time: 21 SBU (with parallelism=4)

### Note

The tarball seamonkey-2.53.9.source.tar.xz will untar to seamonkey-2.53.9 directory.

#### SeaMonkey Dependencies

##### Required

Autoconf-2.13, both GTK+-2.24.33 and GTK+-3.24.30, Python-2.7.18, rustc-1.52.0, UnZip-6.0, yasm-1.3.0, and Zip-3.0

##### Recommended

ICU-69.1, libevent-2.1.12, libwebp-1.2.1 NASM-2.15.05, NSPR-4.32, NSS-3.69, and PulseAudio-15.0

### Note

If you don't install recommended dependencies, then internal copies of those packages will be used. They might be tested to work, but they can be out of date or contain security holes.

##### Optional

alsa-lib-1.2.5.1, cURL-7.78.0, dbus-glib-0.112, Doxygen-1.9.2, GConf-3.2.6, gst-plugins-base-1.18.4 (and other plugins, only for tests), OpenJDK-16.0.2, startup-notification-0.12, Valgrind-3.17.0, Wget-1.21.1, Wireless Tools-29, Hunspell, and Watchman

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/seamonkey

### Installation of SeaMonkey

The configuration of SeaMonkey is accomplished by creating a `mozconfig` file containing the desired configuration options. A default `mozconfig` file is created below. To see the entire list of available configuration options (and an abbreviated description of each one), issue ./configure --help. You may also wish to review the entire file and uncomment any other desired options. Create the file by issuing the following command:

    cat > mozconfig << "EOF"
    # If you have a multicore machine, all cores will be used
    # unless you pass -jN to ./mach build

    # If you have installed DBus-Glib comment out this line:
    ac_add_options --disable-dbus

    # If you have installed dbus-glib, and you have installed (or will install)
    # wireless-tools, and you wish to use geolocation web services, comment out
    # this line
    ac_add_options --disable-necko-wifi

    # Uncomment these lines if you have installed optional dependencies:
    #ac_add_options --enable-system-hunspell
    #ac_add_options --enable-startup-notification

    # Uncomment the following option if you have not installed PulseAudio
    #ac_add_options --disable-pulseaudio
    # and uncomment this if you installed alsa-lib instead of PulseAudio
    #ac_add_options --enable-alsa

    # Comment out following option if you have gconf installed
    ac_add_options --disable-gconf

    # Comment out following options if you have not installed
    # recommended dependencies:
    ac_add_options --with-system-icu
    ac_add_options --with-system-libevent
    ac_add_options --with-system-nspr
    ac_add_options --with-system-nss
    ac_add_options --with-system-webp

    # The elf-hack is reported to cause failed installs (after successful builds)
    # on some machines. It is supposed to improve startup time and it shrinks
    # libxul.so by a few MB - comment this if you know your machine is not affected.
    ac_add_options --disable-elf-hack

    # Seamonkey has some additional features that are not turned on by default,
    # such as an IRC client, calendar, and DOM Inspector. The DOM Inspector
    # aids with designing web pages. Comment these options if you do not
    # desire these features.
    ac_add_options --enable-calendar
    ac_add_options --enable-dominspector
    ac_add_options --enable-irc

    # The BLFS editors recommend not changing anything below this line:
    ac_add_options --prefix=/usr
    ac_add_options --enable-application=comm/suite

    ac_add_options --disable-crashreporter
    ac_add_options --disable-updater
    ac_add_options --disable-tests

    ac_add_options --enable-optimize="-O2"
    ac_add_options --enable-strip
    ac_add_options --enable-install-strip
    ac_add_options --enable-official-branding

    # The option to use system cairo was removed in 2.53.9.
    ac_add_options --enable-system-ffi
    ac_add_options --enable-system-pixman

    ac_add_options --with-system-bz2
    ac_add_options --with-system-jpeg
    ac_add_options --with-system-png
    ac_add_options --with-system-zlib
    EOF

### Note

If you are compiling this package in chroot you must do two things. First, as the `root` user, ensure that `/dev/shm` is mounted. If you do not do this, the Python configury will fail with a traceback report referencing `/usr/lib/pythonN.N/multiprocessing/synchronize.py`. Run:

    mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm

Second, either as the `root` user export the `$SHELL` environment variable using export SHELL=/bin/sh or else prepend `SHELL=/bin/sh` when running the first make command.

Compile SeaMonkey by running the following commands:

    export CC=gcc CXX=g++ &&
    ./mach configure      &&
    ./mach build

This package does not come with a test suite.

Install SeaMonkey by issuing the following commands as the `root` user:

    ./mach install                  &&
    chown -R 0:0 /usr/lib/seamonkey &&

    cp -v $(find -name seamonkey.1 | head -n1) /usr/share/man/man1

### Command Explanations

export CC=gcc CXX=g++ ...: Upstream now prefer clang so that they can use one compiler everywhere. On the X86 architectures clang takes a little longer than gcc to compile mozilla applications.

./mach configure: This validates the supplied dependencies and the `mozconfig`.

`./mach build --verbose`: Use this alternative if you need details of which files are being compiled, together with any C or C++ flags being used. But do not add '--verbose' to the install command, it is not accepted there.

`./mach build -jN`: The build should, by default, use all the online CPU cores. If using all the cores causes the build to swap because you have insufficient memory, using fewer cores can be faster.

### Configuring SeaMonkey

For installing various SeaMonkey add-ons, refer to Add-ons for Seamonkey.

Along with using the “Preferences” menu to configure SeaMonkey's options and preferences to suit individual tastes, finer grain control of many options is only available using a tool not available from the general menu system. To access this tool, you'll need to open a browser window and enter `about:config` in the address bar. This will display a list of the configuration preferences and information related to each one. You can use the “Search:” bar to enter search criteria and narrow down the listed items. Changing a preference can be done using two methods. One, if the preference has a boolean value (True/False), simply double-click on the preference to toggle the value and two, for other preferences simply right-click on the desired line, choose “Modify” from the menu and change the value. Creating new preference items is accomplished in the same way, except choose “New” from the menu and provide the desired data into the fields when prompted.

If you use a desktop environment like Gnome or KDE you may wish to create a `seamonkey.desktop` file so that SeaMonkey appears in the panel's menus. If you didn't enable Startup-Notification in your mozconfig change the StartupNotify line to false. As the `root` user:

    mkdir -pv /usr/share/{applications,pixmaps}              &&

    cat > /usr/share/applications/seamonkey.desktop << "EOF"
    [Desktop Entry]
    Encoding=UTF-8
    Type=Application
    Name=SeaMonkey
    Comment=The Mozilla Suite
    Icon=seamonkey
    Exec=seamonkey
    Categories=Network;GTK;Application;Email;Browser;WebBrowser;News;
    StartupNotify=true
    Terminal=false
    EOF

    ln -sfv /usr/lib/seamonkey/chrome/icons/default/default128.png \
            /usr/share/pixmaps/seamonkey.png

### Contents

Installed Programs: seamonkey
Installed Libraries: Numerous libraries, browser, and email/newsgroup components, plugins, extensions, and helper modules installed in `/usr/lib/seamonkey-2.53.9`
Installed Directory: /usr/lib/seamonkey

#### Short Descriptions

seamonkey | is the Mozilla browser/email/newsgroup/chat client suite

Last updated on

## Chapter 41. Other X-based Programs

These programs use the X Window System and don't fit easily into any of the other chapters.

## Balsa-2.6.3

### Introduction to Balsa

The Balsa package contains a GNOME-2 based mail client.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://pawsa.fedorapeople.org/balsa/balsa-2.6.3.tar.xz

- Download MD5 sum: cf6b5183cc3eb240c3dd120167822c35

- Download size: 3.6 MB

- Estimated disk space required: 77 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### Balsa Dependencies

##### Required

Aspell-0.60.8, enchant-2.3.1, GMime-3.2.7, GPGME-1.16.0, GTK+-3.24.30, libnotify-0.7.9, and Rarian-0.8.1

##### Required (Runtime)

MTA (that provides a sendmail command)

##### Recommended

PCRE-8.45

##### Optional

Compface-1.5.2, Gcr-3.40.0, gtksourceview-3.24.11, libcanberra-0.30, libsecret-0.20.4, MIT Kerberos V5-1.19.2, OpenLDAP-2.5.7, Procmail-3.22, SQLite-3.36.0, WebKitGTK-2.32.3, html2text, osmo, rubrica, yelp-tools

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/balsa

### Installation of Balsa

Install Balsa by running the following commands:

    ./configure --prefix=/usr            \
                --sysconfdir=/etc        \
                --localstatedir=/var/lib \
                --without-html-widget    &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--without-html-widget`: This option disables building the HTML renderer. If you want the HTML renderer to be built, verify that you have WebKitGTK-2.32.3 installed, and then remove this option.

`--with-canberra`: Enable libcanberra support.

`--with-compface`: Enable compface support.

`--with-gcr`: Use libgcr for TLS support.

`--with-gss`: Enable GSSAPI support.

`--with-ldap`: Use this option to enable LDAP address book support if OpenLDAP is installed.

`--with-libsecret`: Enable strong password support and support for gnome-keyring to store passwords.

`--with-sqlite`: Use this option to enable SQLite address book support if SQLite is installed.

### Contents

Installed Programs: balsa and balsa-ab
Installed Libraries: None
Installed Directories: /etc/sounds/events, /usr/share/balsa, and /usr/share/sounds/balsa

#### Short Descriptions

balsa | is a glib based mail client
balsa-ab | is the address-book application used by balsa

Last updated on

## feh-3.7.1

### Introduction to feh

feh is a fast, lightweight image viewer which uses Imlib2. It is commandline-driven and supports multiple images through slideshows, thumbnail browsing or multiple windows, and montages or index prints (using TrueType fonts to display file info). Advanced features include fast dynamic zooming, progressive loading, loading via HTTP (with reload support for watching webcams), recursive file opening (slideshow of a directory hierarchy), and mouse wheel/keyboard control.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://feh.finalrewind.org/feh-3.7.1.tar.bz2

- Download MD5 sum: 28f291b9efbfa158f3e550ba92c13558

- Download size: 2.0 MB

- Estimated disk space required: 5.3 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### feh Dependencies

##### Required

libpng-1.6.37 and imlib2-1.7.2 (built with giflib-5.2.1 support, for the tests)

##### Recommended

cURL-7.78.0

##### Optional

libexif-0.6.22

##### Optional (runtime)

libjpeg-turbo-2.1.1 (for lossless image rotation) and ImageMagick-7.1.0-4 (to load unsupported formats)

##### Optional (test suite)

Test-Command-0.11 (required)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/feh

### Installation of feh

Install feh by running the following commands:

    sed -i "s:doc/feh:&-3.7.1:" config.mk &&
    make PREFIX=/usr

To test the results, issue: make test.

Now, as the `root` user:

    make PREFIX=/usr install

### Command Explanations

sed -i "s:doc/feh:&-3.7.1:" config.mk: This sed fixes the doc directory to a versioned one, as used in BLFS.

`curl=0`: Use this make flag if you don't have the cURL package installed.

`exif=1`: This make flag enables builtin Exif tag display support.

### Contents

Installed Program: feh
Installed Libraries: None
Installed Directories: /usr/share/doc/feh-3.7.1 and /usr/share/feh

#### Short Descriptions

feh | is an image viewer and cataloguer

Last updated on

## FontForge-20201107

### Introduction to FontForge

The FontForge package contains an outline font editor that lets you create your own postscript, truetype, opentype, cid-keyed, multi-master, cff, svg and bitmap (bdf, FON, NFNT) fonts, or edit existing ones.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/fontforge/fontforge/releases/download/20201107/fontforge-20201107.tar.xz

- Download MD5 sum: efc0b3c79ba576133de70d67ccadcf24

- Download size: 14 MB

- Estimated disk space required: 167 MB (add 52 MB for the tests)

- Estimated build time: 0.2 SBU (with parallelism=4, add 0.1 SBU for the tests)

#### FontForge Dependencies

##### Required

libspiro-20200505, libuninameslist-20210626, and libxml2-2.9.12

##### Recommended

GTK+-3.24.30

##### Optional

giflib-5.2.1, git-2.33.0, libjpeg-turbo-2.1.1, libtiff-4.3.0, WOFF2-1.0.2, and Sphinx (to build html documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fontforge

### Installation of FontForge

Install FontForge by running the following commands:

    mkdir build &&
    cd build    &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -Wno-dev .. &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

If you have installed sphinx-build, HTML documentation was built and installed in `/usr/share/doc/fontforge`. To be able to access it as a versioned directory, create a symlink as the `root` user:

    ln -sv fontforge /usr/share/doc/fontforge-20201107

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to create an optimized release without debug information.

`-Wno-dev`: This switch is used to suppress warnings intended for the package's developers.

`-DENABLE_X11=ON`: use an X11 backend instead of GDK3 (gtk+-3) for basic Xorg graphics.

### Contents

Installed Programs: fontforge, fontimage, fontlint and sfddiff
Installed Library: libfontforge.so and /usr/lib/python3.9.6/site-packages/{fontforge,psMat}.so
Installed Directories: /usr/share/fontforge and optionally /usr/share/doc/fontforge{,-20201107}

#### Short Descriptions

fontforge | is a program that allows you to create and modify font files
fontimage | is a program that produces an image showing representative glyphs of the font
fontlint | is a program that checks the font for certain common errors
sfddiff | is a program that compares two font files

Last updated on

## Gimp-2.10.24

### Introduction to Gimp

The Gimp package contains the GNU Image Manipulation Program which is useful for photo retouching, image composition and image authoring.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gimp.org/pub/gimp/v2.10/gimp-2.10.24.tar.bz2

- Download MD5 sum: 31e4a055ba34e6841f42a6b2439ca480

- Download size: 30 MB

- Estimated disk space required: 898 MB (201 MB installed, add 882 GB for tests)

- Estimated build time: 1.7 SBU (Using parallelism=4; add 0.7 SBU for tests)

#### Additional Downloads

### Note

The updating of the help files is still a work in progress, with large parts of the text for many languages not yet translated. The file below is a git snapshot.

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/gimp/gimp-help-2021-03-30.tar.xz

- Download size: 170 MB

- Download md5sum: df6acc812c829b610d621f8e6973a680

- Estimated disk space required: From 385 MB (en only) to 1.8 GB (all 17 languages)

- Estimated build time: 1.9 SBU (en only), 9.1 SBU, with parallelism=4, for all languages

#### Gimp Dependencies

##### Required

gegl-0.4.30, gexiv2-0.12.3, glib-networking-2.68.2, GTK+-2.24.33, HarfBuzz-2.9.0. libjpeg-turbo-2.1.1, libmypaint-1.6.1, librsvg-2.50.7, libtiff-4.3.0, Python2 libxml2-2.9.12 module (to build the translated help files), Little CMS-2.12, mypaint-brushes-1.3.0, Poppler-21.08.0 (including poppler-data) and X Window System

##### Recommended

dbus-glib-0.112, ghostscript-9.54.0 (with libgs installed), ISO Codes-4.7.0, libgudev-237, PyGTK-2.24.0 (including the gtk, pango and pangocairo modules) and xdg-utils-1.1.3

##### Optional

AAlib-1.4rc5, alsa-lib-1.2.5.1, Gvfs-1.48.1 (to access the online help), libmng-2.0.3, libwebp-1.2.1, OpenJPEG-2.4.0, an MTA (that provides a sendmail program), GTK-Doc-1.33.2, appstream-glib, libbacktrace, libheif with libde265 (both needed to read macOS heic images), libunwind, libwmf, and OpenEXR

When you have run configure, you will see that WebKit is not found - that dependency is for the legacy webkit-1.0 which should never be used on a modern system exposed to the internet.

##### Optional, for building the help system

dblatex (for PDF docs), pngnq and pngcrush to optimize the png files, but see the note on the help download above

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gimp

### Installation of Gimp

Install Gimp by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

To test the results (requires an X-Windowed terminal) issue: make check.

Now, as the `root` user:

    make install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Installation of Gimp-Help

The `gimp-help` tarball contains images and English text help for help files, together with translations. Because of the issues mentioned in the note above, you are recommended to use the online help, either by building against Gvfs-1.48.1 so that 'help' can open the latest XML files in your browser, or else you can manually open the html in your browser by going to https://docs.gimp.org/2.10/en (change the language code if desired).

If you nevertheless wish to install local copies of the help files to read offline, unpack the `gimp-help` tarball and change into the root of the newly created source tree. Prepare for the build with the following command:

    ALL_LINGUAS="ca da de el en en_GB es fi fr it ja ko nn pt_BR ro ru zh_CN" \
    ./autogen.sh --prefix=/usr

Remove from `ALL_LINGUAS` the codes for any languages which you do not wish to install. Alternatively, remove the line starting with `ALL_LINGUAS`, if you wish to build all languages.

Now build the help files:

    make

Issue the following commands as the `root` user to install the help files:

    make install &&
    chown -R root:root /usr/share/gimp/2.0/help

### Command Explanations

`ALL_LINGUAS="ca da de el en en_GB ..."`: by default, the help files will be rendered in all the available languages. Remove the codes of any languages you do not wish to build.

`--disable-python`: This option is necessary if you have not installed PyGTK.

`--enable-gtk-doc`: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

### Configuring The Gimp

#### Config Files

`/etc/gimp/2.0/*` and `~/.gimp-2.8/gimprc`

### Contents

Installed Programs: gimp (symlink), gimp-2.10, gimp-console (symlink), gimp-console-2.10, gimp-test-clipboard-2.0, and gimptool-2.0
Installed Libraries: libgimp-2.0.so, libgimpbase-2.0.so, libgimpcolor-2.0.so, libgimpconfig-2.0.so, libgimpmath-2.0.so, libgimpmodule-2.0.so, libgimpthumb-2.0.so, libgimpui-2.0.so, and libgimpwidgets-2.0.so
Installed Directories: /etc/gimp, /usr/include/gimp-2.0, /usr/{lib,share}/gimp, /usr/share/gtk-doc/html/libgimp{,base,color,config}, and /usr/share/gtk-doc/html/libgimp{math,module,thumb,widgets}

#### Short Descriptions

gimp | is a symbolic link to gimp-2.10
gimp-2.10 | is the Gnu Image Manipulation Program. It works with a variety of image formats and provides a large selection of tools
gimp-console | is a symbolic link to gimp-console-2.10
gimp-console-2.10 | is a console program that behaves as if The Gimp was called with the `--no-interface` command-line option
gimptool-2.0 | is a tool that can build plug-ins or scripts and install them if they are distributed in one source file. gimptool-2.0 can also be used by programs that need to know what libraries and include-paths The Gimp was compiled with
`libgimp-2.0.so` | provides C bindings for The Gimp's Procedural Database (PDB) which offers an interface to core functions and to functionality provided by plug-ins
`libgimpbase-2.0.so` | provides the C functions for basic Gimp functionality such as determining enumeration data types, gettext translation, determining The Gimp's version number and capabilities, handling data files and accessing the environment
`libgimpcolor-2.0.so` | provides the C functions relating to RGB, HSV and CMYK colors as well as converting colors between different color models and performing adaptive supersampling on an area
`libgimpconfig-2.0.so` | contains C functions for reading and writing config information
`libgimpmath-2.0.so` | contains C functions which provide mathematical definitions and macros, manipulate 3x3 transformation matrices, set up and manipulate vectors and the MD5 message-digest algorithm
`libgimpmodule-2.0.so` | provides the C functions which implements module loading using GModule and keeps a list of GimpModule's found in a given searchpath
`libgimpthumb-2.0.so` | provides the C functions for handling The Gimp's thumbnail objects
`libgimpui-2.0.so` | contains The Gimp's common user interface functions
`libgimpwidgets-2.0.so` | contains The Gimp and GTK's widget creation and manipulation functions

Last updated on

## Gparted-1.3.1

### Introduction to Gparted

Gparted is the Gnome Partition Editor, a Gtk 3 GUI for other command line tools that can create, reorganise or delete disk partitions.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/gparted/gparted-1.3.1.tar.gz

- Download MD5 sum: 1b2de7823b39684d0cba1ddaad3a9cd5

- Download size: 4.0 MB

- Estimated disk space required: 76 MB (add 60 MB for tests)

- Estimated build time: 0.3 SBU (using parallelism=4; add 0.2 SBU for tests)

#### Gparted Dependencies

##### Required

Gtkmm-3.24.5 and parted-3.4

##### Optional

btrfs-progs-5.13.1 (if using a btrfs filesystem), exfatprogs, and udftools

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gparted

### Installation of Gparted

Install Gparted by running the following commands:

    ./configure --prefix=/usr    \
                --disable-doc    \
                --disable-static &&
    make

To run the tests, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-doc`: This switch disables building of the optional documentation. Remove it if you have installed GNOME Doc Utils.

`--enable-xhost-root`: This switch provides an interim workaround to allow GParted to run under Wayland by using xhost to grant and revoke root access to the X11 display.

### Using Gparted

To manipulate file systems Gparted has a run time dependency on various file system tools (you only need to install the tools for file systems you actually use): Hdparm-9.62 (required for optionally displaying serial number device information), btrfs-progs-5.13.1, dosfstools-4.2, e2fsprogs (installed as part of LFS), jfsutils-1.1.15, ntfs-3g-2021.8.22, reiserfsprogs-3.6.27, xfsprogs-5.13.0, mtools (required to read and write FAT16/32 volume labels and UUIDs), hfsutils, hfsprogs, nilfs-utils and Reiser4progs.

Root privileges are required to run Gparted. If you wish to run the application from the menu, further applications and configurations are necessary. Examples of applications that may be used: gksu, kdesudo, or xdg-su. Another simple solution is ssh-askpass-8.7p1.

#### ssh-askpass

To optionally use ssh-askpass-8.7p1 if it is installed in your system, run the following commands as the `root` user:

    cp -v /usr/share/applications/gparted.desktop /usr/share/applications/gparted.desktop.back &&
    sed -i 's/Exec=/Exec=sudo -A /'               /usr/share/applications/gparted.desktop

Now, clicking on the menu item for Gparted, a dialog appears on the screen, asking for the administrator password.

### Contents

Installed Programs: gparted and gparted_polkit (optional)
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

gparted | is a shell script which sets up the environment before calling gpartedbin
gparted_polkit | is an optional script which can be used to run gparted with polkit, from a menu

Last updated on

## HexChat-2.14.3

### Introduction to HexChat

HexChat is an IRC chat program. It allows you to join multiple IRC channels (chat rooms) at the same time, talk publicly, have private one-on-one conversations, etc. File transfers are also possible.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://dl.hexchat.net/hexchat/hexchat-2.14.3.tar.xz

- Download MD5 sum: 9f04c48f011b646b91d03c5776fce776

- Download size: 1.2 MB

- Estimated disk space required: 21 MB

- Estimated build time: 0.1 SBU (using parallelism=4)

#### Additional Downloads

- Optional patch: https://www.linuxfromscratch.org/patches/blfs/11.0/hexchat-2.14.3-add_libera_chat-1.patch

#### HexChat Dependencies

##### Required

dbus-glib-0.112, GLib-2.68.4, and libnotify-0.7.9

##### Recommended

GTK+-2.24.33 and libcanberra-0.30

##### Optional

dbus-glib-0.112, ISO Codes-4.7.0, libnotify-0.7.9, pciutils-3.7.0, libproxy, and luajit

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/hexchat

### Installation of HexChat

First, fix the python plugin:

    sed -i "s/(python_opt/& + '-embed'/" plugins/python/meson.build

Next, apply an optional patch to have the "libera.chat" network preconfigured in the client:

    patch -Np1 -i ../hexchat-2.14.3-add_libera_chat-1.patch

Install HexChat by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr         \
          --buildtype=release   \
          -Dwith-libproxy=false \
          -Dwith-lua=false      \
          ..                    &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`-Dwith-lua=false`: By default, this package will look for luajit. However, the Lua plugin support is currently broken and will cause the application to crash on startup.

`-Dwith-libcanberra=false`: Use this switch if you have libcanberra not installed.

### Contents

Installed Program: hexchat
Installed Libraries: None
Installed Directory: /usr/lib/hexchat

#### Short Descriptions

hexchat | is a graphical Internet Relay Chat (IRC) client

Last updated on

## Inkscape-1.1

### Introduction to Inkscape

Inkscape is a what you see is what you get Scalable Vector Graphics editor. It is useful for creating, viewing and changing SVG images.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://media.inkscape.org/dl/resources/file/inkscape-1.1.tar.xz

- Download MD5 sum: 45e38e25fb93c7c91c51b84b9e4cf0ee

- Download size: 33 MB

- Estimated disk space required: 677 MB (169 MB installed)

- Estimated build time: 6.7 SBU (with parallelism=4)

### Note

The tarball inkscape-1.1.tar.xz will extract to inkscape-1.1_2021-05-24_c4e8f9ed74.

#### Inkscape Dependencies

##### Required

Boost-1.77.0, double-conversion-3.1.5, GC-8.0.4, GDL-3.40.0, Gsl-2.7, Gtkmm-3.24.5, libsoup-2.74.0, libxslt-1.1.34, Poppler-21.08.0, popt-1.18 and Wget-1.21.1 (to download the test dependencies)

##### Recommended

ImageMagick-7.1.0-4, Little CMS-2.12 or Little CMS-1.19, libcanberra-0.30 (to eliminate plugin warnings), Potrace-1.16 (for the bucket-fill tool), lxml-4.6.3 and Scour-0.38.2 (both at runtime, for Save As Optimized SVG).

##### Optional

Aspell-0.60.8, dbus-1.12.20 (to run inkscape from scripts), Doxygen-1.9.2, gtkspell, libcdr, libvisio, libwpg (or libwpd) and NumPy (at runtime for some extensions)

##### Optional Runtime Dependencies (for some of the Inkscape extensions)

XML::XQL

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/inkscape

### Installation of Inkscape

Install Inkscape by running the following commands:

    mkdir build                       &&
    cd    build                       &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          ..                          &&
    make

This package does not come with a working test suite.

Now, as the `root` user:

    make install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`-DCMAKE_BUILD_TYPE=Release`: This switch is used to build the release library without any debug `assert` in the code.

`-DWITH_DBUS=ON`: use this if you wish to use inkscape in interactive scripts which manipulate images.

### Contents

Installed Programs: inkscape and inkview
Installed Library: libinkscape_base.so
Installed Directories: /usr/lib/inkscape and /usr/share/inkscape

#### Short Descriptions

inkscape | is a SVG (Scalable Vector Graphics) editing program
inkview | is a simple program for displaying SVG files
`libinkscape_base.so` | provides the routines used by inkscape and inkview

Last updated on

## Pidgin-2.14.6

### Introduction to Pidgin

Pidgin is a Gtk+ 2 instant messaging client that can connect with a wide range of networks including Bonjour, ICQ, GroupWise, Jabber/XMPP, IRC, Gadu-Gadu, SILC, SIMPLE, and Zephyr.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/pidgin/pidgin-2.14.6.tar.bz2

- Download MD5 sum: bba0fd38ee1d8b9b725c4dbdc33e58e7

- Download size: 8.3 MB

- Estimated disk space required: 297 MB (with tests and docs)

- Estimated build time: 0.6 SBU (using parallelism=4; with tests and docs)

#### Pidgin Dependencies

##### Required

GTK+-2.24.33

##### Recommended

libgcrypt-1.9.4, gstreamer-1.18.4 (required for audio support), and GnuTLS-3.7.2 or NSS-3.69

##### Optional

Avahi-0.8 (required for the Bonjour plugin), Cyrus SASL-2.1.27, dbus-1.12.20, Doxygen-1.9.2, evolution-data-server-3.40.4, GConf-3.2.6, Graphviz-2.48.0, libidn-1.38 (required, if you wish to run the test suite), NetworkManager-1.32.10, SQLite-3.36.0 (required for the Contact Availability Prediction plugin), startup-notification-0.12, Tk-8.6.11.1, Farstream (Version 0.1) (required for video and voice support), Gtkspell, libgadu, Meanwhile (required for Sametime protocol support), Mono, SILC Client, SILC Toolkit, Zephyr, and MIT Kerberos V5-1.19.2 (required for Kerberos support in the Zephyr module)

##### Optional (runtime)

xdg-utils-1.1.3

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pidgin

### Installation of Pidgin

If you wish to run the test suite, make sure that libidn-1.38 is installed and remove the switch “--disable-idn”. Compile Pidgin by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --disable-gstreamer  \
                --disable-avahi      \
                --disable-gtkspell   \
                --disable-meanwhile  \
                --disable-idn        \
                --disable-nm         \
                --disable-vv         &&
    make

If you have Doxygen-1.9.2 installed (Graphviz-2.48.0 can be used also) and you wish to create the API documentation, issue:

    make docs

Remember the remarks before configure. To test the results, issue: make check.

Now, as the `root` user:

    make install &&
    mkdir -pv /usr/share/doc/pidgin-2.14.6 &&
    cp -v README doc/gtkrc-2.0 /usr/share/doc/pidgin-2.14.6

If you created the API documentation, install it using the following commands as the `root` user:

    mkdir -pv /usr/share/doc/pidgin-2.14.6/api &&
    cp -v doc/html/* /usr/share/doc/pidgin-2.14.6/api

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`--disable-gstreamer`: This switch disables gstreamer support because there are problems with the build when Voice/Video support is disabled, and gstreamer is enabled.

`--disable-avahi`: Remove this switch if you've installed Avahi-0.8.

`--disable-gtkspell`: Remove this switch if you've installed Gtkspell and wish to enable spellchecking support.

`--disable-meanwhile`: Remove this switch if you've installed Meanwhile.

`--disable-idn`: Remove this switch if you've installed libidn-1.38.

`--disable-nm`: Remove this switch if you've installed NetworkManager-1.32.10.

`--disable-vv`: Remove this switch if you've installed Farstream (Version 0.1) and wish to enable voice and video communication support. You should also remove the --disable-gstreamer flag.

`--enable-cyrus-sasl`: Use this switch if you've installed Cyrus SASL-2.1.27 and wish to build Pidgin with SASL support.

`--disable-gnutls`: Use this switch if you've got both GnuTLS-3.7.2 and NSS-3.69 installed, but want to use NSS-3.69 for the SSL support.

### Configuring Pidgin

#### Config Files

`~/.purple/*` and `~/.gtkrc-2.0`

#### Configuration Information

Most configuration can be accomplished by using the various preference settings inside the programs. Additionally, you can create a `~/.gtkrc-2.0` file which can store gtk+-2 theme settings that affect Pidgin and other Gtk+ 2 applications. Note that an example `gtkrc-2.0` file was installed during the package installation and can be used as a starting point or reference.

### Contents

Installed Programs: pidgin, purple-client-example, purple-remote, purple-send, purple-send-async, and purple-url-handler
Installed Library: libpurple.so, and libpurple-client.so
Installed Directories: /usr/include/libpurple, /usr/include/pidgin, /usr/lib/pidgin, /usr/lib/purple-2, /usr/share/doc/pidgin-2.14.6, /usr/share/pixmaps/pidgin, /usr/share/purple, and /usr/share/sounds/purple

#### Short Descriptions

pidgin | is a GTK+ 2 instant messaging client
purple-client-example | is an example that demonstrates how to use the libpurple-client library to communicate with purple
purple-remote | sends remote commands to Pidgin/Finch
purple-send | calls purple API functions using DBus and prints the return value
purple-send-async | calls purple API functions using DBus. As opposed to purple-send, it does not print the return value
purple-url-handler | is a python script to handle URLs with purple

Last updated on

## Rox-Filer-2.11

### Introduction to Rox-Filer

rox-filer is a fast, lightweight, gtk2 file manager.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/rox/rox-filer-2.11.tar.bz2

- Download MD5 sum: 0eebf05a67f7932367750ebf9faf215d

- Download size: 1.8 MB

- Estimated disk space required: 19 MB

- Estimated build time: 0.3 SBU

#### rox-filer Dependencies

##### Required

libglade-2.6.4 and shared-mime-info-2.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rox-filer

### Kernel Configuration

If you want rox-filer to be able to update the contents of a directory when changes are made to the files by other applications (eg, if a script is running) you will need to enable dnotify support in your kernel. In make menuconfig:

    File systems --->
      [*] Dnotify support   [CONFIG_DNOTIFY]

Save the new `.config` and then compile the kernel.

### Installation of Rox-Filer

Compile rox-filer with the following commands:

    cd ROX-Filer                                                        &&
    sed -i 's:g_strdup(getenv("APP_DIR")):"/usr/share/rox":' src/main.c &&
    sed -i 's/gboolean/extern &/' src/session.h                     &&

    mkdir build                        &&
    pushd build                        &&
      ../src/configure LIBS="-lm -ldl" &&
      make                             &&
    popd

Now install it as the `root` user:

    mkdir -p /usr/share/rox                              &&
    cp -av Help Messages Options.xml ROX images style.css .DirIcon /usr/share/rox &&

    cp -av ../rox.1 /usr/share/man/man1                  &&
    cp -v  ROX-Filer /usr/bin/rox                        &&
    chown -Rv root:root /usr/bin/rox /usr/share/rox      &&

    cd /usr/share/rox/ROX/MIME                           &&
    ln -sv text-x-{diff,patch}.png                       &&
    ln -sv application-x-font-{afm,type1}.png            &&
    ln -sv application-xml{,-dtd}.png                    &&
    ln -sv application-xml{,-external-parsed-entity}.png &&
    ln -sv application-{,rdf+}xml.png                    &&
    ln -sv application-x{ml,-xbel}.png                   &&
    ln -sv application-{x-shell,java}script.png          &&
    ln -sv application-x-{bzip,xz}-compressed-tar.png    &&
    ln -sv application-x-{bzip,lzma}-compressed-tar.png  &&
    ln -sv application-x-{bzip-compressed-tar,lzo}.png   &&
    ln -sv application-x-{bzip,xz}.png                   &&
    ln -sv application-x-{gzip,lzma}.png                 &&
    ln -sv application-{msword,rtf}.png

### Command Explanations

sed -i 's:g_strdup(getenv("APP_DIR")):"/usr/share/rox":' src/main.c: This command hard codes /usr/share/rox as the directory for rox-filer's private files. Without this sed rox needs the environment variable ${APP_DIR} to be set.

sed -i 's/gboolean/extern &/' src/session.h: This command fixes a multiple definition flagged as an error by GCC 10 and higher.

ln -sv application-...: These commands duplicate the icons for some common mime types. Without these links rox-filer would just display the default "unknown binary blob" icon.

### Configuring RoxFiler

#### Configuration Information

Most of the configuration of rox-filer is achieved by right clicking on a rox-filer window and choosing "Options" from the menu. It stores its settings in `~/.config/rox.sourceforge.net`.

A rox-filer feature is that if there is an executable file called `AppRun` in a directory rox-filer will first run AppRun before it opens the folder.

As an example of how this may be used, if you have ssh access to another computer (perhaps another computer on your local network) with ssh configured for passwordless logins and you have sshfs-3.7.2 installed you can use AppRun to mount the remote computer in a local folder using sshfs. For this example AppRun script to work the folder must have the same name as the hostname of the remote computer:

    cat > /path/to/hostname/AppRun << "HERE_DOC"
    #!/bin/bash

    MOUNT_PATH="${0%/*}"
    HOST=${MOUNT_PATH##*/}
    export MOUNT_PATH HOST
    sshfs -o nonempty ${HOST}:/ ${MOUNT_PATH}
    rox -x ${MOUNT_PATH}
    HERE_DOC

    chmod 755 /path/to/hostname/AppRun

That works fine for mounting, but to unmount it the command fusermount -u ${MOUNTPOINT} is ran. You could set that as your default umount command in your rox preferences, but you would then be unable to unmount any normal mountpoints (that need umount). A script is needed that will unmount a Fuse mountpoint with fusermount -u ${MOUNTPOINT} and everything else with umount. As the `root` user:

    cat > /usr/bin/myumount << "HERE_DOC" &&
    #!/bin/bash
    sync
    if mount | grep "${@}" | grep -q fuse
    then fusermount -u "${@}"
    else umount "${@}"
    fi
    HERE_DOC

    chmod 755 /usr/bin/myumount

Now, to make Rox use this simple script, open a Rox window, right click on it and choose Options from the menu. In the left hand list choose "Action windows" and then on the right hand side, where it says "Unmount command" change umount to myumount.

If you use a desktop environment like Gnome or KDE you may like to create a `rox.desktop` file so that rox-filer appears in the panel's menus. As the `root` user:

    ln -s ../rox/.DirIcon /usr/share/pixmaps/rox.png &&
    mkdir -p /usr/share/applications &&

    cat > /usr/share/applications/rox.desktop << "HERE_DOC"
    [Desktop Entry]
    Encoding=UTF-8
    Type=Application
    Name=Rox
    Comment=The Rox File Manager
    Icon=rox
    Exec=rox
    Categories=GTK;Utility;Application;System;Core;
    StartupNotify=true
    Terminal=false
    HERE_DOC

### Contents

Installed Programs: rox
Installed Libraries: None
Installed Directories: /usr/share/rox

#### Short Descriptions

rox | is the rox file manager

Last updated on

## rxvt-unicode-9.26

### Introduction to rxvt-unicode

rxvt-unicode is a clone of the terminal emulator rxvt, an X Window System terminal emulator which includes support for XFT and Unicode.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

Please be aware that rxvt-unicode is affected by an issue in perl where the SIGFPE handler is set to SIG_IGN (i.e. the signal is ignored). If you are building an LFS system from within urxvt and running the testsuites, tests in bash and check which test raising this signal will fail.

#### Package Information

- Download (HTTP): http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-9.26.tar.bz2

- Download MD5 sum: 18dd0b15e7f67478bf0a88b0fc5e8cd4

- Download size: 884 KB

- Estimated disk space required: 23 MB

- Estimated build time: 0.2 SBU

#### rxvt-unicode Dependencies

##### Required

X Window System

##### Optional

gdk-pixbuf-2.42.6 (for background images) and startup-notification-0.12

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rxvt-unicode

### Installation of rxvt-unicode

Install rxvt-unicode by running the following commands:

    ./configure --prefix=/usr --enable-everything &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-everything`: Add support for all non-multichoice options. Details about the different options can be found in the file `README.configure`.

`--disable-xft`: Remove support for Xft fonts.

`--disable-perl`: Disable the embedded Perl interpreter.

`--disable-afterimage`: Remove support for libAfterImage.

### Configuring rxvt-unicode

The rxvt-unicode terminal emulator uses the resource class `URxvt` and the resource name `urxvt`. You can add X resource definitions to a user's `~/.Xresources` or `~/.Xdefaults` files or to the system-wide `/etc/X11/app-defaults/URxvt` file. The following example will load the `matcher` Perl extension (assuming Perl support wasn't disabled), which enables a left button click to open an underlined URL in the specified browser, sets a background and foreground color and loads an Xft font (as the `root` user):

    cat >> /etc/X11/app-defaults/URxvt << "EOF"
    ! Use the specified colour as the windows background colour [default white]
    URxvt*background: black

    ! Use the specified colour as the windows foreground colour [default black]
    URxvt*foreground: yellow

    ! Select the fonts to be used. This is a comma separated list of font names
    URxvt*font: xft:Monospace:pixelsize=18

    ! Comma-separated list(s) of perl extension scripts (default: "default")
    URxvt*perl-ext: matcher

    ! Specifies the program to be started with a URL argument. Used by
    URxvt*url-launcher: firefox

    ! When clicked with the mouse button specified in the "matcher.button" resource
    ! (default 2, or middle), the program specified in the "matcher.launcher"
    ! resource (default, the "url-launcher" resource, "sensible-browser") will be
    ! started with the matched text as first argument.
    ! Below, default modified to mouse left button.
    URxvt*matcher.button:     1
    EOF

In order to view the defined X resources, issue:

    xrdb -query

In order to add the modifications of the new user configuration file, keeping previously X configurations (of course, unless you are changing any on previously define), issue:

    xrdb -merge ~/.Xresources

The rxvt-unicode application can also run in a daemon mode, which makes it possible to open multiple terminal windows within the same process. The urxvtc client then connects to the urxvtd daemon and requests a new terminal window. Use this option with caution. If the daemon crashes, all the running processes in the terminal windows are terminated.

You can start the urxvtd daemon in the system or personal startup X session script (e.g., `~/.xinitrc`) by adding the following lines near the top of the script:

    # Start the urxvtd daemon
    urxvtd -q -f -o &

For more information, examine the urxvt, urxvtd, urxvtc, and `urxvtperl` man pages.

If you use a Desktop Environment, a menu entry can be included, issuing, as the `root` user:

    cat > /usr/share/applications/urxvt.desktop << "EOF" &&
    [Desktop Entry]
    Encoding=UTF-8
    Name=Rxvt-Unicode Terminal
    Comment=Use the command line
    GenericName=Terminal
    Exec=urxvt
    Terminal=false
    Type=Application
    Icon=utilities-terminal
    Categories=GTK;Utility;TerminalEmulator;
    #StartupNotify=true
    Keywords=console;command line;execute;
    EOF

    update-desktop-database -q

For that, you need desktop-file-utils-0.26 and at least one of gnome-icon-theme-3.12.0, oxygen-icons5-5.85.0 and lxde-icon-theme-0.5.1. Uncomment the line with “StartupNotify=true” if startup-notification-0.12 is installed.

### Contents

Installed Programs: urxvt, urxvtd, and urxvtc
Installed Libraries: Many Perl extensions located under `/usr/lib/urxvt/perl`
Installed Directory: /usr/lib/urxvt

#### Short Descriptions

urxvt | is a terminal emulator for the X Window System
urxvtd | is the urxvt terminal daemon
urxvtc | controls the urxvtd daemon

Last updated on

## Thunderbird-91.0.3

### Introduction to Thunderbird

Thunderbird is a stand-alone mail/news client based on the Mozilla codebase. It uses the Gecko rendering engine to enable it to display and compose HTML emails.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/thunderbird/releases/91.0.3/source/thunderbird-91.0.3.source.tar.xz

- Download MD5 sum: f08dd55b8b1b0baf2c38a88aa3734cf8

- Download size: 390 MB

- Estimated disk space required: 6.9 GB (201 MB installed)

- Estimated build time: 29 SBU (on a 4-core machine)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/thunderbird-91.0.3-glibc234-1.patch

#### Thunderbird Dependencies

##### Required

Autoconf-2.13, Cbindgen-0.20.0, dbus-glib-0.112, both GTK+-3.24.30 and GTK+-2.24.33, LLVM-12.0.1 including clang, nodejs-14.17.5, PulseAudio-15.0 (or alsa-lib-1.2.5.1 if you edit the mozconfig; although it is now deprecated by mozilla), Python-3.9.6 (rebuilt with the sqlite module), startup-notification-0.12, Zip-3.0, UnZip-6.0, and yasm-1.3.0

##### Recommended

ICU-69.1, libevent-2.1.12, NASM-2.15.05, NSPR-4.32, and NSS-3.69

### Note

If you don't install recommended dependencies, then internal copies of those packages will be used. They might be tested to work, but they can be out of date or contain security holes.

##### Optional

Cyrus SASL-2.1.27, Doxygen-1.9.2, GConf-3.2.6, Wget-1.21.1, Wireless Tools-29, and watchman

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Thunderbird

### Installation of Thunderbird

### Note

The build process for Thunderbird can use 8GB+ of RAM when linking. Make sure that you have adequate swap or RAM before continuing.

The configuration of Thunderbird is accomplished by creating a `mozconfig` file containing the desired configuration options. A default `mozconfig` is created below. To see the entire list of available configuration options (and a brief description of each), issue mozilla/configure --help. Create the file with the following command:

    cat > mozconfig << "EOF"
    # If you have a multicore machine, all cores will be used.

    # If you have installed wireless-tools comment out this line:
    ac_add_options --disable-necko-wifi

    # Uncomment the following option if you have not installed PulseAudio
    #ac_add_options --disable-pulseaudio
    # and uncomment this if you installed alsa-lib instead of PulseAudio
    #ac_add_options --enable-alsa

    # Comment out following options if you have not installed
    # recommended dependencies:
    ac_add_options --with-system-libevent
    ac_add_options --with-system-nspr
    ac_add_options --with-system-nss
    ac_add_options --with-system-icu

    # The elf-hack causes failed installs on some machines.
    # It is supposed to improve startup time and it shrinks libxul.so
    # by a few MB - comment this if you know your machine is not affected.
    ac_add_options --disable-elf-hack

    # The BLFS editors recommend not changing anything below this line:
    ac_add_options --prefix=/usr
    ac_add_options --enable-application=comm/mail

    ac_add_options --disable-crashreporter
    ac_add_options --disable-updater
    ac_add_options --disable-debug
    ac_add_options --disable-debug-symbols
    ac_add_options --disable-tests

    ac_add_options --enable-optimize=-O2
    ac_add_options --enable-linker=gold
    ac_add_options --enable-strip
    ac_add_options --enable-install-strip

    ac_add_options --enable-official-branding

    ac_add_options --enable-system-ffi
    ac_add_options --enable-system-pixman

    ac_add_options --with-system-jpeg
    ac_add_options --with-system-png
    ac_add_options --with-system-zlib
    EOF

Apply a patch which allows compilation on systems running glibc-2.34:

    patch -p1 -i ../thunderbird-91.0.3-glibc234-1.patch

Now invoke the Python mach script to compile Thunderbird:

### Note

If you are compiling this package in chroot you must do two things. First, as the `root` user, ensure that `/dev/shm` is mounted. If you do not do this, the Python configury will fail with a traceback report referencing `/usr/lib/pythonN.N/multiprocessing/synchronize.py`. Run:

    mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm

Second, either as the `root` user export the `$SHELL` environment variable using export SHELL=/bin/sh or else prepend `SHELL=/bin/sh` when running the ./mach commands.

    export CC=gcc CXX=g++ &&
    export MACH_USE_SYSTEM_PYTHON=1 &&
    ./mach create-mach-environment &&
    ./mach configure      &&
    ./mach build

This package does not come with a test suite.

Install Thunderbird by running the following commands as the `root` user:

    MACH_USE_SYSTEM_PYTHON=1 ./mach install

Empty the environment variables which were set above:

    unset CC CXX MACH_USE_SYSTEM_PYTHON

### Command Explanations

CC=gcc CXX=g++ ./mach configure: Thunderbird now uses this python3 script to run the configuration, build and install. Forcing GCC causes the build to come out smaller and run faster.

MACH_USE_SYSTEM_PYTHON=1: Use the system python to create a virtual environment for mach without downloading any python wheels.

`./mach build --verbose`: Use this alternative if you need details of which files are being compiled, together with any C or C++ flags being used.

### Configuring Thunderbird

#### Configuration Information

If your Window or Desktop Manager does not allow you to configure a default browser, you can add a configuration parameter to Thunderbird so that a browser will start when you click on an Internet/intranet/local URL. The procedure to check or modify any of the configuration parameters is quite simple and the instructions here can be used to view or modify any of the parameters.

First, open the configuration dialog by opening the “Edit” drop-down menu. Choose “Preferences” and then scroll down to the bottom of the page. Then, click the “Config Editor” button. Click on the “I accept the risk!” button. This will display a list of the configuration preferences and information related to each one. You can use the “Filter:” bar to enter search criteria and narrow down the listed items. Changing a preference can be done using two methods. One, if the preference has a boolean value (True/False), simply double-click on the preference to toggle the value and two, for other preferences simply right-click on the desired line, choose “Modify” from the menu and change the value. Creating new preference items is accomplished in the same way, except choose “New” from the menu and provide the desired data into the fields when prompted.

The configuration preference item you need to check so that Thunderbird uses a specified browser is the `network.protocol-handler.app.http` which should be set to the path of the desired browser, e.g. `/usr/bin/firefox`.

### Tip

There is a multitude of configuration parameters you can tweak to customize Thunderbird. A very extensive, but not so up-to-date list of these parameters can be found at http://preferential.mozdev.org/preferences.html.

If you use a desktop environment such as GNOME or KDE, a desktop file `thunderbird.desktop` may be created, in order to include a “Thunderbird” entry in the menu. Run the following commands as the `root` user:

    mkdir -pv /usr/share/{applications,pixmaps} &&

    cat > /usr/share/applications/thunderbird.desktop << "EOF" &&
    [Desktop Entry]
    Name=Thunderbird Mail
    Comment=Send and receive mail with Thunderbird
    GenericName=Mail Client
    Exec=thunderbird %u
    Terminal=false
    Type=Application
    Icon=thunderbird
    Categories=Network;Email;
    MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;x-scheme-handler/mailto;
    StartupNotify=true
    EOF

    ln -sfv /usr/lib/thunderbird/chrome/icons/default/default256.png \
            /usr/share/pixmaps/thunderbird.png

### Contents

Installed Program: thunderbird
Installed Libraries: libldap60.so, libldif60.so, liblgpllibs.so, libmozgtk.so, libmozsandbox.so, libmozsqlite3.so, libmozwayland.so, libprldap60.so, librnp.so, and libxul.so, all in the /usr/lib/thunderbird directory
Installed Directory: /usr/lib/thunderbird

#### Short Descriptions

thunderbird | is Mozilla's email and newsgroup client

Last updated on

## Tigervnc-1.11.0

### Introduction to Tigervnc

Tigervnc is an advanced VNC (Virtual Network Computing) implementation. It allows creation of an Xorg server not tied to a physical console and also provides a client for viewing of the remote graphical desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/TigerVNC/tigervnc/archive/v1.11.0/tigervnc-1.11.0.tar.gz

- Download MD5 sum: 07f5e217f288c515effb083896e65054

- Download size: 1.3 MB

- Estimated disk space required: 95 MB

- Estimated build time: 0.5 SBU (Using parallelism=4)

#### Additional Downloads

- Required file: https://www.x.org/pub/individual/xserver/xorg-server-1.20.7.tar.bz2

### Note

The version of Xorg may eventually be a few versions out of date, but is required for the customizations needed for this package.

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/tigervnc-1.11.0-configuration_fixes-1.patch

- Optional files:

  - https://anduin.linuxfromscratch.org/BLFS/tigervnc/Xsession

#### Tigervnc Dependencies

##### Required

CMake-3.21.2, FLTK-1.3.7, GnuTLS-3.7.2, libgcrypt-1.9.4, libjpeg-turbo-2.1.1, Pixman-0.40.0, Xorg Applications, and Xorg Legacy Fonts

##### Recommended

ImageMagick-7.1.0-4 and Linux-PAM-1.5.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tigervnc

### Installation of Tigervnc

First, make adjustments to the configuration files to make them compatible with LFS systems:

    patch -Np1 -i ../tigervnc-1.11.0-configuration_fixes-1.patch

Install tigervnc by running the following commands:

    # Put code in place
    mkdir -p unix/xserver &&
    tar -xf ../xorg-server-1.20.7.tar.bz2 \
        --strip-components=1              \
        -C unix/xserver                   &&
    ( cd unix/xserver &&
      patch -Np1 -i ../xserver120.patch ) &&

    # Build viewer
    cmake -G "Unix Makefiles"         \
          -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -Wno-dev . &&
    make &&

    # Build server
    pushd unix/xserver &&
      autoreconf -fiv  &&

      CPPFLAGS="-I/usr/include/drm"       \
      ./configure $XORG_CONFIG            \
          --disable-xwayland    --disable-dri        --disable-dmx         \
          --disable-xorg        --disable-xnest      --disable-xvfb        \
          --disable-xwin        --disable-xephyr     --disable-kdrive      \
          --disable-devel-docs  --disable-config-hal --disable-config-udev \
          --disable-unit-tests  --disable-selective-werror                 \
          --disable-static      --enable-dri3                              \
          --without-dtrace      --enable-dri2        --enable-glx          \
          --with-pic &&
      make  &&
    popd

This package does not come with a test suite.

Now, as the `root` user:

    #Install viewer
    make install &&

    #Install server
    ( cd unix/xserver/hw/vnc && make install ) &&

    [ -e /usr/bin/Xvnc ] || ln -svf $XORG_PREFIX/bin/Xvnc /usr/bin/Xvnc

### Command Explanations

tar -xf .. xorg-server...: This command extracts the standard Xorg package into the tree in a location needed for modification.

`--disable ...`: Most options that are usually needed for the standard Xorg server are not needed for the Xvnc instance being built.

[ -e /usr/bin/Xvnc ] || ln ... Xvnc: If the Xvnc server is not installed in the `/usr/bin` directory, then create a link so the vncserver script can find it.

### Configuring Tigervnc

#### Server Configuration

On systemd systems, another method of configuration is available. This configuration provides the added benefit of making tigervnc systemd aware for VNC sessions and allows desktop environments like GNOME to autostart services once the VNC session is started. This configuration also gives the added benefit of starting VNC Sessions on system startup. To setup the VNC server in this fashion, follow these instructions.

First, install a rudimentary Xsession file so that the VNC server can initialize X sessions properly:

    install -vdm755 /etc/X11/tigervnc &&
    install -v -m755 ../Xsession /etc/X11/tigervnc

Next, setup a user mapping in `/etc/tigervnc/vncserver.users`. This tells the VNC Server which session is allocated to a user.

    echo ":1=$(whoami)" >> /etc/tigervnc/vncserver.users

Next, setup a configuration file to tell vncserver which desktop environment should be used and what display geometry should be used. There are several other options that can be defined in this file, but they are outside the scope of BLFS.

    cat > ~/.vnc/config << EOF
    # Begin ~/.vnc/config

    session=LXDE      # The session must match one listed in /usr/share/xsessions.
    geometry=1024x768

    # End ~/.vnc/config
    EOF

To start the VNC Server, run the following command:

    systemctl start vncserver@:1

To start the VNC Server when the system boots, run the following command:

    systemctl enable vncserver@:1

### Contents

Installed Programs: Xvnc, vncconfig, vncpasswd, vncserver, vncviewer, and x0vncserver
Installed Libraries: libvnc.so
Installed Directories: /usr/share/doc/tigervnc-1.11.0

#### Short Descriptions

Xvnc | is a X VNC (Virtual Network Computing) server. It is based on a standard X server, but it has a “virtual” screen rather than a physical one
vncconfig | is a program to configure and control a VNC server
vncpasswd | allows you to set the password used to access VNC desktops
vncserver | is a perl script used to start or stop a VNC server
vncviewer | is a client used to connect to VNC desktops
x0vncserver | is a program to make an X display on a physical terminal accessible via TigerVNC or compatible viewers

Last updated on

## Transmission-3.00

### Introduction to Transmission

Transmission is a cross-platform, open source BitTorrent client. This is useful for downloading large files (such as Linux ISOs) and reduces the need for the distributors to provide server bandwidth.

### Note

The download speed of the client defaults to 50 KB/s which is quite slow. It can be raised, but even on a fast internet connection, the highest speeds seen were about 500 KB/s. For those that have internet capabilites faster than about 1 MB/s, direct downloads (if available) will be much faster.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://raw.githubusercontent.com/transmission/transmission-releases/master/transmission-3.00.tar.xz

- Download MD5 sum: a23a32672b83c89b9b61e90408f53d98

- Download size: 3.2 MB

- Estimated disk space required: 228 MB

- Estimated build time: 0.5 SBU (with Qt and GTK gui interfaces; using parallelism=4)

#### Transmission Dependencies

##### Required

cURL-7.78.0, and libevent-2.1.12

##### Recommended (to build a GUI)

GTK+-3.24.30 and Qt-5.15.2

##### Optional

Doxygen-1.9.2 and GDB-10.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/transmission

### Installation of Transmission

Install Transmission by running the following commands:

    ./configure --prefix=/usr --enable-cli &&
    make

Compile the Qt GUI with the following commands:

    pushd qt        &&
      qmake qtr.pro &&
      make          &&
    popd

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you compiled the Qt GUI, install it by running the following commands as the `root` user:

    make INSTALL_ROOT=/usr -C qt install &&

    install -m644 qt/transmission-qt.desktop /usr/share/applications/transmission-qt.desktop &&
    install -m644 qt/icons/transmission.png  /usr/share/pixmaps/transmission-qt.png

### Command Explanations

`--enable-cli`: This switch enables building the cli client.

`--without-gtk`: This switch disables building of the GTK+ interface if GTK+ is present on the system (useful for Qt5 or cli only builds).

### Contents

Installed Programs: transmission-cli, transmission-create, transmission-daemon, transmission-edit, transmission-gtk, transmission-qt, transmission-remote and transmission-show
Installed Libraries: None
Installed Directory: /usr/share/transmission

#### Short Descriptions

transmission-cli | is a lightweight, command-line BitTorrent client with scripting capabilities
transmission-create | is a command line tool used to create .torrent files
transmission-daemon | is a daemon-based Transmission session that can be controlled via RPC commands from transmission's web interface or transmission-remote
transmission-edit | is a command-line utility to modify .torrent files' announce URLs
transmission-gtk | is a GTK+ bittorrent client
transmission-qt | is a Qt bittorrent client
transmission-remote | is a remote control utility for transmission-daemon and transmission
transmission-show | is a command line tool to display bittorrent .torrent file metadata

Last updated on

## xarchiver-0.5.4.17

### Introduction to xarchiver

XArchiver is a GTK+ archive manager with support for tar, xz, bzip2, gzip, zip, 7z, rar, lzo and many other archive formats.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

xarchiver is only a command line or graphical interface to archiving utilities such as tar and zip.

#### Package Information

- Download (HTTP): https://github.com/ib/xarchiver/archive/0.5.4.17/xarchiver-0.5.4.17.tar.gz

- Download MD5 sum: f09d266775347f2ebccd94b01cf23c65

- Download size: 1.0 MB

- Estimated disk space required: 12 MB

- Estimated build time: 0.1 SBU

#### xarchiver Dependencies

##### Required

GTK+-2.24.33 or GTK+-3.24.30

##### Optional (Runtime)

cpio-2.13, LZO-2.10, p7zip-17.04, UnRar-6.0.7, UnZip-6.0, and Zip-3.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xarchiver

### Installation of xarchiver

Install xarchiver by running the following commands:

    ./configure  --prefix=/usr               \
                 --libexecdir=/usr/lib/xfce4 \
                 --docdir=/usr/share/doc/xarchiver-0.5.4.17 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`--libexecdir=/usr/lib/xfce4`: This switch fixes the location for the thunar-archive-plugin, so it will work if thunar-4.16.8 is installed.

`--disable-gtk3`: This switch allows building against GTK+2 or use `--disable-gtk2` to force building against GTK+3 when GTK+2 is installed, too.

### Contents

Installed Program: xarchiver
Installed Libraries: None
Installed Directories: /usr/lib/xfce4/thunar-archive-plugin, /usr/share/doc/xarchiver-0.5.4.17, and /usr/share/pixmaps/xarchiver

#### Short Descriptions

xarchiver | is a GTK+ archive manager

Last updated on

## xdg-utils-1.1.3

### Introduction to xdg-utils

xdg-utils is a a set of command line tools that assist applications with a variety of desktop integration tasks. It is required for Linux Standards Base (LSB) conformance.

### Warning

A security vulnerability exists in all versions of xdg-utils from version 1.1.0rc1 when handling mailto: URIs. An attacker could potentially send a victim a URI that automatically attaches a sensitive file to a new email. If a victim user does not notice that an attachment was added and sends the email, this could result in sensitive information disclosure.

To mitigate this flaw, either do not use mailto links at all, or always double-check in the user interface that there are no unwanted attachments before sending emails, especially when the email originates from clicking on a mailto link.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://portland.freedesktop.org/download/xdg-utils-1.1.3.tar.gz

- Download MD5 sum: 902042508b626027a3709d105f0b63ff

- Download size: 296 KB

- Estimated disk space required: 3.2 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### xdg-utils Dependencies

##### Required

xmlto-0.0.28 with one of Lynx-2.8.9rel.1, Links-2.23, or W3m

##### Required (runtime)

Xorg Applications

##### Optional (runtime)

dbus-1.12.20

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xdg-utils

### Installation of xdg-utils

Compile xdg-utils with the following commands:

    ./configure --prefix=/usr --mandir=/usr/share/man &&
    make

### Caution

The tests for the scripts must be made from an X-Window based session. There are several run-time requirements to run the tests including a browser and an MTA. Running the tests as `root` user is not recommended.

To run the tests, issue: make -k test.

Now install it as the `root` user:

    make install

### Contents

Installed Programs: xdg-desktop-menu, xdg-desktop-icon, xdg-mime, xdg-icon-resource, xdg-open, xdg-email, xdg-screensaver, xdg-settings
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

xdg-desktop-menu | is a command line tool for (un)installing desktop menu items
xdg-desktop-icon | is a command line tool for (un)installing icons to the desktop
xdg-mime | is a command line tool for querying information about file type handling and adding descriptions for new file types
xdg-icon-resource | is a command line tool for (un)installing icon resources
xdg-open | opens a file or URL in the user's preferred application
xdg-email | opens the user's preferred e-mail composer in order to send a mail message
xdg-screensaver | is a command line tool for controlling the screensaver
xdg-settings | is a command line tool for managing various settings from the desktop environment

Last updated on

## XScreenSaver-6.01

### Introduction to XScreenSaver

The XScreenSaver package is a modular screen saver and locker for the X Window System. It is highly customizable and allows the use of any program that can draw on the root window as a display mode. The purpose of XScreenSaver is to display pretty pictures on your screen when it is not in use, in keeping with the philosophy that unattended monitors should always be doing something interesting, just like they do in the movies. However, XScreenSaver can also be used as a screen locker, to prevent others from using your terminal while you are away.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.jwz.org/xscreensaver/xscreensaver-6.01.tar.gz

- Download MD5 sum: a78738a034c7dc1c7960048c8a670588

- Download size: 27 MB

- Estimated disk space required: 244 MB

- Estimated build time: 0.3 SBU (Using parallelism=4)

#### XScreenSaver Dependencies

##### Required

gdk-pixbuf-xlib-2.40.2, libglade-2.6.4, and Xorg Applications

##### Recommended

GLU-9.0.2

##### Optional

GDM-40.1, Linux-PAM-1.5.1, MIT Kerberos V5-1.19.2, and GLE

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xscreensaver

### Installation of XScreenSaver

Install XScreenSaver 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

### Command Explanations

`--with-setuid-hacks`: This switch allows some demos to be installed setuid `root` which is needed in order to ping other hosts.

### Configuring XScreenSaver

#### Config Files

`/etc/X11/app-defaults/XScreenSaver` and `~/.xscreensaver`

#### Linux PAM Configuration

If XScreenSaver 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/xscreensaver << "EOF"
    # Begin /etc/pam.d/xscreensaver

    auth    include system-auth
    account include system-account

    # End /etc/pam.d/xscreensaver
    EOF

### Contents

Installed Programs: xscreensaver, xscreensaver-command, xscreensaver-demo, xscreensaver-getimage, xscreensaver-getimage-file, xscreensaver-getimage-video, xscreensaver-gl-helper, xscreensaver-settings and xscreensaver-text
Installed Libraries: None
Installed Directories: /usr/libexec/xscreensaver and /usr/share/xscreensaver

#### Short Descriptions

xscreensaver | is a screen saver and locker daemon
xscreensaver-command | controls a running xscreensaver process by sending it client messages
xscreensaver-demo | is a symlink to xscreensaver-settings
xscreensaver-getimage | is a helper program for the xscreensaver modules that manipulate images
xscreensaver-getimage-file | is a helper program for the xscreensaver modules that manipulate images
xscreensaver-getimage-video | is a helper program for the xscreensaver modules that manipulate images
xscreensaver-gl-helper | is a helper program for the xscreensaver OpenGL modules
xscreensaver-gl-visual | is a helper program for the xscreensaver OpenGL modules to figure out which X visual to use
xscreensaver-settings | is a graphical front-end for setting the parameters used by the background xscreensaver daemon
xscreensaver-text | prints some text to stdout, for use by screen savers

Last updated on

# Part XII. Multimedia

## Chapter 42. Multimedia Libraries and Drivers

Many multimedia programs require libraries and/or drivers in order to function properly. The packages in this section fall into this category. Generally you only need to install these if you are installing a program which has the library listed as either a requirement, or as an option to enable it to support certain functionality.

## ALSA-1.2.5

The Linux kernel now provides ALSA support by default. However, applications need to interface to that capability. The following six sections of the book deal with the separate components of ALSA: the libraries, the plugins, the utilities, the tools, the firmware and the OSS compatibility libraries.

Last updated on

## alsa-lib-1.2.5.1

### Introduction to ALSA Library

The ALSA Library package contains the ALSA library used by programs (including ALSA Utilities) requiring access to the ALSA sound interface.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.5.1.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.2.5.1.tar.bz2

- Download MD5 sum: c8335793e7828803311edc48fb71662e

- Download size: 1.0 MB

- Estimated disk space required: 35 MB (with tests)

- Estimated build time: 0.3 SBU (with tests)

#### ALSA Library Dependencies

##### Optional

Doxygen-1.9.2, Python-2.7.18, and alsa-ucm-conf

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-lib

### Kernel Configuration

If needed, enable the following options in the kernel configuration and recompile the kernel:

    Device Drivers --->
      <*/M> Sound card support --->                  [CONFIG_SOUND]
        <*/M> Advanced Linux Sound Architecture ---> [CONFIG_SND]
                Select settings and drivers appropriate for your hardware.

In the Device Drivers ⇒ Sound card support ⇒ Advanced Linux Sound Architecture section of the kernel configuration, select the settings and drivers appropriate for your hardware. Ensure that the deprecated Device Drivers ⇒ Sound card support ⇒ Open Sound System is not selected. If necessary, recompile and install your new kernel.

### Installation of ALSA Library

Install ALSA Library by running the following commands:

    ./configure &&
    make

If you have Doxygen installed and you wish to build the library API documentation, run the following commands from the top-level directory of the source tree:

    make doc

To test the results, issue: make check.

Now, as the `root` user:

    make install

To install the API documentation, run the following command as the `root` user:

    install -v -d -m755 /usr/share/doc/alsa-lib-1.2.5.1/html/search &&
    install -v -m644 doc/doxygen/html/*.* \
                    /usr/share/doc/alsa-lib-1.2.5.1/html &&
    install -v -m644 doc/doxygen/html/search/* \
                    /usr/share/doc/alsa-lib-1.2.5.1/html/search

### Configuring ALSA Library

#### Config Files

`~/.asoundrc` and `/etc/asound.conf`

#### Configuration Information

The default `alsa.conf` is adequate for most installations. For extra functionality and/or advanced control of your sound device, you may need to create additional configuration files. For information on the available configuration parameters, visit https://www.alsa-project.org/main/index.php/Asoundrc.

### Contents

Installed Program: aserver
Installed Library: libasound.so and libatopology.so
Installed Directories: /usr/include/alsa, /usr/share/alsa and /usr/share/doc/alsa-lib-1.2.5.1

#### Short Descriptions

aserver | is the ALSA server
`libasound.so` | contains the ALSA API functions
`libatopology.so` | contains API functions for the ALSA topologies

Last updated on

## alsa-plugins-1.2.5

### Introduction to ALSA Plugins

The ALSA Plugins package contains plugins for various audio libraries and sound servers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/plugins/alsa-plugins-1.2.5.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/plugins/alsa-plugins-1.2.5.tar.bz2

- Download MD5 sum: 11d1bcc1b4eec26c1011ec965f4b54ba

- Download size: 397 KB

- Estimated disk space required: 5.3 MB

- Estimated build time: less than 0.1 SBU

#### ALSA Plugins Dependencies

##### Required

alsa-lib-1.2.5.1

##### Optional

FFmpeg-4.4, libsamplerate-0.2.1, PulseAudio-15.0, Speex-1.2.0, JACK, libavtp, and maemo

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-plugins

### Installation of ALSA Plugins

Install ALSA Plugins by running the following commands:

    ./configure --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: None
Installed Libraries: Numerous libasound_module_`<module>`.so modules including conf_pulse, ctl_arcam_av, ctl_oss, ctl_pulse, pcm_a52, pcm_jack, pcm_oss, pcm_pulse, pcm_speex, pcm_upmix, pcm_usb_stream, pcm_vdownmix, rate_lavrate*, rate_samplerate*, and rate_speexrate*
Installed Directories: /usr/lib/alsa-lib

#### Short Descriptions

`libasound_module_pcm_oss.so` | Allows native ALSA applications to run on OSS
`libasound_module_pcm_upmix.so` | Allows upmixing sound to 4 or 6 channels
`libasound_module_pcm_vdownmix.so` | Allows downmixing sound from 4-6 channels to 2 channel stereo output
`libasound_module_pcm_jack.so` | Allows native ALSA applications to work with jackd
`libasound_module_pcm_pulse.so` | Allows native ALSA applications to access a PulseAudio sound daemon
`libasound_module_pcm_a52.so` | Converts S16 linear sound format to A52 compressed format and sends it to an SPDIF output
`libasound_module_rate_samplerate.so` | Provides an external rate converter through `libsamplerate`

Last updated on

## alsa-utils-1.2.5.1

### Introduction to ALSA Utilities

The ALSA Utilities package contains various utilities which are useful for controlling your sound card.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/utils/alsa-utils-1.2.5.1.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.2.5.1.tar.bz2

- Download MD5 sum: 8f142bebff84ff05438b46a0e896f53a

- Download size: 1.3 MB

- Estimated disk space required: 16 MB

- Estimated build time: 0.1 SBU

#### ALSA Utilities Dependencies

##### Required

alsa-lib-1.2.5.1

##### Optional

docutils-0.17.1, fftw-3.3.9, libsamplerate-0.2.1, xmlto-0.0.28, and Dialog

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-utils

### Installation of ALSA Utilities

Install ALSA Utilities by running the following commands:

    ./configure --disable-alsaconf \
                --disable-bat   \
                --disable-xmlto \
                --with-curses=ncursesw &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-alsaconf`: This switch disables building the alsaconf configuration tool which is incompatible with Udev.

`--disable-xmlto`: Omit this switch if you have installed xmlto-0.0.28 and wish to regenerate the man pages.

`--disable-bat`: Omit this switch if you have installed fftw-3.3.9 and wish to install the Basic Audio Tester (BAT).

`--with-curses=ncursesw`: This switch forces the use of wide-character ncurses libraries.

### Configuring ALSA Utilities

#### Config Files

`/var/lib/alsa/asound.state`

#### Configuration Information

Note that all channels of your sound card are muted by default. You can use the alsamixer program to change this. Use speaker-test to check that your settings have been applied correctly. You should hear “pink noise” on your speakers.

The `alsactl` program is normally run from a standard udev rule. The first time it is run, it will complain that there is no state in `/var/lib/alsa/asound.state`. You can prevent this by running the following command as the `root` user:

    alsactl -L store

The volume settings should be restored from the saved state by Udev when the device is detected (during boot or when plugged in for USB devices).

All sound devices are not accessible for any user except `root` and members of the `audio` group. Add any users that might use the sound devices to that group:

    usermod -a -G audio <username>

### Note

You may need to log out and back in again to refresh your group memberships. 'su `<username>`' should work as well.

### Contents

Installed Programs: aconnect, alsactl, alsaloop, alsamixer, alsatplg, alsaucm, alsa-info.sh, amidi, amixer, aplay, aplaymidi, arecord (symlink), arecordmidi, aseqdump, aseqnet, axfer, iecset, and speaker-test
Installed Libraries: None
Installed Directories: /usr/share/sounds/alsa and /var/lib/alsa

#### Short Descriptions

aconnect | is a utility for connecting and disconnecting two existing ports in the ALSA sequencer system
alsactl | is used to control advanced settings for ALSA sound card drivers. Use this if alsamixer cannot utilize all of your sound card's features
alsaloop | allows creation of a PCM loopback between a PCM capture device and a PCM playback device
alsamixer | is an Ncurses based mixer program for use with the ALSA sound card drivers
alsatplg | is a utility used to compile topology configuration files into binary files for kernel drivers
alsaucm | allows applications to access the hardware in an abstracted manner
amidi | is used to read from and write to ALSA RawMIDI ports
amixer | allows command-line control of the mixers for the ALSA sound card drivers
aplay | is a command-line soundfile player for the ALSA sound card drivers
aplaymidi | is a command-line utility that plays the specified MIDI file(s) to one or more ALSA sequencer ports
arecord | is a command-line soundfile recorder for the ALSA sound card drivers
arecordmidi | is a command-line utility that records a standard MIDI file from one or more ALSA sequencer ports
aseqdump | is a command-line utility that prints the sequencer events it receives as text
aseqnet | is an ALSA sequencer client which sends and receives event packets over a network
axfer | is a command-line recorder and player used to transfer audio frames between sound devices and files
iecset | is a small utility to set or dump the IEC958 (or so-called “S/PDIF”) status bits of the specified sound card via the ALSA control API
speaker-test | is a command-line speaker test tone generator for ALSA

Last updated on

## alsa-tools-1.2.5

### Introduction to ALSA Tools

The ALSA Tools package contains advanced tools for certain sound cards.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/tools/alsa-tools-1.2.5.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/tools/alsa-tools-1.2.5.tar.bz2

- Download MD5 sum: ce632a6c89ed47ee74ba415276a6a3cc

- Download size: 1.8 MB

- Estimated disk space required: 26 MB

- Estimated build time: 0.4 SBU

#### ALSA Tools Dependencies

##### Required

alsa-lib-1.2.5.1

##### Optional

GTK+-2.24.33 (to build echomixer, envy24control and rmedigicontrol), GTK+-3.24.30 (to build hdajackretask) and FLTK-1.3.7 (to build hdspconf and hdspmixer)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-tools

### Installation of ALSA Tools

### Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

1. Run the entire script as the root user (not recommended).

2. Use the sudo command from the Sudo-1.9.7p2 package.

3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

    as_root()
    {
      if   [ $EUID = 0 ];        then $*
      elif [ -x /usr/bin/sudo ]; then sudo $*
      else                            su -c \\"$*\\"
      fi
    }

    export -f as_root

First, start a subshell that will exit on error:

    bash -e

Now, remove a tool that needs Qt2 or 3 and two unneed files (for the BLFS instructions below):

    rm -rf qlo10k1 Makefile gitcompile

The ALSA Tools package is only needed by those with advanced requirements for their sound card. The tools can be built all together at once, but if only a subset is needed, you need to cd into the directory of each tool you wish to compile and run the commands. Here, we present instructions to build all tools.

Install all ALSA Tools by running the following commands:

    for tool in *
    do
      case $tool in
        seq )
          tool_dir=seq/sbiload
        ;;
        * )
          tool_dir=$tool
        ;;
      esac

      pushd $tool_dir
        ./configure --prefix=/usr
        make
        as_root make install
        as_root /sbin/ldconfig
      popd

    done
    unset tool tool_dir

Finally, exit the shell that was started earlier:

    exit

### Contents

Installed Programs: as10k1, cspctl, dl10k1, echomixer, envy24control, hda-verb, hdajackretask, hdajacksensetest, hdspconf, hdsploader, hdspmixer, hwmixvolume, init_audigy, init_audigy_eq10, init_live, lo10k1, ld10k1, ld10k1d, mixartloader, pcxhrloader, rmedigicontrol, sbiload, sscape_ctl, us428control, usx2yloader, and vxloader
Installed Library: liblo10k1.so
Installed Directories: /etc/hotplug, /usr/include/lo10k1, /usr/share/ld10k1, and /usr/share/sounds

#### Short Descriptions

as10k1 | is an assembler for the emu10k1 DSP chip present in the Creative SB Live, PCI 512, and emu APS sound cards. It is used to make audio effects such as a flanger, chorus or reverb
cspctl | is an SB16/AWE32 Creative Signal Processor (ASP/CSP) control program
echomixer | is the Linux equivalent of the Echoaudio console application from Echoaudio. It is a tool to control all the features of any Echoaudio soundcard. This includes clock sources, input and output gains, mixers, etc
envy24control | is a control tool for Envy24 (ice1712) based sound cards
hdajackretask | is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver
hda-verb | is a small program to send HD-audio commands to the given ALSA hwdep device on the hd-audio interface
hdspconf | is a GUI to control the Hammerfall HDSP Alsa Settings. Up to four hdsp cards are supported
hdsploader | is used to load the firmware required by the Hammerfall HDSP sound cards
hdspmixer | is the Linux equivalent of the Totalmix application from RME. It is a tool to control the advanced routing features of the RME Hammerfall DSP soundcard series
hwmixvolume | allows you to control the volume of individual streams on sound cards that use hardware mixing
init_audigy* | are tools used to initialize Creative Sound Blaster Audigy-series cards
init_live | is a tool used to initialize Creative Sound Blaster Live cards
ld10k1 | is the server of a EMU10K{1,2} patch loader for ALSA
lo10k1 | is the client of a EMU10K{1,2} patch loader for ALSA
dl10k1 | loads config dumps generated by lo10k1 and ld10k1
ld10k1d | is an init script for the ld10k1 patch loader
mixartloader | is a helper program to load the firmware binaries onto the Digigram's miXart board sound drivers. The following modules require this program: snd-mixart. These drivers don't work properly at all until the certain firmwares are loaded, i.e. no PCM nor mixer devices will appear
pcxhrloader | is a helper program to load the firmware binaries onto Digigram's pcxhr compatible board sound drivers. The following modules require this program: snd-pcxhr. These drivers don't work properly at all until certain firmwares are loaded, i.e. no PCM nor mixer devices will appear
rmedigicontrol | is a control tool for RME Digi32 and RME Digi96 sound cards. It provides a graphical frontend for all the sound card controls and switches
sbiload | is an OPL2/3 FM instrument loader for the ALSA sequencer
sscape_ctl | is an ALSA SoundScape control utility
us428control | is a Tascam US-428 control program
usx2yloader | is a helper program to load the 2nd Phase firmware binaries onto the Tascam USX2Y USB sound cards. It has proven to work so far for the US122, US224 and US428. The snd-usb-usx2y module requires this program
vxloader | is a helper program to load the firmware binaries onto the Digigram's VX-board sound drivers. The following modules require this program: snd-vx222, snd-vxpocket, snd-vxp440. These drivers don't work properly at all until the certain firmwares are loaded, i.e. no PCM nor mixer devices will appear

Last updated on

## alsa-firmware-1.2.4

### Introduction to ALSA Firmware

The ALSA Firmware package contains firmware for certain sound cards.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/firmware/alsa-firmware-1.2.4.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.2.4.tar.bz2

- Download MD5 sum: ee6c1d24a1a4ac1d86992b408ed710a2

- Download size: 4.9 MB

- Estimated disk space required: 39 MB

- Estimated build time: less than 0.1 SBU

#### ALSA Firmware Dependencies

##### Required

alsa-tools-1.2.5

##### Optional

AS31 (for rebuilding the firmware from source)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-firmware

### Installation of ALSA Firmware

The ALSA Firmware package is only needed by those with advanced requirements for their sound card. See the README for configure options.

Install ALSA Firmware 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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: Several directories in /lib/firmware and /usr/share/alsa/firmware

Last updated on

## alsa-oss-1.1.8

### Introduction to alsa-oss

The alsa-oss package contains the alsa-oss compatibility library. This is used by programs which wish to use the alsa-oss sound interface.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.alsa-project.org/files/pub/oss-lib/alsa-oss-1.1.8.tar.bz2

- Download (FTP): ftp://ftp.alsa-project.org/pub/oss-lib/alsa-oss-1.1.8.tar.bz2

- Download MD5 sum: 9ec4bb783fdce19032aace086d65d874

- Download size: 288 KB

- Estimated disk space required: 3.0 MB

- Estimated build time: less than 0.1 SBU

#### ALSA OSS Dependencies

##### Required

alsa-lib-1.2.5.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/alsa-oss

### Installation of ALSA OSS

Install ALSA OSS by running the following commands:

    ./configure --disable-static &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: aoss
Installed Libraries: libalsatoss.so, libaoss.so, and libossredir.a
Installed Directories: None

#### Short Descriptions

aoss | is a simple wrapper script which facilitates the use of the ALSA oss compatibility library. It just sets the appropriate `LD_PRELOAD` path and then runs the command

Last updated on

## AudioFile-0.3.6

### Introduction to AudioFile

The AudioFile package contains the audio file libraries and two sound file support programs useful to support basic sound file formats.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.gnome.org/sources/audiofile/0.3/audiofile-0.3.6.tar.xz

- Download (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/audiofile/0.3/audiofile-0.3.6.tar.xz

- Download MD5 sum: 235dde14742317328f0109e9866a8008

- Download size: 520 KB

- Estimated disk space required: 18 MB

- Estimated build time: 0.6 SBU

#### AudioFile Dependencies

##### Required

alsa-lib-1.2.5.1

##### Recommended

FLAC-1.3.3

##### Optional

asciidoc-9.1.0 and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/audiofile

### Installation of AudioFile

Install AudioFile by running the following commands:

    CXXFLAGS="${CXXFLAGS:--O2 -g} -std=c++98" \
    ./configure --prefix=/usr --disable-static &&

    make

Now, as the `root` user:

    make install

To test the results, issue: make check. Note that the tests will fail if the --disable-static option is used and tests are executed before make install. You have three options:

(a) configure without --disable-static, run the tests, but do not install, then start a fresh build using --disable-static just for installing the package.

(b) configure with --disable-static, but only run the tests after the package is installed.

(c) configure with --disable-static, but only run the tests after a DESTDIR install.

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: sfconvert and sfinfo
Installed Libraries: libaudiofile.so
Installed Directories: None

#### Short Descriptions

sfinfo | displays the sound file format, audio encoding, sampling rate and duration for audio formats supported by this library
sfconvert | converts sound file formats where the original format and destination format are supported by this library
`libaudiofile.so` | contains functions used by programs to support AIFF, AIFF-compressed, Sun/NeXT, WAV and BIC audio formats

Last updated on

## FAAC-1_30

### Introduction to FAAC

FAAC is an encoder for a lossy sound compression scheme specified in MPEG-2 Part 7 and MPEG-4 Part 3 standards and known as Advanced Audio Coding (AAC). This encoder is useful for producing files that can be played back on iPod. Moreover, iPod does not understand other sound compression schemes in video files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/knik0/faac/archive/1_30/faac-1_30.tar.gz

- Download MD5 sum: 8d61e6d55088e599aa91532d5e6995b0

- Download size: 240 KB

- Estimated disk space required: 4.7 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/faac

### Installation of FAAC

Install FAAC by running the following commands:

    ./bootstrap                                &&
    ./configure --prefix=/usr --disable-static &&
    make

This package does not come with a test suite. However, basic functionality can be tested by encoding a sample WAV file (the sample file is installed by the alsa-utils-1.2.5.1 package:

    ./frontend/faac -o Front_Left.mp4 /usr/share/sounds/alsa/Front_Left.wav

Then, decode the result using the faad program from the FAAD2-2_10_0 package and play back the decoded file (requires the aplay program from the alsa-utils-1.2.5.1 package:

    faad Front_Left.mp4
    aplay Front_Left.wav

aplay should identify the file as “Signed 16 bit Little Endian, Rate 48000 Hz, Stereo”, and you should hear the words “front left”.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Other AAC encoders

The quality of FAAC is not up to par with the best AAC encoders currently available. Also, it only supports AAC and not High Efficiency AAC (also known as aacPlus), which provides better quality at low bitrates by means of using the “spectral band replication” technology. There are the following alternative programs for producing AAC and HE-AAC streams:

- Nero AAC Codec: available only in the binary form, the command-line AAC and HE-AAC encoders for Linux are in the same archive as the Windows application.

- 3GPP Enhanced aacPlus general audio codec: available in the source form, can encode only HE-AAC up to 48 kbps out of the box, but the maximum bitrate can be changed by editing the tuning table in the `FloatFR_sbrenclib/src/sbr_main.c` file.

Note, however, that iPod supports only Low Complexity AAC profile, which is the default in FAAC, but may not be the default in Nero AAC Encoder and is completely unavailable in the 3GPP encoder.

### Contents

Installed Program: faac
Installed Libraries: libfaac.so and libmp4v2.so
Installed Directories: None

#### Short Descriptions

faac | is a command-line AAC encoder
`libfaac.so` | contains functions for encoding AAC streams
`libmp4v2.so` | contains functions for creating and manipulating MP4 files

Last updated on

## FAAD2-2_10_0

### Introduction to FAAD2

FAAD2 is a decoder for a lossy sound compression scheme specified in MPEG-2 Part 7 and MPEG-4 Part 3 standards and known as Advanced Audio Coding (AAC).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/knik0/faad2/archive/2_10_0/faad2-2_10_0.tar.gz

- Download MD5 sum: f948925a6763e30c53078f5af339d6cc

- Download size: 788 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### Additional Downloads

- Sample AAC file: http://www.nch.com.au/acm/sample.aac (7 KB)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/faad2

### Installation of FAAD2

Install FAAD2 by running the following commands:

    ./bootstrap                                &&
    ./configure --prefix=/usr --disable-static &&
    make

This package does not come with a test suite. However, basic functionality can be tested by decoding the sample AAC file:

    ./frontend/faad -o sample.wav ../sample.aac

This should display a copyright message and the following information about the sample file:

`sample.aac file info:
ADTS, 4.608 sec, 13 kbps, 16000 Hz
---------------------
| Config: 2 Ch |
---------------------
| Ch | Position |
---------------------
| 00 | Left front |
| 01 | Right front |
---------------------`

Now play the result (requires the aplay program from the alsa-utils-1.2.5.1 package):

    aplay sample.wav

aplay should identify the file as “Signed 16 bit Little Endian, Rate 16000 Hz, Stereo”, and you should hear some piano notes.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: faad
Installed Library: libfaad.so and libfaad_drm.so
Installed Directories: None

#### Short Descriptions

faad | is a command-line utility for decoding AAC and MP4 files
`libfaad.so` | contains functions for decoding AAC streams

Last updated on

## fdk-aac-2.0.2

### Introduction to fdk-aac

fdk-aac package provides the Fraunhofer FDK AAC library, which is purported to be a high quality Advanced Audio Coding implementation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.2.tar.gz

- Download MD5 sum: b41222194b31f570b3132bd622a9aef6

- Download size: 2.8 MB

- Estimated disk space required: 38 MB

- Estimated build time: 0.6 SBU (Using parallelism=4)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fdk-aac

### Installation of fdk-aac

Install fdk-aac 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libfdk-aac.so
Installed Directory: /usr/include/fdk-aac

#### Short Descriptions

`libfdk-aac.so` | provides the functions used to encode audio in AAC format

Last updated on

## FLAC-1.3.3

### Introduction to FLAC

FLAC is an audio CODEC similar to MP3, but lossless, meaning that audio is compressed without losing any information.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/flac/flac-1.3.3.tar.xz

- Download MD5 sum: 26703ed2858c1fc9ffc05136d13daa69

- Download size: 1.0 MB

- Estimated disk space required: 21 MB (additional 95 MB to run the test suite)

- Estimated build time: 0.1 SBU (additional 0.7 SBU to run the test suite)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/flac-1.3.3-security_fixes-1.patch

#### FLAC Dependencies

##### Optional

libogg-1.3.5, NASM-2.15.05, DocBook-utils-0.6.14, Doxygen-1.9.2 and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/flac

### Installation of FLAC

Install FLAC by running the following commands:

    patch -Np1 -i ../flac-1.3.3-security_fixes-1.patch      &&
    ./configure --prefix=/usr                                \
                --disable-thorough-tests                     \
                --docdir=/usr/share/doc/flac-1.3.3          &&
    make

To test the results, issue: make check. Note that if you passed the `--enable-exhaustive-tests` and `--enable-valgrind-testing` parameters to configure and then run the test suite, it will take a very long time (up to 300 SBUs) and use about 375 MB of disk space.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-thorough-tests`: This parameter is used so that the test suite will complete in a reasonable amount of time. Remove it if you desire more extensive tests.

### Contents

Installed Programs: flac and metaflac
Installed Libraries: libFLAC.so and libFLAC++.so
Installed Directories: /usr/include/FLAC, /usr/include/FLAC++ and /usr/share/doc/flac-1.3.3

#### Short Descriptions

flac | is a command-line utility for encoding, decoding and converting FLAC files
metaflac | is a program for listing, adding, removing, or editing metadata in one or more FLAC files
`libFLAC{,++}.so` | these libraries provide native FLAC and Ogg FLAC C/C++ APIs for programs utilizing FLAC

Last updated on

## frei0r-plugins-1.7.0

### Introduction to Frei0r-plugins

Frei0r is a minimalistic plugin API for video effects. Note that the 0 in the name is a zero, not a capital letter o.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://files.dyne.org/frei0r/releases/frei0r-plugins-1.7.0.tar.gz

- Download MD5 sum: 78a7c7511cbda93013147563dc7a3618

- Download size: 1.2 MB

- Estimated disk space required: 39 MB

- Estimated build time: 0.1 SBU

#### Frei0r-plugins Dependencies

##### Recommended

gavl-1.4.0

##### Optional

Doxygen-1.9.2 and opencv-4.5.3 (currently broken)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/frei0r

### Installation of Frei0r-plugins

Install Frei0r by running the following commands:

    mkdir -vp build &&
    cd        build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -DWITHOUT_OPENCV=TRUE       \
          -Wno-dev ..                 &&

    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`-DWITHOUT_OPENCV=TRUE`: This option instructs the make procedure to disable building plugins dependent upon opencv.

`-DWITHOUT_GAVL=TRUE`: This option instructs the make procedure to disable building plugins dependent upon gavl.

### Contents

Installed Program: None
Installed Libraries: Over 130 video effects plugins
Installed Directories: /usr/lib/frei0r-1

Last updated on

## gavl-1.4.0

### Introduction to Gavl

Gavl is short for Gmerlin Audio Video Library. It is a low level library that handles the details of audio and video formats like colorspaces, samplerates, multichannel configurations etc. It provides standardized definitions for those formats as well as container structures for carrying audio samples or video images inside an application.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/gmerlin/gavl-1.4.0.tar.gz

- Download MD5 sum: 2752013a817fbc43ddf13552215ec2c0

- Download size: 4.4 MB

- Estimated disk space required: 50 MB

- Estimated build time: 0.8 SBU

#### Gavl Dependencies

##### Required

libpng-1.6.37

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gavl

### Installation of Gavl

Install Gavl by running the following commands:

    LIBS=-lm                      \
    ./configure --prefix=/usr     \
                --without-doxygen \
                --docdir=/usr/share/doc/gavl-1.4.0 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`LIBS=-lm`: This variable ensures the math library is searched when linking.

`--without-doxygen`: This switch disables use of Doxygen. Omit if Doxygen is installed and you wish to build the API documentation.

### Contents

Installed Program: None
Installed Libraries: libgavl.so
Installed Directories: /usr/include/gavl and /usr/share/doc/gavl-1.4.0

#### Short Descriptions

`libgavl.so` | is the Gmerlin Audio Video Library

Last updated on

## gstreamer-1.18.4

### Introduction to gstreamer

gstreamer is a streaming media framework that enables applications to share a common set of plugins for tasks such as video encoding and decoding, audio encoding and decoding, audio and video filters, audio visualisation, web streaming and anything else that streams in real-time or otherwise. This package only provides base functionality and libraries. You may need at least gst-plugins-base-1.18.4 and one of Good, Bad, Ugly or Libav plugins.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.18.4.tar.xz

- Download MD5 sum: fe381e1e910e622fee44692e865f7229

- Download size: 2.6 MB

- Estimated disk space required: 60 MB (with tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with tests)

#### gstreamer Dependencies

##### Required

GLib-2.68.4

##### Recommended

gobject-introspection-1.68.0

##### Optional

GTK+-3.24.30 (for examples), Gsl-2.7 (used by one test if installed), Valgrind-3.17.0, bash-completion, hotdoc, libdw, and libunwind

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gstreamer10

### Installation of gstreamer

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

Install gstreamer by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dgst_debug=false   \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS" &&
    ninja

To test the results, issue: ninja test.

### Caution

If you are reinstalling gstreamer from a previous version, it is best if you remove the prior version, including plugins, before installing the new version. If there is a mixture of versions installed, using processes may hang or not work properly. As the `root` user:

    rm -rf /usr/bin/gst-* /usr/{lib,libexec}/gstreamer-1.0

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gst-inspect-1.0, gst-launch-1.0, gst-stats-1.0, gst-tester-1.0, and gst-typefind-1.0
Installed Libraries: libgstbase-1.0.so, libgstcheck-1.0.so, libgstcontroller-1.0.so, libgstnet-1.0.so, and libgstreamer-1.0.so
Installed Directories: /usr/{include,lib,libexec,share}/gstreamer-1.0

#### Short Descriptions

gst-inspect-1.0 | is a tool that prints out information on available gstreamer plugins, information about a particular plugin, or information about a particular element
gst-launch-1.0 | is a tool that builds and runs basic gstreamer pipelines
gst-stats-1.0 | is a tool used to gather statistics about gstreamer operations
gst-tester-1.0 | runs a test plan in TAP compatible format while integrating with the meson test harness
gst-typefind-1.0 | uses the gstreamer type finding system to determine the relevant gstreamer plugin to parse or decode files, and the corresponding MIME type
`libgstbase-1.0.so` | provides some base classes to be extended by elements and utillity classes that are most useful for plugin developers
`libgstcheck-1.0.so` | provides functionality for writing unit tests that use the check framework
`libgstcontroller-1.0.so` | provides functionality to animate element properties over time
`libgstnet-1.0.so` | provides network elements and objects
`libgstreamer-1.0.so` | provides all of the core gstreamer services, including initialization, plugin management and types, as well as the object hierarchy that defines elements and bins, along with some more specialized elements

Last updated on

## gst-plugins-base-1.18.4

### Introduction to GStreamer Base Plug-ins

The GStreamer Base Plug-ins is a well-groomed and well-maintained collection of GStreamer plug-ins and elements, spanning the range of possible types of elements one would want to write for GStreamer. You will need at least one of Good, Bad, Ugly or Libav plugins for GStreamer applications to function properly.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.18.4.tar.xz

- Download MD5 sum: 523336ed6938b8b1004847cbbd5e31cb

- Download size: 3.0 MB

- Estimated disk space required: 99 MB (with tests)

- Estimated build time: 1.0 SBU (Using parallelism=4; with tests)

#### GStreamer Base Plug-ins Dependencies

##### Required

gstreamer-1.18.4

##### Recommended

alsa-lib-1.2.5.1, CDParanoia-III-10.2 (for building the CDDA plugin), gobject-introspection-1.68.0, ISO Codes-4.7.0, libgudev-237, libogg-1.3.5, libtheora-1.1.1, libvorbis-1.3.7, Mesa-21.2.1, wayland-protocols-1.21, and Xorg Libraries

##### Optional

graphene-1.10.6, GTK+-3.24.30 (for examples), Opus-1.3.1, Qt-5.15.2 (for examples), SDL-1.2.15, SDL2-2.0.16, Valgrind-3.17.0, hotdoc, libvisual, Orc, and Tremor

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-base

### Installation of GStreamer Base Plug-ins

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

### Note

If you need a plugin for a given dependency, that dependency needs to be installed before this package.

First fix a build failure caused by a change in meson-0.58.0:

    sed -i 's|implicit_include_directories : false||' gst-libs/gst/gl/meson.build

Install GStreamer Base Plug-ins by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS"    \
           --wrap-mode=nodownload &&
    ninja

To test the results, issue: ninja test. The tests require an X terminal running, or all of the GL tests will fail. Five tests may produce timeouts on some systems depending on their graphics hardware and speed.

### Note

When installing, the build process does some additional linking. If you do not have Xorg in /usr, the LIBRARY_PATH variable needs to be defined for the root user. If using sudo to assume root, use the -E option to pass your current environment variables for the install process.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`--wrap-mode=nodownload`: This switch prevents meson from downloading any optional dependency which is not installed on the system.

### Contents

Installed Programs: gst-device-monitor-1.0, gst-discoverer-1.0, and gst-play-1.0
Installed Libraries: libgstallocators-1.0.so, libgstapp-1.0.so, libgstaudio-1.0.so, libgstfft-1.0.so, libgstgl-1.0.so, libgstpbutils-1.0.so, libgstriff-1.0.so, libgstrtp-1.0.so, libgstrtsp-1.0.so, libgstsdp-1.0.so, libgsttag-1.0.so, libgstvideo-1.0.so and several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/include/gstreamer-1.0/gst/{allocators,app,audio,fft,gl,pbutils}, /usr/include/gstreamer-1.0/gst/{riff,rtp,rtsp,sdp,tag,video}, and /usr/share/gst-plugins-base

#### Short Descriptions

gst-device-monitor-1.0 | is a command line tool that can be used to test GStreamer's device monitoring functionality
gst-discoverer-1.0 | is a tool that can be used to print basic metadata and stream information about a media file
gst-play-1.0 | is a command line tool that can be used to test basic playback using the playbin element

Last updated on

## gst-plugins-good-1.18.4

### Introduction to GStreamer Good Plug-ins

The GStreamer Good Plug-ins is a set of plug-ins considered by the GStreamer developers to have good quality code, correct functionality, and the preferred license (LGPL for the plug-in code, LGPL or LGPL-compatible for the supporting library). A wide range of video and audio decoders, encoders, and filters are included.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz

- Download MD5 sum: 4ecf1ac5cd422d9c13fe05dbf5e3df26

- Download size: 3.1 MB

- Estimated disk space required: 101 MB (with tests)

- Estimated build time: 0.6 SBU (Using parallelism=4; with tests)

#### Additional Downloads

- Recommended patch (required if building against Qt5): https://www.linuxfromscratch.org/patches/blfs/11.0/gst-plugins-good-1.18.4-upstream_fixes-1.patch

#### GStreamer Good Plug-ins Dependencies

##### Required

gst-plugins-base-1.18.4

##### Recommended

Cairo-1.17.4, FLAC-1.3.3, gdk-pixbuf-2.42.6, LAME-3.100, libgudev-237, libjpeg-turbo-2.1.1, libpng-1.6.37, libsoup-2.74.0, libvpx-1.10.0, Mesa-21.2.1, mpg123-1.28.2, NASM-2.15.05, and Xorg Libraries

##### Optional

AAlib-1.4rc5, ALSA OSS-1.1.8, GTK+-3.24.30 (for examples), libdv-1.0.0, PulseAudio-15.0, Qt-5.15.2, Speex-1.2.0, taglib-1.12, Valgrind-3.17.0, v4l-utils-1.20.0, Wayland-1.19.0, hotdoc, JACK, libcaca, libavc1394, libiec61883, libraw1394, libshout, Orc, TwoLame, and WavPack

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-good

### Installation of GStreamer Good Plug-ins

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

### Note

If you need a plugin for a given dependency, that dependency needs to be installed before this package.

Install GStreamer Good Plug-ins by running the following commands:

    patch -Np1 -i ../gst-plugins-good-1.18.4-upstream_fixes-1.patch &&

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS" &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: Several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/share/gstreamer-1.0/presets

Last updated on

## gst-plugins-bad-1.18.4

### Introduction to GStreamer Bad Plug-ins

The GStreamer Bad Plug-ins package contains a set of plug-ins that aren't up to par compared to the rest. They might be close to being good quality, but they're missing something - be it a good code review, some documentation, a set of tests, a real live maintainer, or some actual wide use.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.18.4.tar.xz

- Download MD5 sum: 8a73b497613a9f778e880b8a9eb9c1a3

- Download size: 5.4 MB

- Estimated disk space required: 146 MB (with tests)

- Estimated build time: 1.0 SBU (Using parallelism=4; with tests)

#### GStreamer Bad Plug-ins Dependencies

##### Required

gst-plugins-base-1.18.4

##### Recommended

libdvdread-6.1.2, libdvdnav-6.1.1, and SoundTouch-2.3.0

##### Optional

BlueZ-5.61, cURL-7.78.0, FAAC-1_30, FAAD2-2_10_0, fdk-aac-2.0.2, GTK+-3.24.30 (for examples), Little CMS-2.12, libass-0.15.1, libexif-0.6.22 (for one test), libgudev-237, libmpeg2-0.5.1, librsvg-2.50.7, libsndfile-1.0.31, libssh2-1.9.0, libusb-1.0.24, libwebp-1.2.1, libxkbcommon-1.3.0, neon-0.31.2, Nettle-3.7.3 or libgcrypt-1.9.4 (for SSL support in hls plugin, if both are not installed OpenSSL will be used instead), opencv-4.5.3 (with additional modules), OpenJPEG-2.4.0, Opus-1.3.1, SBC-1.5, SDL-1.2.15, Valgrind-3.17.0, Wayland-1.19.0 (GTK+-3.24.30 must have been compiled with wayland support), x265-3.4, Xorg Libraries (for one test), aom, bs2b, Chromaprint, dssim, Flite, FluidSynth, Game Music Emu, GSM, hotdoc, LADSPA, libavtp, libdc1394-2, libdca, libde265, libkate, libmfx, libmms, libmodplug, libnice, libofa, libopenmpt, libopenni, libsrtp, lilv, LRDF, ltc-tools, microdns, MJPEG Tools, OpenAL, OpenEXR, OpenH264, Orc, rtmpdump, spandsp, srt, svthevcenc, VO AAC, VO AMRWB, Vulkan, WildMidi, WPE-WebKit, WPEBackend-fdo, ZBAR, ZVBI, and zxing

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-bad

### Installation of GStreamer Bad Plug-ins

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

### Note

If you need a plugin for a given dependency, that dependency needs to be installed before this package.

Install GStreamer Bad Plug-ins by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS" &&
    ninja

To test the results, issue: ninja test. Several tests need a terminal emulator in a graphical session.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: gst-transcoder-1.0 and playout
Installed Libraries: libgstadaptivedemux-1.0.so, libgstbadaudio-1.0.so, libgstbasecamerabinsrc-1.0.so, libgstcodecparsers-1.0.so, libgstcodecs-1.0.so, libgstinsertbin-1.0.so, libgstisoff-1.0.so, libgstmpegts-1.0.so, libgstphotography-1.0.so, libgstplayer-1.0.so, libgstsctp-1.0.so, libgsttranscoder-1.0.so, libgsturidownloader-1.0.so, libgstwayland-1.0.so, libgstwebrtc-1.0.so, and several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/include/gstreamer-1.0/gst/{audio,basecamerabinsrc,codecparsers}, /usr/include/gstreamer-1.0/gst/{insertbin,interfaces,isoff,mpegts}, and /usr/include/gstreamer-1.0/gst/{player,sctp,transcoder,uridownloader,webrtc}

#### Short Descriptions

gst-transcoder-1.0 | is used to transcode a stream into a different format
playout | is an example application used to sequentially play a list of audio-video files

Last updated on

## gst-plugins-ugly-1.18.4

### Introduction to GStreamer Ugly Plug-ins

The GStreamer Ugly Plug-ins is a set of plug-ins considered by the GStreamer developers to have good quality and correct functionality, but distributing them might pose problems. The license on either the plug-ins or the supporting libraries might not be how the GStreamer developers would like. The code might be widely known to present patent problems.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.4.tar.xz

- Download MD5 sum: e5fbd9a8a05632cfb9d0afd0ad856d52

- Download size: 500 KB

- Estimated disk space required: 9.8 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### GStreamer Ugly Plug-ins Dependencies

##### Required

gst-plugins-base-1.18.4

##### Recommended

liba52-0.7.4 (needed to play DVD's), libdvdread-6.1.2, and x264-20210814

##### Optional

libmpeg2-0.5.1, libcdio-2.1.0 (for CD-ROM drive access), Valgrind-3.17.0, hotdoc, libsidplay, OpenCore AMR, Orc, and TwoLame

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-ugly

### Installation of GStreamer Ugly Plug-ins

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

### Note

If you need a plugin for a given dependency, that dependency needs to be installed before this package.

Install GStreamer Ugly Plug-ins by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS" &&
    ninja

To test the results, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Libraries: Several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/share/gstreamer-1.0/presets

Last updated on

## gst-libav-1.18.4

### Introduction to GStreamer Libav

The GStreamer Libav package contains GStreamer plugins for Libav (a fork of FFmpeg).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.18.4.tar.xz

- Download MD5 sum: 71bd312207411fb69364b19b4b249331

- Download size: 276 KB

- Estimated disk space required: 8.5 MB

- Estimated build time: less than 0.1 SBU (Using parallelism=4)

#### GStreamer Libav Dependencies

##### Required

FFmpeg-4.4 and gst-plugins-base-1.18.4

##### Recommended

yasm-1.3.0

##### Optional

hotdoc and Orc

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gst10-libav

### Installation of GStreamer Libav

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

Install GStreamer Libav by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ \
           -Dpackage-name="GStreamer 1.18.4 BLFS" &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Library: libgstlibav.so
Installed Directory: None

Last updated on

## gstreamer-vaapi-1.18.4

### Introduction to gstreamer-vaapi

The gstreamer-vaapi package contains a gstreamer plugin for hardware accelerated video decode/encode for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gstreamer.freedesktop.org/src/gstreamer-vaapi/gstreamer-vaapi-1.18.4.tar.xz

- Download MD5 sum: 07d334476b3a7195033692fdb42b78d5

- Download size: 768 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### gstreamer-vaapi Dependencies

##### Required

GTK+-3.24.30, gstreamer-1.18.4, gst-plugins-base-1.18.4, gst-plugins-bad-1.18.4, and libva-2.12.0

##### Optional

hotdoc

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gstreamer10-vaapi

### Installation of gstreamer-vaapi

### Note

If you do not have an Objective-C compiler installed, the build system for this package will emit a warning about a failed sanity check. This is harmless, and it is safe to continue.

Install gstreamer-vaapi by running the following commands:

    mkdir build &&
    cd    build &&

    meson  --prefix=/usr       \
           --buildtype=release \
           -Dpackage-origin=https://www.linuxfromscratch.org/blfs/view/svn/ &&
    ninja

This package does not come with a test suite.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

### Contents

Installed Programs: None
Installed Library: libgstvaapi.so
Installed Directory: None

Last updated on

## id3lib-3.8.3

### Introduction to id3lib

id3lib is a library for reading, writing and manipulating id3v1 and id3v2 multimedia data containers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/id3lib/id3lib-3.8.3.tar.gz

- Download MD5 sum: 19f27ddd2dda4b2d26a559a4f0f402a7

- Download size: 932 KB

- Estimated disk space required: 16 MB

- Estimated build time: 0.2 SBU

#### Additional Downloads

- Required patches: https://www.linuxfromscratch.org/patches/blfs/11.0/id3lib-3.8.3-consolidated_patches-1.patch

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/id3lib

### Installation of Id3lib

Install id3lib by running the following commands:

    patch -Np1 -i ../id3lib-3.8.3-consolidated_patches-1.patch &&

    libtoolize -fc                &&
    aclocal                       &&
    autoconf                      &&
    automake --add-missing --copy &&

    ./configure --prefix=/usr --disable-static &&
    make

This packages does not come with a working test suite.

Now, as the `root` user:

    make install  &&
    cp doc/man/* /usr/share/man/man1 &&

    install -v -m755 -d /usr/share/doc/id3lib-3.8.3 &&
    install -v -m644 doc/*.{gif,jpg,png,ico,css,txt,php,html} \
                        /usr/share/doc/id3lib-3.8.3

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: id3convert, id3cp, id3info, and id3tag
Installed Library: libid3.so
Installed Directories: /usr/include/id3 and /usr/share/doc/id3lib-3.8.3

#### Short Descriptions

id3convert | converts between id3v1/v2 tagging formats
id3cp | extracts id3v1/v2 tags from digital audio files
id3info | prints id3v1/v2 tag contents
id3tag | is a utility for editing id3v1/v2 tags
`libid3.so` | provides functions for the id3v1/v2 tag editing programs as well as other external programs and libraries

Last updated on

## Liba52-0.7.4

### Introduction to Liba52

liba52 is a free library for decoding ATSC A/52 (also known as AC-3) streams. The A/52 standard is used in a variety of applications, including digital television and DVD.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz

- Download MD5 sum: caa9f5bc44232dc8aeea773fea56be80

- Download size: 236 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

##### Optional

djbfft

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/liba52

### Installation of Liba52

Install liba52 by running the following commands:

    ./configure --prefix=/usr \
                --mandir=/usr/share/man \
                --enable-shared \
                --disable-static \
                CFLAGS="${CFLAGS:--g -O2} $([ $(uname -m) = x86_64 ] && echo -fPIC)" &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install &&
    cp liba52/a52_internal.h /usr/include/a52dec &&
    install -v -m644 -D doc/liba52.txt \
        /usr/share/doc/liba52-0.7.4/liba52.txt

### Command Explanations

`CFLAGS="-g -O2 ...`: This sets CFLAGS to -g -O2 (which is the default) but then on x86_64 adds -fPIC. This is needed to compile liba52 on x86_64.

`--disable-static`: This switch prevents installation of static versions of the libraries.

cp liba52/a52_internal.h ...: Copying this header file into /usr/include/a52dec allows some other programs (such as xine-lib) to compile and link against a system installed liba52.

### Contents

Installed Programs: a52dec and extract_a52
Installed Library: liba52.so
Installed Directories: /usr/include/a52dec and /usr/share/doc/liba52-0.7.4

#### Short Descriptions

a52dec | plays ATSC A/52 audio streams
extract_a52 | extracts ATSC A/52 audio from an MPEG stream
`liba52.so` | provides functions for the programs dealing with ATSC A/52 streams

Last updated on

## Libao-1.2.0

### Introduction to Libao

The libao package contains a cross-platform audio library. This is useful to output audio on a wide variety of platforms. It currently supports WAV files, OSS (Open Sound System), ESD (Enlighten Sound Daemon), ALSA (Advanced Linux Sound Architecture), NAS (Network Audio system), aRTS (analog Real-Time Synthesizer), and PulseAudio (next generation GNOME sound architecture).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/ao/libao-1.2.0.tar.gz

- Download MD5 sum: 9f5dd20d7e95fd0dd72df5353829f097

- Download size: 456 KB

- Estimated disk space required: 3.9 MB

- Estimated build time: less than 0.1 SBU

#### Libao Dependencies

##### Optional

X Window System, ALSA-1.2.5, and PulseAudio-15.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libao

### Installation of Libao

Install libao 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 &&
    install -v -m644 README /usr/share/doc/libao-1.2.0

### Configuring Libao

#### Config Files

`/etc/libao.conf` and `~/.libao`

#### Configuration Information

Currently, the only configuration option available is setting the default output device. Issue man libao.conf for details.

### Contents

Installed Programs: None
Installed Libraries: libao.so and plugins under /usr/lib/ao/plugins-4
Installed Directories: /usr/include/ao, /usr/lib/ao and /usr/share/doc/libao-1.2.0

#### Short Descriptions

`libao.so` | provides functions for programs wishing to output sound over supported platforms

Last updated on

## libass-0.15.1

### Introduction to libass

libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format that allows for more advanced subtitles than the conventional SRT and similar formats.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libass/libass/releases/download/0.15.1/libass-0.15.1.tar.xz

- Download MD5 sum: 65e60f7bb7e881b453bede1faad10b77

- Download size: 364 KB

- Estimated disk space required: 5.6 MB

- Estimated build time: less than 0.1 SBU

#### libass Dependencies

##### Required

FreeType-2.11.0, FriBidi-1.0.9, and NASM-2.15.05

##### Recommended

Fontconfig-2.13.1

##### Optional

HarfBuzz-2.9.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libass

### Installation of libass

Install libass 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-fontconfig`: Use this switch if you didn't install Fontconfig.

### Contents

Installed Programs: None
Installed Library: libass.so
Installed Directory: /usr/include/ass

#### Short Descriptions

`libass.so` | provides the functions used to render ASS/SSA subtitle format

Last updated on

## libcanberra-0.30

### Introduction to libcanberra

libcanberra is an implementation of the XDG Sound Theme and Name Specifications, for generating event sounds on free desktops, such as GNOME.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://0pointer.de/lennart/projects/libcanberra/libcanberra-0.30.tar.xz

- Download MD5 sum: 34cb7e4430afaf6f447c4ebdb9b42072

- Download size: 312 KB

- Estimated disk space required: 7.5 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libcanberra-0.30-wayland-1.patch

#### libcanberra Dependencies

##### Required

libvorbis-1.3.7

##### Recommended

alsa-lib-1.2.5.1, gstreamer-1.18.4 and GTK+-3.24.30

##### Optional

GTK+-2.24.33, PulseAudio-15.0 and tdb

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libcanberra

### Installation of libcanberra

At first, apply a patch to fix an issue causing some applications to crash in Wayland based desktop environment:

    patch -Np1 -i ../libcanberra-0.30-wayland-1.patch

Install libcanberra by running the following commands:

    ./configure --prefix=/usr --disable-oss &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make docdir=/usr/share/doc/libcanberra-0.30 install

### Command Explanations

`--disable-oss`: disable optional deprecated OSS support

`--disable-gtk`: disable optional GTK+ 2 support

`--disable-gtk3`: disable optional GTK+ 3 support

### Contents

Installed Programs: canberra-boot and canberra-gtk-play
Installed Libraries: libcanberra-gtk.so, libcanberra-gtk3.so and libcanberra.so
Installed Directories: /usr/lib/libcanberra-0.30, /usr/share/doc/libcanberra-0.30 and /usr/share/gtk-doc/html/libcanberra

#### Short Descriptions

canberra-gtk-play | is an application used for playing sound events
`libcanberra-gtk.so` | contains the libcanberra bindings for GTK+ 2
`libcanberra-gtk3.so` | contains the libcanberra bindings for GTK+ 3
`libcanberra.so` | contains the libcanberra API functions

Last updated on

## libcddb-1.3.2

### Introduction to libcddb

The libcddb is a library that implements the different protocols (CDDBP, HTTP, SMTP) to access data on a CDDB server.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libcddb/libcddb-1.3.2.tar.bz2

- Download MD5 sum: 8bb4a6f542197e8e9648ae597cd6bc8a

- Download size: 384 KB

- Estimated disk space required: 3.9 MB (with tests)

- Estimated build time: 0.2 SBU (with tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libcddb

### Installation of libcddb

Install libcddb by running the following commands:

    ./configure --prefix=/usr --disable-static &&
    make

To test the results, issue: make check. Two tests fail due to missing test servers.

Now, as the `root` user:

    make install

### Contents

Installed Programs: cddb_query
Installed Library: libcddb.so
Installed Directories: /usr/include/cddb

#### Short Descriptions

cddb_query | provides a user interface to a CDDB server

Last updated on

## libcdio-2.1.0

### Introduction to libcdio

The libcdio is a library for CD-ROM and CD image access. The associated libcdio-cdparanoia library reads audio from the CD-ROM directly as data, with no analog step between, and writes the data to a file or pipe as .wav, .aifc or as raw 16 bit linear PCM.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/libcdio/libcdio-2.1.0.tar.bz2

- Download (FTP): ftp://ftp.gnu.org/gnu/libcdio/libcdio-2.1.0.tar.bz2

- Download MD5 sum: aa7629e8f73662a762f64c444b901055

- Download size: 1.7 MB

- Estimated disk space required: 43 MB (both packages, including checks)

- Estimated build time: 0.3 SBU (using parallelism=4; both packages, including checks)

#### Additional Downloads

- Required file: https://ftp.gnu.org/gnu/libcdio/libcdio-paranoia-10.2+2.0.1.tar.bz2

#### libcdio Dependencies

##### Optional

libcddb-1.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libcdio

### Installation of libcdio

Install libcdio 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

Now install libcdio-paranoia:

    tar -xf ../libcdio-paranoia-10.2+2.0.1.tar.bz2 &&
    cd libcdio-paranoia-10.2+2.0.1 &&

    ./configure --prefix=/usr --disable-static &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: cdda-player, cd-drive, cd-info, cd-paranoia, cd-read, iso-info, iso-read, and mmc-tool
Installed Library: libcdio.so, libcdio++.so, libcdio_cdda, libcdio_paranoia, libiso9660, libiso9660++, and libudf.so
Installed Directories: /usr/include/cdio and /usr/include/cdio++

#### Short Descriptions

cd-drive | shows CD-ROM drive characteristics
cd-info | shows information about a CD or CD-image
cd-paranoia | is an audio CD reading utility which includes extra data verification features
cd-read | reads Information from a CD or CD-image
cdda-player | is a simple curses CD player
iso-info | shows Information about an ISO 9660 image
iso-read | reads portions of an ISO 9660 image
mmc-tool | issues libcdio multimedia commands
`libcdio.so` | contains the primary cdio API functions

Last updated on

## libdiscid-0.6.2

### Introduction to libdiscid

The libdiscid package contains a library for creating MusicBrainz DiscIDs from audio CDs. It reads a CD's table of contents (TOC) and generates an identifier which can be used to lookup the CD at MusicBrainz (http://musicbrainz.org). Additionally, it provides a submission URL for adding the DiscID to the database.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-0.6.2.tar.gz

- Download (FTP): ftp://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-0.6.2.tar.gz

- Download MD5 sum: 2812bb678f5142efdfd0d0f7d6ea87d6

- Download size: 396 KB

- Estimated disk space required: 3.1 MB (with tests)

- Estimated build time: 0.1 SBU (with tests)

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdiscid

### Installation of libdiscid

Install libdiscid 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

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libdiscid.so
Installed Directory: /usr/include/discid

#### Short Descriptions

`libdiscid.so` | contains the DiscID API functions

Last updated on

## libdvdcss-1.4.3

### Introduction to libdvdcss

libdvdcss is a simple library designed for accessing DVDs as a block device without having to bother about the decryption.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://get.videolan.org/libdvdcss/1.4.3/libdvdcss-1.4.3.tar.bz2

- Download MD5 sum: e98239a88af9b2204f9b9d987c2bc71a

- Download size: 380 KB

- Estimated disk space required: 3.3 MB

- Estimated build time: less than 0.1 SBU

#### libdvdcss Dependencies

##### Optional (to Create Documentation)

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdvdcss

### Installation of libdvdcss

Install libdvdcss by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libdvdcss-1.4.3 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libdvdcss.so
Installed Directories: /usr/include/dvdcss and /usr/share/doc/libdvdcss-1.4.3

#### Short Descriptions

`libdvdcss.so` | provides the functionality that is required for transparent DVD access with CSS decryption

Last updated on

## Libdvdread-6.1.2

### Introduction to Libdvdread

libdvdread is a library which provides a simple foundation for reading DVDs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://get.videolan.org/libdvdread/6.1.2/libdvdread-6.1.2.tar.bz2

- Download MD5 sum: 034581479968405ed415c34a50d00224

- Download size: 384 KB

- Estimated disk space required: 3.8 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdvdread

### Installation of Libdvdread

Install libdvdread by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libdvdread-6.1.2 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libdvdread.so
Installed Directories: /usr/include/dvdread and /usr/share/doc/libdvdread-6.1.2

#### Short Descriptions

`libdvdread.so` | provides functionality required to access DVDs

Last updated on

## Libdvdnav-6.1.1

### Introduction to Libdvdnav

libdvdnav is a library that allows easy use of sophisticated DVD navigation features such as DVD menus, multiangle playback and even interactive DVD games.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://get.videolan.org/libdvdnav/6.1.1/libdvdnav-6.1.1.tar.bz2

- Download MD5 sum: 46c46cb0294fbd1fcb8a0181818dad15

- Download size: 360 KB

- Estimated disk space required: 3.7 MB

- Estimated build time: less than 0.1 SBU

#### Libdvdnav Dependencies

##### Required

libdvdread-6.1.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdvdnav

### Installation of Libdvdnav

Install libdvdnav by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libdvdnav-6.1.1 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libdvdnav.so
Installed Directories: /usr/include/dvdnav and /usr/share/doc/libdvdnav-6.1.1

#### Short Descriptions

`libdvdnav.so` | is the DVD navigation library

Last updated on

## Libdv-1.0.0

### Introduction to Libdv

The Quasar DV Codec (libdv) is a software CODEC for DV video, the encoding format used by most digital camcorders. It can be used to copy videos from camcorders using a firewire (IEEE 1394) connection.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libdv/libdv-1.0.0.tar.gz

- Download MD5 sum: f895162161cfa4bb4a94c070a7caa6c7

- Download size: 574 KB

- Estimated disk space required: 6.0 MB

- Estimated build time: 0.2 SBU

#### Libdv Dependencies

##### Optional

popt-1.18, SDL-1.2.15, and X Window System

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libdv

### Installation of Libdv

Install libdv by running the following commands:

    ./configure --prefix=/usr \
                --disable-xv \
                --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/libdv-1.0.0 &&
    install -v -m644 README* /usr/share/doc/libdv-1.0.0

### Command Explanations

`--disable-xv`: This parameter is required if an X Window System is not installed. It also prevents configure testing for `libXv` which is only used for an obsolete program playdv that will not be built with current linux headers and would also need other obsolete dependencies.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: dubdv, dvconnect, and encodedv
Installed Library: libdv.so
Installed Directories: /usr/include/libdv and /usr/share/doc/libdv-1.0.0

#### Short Descriptions

dubdv | inserts audio into a digital video stream
dvconnect | is a small utility to send or capture raw data from and to the camcorder
encodedv | encodes a series of images to a digital video stream
`libdv.so` | provides functions for programs interacting with the Quasar DV CODEC

Last updated on

## libmad-0.15.1b

### Introduction to libmad

libmad is a high-quality MPEG audio decoder capable of 24-bit output.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz

- Download (FTP): ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz

- Download MD5 sum: 1be543bc30c56fb6bea1d7bf6a64e66c

- Download size: 491 KB

- Estimated disk space required: 4.2 MB

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libmad-0.15.1b-fixes-1.patch

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libmad

### Installation of libmad

Install libmad by running the following commands:

    patch -Np1 -i ../libmad-0.15.1b-fixes-1.patch                &&
    sed "s@AM_CONFIG_HEADER@AC_CONFIG_HEADERS@g" -i configure.ac &&
    touch NEWS AUTHORS ChangeLog                                 &&
    autoreconf -fi                                               &&

    ./configure --prefix=/usr --disable-static &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

Some packages check for the pkg-config file for libmad. This file is particularly needed so that Cdrdao can recognize the installed libmad.

As the `root` user:

    cat > /usr/lib/pkgconfig/mad.pc << "EOF"
    prefix=/usr
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir=${prefix}/include

    Name: mad
    Description: MPEG audio decoder
    Requires:
    Version: 0.15.1b
    Libs: -L${libdir} -lmad
    Cflags: -I${includedir}
    EOF

### Command Explanations

touch NEWS AUTHORS ChangeLog: Prevent autoreconf from returning an error.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libmad.so
Installed Directories: None

#### Short Descriptions

`libmad.so` | is a MPEG audio decoder library

Last updated on

## libmpeg2-0.5.1

### Introduction to libmpeg2

The libmpeg2 package contains a library for decoding MPEG-2 and MPEG-1 video streams. The library is able to decode all MPEG streams that conform to certain restrictions: “constrained parameters” for MPEG-1, and “main profile” for MPEG-2. This is useful for programs and applications needing to decode MPEG-2 and MPEG-1 video streams.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz

- Download (FTP): ftp://ftp.mirrorservice.org/sites/distfiles.gentoo.org/distfiles/libmpeg2-0.5.1.tar.gz

- Download MD5 sum: 0f92c7454e58379b4a5a378485bbd8ef

- Download size: 513 KB

- Estimated disk space required: 6 MB

- Estimated build time: 0.1 SBU

#### libmpeg2 Dependencies

##### Optional

X Window System and SDL-1.2.15

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libmpeg2

### Installation of libmpeg2

Install libmpeg2 by running the following commands:

    sed -i 's/static const/static/' libmpeg2/idct_mmx.c &&

    ./configure --prefix=/usr    \
                --enable-shared  \
                --disable-static &&
    make

To test the results, issue: make check. To perform a more comprehensive regression test, see the file `test/README` in the source tree.

Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/mpeg2dec-0.5.1 &&
    install -v -m644 README doc/libmpeg2.txt \
                        /usr/share/doc/mpeg2dec-0.5.1

### Command Explanations

sed -i ...: This sed fixes problems with recent GCC compilers.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: corrupt_mpeg2, extract_mpeg2 and mpeg2dec
Installed Libraries: libmpeg2.so and libmpeg2convert.so
Installed Directories: /usr/include/mpeg2dec and /usr/share/doc/mpeg2dec-0.5.1

#### Short Descriptions

extract_mpeg2 | extracts MPEG video streams from a multiplexed stream
mpeg2dec | decodes MPEG1 and MPEG2 video streams
`libmpeg2.so` | contains API functions used to decode MPEG video streams
`libmpeg2convert.so` | contains API functions used for color conversions of MPEG video streams

Last updated on

## libmusicbrainz-2.1.5

### Introduction to libmusicbrainz

The libmusicbrainz package contains a library which allows you to access the data held on the MusicBrainz server. This is useful for adding MusicBrainz lookup capabilities to other applications.

MusicBrainz is a community music metadatabase that attempts to create a comprehensive music information site. You can use the MusicBrainz data either by browsing the web site, or you can access the data from a client program — for example, a CD player program can use MusicBrainz to identify CDs and provide information about the CD, about the artist or other related information.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://ftp.musicbrainz.org/pub/musicbrainz/historical/libmusicbrainz-2.1.5.tar.gz

- Download (FTP): ftp://ftp.musicbrainz.org/pub/musicbrainz/historical/libmusicbrainz-2.1.5.tar.gz

- Download MD5 sum: d5e19bb77edd6ea798ce206bd05ccc5f

- Download size: 524 KB

- Estimated disk space required: 12 MB

- Estimated build time: 0.4 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libmusicbrainz-2.1.5-missing-includes-1.patch

#### libmusicbrainz Dependencies

##### Optional to Build the Python Bindings

Python-2.7.18

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libmusicbrainz

### Installation of libmusicbrainz

Install libmusicbrainz by running the following commands:

    patch -Np1 -i ../libmusicbrainz-2.1.5-missing-includes-1.patch &&

    CXXFLAGS="${CXXFLAGS:--O2 -g} -std=c++98" \
    ./configure --prefix=/usr --disable-static &&
    make

If Python is installed, build the bindings with the following commands:

    (cd python && python2 setup.py build)

This package does not come with a stand-alone test suite (to test you must have Python installed and perform the test after the package is installed).

Now, as the `root` user:

    make install &&
    install -v -m644 -D docs/mb_howto.txt \
        /usr/share/doc/libmusicbrainz-2.1.5/mb_howto.txt

To test the Python bindings, issue the following: (cd python && python2 setup.py test).

If you built the Python bindings, issue the following commands as the `root` user to install them:

    (cd python && python2 setup.py install)

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libmusicbrainz.so
Installed Directories: /usr/include/musicbrainz and /usr/share/doc/libmusicbrainz-2.1.5

#### Short Descriptions

`libmusicbrainz.so` | contains API functions to access the MusicBrainz database, both for looking up data and also for submitting new data

Last updated on

## libmusicbrainz-5.1.0

### Introduction to libmusicbrainz

The libmusicbrainz package contains a library which allows you to access the data held on the MusicBrainz server.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/metabrainz/libmusicbrainz/releases/download/release-5.1.0/libmusicbrainz-5.1.0.tar.gz

- Download MD5 sum: 4cc5556aa40ff7ab8f8cb83965535bc3

- Download size: 76 KB

- Estimated disk space required: 6.6 MB (additional 4.4 MB for the API documentaion)

- Estimated build time: 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libmusicbrainz-5.1.0-cmake_fixes-1.patch

#### libmusicbrainz Dependencies

##### Required

CMake-3.21.2, libxml2-2.9.12 and neon-0.31.2

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libmusicbrainz5

### Installation of libmusicbrainz

First, fix a problem caused by CMake-3.18.0:

    patch -Np1 -i ../libmusicbrainz-5.1.0-cmake_fixes-1.patch

Install libmusicbrainz by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .. &&
    make

If you have installed Doxygen-1.9.2, optionally build the API documentation:

    doxygen ../Doxyfile

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have built the API documentation, install, as the `root` user:

    rm -rf /usr/share/doc/libmusicbrainz-5.1.0 &&
    cp -vr docs/ /usr/share/doc/libmusicbrainz-5.1.0

### Contents

Installed Programs: None
Installed Library: libmusicbrainz5.so
Installed Directory: /usr/include/libmusicbrainz5 and /usr/share/doc/libmusicbrainz-5.1.0

#### Short Descriptions

`libmusicbrainz5.so` | contains API functions for accessing the MusicBrainz database

Last updated on

## libogg-1.3.5

### Introduction to libogg

The libogg package contains the Ogg file structure. This is useful for creating (encoding) or playing (decoding) a single physical bit stream.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/ogg/libogg-1.3.5.tar.xz

- Download MD5 sum: 3178c98341559657a15b185bf5d700a5

- Download size: 420 KB

- Estimated disk space required: 3.5 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libogg

### Installation of libogg

Install libogg by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libogg-1.3.5 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libogg.so
Installed Directories: /usr/include/ogg and /usr/share/doc/libogg-1.3.5

#### Short Descriptions

`libogg.so` | provides the functions required for programs to read or write Ogg formatted bit streams

Last updated on

## libquicktime-1.2.4

### Introduction to libquicktime

The libquicktime package contains the `libquicktime` library, various plugins and codecs, along with graphical and command line utilities used for encoding and decoding QuickTime files. This is useful for reading and writing files in the QuickTime format. The goal of the project is to enhance, while providing compatibility with the Quicktime 4 Linux library.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/libquicktime/libquicktime-1.2.4.tar.gz

- Download MD5 sum: 81cfcebad9b7ee7e7cfbefc861d6d61b

- Download size: 1.0 MB

- Estimated disk space required: 20 MB

- Estimated build time: 0.7 SBU (includes building all codec modules)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/libquicktime-1.2.4-ffmpeg4-1.patch

#### libquicktime Dependencies

##### Optional

alsa-lib-1.2.5.1, Doxygen-1.9.2, FAAC-1_30, FAAD2-2_10_0, FFmpeg-4.4, GTK+-2.24.33, LAME-3.100, libdv-1.0.0, libjpeg-turbo-2.1.1, libpng-1.6.37, libvorbis-1.3.7, x264-20210814, Xorg Libraries, and Schroedinger

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libquicktime

### Installation of libquicktime

Install libquicktime by running the following commands:

    patch -Np1 -i ../libquicktime-1.2.4-ffmpeg4-1.patch &&

    ./configure --prefix=/usr     \
                --enable-gpl      \
                --without-doxygen \
                --docdir=/usr/share/doc/libquicktime-1.2.4
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/libquicktime-1.2.4 &&
    install -v -m644    README doc/{*.txt,*.html,mainpage.incl} \
                        /usr/share/doc/libquicktime-1.2.4

### Command Explanations

`--enable-gpl`: Changes the licence to GPL. This enables some extra plugins, such as FAAC, FAAD2, and x264.

`--without-doxygen`: This is necessary if you do not have Doxygen, omit this if it is installed and you wish the API documentation installed.

`--with-libdv`: Build with libdv support. Not enabled by default.

### Contents

Installed Programs: libquicktime_config, lqtplay, lqtremux, lqt_transcode, qt2text, qtdechunk, qtdump, qtinfo, qtrechunk, qtstreamize, and qtyuv4toyuv
Installed Libraries: libquicktime.so and several plugin codec libraries
Installed Directories: /usr/include/lqt, /usr/lib/libquicktime, and /usr/share/doc/libquicktime-1.2.4

#### Short Descriptions

libquicktime_config | is a graphical front end to examine and configure the available libquicktime audio and video codecs
lqtplay | is a simple QuickTime movie player for X Window System
lqt_transcode | is a command-line program used to encode video and/or audio files from one format to another
qt2text | is used to dump all text strings from a quicktime file
qtdechunk | can take movies containing rgb frames and write them out as ppm images
qtdump | displays the parsed contents of the provided file
qtinfo | prints various pieces of metadata parsed by the libquicktime library for the provided file
qtrechunk | concatenates input frames into a QuickTime movie
qtstreamize | is used to make a file streamable by placing the moov header at the beginning of the file
qtyuv4toyuv | is used to write a YUV4 encoded movie as a planar YUV 4:2:0 file
`libquicktime.so` | is a library for reading and writing QuickTime files. It provides convenient access to QuickTime files with a variety of supported codecs. The library contains new functions integrated with all the original QuickTime 4 Linux library functions used to encode and decode QuickTime files

Last updated on

## libsamplerate-0.2.1

### Introduction to libsamplerate

libsamplerate is a sample rate converter for audio.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libsndfile/libsamplerate/releases/download/0.2.1/libsamplerate-0.2.1.tar.bz2

- Download MD5 sum: e29ca4f1bb8c0252e0f84725617dbe89

- Download size: 3.6 MB

- Estimated disk space required: 17 MB (add 1.2 MB for tests)

- Estimated build time: 0.1 SBU (add 0.3 SBU for tests)

#### libsamplerate Dependencies

##### Optional

alsa-lib-1.2.5.1, libsndfile-1.0.31, and fftw-3.3.9 (for tests)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsamplerate

### Installation of libsamplerate

Install libsamplerate by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libsamplerate-0.2.1 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Program: None
Installed Library: libsamplerate.so
Installed Directory: /usr/share/doc/libsamplerate-0.2.1

Last updated on

## libsndfile-1.0.31

### Introduction to libsndfile

Libsndfile is a library of C routines for reading and writing files containing sampled audio data.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/libsndfile/libsndfile/releases/download/1.0.31/libsndfile-1.0.31.tar.bz2

- Download MD5 sum: 3f3b2a86a032f064ef922a2c8c191f7b

- Download size: 855 KB

- Estimated disk space required: 13 MB (add 9 MB for tests)

- Estimated build time: 0.3 SBU (add 0.6 SBU for tests)

#### libsndfile Dependencies

##### Recommended

FLAC-1.3.3, Opus-1.3.1, and libvorbis-1.3.7

##### Optional

alsa-lib-1.2.5.1, Speex-1.2.0, and SQLite-3.36.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libsndfile

### Installation of libsndfile

Install libsndfile by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/libsndfile-1.0.31 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: sndfile-cmp, sndfile-concat, sndfile-convert, sndfile-deinterleave, sndfile-info, sndfile-interleave, sndfile-metadata-get, sndfile-metadata-set, sndfile-play, and sndfile-salvage
Installed Library: libsndfile.so
Installed Directory: /usr/share/doc/libsndfile-1.0.31

#### Short Descriptions

sndfile-cmp | compares two audio files
sndfile-concat | concatenates two or more audio files
sndfile-convert | converts a sound files from one format to another
sndfile-deinterleave | splits a multi-channel into multiple single channel files
sndfile-info | displays information about a sound file
sndfile-interleave | converts multiple single channel files into a multi-channel file
sndfile-metadata-get | retrieves metadata from a sound file
sndfile-metadata-set | sets metadata in a sound file
sndfile-play | plays a sound file
sndfile-salvage | Salvages the audio data from WAV files which are more than 4G in length
`libsndfile.so` | contains the libsndfile API functions

Last updated on

## libtheora-1.1.1

### Introduction to libtheora

libtheora is a reference implementation of the Theora video compression format being developed by the Xiph.Org Foundation.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.xz

- Download MD5 sum: 9eeabf1ad65b7f41533854a59f7a716d

- Download size: 1.4 MB

- Estimated disk space required: 13.4 MB (without static libs or API docs and without installing the examples)

- Estimated build time: 0.2 SBU

#### libtheora Dependencies

##### Required

libogg-1.3.5

##### Recommended

libvorbis-1.3.7

##### Optional

SDL-1.2.15 and libpng-1.6.37 (both to build the example players), Doxygen-1.9.2, texlive-20210325 (or install-tl-unx), BibTex, and Transfig (all four to build the API documentation), and Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Libtheora

### Installation of libtheora

Install libtheora by running the following commands:

    sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c &&
    ./configure --prefix=/usr --disable-static &&
    make

If you wish to run the tests, issue: make check.

Now, as the `root` user:

    make install

If you wish to install the examples (so that you can hack on `theora`), install them as the `root` user:

    cd examples/.libs &&
    for E in *; do
      install -v -m755 $E /usr/bin/theora_${E}
    done

### Command Explanations

sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c: This sed fixes build with libpng 1.6.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None, unless you installed the examples
Installed Libraries: libtheora.so, libtheoraenc.so, and libtheoradec.so
Installed Directories: /usr/include/theora and /usr/share/doc/libtheora-1.1.1

#### Short Descriptions

`libtheora*.so` | contains the functions to read and write video files

Last updated on

## libvorbis-1.3.7

### Introduction to libvorbis

The libvorbis package contains a general purpose audio and music encoding format. This is useful for creating (encoding) and playing (decoding) sound in an open (patent free) format.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz

- Download MD5 sum: 50902641d358135f06a8392e61c9ac77

- Download size: 1.1 MB

- Estimated disk space required: 15 MB

- Estimated build time: 0.1 SBU

#### libvorbis Dependencies

##### Required

libogg-1.3.5

##### Optional

Doxygen-1.9.2 and texlive-20210325 (or install-tl-unx) (specifically, pdflatex and htlatex) to build the PDF documentation

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Libvorbis

### Installation of libvorbis

Install libvorbis 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 &&
    install -v -m644 doc/Vorbis* /usr/share/doc/libvorbis-1.3.7

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-docs`: This switch enables building the documentation in formats other than the supplied html.

### Contents

Installed Programs: None
Installed Libraries: libvorbis.so, libvorbisenc.so and libvorbisfile.so
Installed Directories: /usr/include/vorbis and /usr/share/doc/libvorbis-1.3.7

#### Short Descriptions

`libvorbis.so` | provides the functions used to read and write sound files

Last updated on

## libvpx-1.10.0

### Introduction to libvpx

This package, from the WebM project, provides the reference implementations of the VP8 Codec, used in most current html5 video, and of the next-generation VP9 Codec.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/webmproject/libvpx/archive/v1.10.0/libvpx-1.10.0.tar.gz

- Download MD5 sum: cded283be38dc0078c3fbe751722efc5

- Download size: 5.1 MB

- Estimated disk space required: 64 MB (add 1.3GB if running tests)

- Estimated build time: 1.5 SBU, add 41 SBU if running tests, including download time

#### libvpx Dependencies

##### Recommended

yasm-1.3.0 or NASM-2.15.05, and Which-2.21 (so configure can find yasm)

##### Optional

cURL-7.78.0 (to download test files) and Doxygen-1.9.2 (to build documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libvpx

### Installation of libvpx

Install libvpx by running the following commands:

    sed -i 's/cp -p/cp/' build/make/Makefile &&

    mkdir libvpx-build            &&
    cd    libvpx-build            &&

    ../configure --prefix=/usr    \
                 --enable-shared  \
                 --disable-static &&
    make

To test the results, issue: LD_LIBRARY_PATH=. make test. The test suite downloads several files as part of its test process.

Now, as the `root` user:

    make install

### Command Explanations

sed ... : This command corrects ownership and permissions of installed files.

mkdir libvpx-build && cd libvpx-build: The libvpx developers recommend building in a dedicated build directory.

`--disable-vp8`: This switch prevents building of VP8 codec support.

`--disable-vp9`: This switch prevents building of VP9 codec support.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--target=generic-gnu`: This switch disables optimizations specific for x86 and x86-64, allowing to build this package without nasm and yasm installed.

LD_LIBRARY_PATH=.: This is needed for the testsuite to use the just built library.

### Contents

Installed Programs: vpxdec and vpxenc
Installed Libraries: libvpx.so
Installed Directories: /usr/include/vpx

#### Short Descriptions

vpxdec | is the WebM Project VP8 and VP9 decoder
vpxenc | is the WebM project VP8 and VP9 encoder
`libvpx.so` | provides functions to use the VP8 and VP9 video codecs

Last updated on

## MLT-7.0.1

### Introduction to MLT

MLT package is the Media Lovin Toolkit. It is an open source multimedia framework, designed and developed for television broadcasting. It provides a toolkit for broadcasters, video editors, media players, transcoders, web streamers and many more types of applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/mltframework/mlt/releases/download/v7.0.1/mlt-7.0.1.tar.gz

- Download MD5 sum: c9cca34e75caee6aa31d42d5e141206b

- Download size: 1.1 MB

- Estimated disk space required: 22 MB

- Estimated build time: 0.1 SBU (Using parallelism=4)

#### MLT Dependencies

##### Required

frei0r-plugins-1.7.0 and Qt-5.15.2

##### Optional

Doxygen-1.9.2, fftw-3.3.9, libexif-0.6.22, SDL-1.2.15, SDL2-2.0.16, JACK, MOVEit, SoX, and vid.stab

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mlt

### Installation of MLT

Install MLT by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -Wno-dev .. &&

    make

This package does not come with a test suite. However a test .mp4 file can be played in a local graphical environment with ./src/melt/melt <filename>.mp4.

### Note

This application uses advanced graphical capabilites. In some cases, firmware for your specific graphics adaptor may be needed. See the section called “Firmware for Video Cards” for more information.

Now, as the `root` user:

    make install

### Contents

Installed Program: melt-7 and melt (symlink to melt-7)
Installed Libraries: libmlt-7.so, libmlt++-7.so, and over twenty plugins
Installed Directories: /usr/include/mlt-7, /usr/include/melt-7/mlt++, /usr/include/melt-7/framework, /usr/lib/mlt-7, /usr/lib/cmake/Mlt7, and /usr/share/mlt-7

#### Short Descriptions

melt | is a test tool for MLT

Last updated on

## Opus-1.3.1

### Introduction to Opus

Opus is a lossy audio compression format developed by the Internet Engineering Task Force (IETF) that is particularly suitable for interactive speech and audio transmission over the Internet. This package provides the Opus development library and headers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz

- Download MD5 sum: d7c07db796d21c9cf1861e0c2b0c0617

- Download size: 1.0 MB

- Estimated disk space required: 26 MB (with tests)

- Estimated build time: 0.8 SBU (with tests)

##### Optional

Doxygen-1.9.2 and texlive-20210325 (or install-tl-unx)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Opus

### Installation of Opus

Install Opus by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/opus-1.3.1 &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libopus.so
Installed Directory: /usr/include/opus and /usr/share/doc/opus-1.3.1

#### Short Descriptions

`libopus.so` | provides the functions used to read and write Opus format

Last updated on

## Pipewire-0.3.34

### Introduction to Pipewire

The pipewire package contains a server and user-space API to handle multimedia pipelines. This includes a universal API to connect to multimedia devices, as well as sharing multimedia files between applications.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/PipeWire/pipewire/archive/0.3.34/pipewire-0.3.34.tar.gz

- Download MD5 sum: 9a9bc32228fc1c181686e64eb6e6af03

- Download size: 1.6 MB

- Estimated disk space required: 63 MB (with tests)

- Estimated build time: 0.5 SBU (Using parallelism=4; with tests)

#### Pipewire Dependencies

##### Required

BlueZ-5.61, FFmpeg-4.4, gstreamer-1.18.4, gst-plugins-base-1.18.4, libva-2.12.0, PulseAudio-15.0, SBC-1.5, SDL2-2.0.16, and v4l-utils-1.20.0

##### Optional

Valgrind-3.17.0, Doxygen-1.9.2 and Graphviz-2.48.0 (for documentation), JACK, ldacBT, libcamera, Vulkan, and xmltoman

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pipewire

### Installation of Pipewire

Install pipewire by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr --buildtype=release .. &&
    ninja

To test the result, issue: ninja test.

Now, as the `root` user:

    ninja install

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Ddocs=true`: This switch enables the generation of HTML documentation. The optional dependencies for documentation need to be installed for this to work.

`-Dman=true`: This switch enables the generation of manual pages. The optional dependencies for documentation need to be installed for this to work.

### Contents

Installed Programs: pipewire, pipewire-media-session, pipewire-pulse, pw-cat, pw-cli, pw-dot, pw-dump, pw-jack, pw-link, pw-loopback, pw-metadata, pw-mididump, pw-mon, pw-profiler, pw-reserve, pw-top, spa-acp-tool, spa-inspect, spa-json-dump, spa-monitor, spa-resample, and pw-midiplay, pw-midirecord, pw-play, and pw-record (symlinks to pw-cat)
Installed Libraries: libpipewire-0.3.so and 30 modules below /usr/lib/pipewire-0.3
Installed Directories: /etc/pipewire, /usr/include/pipewire-0.3, /usr/include/spa-0.2, /usr/lib/alsa-lib, /usr/lib/gstreamer-1.0, /usr/lib/pipewire-0.3, and /usr/lib/spa-0.2

#### Short Descriptions

pipewire | is a service that allows access to multimedia devices and allows sharing of multimedia files between applications
pipewire-media-session | is a service that allows a desktop environment to know when media files are being played through pipewire
pipewire-pulse | starts a Pulseaudio-compatible version of the pipewire service
pw-cat | allows you to play or record media using a pipewire instance
pw-cli | allows you to interact with a pipewire instance
pw-dot | lists all of the daemons and objects in use by pipewire
pw-dump | dumps debug messages from a local or remote pipewire instance to the console
pw-jack | runs JACK applications on a pipewire instance
pw-link | links pipewire ports together
pw-loopback | initializes a loopback link between two different pipewire ports. This is useful for testing and debugging
pw-metadata | inspects, adds, and removes metadata for objects
pw-mididump | dumps MIDI messages from a file to the screen
pw-mon | allows you to monitor pipewire instances
pw-profiler | tracks memory usage and API calls used by pipewire
pw-reserve | reserves or monitors a device via D-Bus
pw-top | displays real-time performance information from pipewire
spa-acp-tool | inspects the card profile of a given sound card
spa-inspect | allows you to inspect pipewire plugins
spa-json-dump | dumps the current pipewire configuration in JSON format.
spa-monitor | allows you to monitor pipewire plugins
spa-resample | resamples a given file
`libpipewire-0.3.so` | contains API functions for handling multimedia pipelines

Last updated on

## PulseAudio-15.0

### Introduction to PulseAudio

PulseAudio is a sound system for POSIX OSes, meaning that it is a proxy for sound applications. It allows you to do advanced operations on your sound data as it passes between your application and your hardware. Things like transferring the audio to a different machine, changing the sample format or channel count and mixing several sounds into one are easily achieved using a sound server.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.freedesktop.org/software/pulseaudio/releases/pulseaudio-15.0.tar.xz

- Download MD5 sum: bb888e7747b778c1c487c63b582ddf40

- Download size: 1.5 MB

- Estimated disk space required: 49 MB (add 1 MB for tests)

- Estimated build time: 0.2 SBU (Using parallelism=4; add 0.2 SBU for tests)

#### PulseAudio Dependencies

##### Required

libsndfile-1.0.31

##### Recommended

alsa-lib-1.2.5.1, dbus-1.12.20, GLib-2.68.4, libcap-2.53 with PAM, Speex-1.2.0 and Xorg Libraries

##### Optional

Avahi-0.8, BlueZ-5.61, Doxygen-1.9.2 (for documentation), fftw-3.3.9, GTK+-3.24.30, libsamplerate-0.2.1, SBC-1.5 (Bluetooth support), Valgrind-3.17.0, JACK, libasyncns, LIRC, ORC, soxr, TDB, and WebRTC AudioProcessing

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pulseaudio

### Installation of PulseAudio

Install PulseAudio by running the following commands:

    mkdir build &&
    cd    build &&

    meson --prefix=/usr       \
          --buildtype=release \
          -Ddatabase=gdbm     \
          -Ddoxygen=false     \
          -Dbluez5=disabled   &&
    ninja

To test the results, issue: ninja test. One test fails if the tests are not run as the root user, but this can be ignored.

Now, as the `root` user:

    ninja install

Running PulseAudio as a system-wide daemon is possible but not recommended. See https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/ for more information. While still as the `root` user, remove the D-Bus configuration file for the system wide daemon to avoid creating unnecessary system users and groups:

    rm -fv /etc/dbus-1/system.d/pulseaudio-system.conf

### Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-Dbluez5=false`: This switch prevents a runtime error if dbus-1.12.20 and SBC-1.5 are both installed but BlueZ-5.61 is not installed. Remove this if you have installed all three packages.

`-Ddoxygen=false`: This allows the package to compile if Doxygen-1.9.2 is not installed. Remove this if you have installed this and wish to build the documentation.

### Configuring PulseAudio

#### Config Files

There are system wide configuration files: `/etc/pulse/daemon.conf`, `/etc/pulse/client.conf`, `/etc/pulse/default.pa`, and user configuration files with the same names in `~/.config/pulse`. User configuration files take precedence over system wide ones.

#### Configuration Information

You may have to configure the audio system. You can start pulseaudio in command line mode using pulseaudio -C and then list various information and change settings. See man pulse-cli-syntax.

If pulseaudio was working but you no-longer have sound, after checking for hardware issues (speakers or headphones not connected, external amplifier not connected) you may need to fix it.

One suggestion is to close the application, such as firefox where sound has stopped working, then run: pactl list short sinks followed by: pacmd set-default-sink <sink #> and then restart the application.

If that does not work, a more drastic approach often works. After closing the application, close pulseaudio, either using pulseaudio --kill or, if that fails, killall -KILL pulseaudio and then rm -rf ~/.config/pulse/* (and perhaps also rm -rf ~/.pulse/* if you have used a very old version of pulse on this machine), then run pulseaudio --verbose to restart it. If the daemon starts, restart the application. See man pulseaudio for more options.

### Contents

Installed Programs: pacat, pacmd, pactl, padsp, pamon (symlink to pacat), paplay (symlink to pacat), parec (symlink to pacat), parecord (symlink to pacat), qpaeq, pasuspender, pax11publish, pulseaudio, and start-pulseaudio-x11
Installed Libraries: libpulse.so, libpulse-mainloop-glib.so, libpulse-simple.so, libpulsecommon-15.0.so, libpulsecore-15.0.so, and libpulsedsp.so
Installed Directories: /etc/pulse, /usr/include/pulse, /usr/lib/cmake/PulseAudio, /usr/lib/{pulseaudio,pulse-15.0}, /usr/libexec/pulse, and /usr/share/pulseaudio

#### Short Descriptions

pacat | plays back or records raw or encoded audio streams on a PulseAudio sound server
pacmd | is a tool used to reconfigure a PulseAudio sound server during runtime
pactl | is used to control a running PulseAudio sound server
padsp | is the PulseAudio OSS Wrapper
pamon | is a symbolic link to pacat
paplay | is used to play audio files on a PulseAudio sound server
parec | is a symbolic link to pacat
parecord | is a symbolic link to pacat
pasuspender | is a tool that can be used to tell a local PulseAudio sound server to temporarily suspend access to the audio devices, to allow other applications to access them directly
pax11publish | is the PulseAudio X11 Credential Utility
pa-info | is a shell script that prints various information relating to the Pulseaudio server currently in use
pulseaudio | is a networked low-latency sound server for Linux
qpaeq | is an equalizer interface for PulseAudio equalizer sinks (Requires fftw-3.3.9 at build time)
start-pulseaudio-x11 | starts PulseAudio and registers it to the X11 session manager

Last updated on

## SBC-1.5

### Introduction to SBC

The SBC is a digital audio encoder and decoder used to transfer data to Bluetooth audio output devices like headphones or loudspeakers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.kernel.org/pub/linux/bluetooth/sbc-1.5.tar.xz

- Download MD5 sum: 6ff244dde9e5e12b26362a47ed91d3f9

- Download size: 260 KB

- Estimated disk space required: 2.7 MB

- Estimated build time: less than 0.1 SBU

#### SBC Dependencies

##### Optional

libsndfile-1.0.31

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sbc

### Installation of SBC

Install SBC by running the following commands:

    ./configure --prefix=/usr --disable-static --disable-tester &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-tester`: This disables the SBC tester. Remove it if you have installed libsndfile-1.0.31.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: sbcdec, sbcenc, and sbcinfo
Installed Library: libsbc.so
Installed Directory: /usr/include/sbc

#### Short Descriptions

sbcdec | is a SBC decoder utility
sbcenc | is a SBC encoder utility
sbcinfo | is a subband codec (SBC) analyzer
`libsbc.so` | contains the SBC API functions

Last updated on

## SDL-1.2.15

### Introduction to SDL

The Simple DirectMedia Layer (SDL for short) is a cross-platform library designed to make it easy to write multimedia software, such as games and emulators.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.libsdl.org/release/SDL-1.2.15.tar.gz

- Download MD5 sum: 9d96df8417572a2afb781a7c4c811a85

- Download size: 3.8 MB

- Estimated disk space required: 40 MB

- Estimated build time: 0.6 SBU

#### SDL Dependencies

##### Recommended

Xorg Libraries (if they are not present, the corresponding modules are not built)

##### Optional

AAlib-1.4rc5, ALSA-1.2.5, GLU-9.0.2, NASM-2.15.05, PulseAudio-15.0, Pth-2.0.7, X Window System, DirectFB, GGI, libcaca, PicoGUI, and SVGAlib

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sdl

### Installation of SDL

Install SDL by running the following commands:

    sed -e '/_XData32/s:register long:register _Xconst long:' \
        -i src/video/x11/SDL_x11sym.h &&

    ./configure --prefix=/usr --disable-static &&

    make

Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/SDL-1.2.15/html &&
    install -v -m644    docs/html/*.html \
                        /usr/share/doc/SDL-1.2.15/html

### Testing SDL

If you wish to, test the installation of SDL using the included test programs. It is not required to install any of the resulting binaries to validate the installation. Issue the following commands to build the test programs:

    cd test &&
    ./configure &&
    make

You'll need to manually run all the test programs (they are listed in the `README` file in this directory). Many of them will need to be manually killed, and you'll need to turn your speakers on with the volume at a suitable level.

### Command Explanations

sed -e ...: This command fixes compilation with libX11-1.6.0 and later.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--disable-alsa-shared`: This switch disables dynamically loading ALSA shared libraries.

`--disable-sdl-dlopen`: This switch disables using dlopen for shared object loading. Loading image backend libraries like libpng dynamically on the fly does not work.

`--disable-x11-shared`: This switch disables dynamically loading X11 shared libraries.

### Configuring SDL

#### Configuration Information

As with most libraries, there is no configuration to do, save that the library directory, i.e., `/opt/lib` or `/usr/local/lib` should appear in `/etc/ld.so.conf` so that ldd can find the shared libraries. After checking that this is the case, /sbin/ldconfig should be run while logged in as `root`.

### Contents

Installed Program: sdl-config
Installed Libraries: libSDL.so and libSDLmain.a
Installed Directories: /usr/include/SDL and /usr/share/doc/SDL-1.2.15

#### Short Descriptions

sdl-config | determines the compile and linker flags that should be used to compile and link programs that use `libSDL`
`libSDL.so` | contains functions that provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D frame buffer across multiple platforms

Last updated on

## SDL2-2.0.16

### Introduction to SDL2

The Simple DirectMedia Layer Version 2 (SDL2 for short) is a cross-platform library designed to make it easy to write multimedia software, such as games and emulators.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.libsdl.org/release/SDL2-2.0.16.tar.gz

- Download MD5 sum: 98b8a1535a757ea1d03ae44e2fb20247

- Download size: 6.9 MB

- Estimated disk space required: 132 MB (with docs)

- Estimated build time: 0.4 SBU (using parallelism=4; with docs)

#### Additional Downloads

- Required patch (for i686 systems): https://www.linuxfromscratch.org/patches/blfs/11.0/SDL2-2.0.16-opengl_include_fix-1.patch

#### SDL2 Dependencies

##### Recommended

libxkbcommon-1.3.0, wayland-protocols-1.21, and Xorg Libraries (if those are not present, the corresponding modules are not built)

##### Optional

ALSA-1.2.5, Doxygen-1.9.2 (to create documentation), ibus-1.5.25, NASM-2.15.05, PulseAudio-15.0, libsamplerate-0.2.1, X Window System, DirectFB, and fcitx

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sdl

### Installation of SDL2

First, if you are building on a 32-bit i686 system, apply a patch containing a fix for the OpenGL headers and their data types:

    case $(uname -m) in
       i?86) patch -Np1 -i ../SDL2-2.0.16-opengl_include_fix-1.patch ;;
    esac

Install SDL2 by running the following commands:

    ./configure --prefix=/usr &&
    make

If you have Doxygen-1.9.2 installed and want to build the html documentation, run the following commands:

    pushd docs  &&
      doxygen   &&
    popd

### Note

If you wish to build and run the package regression tests, do not delete the static libraries below until after the tests are built.

Now, as the `root` user:

    make install              &&
    rm -v /usr/lib/libSDL2*.a

If you built the documentation, install it as the `root` user:

    install -v -m755 -d        /usr/share/doc/SDL2-2.0.16/html &&
    cp -Rv  docs/output/html/* /usr/share/doc/SDL2-2.0.16/html

### Command Explanations

rm -v /usr/lib/libSDL2*.a: Normally static libraries can be disabled with a `--disable-static` option to configure, but that breaks the build in this package.

`--disable-alsa-shared`: This switch disables dynamically loading ALSA shared libraries.

`--disable-sdl-dlopen`: This switch disables using dlopen for shared object loading. Loading image backend libraries like libpng dynamically on the fly does not work.

`--disable-x11-shared`: This switch disables dynamically loading X11 shared libraries.

### Configuring SDL2

#### Configuration Information

As with most libraries, there is no configuration to do, save that the library directory, i.e., `/opt/lib` or `/usr/local/lib` should appear in `/etc/ld.so.conf` so that ldd can find the shared libraries. After checking that this is the case, /sbin/ldconfig should be run while logged in as `root`.

### Contents

Installed Program: sdl2-config
Installed Libraries: libSDL2.so
Installed Directories: /usr/include/SDL2 and /usr/share/doc/SDL-2.0.16

#### Short Descriptions

sdl2-config | determines the compile and linker flags that should be used to compile and link programs that use `libSDL2`
`libSDL2.so` | contains functions that provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D frame buffer across multiple platforms

Last updated on

## sound-theme-freedesktop-0.8

### Introduction to Sound Theme Freedesktop

The Sound Theme Freedesktop package contains sound themes for the desktop.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://people.freedesktop.org/~mccann/dist/sound-theme-freedesktop-0.8.tar.bz2

- Download MD5 sum: d7387912cfd275282d1ec94483cb2f62

- Download size: 472 KB

- Estimated disk space required: 2 MB

- Estimated build time: less than 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sound-theme-freedesktop

### Installation of Sound Theme Freedesktop

Install Sound Theme Freedesktop 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

### Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/sounds/freedesktop

Last updated on

## SoundTouch-2.3.0

### Introduction to SoundTouch

The SoundTouch package contains an open-source audio processing library that allows changing the sound tempo, pitch and playback rate parameters independently from each other.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://gitlab.com/soundtouch/soundtouch/-/archive/2.3.0/soundtouch-2.3.0.tar.bz2

- Download MD5 sum: 628ef4723f09bba19fb87d7c0af8c8b6

- Download size: 520 KB

- Estimated disk space required: 6.8 MB

- Estimated build time: 0.1 SBU

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/soundtouch

### Installation of SoundTouch

Install SoundTouch by running the following commands:

### Caution

The bootstrap 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.

    ./bootstrap &&
    ./configure --prefix=/usr \
                --docdir=/usr/share/doc/soundtouch-2.3.0 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-openmp`: This switch adds support for running the algorithms in parallel across several processor cores using OpenMP implementation provided by GCC.

### Contents

Installed Program: soundstretch
Installed Library: libSoundTouch.so
Installed Directories: /usr/include/soundtouch and /usr/share/doc/soundtouch-2.3.0

#### Short Descriptions

soundstretch | is a program for processing WAV audio files by modifying sound tempo, pitch and playback rate properties independently from each other
`libSoundTouch.so` | contains SoundTouch API functions

Last updated on

## Speex-1.2.0

### Introduction to Speex

Speex is an audio compression format designed especially for speech. It is well-adapted to internet applications and provides useful features that are not present in most other CODECs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/speex/speex-1.2.0.tar.gz

- Download MD5 sum: 8ab7bb2589110dfaf0ed7fa7757dc49c

- Download size: 884 KB

- Estimated disk space required: 4.5 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Download (HTTP): https://downloads.xiph.org/releases/speex/speexdsp-1.2.0.tar.gz

- Download MD5 sum: b722df341576dc185d897131321008fc

- Download size: 900 KB

- Estimated disk space required: 5.2 MB

- Estimated build time: less than 0.1 SBU

#### Speex Dependencies

##### Required

libogg-1.3.5

##### Optional

Valgrind-3.17.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/speex

### Installation of Speex

This package consists of two separate tarballs. They need to be extracted and built independently.

Install Speex by running the following commands:

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/speex-1.2.0 &&
    make

This package does not come with a test suite.

As the `root` user:

    make install

Now extract and install the speexdsp package:

    cd ..                          &&
    tar -xf speexdsp-1.2.0.tar.gz &&
    cd speexdsp-1.2.0             &&

    ./configure --prefix=/usr    \
                --disable-static \
                --docdir=/usr/share/doc/speexdsp-1.2.0 &&
    make

Again, as the `root` user:

    make install

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-binaries`: Builds two binaries to encode and decode to and from the speex format.

### Contents

Installed Programs: (optional) speexenc and speexdec
Installed Libraries: libspeex.so and libspeexdsp.so
Installed Directories: /usr/include/speex and /usr/share/doc/speex-1.2.0

#### Short Descriptions

speexdec | decodes a Speex file and produces a WAV or raw file
speexenc | encodes a WAV or raw files using Speex
`libspeex.so` | provides functions for the audio encoding/decoding programs
`libspeexdsp.so` | is a speech processing library that goes along with the Speex codec

Last updated on

## Taglib-1.12

### Introduction to Taglib

Taglib is a library used for reading, writing and manipulating audio file tags and is used by applications such as Amarok and VLC.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://taglib.github.io/releases/taglib-1.12.tar.gz

- Download MD5 sum: 4313ed2671234e029b7af8f97c84e9af

- Download size: 1.3 MB

- Estimated disk space required: 13 MB

- Estimated build time: 0.3 SBU

#### Taglib Dependencies

##### Required

CMake-3.21.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/taglib

### Installation of Taglib

Install Taglib by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DCMAKE_BUILD_TYPE=Release  \
          -DBUILD_SHARED_LIBS=ON \
          .. &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Programs: taglib-config
Installed Libraries: libtag.so and libtag_c.so
Installed Directories: /usr/include/taglib

#### Short Descriptions

taglib-config | is a tool used to print information about the taglib installation

Last updated on

## v4l-utils-1.20.0

### Introduction to v4l-utils

v4l-utils provides a series of utilities for media devices, allowing to handle the proprietary formats available at most webcams (libv4l), and providing tools to test V4L devices.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.linuxtv.org/downloads/v4l-utils/v4l-utils-1.20.0.tar.bz2

- Download MD5 sum: 46f9e2c0b2fdccd009da2f7e1aa87894

- Download size: 1.9 MB

- Estimated disk space required: 97 MB

- Estimated build time: 0.5 SBU (using parallelism=4)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/v4l-utils-1.20.0-upstream_fixes-1.patch

#### v4l-utils Dependencies

##### Required

LLVM-12.0.1 (with target BPF)

##### Recommended

alsa-lib-1.2.5.1, GLU-9.0.2, libjpeg-turbo-2.1.1, and Qt-5.15.2

##### Optional

Doxygen-1.9.2 and SDL2-2.0.16

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/v4l-utils

### Installation of v4l-utils

First, apply a patch to fix building with GCC-11.1 if Qt-5.15.2 is installed:

    patch -Np1 -i ../v4l-utils-1.20.0-upstream_fixes-1.patch

Install v4l-utils by running the following commands:

    ./configure --prefix=/usr     \
                --sysconfdir=/etc \
                --disable-static  &&
    make

This package does not come with a testsuite.

Now, as the `root` user:

    make -j1 install

### Contents

Installed Programs: cec-compliance, cec-ctl, cec-follower, cx18-ctl, decode_tm6000, dvb-fe-tool, dvb-format-convert, dvbv5-daemon, dvbv5-scan, dvbv5-zap, ir-ctl, ir-keytable, ivtv-ctl, media-ctl, qv4l2, qvidcap, rds-ctl, v4l2-compliance, v4l2-ctl, v4l2-dbg, and v4l2-sysfs-path
Installed Library: libdvbv5.so, libv4l1.so, libv4l2.so, libv4l2rds.so, libv4lconvert.so, v4l1compat.so, and v4l2convert.so
Installed Directories: /etc/rc_keymaps, /lib/udev/rc_keymaps, /usr/include/libdvbv5, and /usr/lib/libv4l

#### Short Descriptions

cx18-ctl | is a tool to handle cx18 based devices
decode_tm6000 | decodes multiplexed formats from TM5600/TM6000 USB devices
dvb-fe-tool | is a command line tool for digital TV services
dvb-format-convert | is a tool meant to convert among different file formats. It is compliant with version 5 of the DVB API
dvbv5-scan | is a command line frequency scanning tool for digital TV services that are compliant with version 5 of the DVB API
dvbv5-zap | is a command line tuning tool for digital TV services that is compliant with version 5 of the DVB API
ir-keytable | is a tool that lists the Remote Controller devices, allows one to get/set IR keycode/scancode tables, test events generated by IR, and to adjust other Remote Controller options
ivtv-ctl | is a utility that can control many card settings, like changing the inputs from tuner to svideo or composite, setting video resolution or changing video mode (PAL, SECAM, NTSC)
media-ctl | is a utility used to configure V4L2 devices
qv4l2 | is used to test video4linux capture devices
qvidcap | is used to capture video from a V4L2 device
rds-ctl | is a utility for decoding raw RDS data from V4L2 Radio devices and offers simple ways to access the received RDS information
v4l2-compliance | is a compliance test tool
v4l2-ctl | is a tool to control v4l2 controls from the cmdline
v4l2-dbg | is a tool to directly get and set registers of v4l2 devices
v4l2-sysfs-path | checks the media devices installed on a machine and the corresponding device nodes

Last updated on

## x264-20210814

### Introduction to x264

x264 package provides a library for encoding video streams into the H.264/MPEG-4 AVC format.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/x264/x264-20210814.tar.xz

- Download MD5 sum: e6dcb0f124af8d6841f307bdbba18aa3

- Download size: 668 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.3 SBU (Using parallelism=4)

#### x264 Dependencies

##### Recommended

NASM-2.15.05

##### Optional

ffms2, gpac or liblsmash

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/x264

### Installation of x264

Install x264 by running the following commands:

    ./configure --prefix=/usr \
                --enable-shared \
                --disable-cli &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--disable-cli`: This switch disables building the command-line encoder which is redundant since it requires FFmpeg for most of the input formats.

`--disable-asm`: Use this switch if you didn't install NASM.

### Contents

Installed Programs: None
Installed Library: libx264.so
Installed Directory: None

#### Short Descriptions

`libx264.so` | provides the functions used to encode video streams into the H.264/MPEG-4 AVC format

Last updated on

## x265-3.4

### Introduction to x265

x265 package provides a library for encoding video streams into the H.265/HEVC format.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/x265/x265_3.4.tar.gz

- Download MD5 sum: e37b91c1c114f8815a3f46f039fe79b5

- Download size: 1.4 MB

- Estimated disk space required: 35 MB

- Estimated build time: 0.9 SBU (using parallelism=4)

#### x265 Dependencies

##### Required

CMake-3.21.2

##### Recommended

NASM-2.15.05

##### Optional

numactl

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/x265

### Installation of x265

Install x265 by running the following commands:

    mkdir bld &&
    cd    bld &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr ../source &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    rm -vf /usr/lib/libx265.a

### Command Explanations

rm -vf /usr/lib/libx265.a: BLFS does not recommend using static libraries.

### Contents

Installed Program: x265
Installed Library: libx265.so
Installed Directories: None

#### Short Descriptions

`libx265.so` | provides the functions used to encode video streams into the H.265/HEVC format

Last updated on

## xine-lib-1.2.11

### Introduction to Xine Libraries

The Xine Libraries package contains xine libraries. These are useful for interfacing with external plug-ins that allow the flow of information from the source to the audio and video hardware.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/xine/xine-lib-1.2.11.tar.xz

- Download (FTP): ftp://ftp.mirrorservice.org/sites/distfiles.gentoo.org/distfiles/xine-lib-1.2.11.tar.xz

- Download MD5 sum: 417ee1737db4aed150a562a568b0a13b

- Download size: 5.0 MB

- Estimated disk space required: 101 MB (wtih API documentation)

- Estimated build time: 0.5 SBU (Using parallelism=4; with API documentation)

#### Xine Libraries Dependencies

##### Required

X Window System, FFmpeg-4.4, and at least one of: ALSA-1.2.5, PulseAudio-15.0, or JACK

##### Recommended

libdvdnav-6.1.1

##### Optional

AAlib-1.4rc5, FAAD2-2_10_0, FLAC-1.3.3, gdk-pixbuf-2.42.6, GLU-9.0.2, ImageMagick-7.1.0-4, liba52-0.7.4, libdvdcss-1.4.3, libmad-0.15.1b, libmng-2.0.3, libtheora-1.1.1, libva-2.12.0 (requires GLU-9.0.2), libvdpau-1.4, libvorbis-1.3.7, libvpx-1.10.0, Mesa-21.2.1, Samba-4.14.7, SDL-1.2.15, Speex-1.2.0, Doxygen-1.9.2 (to create the API documentation), v4l-utils-1.20.0 DirectFB, libbluray, libcaca, libdca, libFAME, libmodplug, musepack, VCDImager, and WavPack,

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xine-lib

### Installation of Xine Libraries

Install Xine Libraries by running the following commands:

    ./configure --prefix=/usr          \
                --disable-vcd          \
                --with-external-dvdnav \
                --docdir=/usr/share/doc/xine-lib-1.2.11 &&
    make

To create the API documentation, Doxygen must be installed and issue the following command:

    doxygen doc/Doxyfile

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Note

When installing, the Makefile does some additional linking. If you do not have Xorg in /usr, the LIBRARY_PATH variable needs to be defined for the root user. If using sudo to assume root, use the -E option to pass your current environment variables for the install process.

If you built the API documentation, issue the following commands as the `root` user to install it:

    install -v -m755 -d /usr/share/doc/xine-lib-1.2.11/api &&
    install -v -m644    doc/api/* \
                        /usr/share/doc/xine-lib-1.2.11/api

### Command Explanations

`--disable-vcd`: This switch is required to compile Xine Lib without VCDImager installed. Remove this option if you have installed VCDImager.

`--with-external-dvdnav`: This switch is required, because internal libraries cannot decrypt DVD.

`--docdir=/usr/share/doc/xine-lib-1.2.11`: This switch causes the documentation to be installed into a versioned directory instead of the default `/usr/share/doc/xine-lib`.

`--disable-vaapi`: use this switch if libva-2.12.0 is installed and GLU-9.0.2 is not, to prevent a build failure.

### Contents

Installed Programs: xine-config and xine-list-1.2
Installed Libraries: libxine.so and numerous plugin modules and video extensions under /usr/lib/xine/plugins/2.8
Installed Fonts: Output display engine fonts located in /usr/share/xine-lib/fonts
Installed Directories: /usr/include/xine, /usr/lib/xine, /usr/share/xine-lib, and /usr/share/doc/xine-lib-1.2.11

#### Short Descriptions

xine-config | provides information to programs trying to link with the xine libraries
xine-list-1.2 | is used to get supported filetype information from xine-lib
`libxine.so` | provides the API for processing audio/video files

Last updated on

## XviD-1.3.7

### Introduction to XviD

XviD is an MPEG-4 compliant video CODEC.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz

- Download MD5 sum: 5c6c19324608ac491485dbb27d4da517

- Download size: 804 KB

- Estimated disk space required: 7.1 MB

- Estimated build time: 0.1 SBU

#### XviD Dependencies

##### Optional

yasm-1.3.0 or NASM-2.15.05

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xvid

### Installation of XviD

### Note

This package tarball expands to `xvidcore`, not the expected `xvidcore-1.3.7`.

Install XviD by running the following commands:

    cd build/generic &&
    sed -i 's/^LN_S=@LN_S@/& -f -v/' platform.inc.in &&
    ./configure --prefix=/usr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    sed -i '/libdir.*STATIC_LIB/ s/^/#/' Makefile &&
    make install &&

    chmod -v 755 /usr/lib/libxvidcore.so.4.3 &&
    install -v -m755 -d /usr/share/doc/xvidcore-1.3.7/examples &&
    install -v -m644 ../../doc/* /usr/share/doc/xvidcore-1.3.7 &&
    install -v -m644 ../../examples/* \
        /usr/share/doc/xvidcore-1.3.7/examples

### Command Explanations

sed -i 's/^LN_S=@LN_S@/& -f -v/' platform.inc.in: Fix error during make install if reintalling or upgrading.

sed -i '/libdir.*STATIC_LIB/ s/^/#/' Makefile: This command disables installing the static library.

### Contents

Installed Programs: None
Installed Library: libxvidcore.so
Installed Directory: /usr/share/doc/xvidcore-1.3.7

#### Short Descriptions

`libxvidcore.so` | provides functions to encode and decode most MPEG-4 video data

Last updated on

## Chapter 43. Audio Utilities

This chapter contains programs involved with audio file manipulation; that is to say playing, recording, ripping and the other common things which people want to do. It also includes a package used to render text to speech using your system's audio hardware. To use much of this software, you will need to have the kernel sound drivers installed.

## Audacious-4.1

### Introduction to Audacious

Audacious is an audio player.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://distfiles.audacious-media-player.org/audacious-4.1.tar.bz2

- Download MD5 sum: 22fbe28b073682d55ee87698f283e195

- Download size: 576 KB

- Estimated disk space required: 72 MB (with Qt user interface)

- Estimated build time: 0.7 SBU (with Qt user interface)

#### Additional Downloads

Required Plugins

- Download (HTTP): https://distfiles.audacious-media-player.org/audacious-plugins-4.1.tar.bz2

- Download MD5 sum: 740d83757b49b82bc75e256c96b09bfd

- Download size: 1.7 MB

- Estimated disk space required: 157 MB (with Qt user interface)

- Estimated build time: 1.5 SBU (with Qt user interface)

#### Audacious Dependencies

##### Required

GTK+-2.24.33 or Qt-5.15.2 (or both), libxml2-2.9.12 (plugins), Xorg build environment (plugins), and X Window System (runtime)

##### Recommended

ALSA-1.2.5 and dbus-1.12.20, also gnome-icon-theme-3.12.0 (runtime)

##### Optional

libarchive-3.5.2 and Valgrind-3.17.0

##### Recommended (for Plugins)

mpg123-1.28.2 and neon-0.31.2 (for online mpg3 and ogg radio)

##### Optional (for Plugins)

cURL-7.78.0, FAAD2-2_10_0, FFmpeg-4.4, FLAC-1.3.3, LAME-3.100, libcdio-2.1.0 (to identify and play CDs), libnotify-0.7.9, libsamplerate-0.2.1, libsndfile-1.0.31, libvorbis-1.3.7, PulseAudio-15.0, SDL-1.2.15, ampache-browser, adplug, The Bauer stereophonic-to-binaural DSP (bs2b) library, FluidSynth, JACK (requires libsamplerate-0.2.1), libcue, libmodplug, libmms, libopenmpt, libsidplayfp, LIRC, sndio, SoX, and WavPack

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/audacious

### Installation of Audacious

#### Installation of the Main Audacious Program

Install Audacious by running the following commands (you may wish to change the stamp to another string):

    TPUT=/bin/true ./configure --prefix=/usr \
                               --with-buildstamp="BLFS" &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

#### Installation of Audacious Plugins

Install the required plugins package by issuing the following commands:

    tar -xf ../audacious-plugins-4.1.tar.bz2                &&
    cd audacious-plugins-4.1                                &&
    TPUT=/bin/true ./configure --prefix=/usr --disable-wavpack &&
    make

Now, as the `root` user:

    make install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`TPUT=/bin/true`: the default is for make to output text in color. This is fine if you are building in a terminal, but if you script the build process and pipe the output from make to a log file then the control characters used to color the text can make the logfile unreadable. This option prevents make from coloring the text.

`--with-buildstamp`: This switch appends the given text to the version string.

`--disable-wavpack`: This switch is required unless the optional WavPack package is installed.

`--enable-gtk`: Use this to enable GTK+ support.

`--disable-qt`: Use this to disable qt support.

`--disable-mp3`: Use this for the plugins if you have not installed mpg123 and do not wish to play mp3 files.

`--enable-valgrind`: Allow better Valgrind leak checks.

`--disable-neon`: Use this for the plugins if you have not installed neon, and do not want to use HTTP/HTTPS transport.

### Configuring Audacious

If you prefer the old, smaller Winamp/XMMS interface, click on View> Interface> Winamp Classic Interface.

If you built with both Gtk and Qt user interfaces, the Qt version can be executed from a terminal, issuing audacious --qt. If you wish a desktop menu entry to execute this Qt version, issue the following commands as the `root` user:

    cp -v /usr/share/applications/audacious{,-qt}.desktop &&

    sed -e '/^Name/ s/$/ Qt/' \
        -e '/Exec=/ s/audacious/& --qt/' \
        -i /usr/share/applications/audacious-qt.desktop

### Contents

Installed Programs: audacious and audtool
Installed Libraries: libaudcore.so, libaudgui.so, libaudqt.so, libaudtag.so, and several plugin libraries under /usr/lib/audacious/ sub-directories
Installed Directories: /usr/include/{audacious,libaudcore,libaudgui,libaudqt}, /usr/lib/audacious and /usr/share/audacious

#### Short Descriptions

audacious | is a Qt port of XMMS based on the Beep Media Player
audtool | is a small tool to modify the behavior of a running audacious instance

Last updated on

## CDParanoia-III-10.2

### Introduction to CDParanoia

The CDParanoia package contains a CD audio extraction tool. This is useful for extracting `.wav` files from audio CDs. A CDDA capable CDROM drive is needed. Practically all drives supported by Linux can be used.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-10.2.src.tgz

- Download MD5 sum: b304bbe8ab63373924a744eac9ebc652

- Download size: 179 KB

- Estimated disk space required: 2.9 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/cdparanoia-III-10.2-gcc_fixes-1.patch

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cdparanoia

### Installation of CDParanoia

### Note

This package does not support parallel build.

Install CDParanoia by running the following commands:

    patch -Np1 -i ../cdparanoia-III-10.2-gcc_fixes-1.patch &&
    ./configure --prefix=/usr --mandir=/usr/share/man &&
    make -j1

This package does not come with a test suite.

Now, as the `root` user:

    make install &&
    chmod -v 755 /usr/lib/libcdda_*.so.0.10.2

### Contents

Installed Program: cdparanoia
Installed Libraries: libcdda_interface.{so,a} and libcdda_paranoia.{so,a}
Installed Directories: None

#### Short Descriptions

cdparanoia | is used for 'ripping' an audio-cd. Ripping is the process of digitally extracting music from an audio CD
`libcdda_interface.{so,a}` | contains functions used by cdparanoia, as well as other packages, which can automatically identify if a CD device is CDDA compatible
`libcdda_paranoia.{so,a}` | contains functions used by cdparanoia, as well as other packages, which provide data verification, synchronization, error handling and scratch reconstruction capability

Last updated on

## kwave-21.08.0

### Introduction to KWave

The KWave package contains a KF5 based Sound Editor application.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.kde.org/stable/release-service/21.08.0/src/kwave-21.08.0.tar.xz

- Download MD5 sum: 209c5d97cc34b79c284dbced10e250df

- Download size: 6.6 MB

- Estimated disk space required: 69 MB

- Estimated build time: 0.9 SBU (using parallelism=4)

#### KWave Dependencies

##### Required

AudioFile-0.3.6, fftw-3.3.9, id3lib-3.8.3, and KDE Frameworks-5.85.0

##### Recommended

alsa-lib-1.2.5.1, FLAC-1.3.3, libogg-1.3.5, and PulseAudio-15.0

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kwave

### Installation of KWave

Install KWave 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

### Contents

Installed Programs: kwave
Installed Libraries: libkwave.so, libkwavegui.so, and 29 plugins
Installed Directories: $KF5_PREFIX/lib/plugins/kwave, $KF5_PREFIX/share/kwave, $KF5_PREFIX/share/doc/HTML/*/kwave

#### Short Descriptions

kwave | is a sound editor built on the KDE Frameworks 5

Last updated on

## LAME-3.100

### Introduction to LAME

The LAME package contains an MP3 encoder and optionally, an MP3 frame analyzer. This is useful for creating and analyzing compressed audio files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/lame/lame-3.100.tar.gz

- Download MD5 sum: 83e260acbe4389b54fe08e0bdbf7cddb

- Download size: 1.5 MB

- Estimated disk space required: 9.7 MB

- Estimated build time: 0.1 SBU

#### LAME Dependencies

##### Optional

Dmalloc, Electric Fence, libsndfile-1.0.31 and NASM-2.15.05

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lame

### Installation of LAME

Install LAME by running the following commands:

    ./configure --prefix=/usr --enable-mp3rtp --disable-static &&
    make

To test the results, issue: make test.

Now, as the `root` user:

    make pkghtmldir=/usr/share/doc/lame-3.100 install

### Command Explanations

`--enable-mp3rtp`: This switch enables building the encode-to-RTP program.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-nasm`: Enable the use of NASM-2.15.05 to compile optimized assembly routines.

### Contents

Installed Programs: lame and mp3rtp
Installed Library: libmp3lame.so
Installed Directories: /usr/include/lame and /usr/share/doc/lame-3.100

#### Short Descriptions

lame | creates MP3 audio files from raw PCM or `.wav` data
mp3rtp | is used to encode MP3 with RTP streaming of the output
`libmp3lame.so` | libraries provide the functions necessary to convert raw PCM and WAV files to MP3 files

Last updated on

## mpg123-1.28.2

### Introduction to mpg123

The mpg123 package contains a console-based MP3 player. It claims to be the fastest MP3 decoder for Unix.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/mpg123/mpg123-1.28.2.tar.bz2

- Download MD5 sum: e4fce200d8072e6cfdeb1ec4c98655a0

- Download size: 1.0 MB

- Estimated disk space required: 15 MB

- Estimated build time: 0.2 SBU

#### mpg123 Dependencies

##### Recommended

alsa-lib-1.2.5.1

##### Optional

PulseAudio-15.0, SDL-1.2.15, JACK, OpenAL and PortAudio

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mpg123

### Installation of mpg123

Install mpg123 by running the following commands:

    ./configure --prefix=/usr &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Contents

Installed Programs: mpg123, mpg123-id3dump, mpg123-strip, and out123
Installed Libraries: libmpg123.so and libout123.so
Installed Directory: /usr/lib/mpg123

#### Short Descriptions

mpg123 | is used for playing MP3 files via the console
mpg123-id3dump | is a tool to dump ID3 meta data from MPEG audio files using libmpg123
mpg123-strip | extracts only MPEG frames from a stream using libmpg123 (stdin to stdout)
out123 | plays raw PCM audio to an output device
`libmpg123.so` | contains the mpg123 API functions
`libout123.so` | contains the out123 API functions

Last updated on

## pavucontrol-5.0

### Introduction to pavucontrol

PulseAudio Volume Control (pavucontrol) is a simple GTK based volume control tool ("mixer") for the PulseAudio sound server. In contrast to classic mixer tools, this one allows you to control both the volume of hardware devices and of each playback stream separately.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://freedesktop.org/software/pulseaudio/pavucontrol/pavucontrol-5.0.tar.xz

- Download MD5 sum: a4a5dc51dcf4d912443faf3fe8d32b55

- Download size: 192 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.3 SBU

#### pavucontrol Dependencies

##### Required

Gtkmm-3.24.5, libcanberra-0.30, libsigc++-2.10.7, and PulseAudio-15.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pavucontrol

### Installation of pavucontrol

Install pavucontrol by running the following commands:

    ./configure --prefix=/usr --docdir=/usr/share/doc/pavucontrol-5.0 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Program: pavucontrol
Installed Libraries: None
Installed Directory: /usr/share/pavucontrol and /usr/share/doc/pavucontrol-4.0

#### Short Descriptions

pavucontrol | is a GUI configuration tool for sound settings using pulsaudio

Last updated on

## pnmixer-0.7.2

### Introduction to Pnmixer

The Pnmixer package provides a lightweight volume control with a tray icon.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/nicklan/pnmixer/releases/download/v0.7.2/pnmixer-v0.7.2.tar.gz

- Download MD5 sum: e9f17f56c50de39393030a96e343427b

- Download size: 236 KB

- Estimated disk space required: 2.5 MB

- Estimated build time: less than 0.1 SBU

#### Pnmixer Dependencies

##### Required

alsa-utils-1.2.5.1, GTK+-3.24.30, and libnotify-0.7.9

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pnmixer

### Installation of Pnmixer

Install Pnmixer by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -DCMAKE_INSTALL_PREFIX=/usr ..  &&
    make

This package does not have a testsuite.

Now, as the `root` user:

    make install

### Contents

Installed Program: pnmixer
Installed Libraries: None
Installed Directories: /usr/share/pnmixer

#### Short Descriptions

pnmixer | is a lightweight volume control that sits in a tray

Last updated on

## vorbis-tools-1.4.2

### Introduction to Vorbis Tools

The Vorbis Tools package contains command-line tools useful for encoding, playing or editing files using the Ogg CODEC.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.xiph.org/releases/vorbis/vorbis-tools-1.4.2.tar.gz

- Download MD5 sum: 998fca293bd4e4bdc2b96fb70f952f4e

- Download size: 1.3 MB

- Estimated disk space required: 12 MB

- Estimated build time: 0.1 SBU

#### Vorbis Tools Dependencies

##### Required

libvorbis-1.3.7

##### Optional (required to build the ogg123 program)

libao-1.2.0

##### Optional

cURL-7.78.0, FLAC-1.3.3, Speex-1.2.0, and libkate

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vorbistools

### Installation of Vorbis Tools

Install Vorbis Tools by running the following commands:

    ./configure --prefix=/usr \
                --enable-vcut \
                --without-curl &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

`--enable-vcut`: This parameter is used so that the vcut program is built as it is not by default.

`--without-curl`: This parameter disables HTTP streaming in ogg123. Remove this parameter if you have cURL installed.

### Configuring Vorbis Tools

#### Config Files

`/etc/libao.conf`, `~/.libao` and `~/.ogg123rc`

#### Configuration Information

Issue man libao.conf for information about setting the default output device. Also see `/usr/share/doc/vorbis-tools-1.4.2/ogg123rc-example` .

### Contents

Installed Programs: ogg123, oggdec, oggenc, ogginfo, vcut and vorbiscomment
Installed Libraries: None
Installed Directory: /usr/share/doc/vorbis-tools-1.4.2

#### Short Descriptions

ogg123 | is a command-line audio player for Ogg Vorbis streams
oggdec | is a simple decoder which converts Ogg Vorbis files into PCM audio files (WAV or raw)
oggenc | is an encoder that turns raw, WAV or AIFF files into an Ogg Vorbis stream
ogginfo | prints information stored in an audio file
vcut | splits a file into two files at a designated cut point
vorbiscomment | is an editor that changes information in the audio file metadata tags

Last updated on

## Chapter 44. Video Utilities

This chapter always seems to be the favorite chapter. It's probably because there is a lot of satisfaction in playing your first video when you have spent so much time getting to that point. All those libraries, all the configurations and your reward is that you finally get to watch a movie. Not to worry though, there is always one more CODEC to install.

## FFmpeg-4.4

### Introduction to FFmpeg

FFmpeg is a solution to record, convert and stream audio and video. It is a very fast video and audio converter and it can also acquire from a live audio/video source. Designed to be intuitive, the command-line interface (ffmpeg) tries to figure out all the parameters, when possible. FFmpeg can also convert from any sample rate to any other, and resize video on the fly with a high quality polyphase filter. FFmpeg can use a Video4Linux compatible video source and any Open Sound System audio source.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://ffmpeg.org/releases/ffmpeg-4.4.tar.xz

- Download MD5 sum: 7b9d5b652d20e8c5405304ad72636d4a

- Download size: 9.2 MB

- Estimated disk space required: 176 MB (add 2.4 GB for the FATE suite/tests, add 1.4 GB for documentation)

- Estimated build time: 1.3 SBU (using parallelism=4; add 3.6 SBU (with THREADS=4) to run the FATE suite after sample files are downloaded; add 0.7 SBU for doxygen docs)

#### FFmpeg Dependencies

##### Recommended

libass-0.15.1, fdk-aac-2.0.2, FreeType-2.11.0, LAME-3.100, libtheora-1.1.1, libvorbis-1.3.7, libvpx-1.10.0, Opus-1.3.1, x264-20210814, x265-3.4, and NASM-2.15.05 or yasm-1.3.0

##### Recommended for desktop use

alsa-lib-1.2.5.1, libva-2.12.0, libvdpau-1.4 (with the corresponding driver package), and SDL2-2.0.16

##### Optional

Doxygen-1.9.2, Fontconfig-2.13.1, FriBidi-1.0.9, frei0r-plugins-1.7.0, libcdio-2.1.0 (to identify and play CDs), libdrm-2.4.107 (for “kmsgrab” input), libwebp-1.2.1, opencv-4.5.3, OpenJPEG-2.4.0, GnuTLS-3.7.2, PulseAudio-15.0, Samba-4.14.7, Speex-1.2.0, texlive-20210325 (or install-tl-unx) for PDF and PS documentation, v4l-utils-1.20.0, XviD-1.3.7, X Window System, Flite, GSM, libaacplus, libbluray, libcaca, libcelt, libdc1394, libdca, libiec61883, libilbc, libmodplug, libnut (Git checkout), librtmp, libssh, OpenAL, OpenCore AMR, Schroedinger, TwoLAME, vo-aaenc, vo-amrwbenc, and ZVBI

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ffmpeg

### Installation of FFmpeg

Install FFmpeg by running the following commands:

    sed -i 's/-lflite"/-lflite -lasound"/' configure &&

    ./configure --prefix=/usr        \
                --enable-gpl         \
                --enable-version3    \
                --enable-nonfree     \
                --disable-static     \
                --enable-shared      \
                --disable-debug      \
                --enable-avresample  \
                --enable-libass      \
                --enable-libfdk-aac  \
                --enable-libfreetype \
                --enable-libmp3lame  \
                --enable-libopus     \
                --enable-libtheora   \
                --enable-libvorbis   \
                --enable-libvpx      \
                --enable-libx264     \
                --enable-libx265     \
                --enable-openssl     \
                --docdir=/usr/share/doc/ffmpeg-4.4 &&

    make &&

    gcc tools/qt-faststart.c -o tools/qt-faststart

HTML documentation was built in the previous step. If you have texlive-20210325 installed and wish to build PDF and Postscript versions of the documentation, issue the following commands:

    pushd doc &&
    for DOCNAME in `basename -s .html *.html`
    do
        texi2pdf -b $DOCNAME.texi &&
        texi2dvi -b $DOCNAME.texi &&

        dvips    -o $DOCNAME.ps   \
                    $DOCNAME.dvi
    done &&
    popd &&
    unset DOCNAME

If you have Doxygen-1.9.2 installed and you wish to build (if --disable-doc was used) or rebuild the html documentation, issue:

    doxygen doc/Doxyfile

The fate-suite tests include comparisons with installed files, and should not be run before the package is installed. Therefore, if you desire to run them, instructions are given further below.

Now, as the `root` user:

    make install &&

    install -v -m755    tools/qt-faststart /usr/bin &&
    install -v -m755 -d           /usr/share/doc/ffmpeg-4.4 &&
    install -v -m644    doc/*.txt /usr/share/doc/ffmpeg-4.4

If the PDF and Postscript documentation was built, issue the following commands, as the `root` user, to install them:

    install -v -m644 doc/*.pdf /usr/share/doc/ffmpeg-4.4 &&
    install -v -m644 doc/*.ps  /usr/share/doc/ffmpeg-4.4

If you used doxygen to manually create the API documentation, install it by issuing the following commands as the `root` user:

    install -v -m755 -d /usr/share/doc/ffmpeg-4.4/api                     &&
    cp -vr doc/doxy/html/* /usr/share/doc/ffmpeg-4.4/api                  &&
    find /usr/share/doc/ffmpeg-4.4/api -type f -exec chmod -c 0644 \{} \; &&
    find /usr/share/doc/ffmpeg-4.4/api -type d -exec chmod -c 0755 \{} \;

To properly test the installation you must have rsync-3.2.3 installed and follow the instructions for the FFmpeg Automated Testing Environment (FATE). First, about 1 GB of sample files used to run FATE are downloaded with the command:

    make fate-rsync SAMPLES=fate-suite/

The `fate-suite` directory is created and the files are downloaded there. That command actually runs an rsync command, to obtain the sample files. You may want to compress and keep this directory for testing again, in another system, or when a new version of ffmpeg is launched. Then, you unpack the sample files in the source directory, and run, again, the make fate-rsync ... command above, to sync with the repository. Now, the download size and time are drastically reduced. Estimated values in "Package Information" do not include the download SBU. Some samples may have been removed, in the new version, so, in order to be sure local and server fate samples are identical, when you use previously saved samples, run the following command:

    rsync -vrltLW  --delete --timeout=60 --contimeout=60 \
          rsync://fate-suite.ffmpeg.org/fate-suite/ fate-suite/

Next, FATE is executed, with the commands (you obtain a number of tests larger than 3700):

    make fate THREADS=N SAMPLES=fate-suite/ | tee ../fate.log &&
    grep ^TEST ../fate.log | wc -l

where `N` is an integer, `N` ≤ number of cores in the system.

### Command Explanations

sed -i ... configure: This command adds the ALSA library to the Flite `LDFLAGS` variable and enables the discovery of Flite.

find ... ;: Fixes permissions of documentation files and directories.

`--enable-libfreetype`: Enables Freetype support.

`--enable-gpl`: Enables the use of GPL code and permits support for postprocessing, swscale and many other features.

`--enable-version3`: Enables the use of (L)GPL version 3 code.

`--enable-nonfree`: Enables the use of nonfree code. Note that the resulting libraries and binaries will be unredistributable.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-shared`: Enables building shared libraries, otherwise only static libraries are built and installed.

`--disable-debug`: Disables building debugging symbols into the programs and libraries.

`--enable-avresample`: Enables Transcode-1.1.7 to be compiled.

`--enable-libass`: Enables ASS/SSA subtitle format rendering via `libass`.

`--enable-libdrm`: Use this switch if libdrm-2.4.107 is installed to build the “kmsgrab” input module which is useful for screen capturing or streaming.

`--enable-libfdk-aac`: Enables currently the highest-quality AAC audio encoding via `libfdk-aac`.

`--enable-libmp3lame`: Enables MP3 audio encoding via `libmp3lame`.

`--enable-libvorbis --enable-libtheora`: Enables Theora video encoding via `libvorbis` and `libtheora`.

`--enable-libvorbis --enable-libvpx`: Enables WebM encoding via `libvorbis` and `libvpx`.

`--enable-libx264`: Enables high-quality H.264/MPEG-4 AVC encoding via `libx264`.

`--enable-libx265`: Enables high-quality H.265/HEVC encoding via `libx265`.

`--enable-openssl`: Enables HTTPS protocol for network streams.

`--enable-gnutls`: Use this option instead of `--enable-openssl`, if you want to use GnuTLS instead of OpenSSL for HTTPS protocol.

`--disable-doc`: Disables building html documentation. This is only needed if Doxygen-1.9.2 is installed and you do not want to build the html documentation.

`--enable-libpulse`: Enables support for Pulseaudio for audio output.

gcc tools/qt-faststart.c -o tools/qt-faststart: This builds the qt-faststart program which can modify QuickTime formatted movies (`.mov` or `.mp4`) so that the header information is located at the beginning of the file instead of the end. This allows the movie file to begin playing before the entire file has been downloaded.

### Note

Support for most of the dependency packages requires using options passed to the configure script. View the output from ./configure --help for complete information about enabling dependency packages.

### Contents

Installed Programs: ffmpeg, ffplay, ffprobe, and qt-faststart
Installed Libraries: libavcodec.so, libavdevice.so, libavfilter.so, libavformat.so, libavutil.so, libavresample.so, libpostproc.so, libswresample.so, and libswscale.so
Installed Directories: /usr/include/libav{codec,device,filter,format,resample,util}, /usr/include/libpostproc, /usr/include/libsw{resample,scale}, /usr/share/doc/ffmpeg-4.4, and /usr/share/ffmpeg

#### Short Descriptions

ffmpeg | is a command-line tool to convert video files, network streams and input from a TV card to several video formats
ffplay | is a very simple and portable media player using the `ffmpeg` libraries and the SDL library
ffprobe | gathers information from multimedia streams and prints it in a human and machine-readable fashion
qt-faststart | moves the index file to the front of quicktime (mov/mp4) videos
`libavcodec.so` | is a library containing the FFmpeg codecs (both encoding and decoding)
`libavdevice.so` | is the FFmpeg device handling library
`libavfilter.so` | is a library of filters that can alter video or audio between the decoder and the encoder (or output)
`libavformat.so` | is a library containing the file formats handling (mux and demux code for several formats) used by ffplay as well as allowing the generation of audio or video streams
`libavresample.so` | is a library containing functions for resampling audio and video.
`libavutil.so` | is the FFmpeg utility library
`libpostproc.so` | is the FFmpeg post processing library
`libswresample.so` | is the FFmpeg audio rescaling library, it contains functions for converting audio sample formats
`libswscale.so` | is the FFmpeg image rescaling library

Last updated on

## MPlayer-export-2021-07-29

### Introduction to MPlayer

MPlayer is a powerful audio/video player controlled via the command line or a graphical interface that is able to play almost every popular audio and video file format. With supported video hardware and additional drivers, MPlayer can play video files without an X Window System installed.

### Note

The latest “stable” version was released in April 2019. That version no longer builds properly with the latest build tools and system libraries. The version below is a snapshot that may not be available on the upstream server but was uploaded to our file server. If you want to test a later version, check http://www.mplayerhq.hu/MPlayer/releases/.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/mplayer/mplayer-export-2021-07-29.tar.bz2

- Download MD5 sum: 887fa9fce21feecbe0f43388d49f4a93

- Download size: 5.7 MB

- Estimated disk space required: 207 MB

- Estimated build time: 0.4 SBU (Using parallelism=4)

#### Additional Downloads

Skins

- GUI skin (HTTP): http://www.mplayerhq.hu/MPlayer/skins/Clearlooks-2.0.tar.bz2

- GUI skin (FTP): ftp://ftp.mplayerhq.hu/MPlayer/skins/Clearlooks-2.0.tar.bz2

- Skin MD5 sum: c82d4dbd7f0c36dfecd63dff972807c5

- Skin size: 34 KB

- Alternative skins: https://www.mplayerhq.hu/MPlayer/skins/

### Note

Skins are only required in order to use the Gtk+ 2 user interface.

#### MPlayer Dependencies

##### Required

yasm-1.3.0

##### Recommended

FFmpeg-4.4, GTK+-2.24.33, and libvdpau-va-gl-0.4.0

##### Optional Input Drivers and Libraries

CDParanoia-III-10.2, libcdio-2.1.0 (to identify and play CDs), libdvdread-6.1.2, libdvdnav-6.1.1, libdvdcss-1.4.3, Samba-4.14.7, libbluray, LIVE555 Streaming Media, RTMPDump, TiVo vstream client, and XMMS

##### Optional Audio Output Drivers and Libraries

ALSA-1.2.5, PulseAudio-15.0, SDL-1.2.15, JACK, NAS, and OpenAL

##### Optional Video Output Drivers and Libraries

AAlib-1.4rc5, giflib-5.2.1, libjpeg-turbo-2.1.1, libmng-2.0.3, libpng-1.6.37, OpenJPEG1 DirectFB, libcaca, and SVGAlib

##### Optional CODECs

FAAC-1_30, FAAD2-2_10_0, LAME-3.100, liba52-0.7.4, libdv-1.0.0, libmad-0.15.1b, libmpeg2-0.5.1, libtheora-1.1.1, libvpx-1.10.0, LZO-2.10, mpg123-1.28.2, Speex-1.2.0, XviD-1.3.7, x264-20210814, CrystalHD, Dirac, GSM, iLBC, libdca, libnut, libmpcdec, OpenCore Adaptive Multi Rate, Schroedinger, Tremor, and TwoLAME

##### Optional Miscellaneous Dependencies

Fontconfig-2.13.1, FreeType-2.11.0, FriBidi-1.0.9, GnuTLS-3.7.2, Opus-1.3.1, and UnRar-6.0.7; libxslt-1.1.34, docbook-xml-4.5 and docbook-xsl-1.79.2 (all three required to build the HTML documentation); and Enca, libbs2b, and LIRC (and LIRC Client Daemon)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mplayer

### Installation of MPlayer

#### Main MPlayer Installation

### Note

The package maintainers recommend building without any optimizations.

You may wish to examine the output from ./configure --help to find out what additional parameters to configure are needed to include the dependencies you have installed on your system.

Install MPlayer by running the following commands:

    ./configure --prefix=/usr                 \
                --confdir=/etc/mplayer        \
                --enable-dynamic-plugins      \
                --disable-libmpeg2-internal   \
                --disable-ffmpeg_a            \
                --enable-menu                 \
                --enable-runtime-cpudetection \
                --enable-gui                  &&
    make

If you wish to build the HTML documentation, issue the following command:

    make doc

This package does not come with a test suite.

Now, as the `root` user:

    make install  &&
    ln -svf ../icons/hicolor/48x48/apps/mplayer.png \
            /usr/share/pixmaps/mplayer.png

To install the HTML documentation, issue the following commands as the `root` user:

    install -v -m755 -d /usr/share/doc/mplayer-export-2021-07-29 &&
    install -v -m644    DOCS/HTML/en/* \
                        /usr/share/doc/mplayer-export-2021-07-29

You will only need `codecs.conf` if you want to change its properties, as the main binary contains an internal copy of it. Ensure any changes you make to `codecs.conf` achieve the desired results, as incorrect entries in this file have been known to cause errors and render the player unusable. If necessary, create the file as the `root` user:

    install -v -m644 etc/codecs.conf /etc/mplayer

You may alternatively want to copy all the default configuration files to `/etc/mplayer` for future reference or more customization ability. As the `root` user:

    install -v -m644 etc/*.conf /etc/mplayer

#### Skin Installation (Optional)

To enable the Gtk+ 2 frontend of MPlayer, you'll need to install at least one skin. Extract the desired skin and create the default location (as the `root` user):

    tar -xvf  ../Clearlooks-2.0.tar.bz2 \
        -C    /usr/share/mplayer/skins &&
    ln  -sfvn Clearlooks /usr/share/mplayer/skins/default

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`--enable-gui`: This option builds the GUI interface into mplayer.

`--enable-menu`: This option is set to enable the on-screen display.

`--enable-runtime-cpudetection`: This option makes MPlayer run with a generic CPU type, preventing optimizations that may cause runtime problems.

`--disable-ffmpeg_a`: You can use this option if you have installed FFmpeg-4.4. Dynamically linking to a system installed FFmpeg makes MPlayer and Mencoder about 9MB smaller.

`--disable-libmpeg2-internal`: This option makes MPlayer run with a system version of libmpeg2.

`--language-doc="`<lang>`"`: This switch enables the language used for the documentation. Use ./configure --help for more information.

`--language-man="`<lang>`"`: This switch enables the language used for the man pages. Use ./configure --help for more information.

`--language-msg="`<lang>`"`: This switch enables the language used for the messages and the GUI. Use ./configure --help for more information

`--language="`<lang>`"`: This switch defines the default language used. Use ./configure --help for more information.

### Note

Specific options override --language. You can pass a list of languages separated by whitespace or commas instead of a single language. Nonexisting translations will be dropped from each list. All documentation and man page translations available in the list will be installed, for the messages the first available translation will be used. The value "all" will activate all translations. The LINGUAS environment variable is honored. In all cases the fallback is English. Values listed by ./configure --help are not all available, as would normally be expected. You need to build test.

### Configuring MPlayer

#### Config Files

`/etc/mplayer/*` and `~/.mplayer/*`

### Note

To play a DVD, it may be useful to ensure a /dev/dvd device is created. You may need to set this up as described in the section called “Devices for DVD Drives”.

#### Configuration Information

Typically, there's no configuration required for the system-wide files in `/etc/mplayer` (in fact, this directory is empty unless you copied the default files as mentioned above). Configuration can be accomplished by choosing the configuration button located on the MPlayer GUI. Any configuration changes made in the GUI will be saved in the user's `~/.mplayer` directory.

### Contents

Installed Programs: gmplayer, mplayer and mencoder
Installed Libraries: None
Installed Directories: /etc/mplayer, /usr/share/doc/mplayer-export-2021-07-29 and /usr/share/mplayer

#### Short Descriptions

gmplayer | is a symlink to mplayer which brings up the GTK+ 2 frontend of MPlayer
mplayer | is the main MPlayer video player
mencoder | is a powerful command line video decoding, encoding and filtering tool that is useful for (amongst other things) ripping DVDs to files on your hard disk (see /usr/share/doc/mplayer-export-2021-07-29/mencoder.html)

Last updated on

## Transcode-1.1.7

### Introduction to Transcode

Transcode was a fast, versatile and command-line based audio/video everything to everything converter primarily focussed on producing AVI video files with MP3 audio, but also including a program to read all the video and audio streams from a DVD.

Although outdated and no longer maintained, it can still be used to extract items from a DVD using only the required and recommended dependencies, or to recode to AVI files.

Subjects to the comments below, this package is known to build and minimally work using the current LFS platform.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://sources.archlinux.org/other/community/transcode/transcode-1.1.7.tar.bz2

- Download (FTP): ftp://ftp.mirrorservice.org/sites/distfiles.gentoo.org/distfiles/transcode-1.1.7.tar.bz2

- Download MD5 sum: 9bb25a796a8591fb764de46ee87ce505

- Download size: 2.1 MB

- Estimated disk space required: 72 MB

- Estimated build time: 0.5 SBU

#### Additional Downloads

- Required patch to fix API changes in ffmpeg: https://www.linuxfromscratch.org/patches/blfs/11.0/transcode-1.1.7-ffmpeg4-1.patch

- Required patch to fix some issues exposed by GCC 10 and later: https://www.linuxfromscratch.org/patches/blfs/11.0/transcode-1.1.7-gcc10_fix-1.patch

#### Transcode Dependencies

##### Required

FFmpeg-4.4 (configured with --enable-avresample)

##### Recommended

alsa-lib-1.2.5.1, LAME-3.100, libdvdread-6.1.2, libmpeg2-0.5.1, and Xorg Libraries

##### Optional

FAAC-1_30, FreeType-2.11.0, ImageMagick-6, liba52-0.7.4, libdv-1.0.0, libjpeg-turbo-2.1.1, libogg-1.3.5, libquicktime-1.2.4, libtheora-1.1.1, libvorbis-1.3.7, libxml2-2.9.12, LZO-2.10, SDL-1.2.15, v4l-utils-1.20.0, x264-20210814, XviD-1.3.7 MJPEG Tools, and PVM3,

##### Optional (at runtime)

lsdvd

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/transcode

### Installation of Transcode

### Note

The details of how the FFmpeg libraries are used has changed since this version of Transcode was released. The patch allows the package to be compiled, but some or all of the internal calls to FFmpeg may fail at run time (they report an error and processing continues, but without any output).

For many packages, that would be a critical error. In this case, the main reason to install Transcode is for the tccat program, which works. Some of the transcode options work - for the others, use ffmpeg directly on the command line.

### Note

Support for most of the dependency packages requires using options passed to the configure script. View the `INSTALL` file and the output from ./configure --help for complete information about enabling dependency packages.

Install Transcode by running the following commands:

    sed -i 's|doc/transcode|&-$(PACKAGE_VERSION)|' \
           $(find . -name Makefile.in -exec grep -l 'docsdir =' {} \;) &&

    patch -Np1 -i ../transcode-1.1.7-ffmpeg4-1.patch   &&
    patch -Np1 -i ../transcode-1.1.7-gcc10_fix-1.patch &&

    ./configure --prefix=/usr     \
                --enable-alsa     \
                --enable-libmpeg2 &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Command Explanations

sed -i ...: Fixes install location for documentation.

### Contents

Installed Programs: avifix, aviindex, avimerge, avisplit, avisync, tccat, tcdecode, tcdemux, tcextract, tcmodinfo, tcmp3cut, tcprobe, tcscan, tcxmlcheck, tcxpm2rgb, tcyait, and transcode
Installed Libraries: None
Installed Directories: /usr/lib/transcode and /usr/share/doc/transcode-1.1.7

#### Short Descriptions

avifix | fixes the header of an AVI file
aviindex | writes a text file describing the index of an AVI file
avimerge | merges AVI files of the same format. Do not try to merge AVI files of different formats, it will most likely result in errors (and format means same bitrates, too!)
avisplit | splits AVI files into multiple files
avisync | can shift audio in AVI files for better synchronizing of the audio and video data signal
tccat | concatenates input files using the input plugins of Transcode. This is useful for extracting VOB (Video OBject) files, either for a whole DVD or for selected Titles or Chapters, which can then be played or recoded
tcdecode | is used to decode input files to raw video and PCM audio streams
tcdemux | demultiplexes (separates) audio/video input that contains multiple streams, e.g., VOB files
tcextract | grabs single streams from a file containing multiple streams
tcmodinfo | loads a supplied Transcode filter module and prints its parameters
tcmp3cut | is a tool which can cut MP3 streams at milliseconds positions
tcprobe | prints information about the input file format
tcscan | performs several measurements on the given input data
tcxmlcheck | checks information in a SMIL input file
transcode | is the encoder's user interface that handles the plugins and other programs, being the glue between the modules. There are several well documented usage examples on both the homepage and the documentation included in the package

Last updated on

## VLC-3.0.16

### Introduction to VLC

VLC is a media player, streamer, and encoder. It can play from many inputs, such as files, network streams, capture devices, desktops, or DVD, SVCD, VCD, and audio CD. It can use most audio and video codecs (MPEG 1/2/4, H264, VC-1, DivX, WMV, Vorbis, AC3, AAC, etc.), and it can also convert to different formats and/or send streams through the network.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://download.videolan.org/vlc/3.0.16/vlc-3.0.16.tar.xz

- Download MD5 sum: efc5f7331c033bf81536531c6eba5aa5

- Download size: 25 MB

- Estimated disk space required: 849 MB (add 36 MB for tests)

- Estimated build time: 2.1 SBU (using parallelism=4; add 0.2 SBU for tests)

#### VLC Dependencies

##### Recommended

alsa-lib-1.2.5.1, desktop-file-utils-0.26, FFmpeg-4.4, liba52-0.7.4, libgcrypt-1.9.4 libmad-0.15.1b, Lua-5.2.4, and X Window System,

##### Optional features and packages

dbus-1.12.20, libidn-1.38, and libssh2-1.9.0

##### Optional input plugins

libarchive-3.5.2, libcddb-1.3.2, libdv-1.0.0, libdvdcss-1.4.3, libdvdread-6.1.2, libdvdnav-6.1.1, opencv-4.5.3 (currently broken), Samba-4.14.7, v4l-utils-1.20.0, libbluray, libdc1394, libnfs, libproxy, libraw1394, Live555, and VCDImager (requires libcdio-2.1.0)

##### Optional mux/demux plugins

libogg-1.3.5, Game Music Emu, libdvbpsi, libshout, libmatroska (requires libebml), libmodplug, Musepack, and sidplay-libs

##### Optional codec plugins

FAAD2-2_10_0, FLAC-1.3.3, libass-0.15.1, libmpeg2-0.5.1, libpng-1.6.37, libtheora-1.1.1, libva-2.12.0, libvorbis-1.3.7, Opus-1.3.1, Speex-1.2.0, x264-20210814, aom, aribb24, dav1d, Dirac, FluidLite, FluidSynth, libdca, libkate, OpenMAX, Schroedinger, Shine, SoX, Tremor, Twolame, and Zapping VBI

##### Optional video plugins

AAlib-1.4rc5, Fontconfig-2.13.1, FreeType-2.11.0, FriBidi-1.0.9, librsvg-2.50.7, libvdpau-1.4, SDL-1.2.15 (with SDL_image), libcaca, and libmfx

##### Optional audio plugins

PulseAudio-15.0, libsamplerate-0.2.1, spatialaudio, and JACK

##### Optional interface plugins

Qt-5.15.2 (required for the graphical user interface), libtar, libvncclient, LIRC, and freerdp

##### Optional visualisations and video filter plugins

Goom, libvsxu, and projectM

##### Optional service discovery plugins

Avahi-0.8, libmtp and libupnp

##### Miscellaneous options

GnuTLS-3.7.2, libnotify-0.7.9, libxml2-2.9.12, taglib-1.12, xdg-utils-1.1.3 (runtime), AtmoLight, libmicrodns, protobuf, and srt

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/vlc

### Installation of VLC

Install VLC by running the following commands:

    export LUAC=/usr/bin/luac5.2                   &&
    export LUA_LIBS="$(pkg-config --libs lua52)"   &&
    export CPPFLAGS="$(pkg-config --cflags lua52)" &&

    BUILDCC=gcc ./configure --prefix=/usr    \
                            --disable-opencv \
                            --disable-vpx    &&

    make

To test the results, issue: make check.

Now, as the `root` user:

    make docdir=/usr/share/doc/vlc-3.0.16 install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

export ...: These commands ensure building with Lua-5.2.4. Upstream does not support lua 5.4 yet.

`--disable-opencv`: This switch is required to disable opencv which is not compatible with this version of vlc.

`--disable-vpx`: This switch is required to disable libvpx. The latest version is not compatible with this version of vlc.

`--disable-lua`: Use this switch if you don't have Lua installed.

`--disable-mad`: Use this switch if you don't have libmad installed.

`--disable-avcodec --disable-swscale`: Use these switches if you don't have FFmpeg installed.

`--disable-a52`: Use this switch if you don't have liba52 installed.

`--disable-xcb`: Use this switch if you don't have X Window System installed.

`--disable-alsa`: Use this switch if you don't have ALSA installed.

`--disable-libgcrypt`: Use this switch if you don't have libgcrypt installed.

`--disable-sftp`: The default is to build the sftp module if libssh2-1.9.0 is installed. Use this switch if you do not want to build this module.

### Note

There are many options to VLC's configure command. Check the configure --help output for a complete list.

### Contents

Installed Programs: cvlc, nvlc, qvlc, rvlc, svlc, vlc and vlc-wrapper
Installed Libraries: libvlccore.so, libvlc.so, and many plugins in /usr/lib/vlc/plugins
Installed Directories: /usr/{include,lib,share}/vlc, /usr/share/kde4, and /usr/share/doc/vlc-3.0.16

#### Short Descriptions

cvlc | is a script to run VLC with the dummy interface
nvlc | is a script to run VLC with the ncurses interface
qvlc | is a script to run VLC with the Qt interface
rvlc | is a script to run VLC with a command line interface
svlc | is a script to run VLC with the skins interface
vlc | is the VLC media player
vlc-wrapper | is a wrapper to drop privileges with VLC

Last updated on

## xine-ui-0.99.12

### Introduction to Xine User Interface

The xine User Interface package contains a multimedia player. It plays back CDs, DVDs and VCDs. It also decodes multimedia files like AVI, MOV, WMV, MPEG and MP3 from local disk drives, and displays multimedia streamed over the Internet.

This package is known to build and work properly using an LFS-11.0 platform.

### Note

Although this version of xine-ui works with most files, it is unable to open encrypted (content-scrambled) DVDs with the current version of libdvdcss.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/xine/xine-ui-0.99.12.tar.xz

- Download MD5 sum: 81a80a5ce929ca9c16f32f884ac8b401

- Download size: 1.9 MB

- Estimated disk space required: 25 MB

- Estimated build time: 0.3 SBU

#### Xine User Interface Dependencies

##### Required

xine-lib-1.2.11 and shared-mime-info-2.1

##### Optional

cURL-7.78.0, AAlib-1.4rc5, LIRC, and libcaca

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xine-ui

### Installation of Xine User Interface

Install xine User Interface by running the following commands:

    ./configure --prefix=/usr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make docsdir=/usr/share/doc/xine-ui-0.99.12 install

### Note

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/index.theme` and `/usr/share/applications/mimeinfo.cache`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.30 installed (for the icon cache) and desktop-file-utils-0.26 (for the desktop cache) and issue the following commands as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor &&
    update-desktop-database -q

### Command Explanations

`docsdir=/usr/share/doc/xine-ui-0.99.12`: This parameter causes the Xine UI documentation to be installed in the versioned directory `/usr/share/doc/xine-ui-0.99.12`, rather that the default `/usr/share/doc/xine-ui`.

### Configuring Xine User Interface

#### Config Files

`~/.xine/config`

#### Configuration Information

The above file is created and maintainable through the xine setup dialog box. The documentation for the configuration settings is located at `/usr/share/doc/xine-ui-0.99.12/README.config_en`.

If you have a DVB TV card, you can watch TV with the command xine dvb:// and change channels with the scroll wheel on your mouse.

### Contents

Installed Programs: aaxine, cacaxine, fbxine, xine, xine-bugreport, xine-check, and xine-remote
Installed Libraries: None
Installed Directories: /usr/share/xine and /usr/share/doc/xine-ui-0.99.12

#### Short Descriptions

aaxine | is an ASCII art video player which utilizes AAlib as the frontend for the xine Libraries
cacaxine | is a color ASCII art video player which utilizes CACA as the frontend for the xine Libraries
fbxine | is a frame buffer interface to the xine Libraries
xine | is a multimedia player designed to play MPEG streams (audio and video), MPEG elementary streams (MP3), MPEG transport streams, Ogg files, AVI files, ASF files, some Quicktime files, VCDs and DVDs
xine-bugreport | produces a terse system description and guides you through the process of reporting a bug
xine-check | tests the xine video player installation for common problems. It tests the operating system settings, installation of plugins, CD/DVD drive settings and video support parameters
xine-remote | is a tool to connect to a xine remote control server

Last updated on

## Chapter 45. CD/DVD-Writing Utilities

This chapter contains information on CD/DVD-writing utilities in Linux.

Additional sources of information include:

- CD-Writing HOWTO

- CD-Recordable FAQ

- The dvd+rw-tools Website

## Cdrdao-1.2.4

### Introduction to Cdrdao

The Cdrdao package contains CD recording utilities. These are useful for burning a CD in disk-at-once mode.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/cdrdao/cdrdao-1.2.4.tar.bz2

- Download MD5 sum: 2ada887d1b30b440867b8df0d3023cf7

- Download size: 1.4 MB

- Estimated disk space required: 39 MB

- Estimated build time: 0.1 SBU

#### Cdrdao Dependencies

##### Recommended

Gtkmm-2.24.5, libao-1.2.0, libvorbis-1.3.7, libmad-0.15.1b, and LAME-3.100 (required to build toc2mp3)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cdrdao

### Installation of Cdrdao

Install Cdrdao 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 -v -m755 -d /usr/share/doc/cdrdao-1.2.4 &&
    install -v -m644 README /usr/share/doc/cdrdao-1.2.4

### Command Explanations

--mandir=/usr/share/man: Install manual pages in /usr/share/man instead of /usr/man.

### Contents

Installed Programs: cdrdao, cue2toc, toc2cddb, toc2cue and optionally toc2mp3
Installed Libraries: None
Installed Directories: /usr/share/cdrdao, /usr/share/doc/cdrdao-1.2.4

#### Short Descriptions

cdrdao | records audio or data CD-Rs in disk-at-once (DAO) mode based on a textual description of the CD contents
cue2toc | converts CUE to TOC format for audio CDs
toc2cddb | converts a Cdrdao TOC file into a cddb file and prints it to stdout
toc2cue | converts TOC to CUE format for audio CDs
toc2mp3 | converts an audio CD disk image (`.toc` file) to MP3 files

Last updated on

## Cdrtools-3.02a09

### Introduction to Cdrtools

The Cdrtools package contains CD recording utilities. These are useful for reading, creating or writing (burning) CDs, DVDs, and Blu-ray discs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/cdrtools/cdrtools-3.02a09.tar.bz2

- Download MD5 sum: 1e224a6adbbe4ad40047b9fddbb0e60c

- Download size: 2.1 MB

- Estimated disk space required: 32 MB

- Estimated build time: 0.7 SBU

#### Cdrtools Depedendencies

##### Required

alsa-lib-1.2.5.1

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Cdrtools

### Installation of Cdrtools

### Note

This package does not support parallel build.

Install Cdrtools by running the following commands:

    export GMAKE_NOWARN=true &&
    make -j1 INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root

This package does not come with a test suite.

Now, as the `root` user:

    export GMAKE_NOWARN=true &&
    make INS_BASE=/usr MANSUFF_LIB=3cdr DEFINSUSR=root DEFINSGRP=root install &&
    install -v -m755 -d /usr/share/doc/cdrtools-3.02a09 &&
    install -v -m644 README.* READMEs/* ABOUT doc/*.ps \
                        /usr/share/doc/cdrtools-3.02a09

### Command Explanations

export GMAKE_NOWARN=true: This variable avoids a warning when using GNU make.

`INS_BASE=/usr`: This parameter moves the install directory from `/opt/schily` to `/usr`.

`DEFINSUSR=root DEFINSGRP=root`: These parameters install all programs with root:root ownership instead of the default bin:bin.

`MANSUFF_LIB=3cdr`: This parameter prevents Cdrtools from overwriting important pages which are already installed by LFS. The installed man pages of section 3 will have a suffix `3cdr` and can be shown using man 3cdr <manpage>.

### Contents

Installed Programs: btcflash, cdda2mp3, cdda2ogg, cdda2wav, cdrecord, devdump, isodebug, isodump, isoinfo, isovfy, mkhybrid, mkisofs, readcd, rscsi, scgcheck, scgskeleton
Installed Libraries: libcdrdeflt.a, libdeflt.a, libedc_ecc.a, libedc_ecc_dec.a, libfile.a, libfind.a, libhfs.a, libmdigest.a, libparanoia.a, librscg.a, libscg.a, libscgcmd.a, libschily.a, libsiconv.a
Installed Directories: /usr/lib/{profiled,siconv}, /usr/include/{scg,schily}, /usr/share/doc/cdda2wav,cdrecord,libparanoia,mkisofs,rscsi}

#### Short Descriptions

btcflash | flashes the firmware on BTC DRW1008 DVD+/-RW recorder. Please exercise care with this program
cdda2wav | converts Compact Disc audio into WAV sound files
cdrecord | records audio or data Compact Discs
devdump | is a diagnostic program used to dump an ISO-9660 device or file in hex
isodebug | is used to display the command-line parameters used to create an ISO-9660 image
isodump | is a diagnostic program used to dump a device or file based on ISO-9660
isoinfo | is used to analyze or list an ISO-9660 image
isovfy | is used to verify an ISO-9660 image
mkhybrid | is a symbolic link to mkisofs used to create ISO-9660/HFS hybrid filesystem images
mkisofs | is used to create ISO-9660/JOLIET/HFS filesystem images, optionally with Rock Ridge attributes
readcd | reads or writes Compact Discs
rscsi | is a remote SCSI manager
scgcheck | is used to check and verify the Application Binary Interface of `libscg`
`libscg.a` | is a highly portable SCSI transport library

Last updated on

## dvd+rw-tools-7.1

### Introduction to dvd+rw-tools

The dvd+rw-tools package contains several utilities to master the DVD media, both +RW/+R and -R[W]. The principle tool is growisofs which provides a way to both lay down and grow an ISO9660 file system on (as well as to burn an arbitrary pre-mastered image to) all supported DVD media. This is useful for creating a new DVD or adding to an existing image on a partially burned DVD.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://fy.chalmers.se/~appro/linux/DVD+RW/tools/dvd+rw-tools-7.1.tar.gz

- Download MD5 sum: 8acb3c885c87f6838704a0025e435871

- Download size: 138 KB

- Estimated disk space required: 1.7 MB

- Estimated build time: less than 0.1 SBU

#### dvd+rw-tools Dependencies

##### Required

Cdrtools-3.02a09 (runtime)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dvd+rw-tools

### Installation of dvd+rw-tools

Install dvd+rw-tools by running the following commands:

    sed -i '/stat.h/a #include <sys/sysmacros.h>' growisofs.c &&
    sed -i '/stdlib/a #include <limits.h>' transport.hxx &&
    make all rpl8 btcflash

This package does not come with a test suite.

Now, as the `root` user:

    make prefix=/usr install &&
    install -v -m644 -D index.html \
        /usr/share/doc/dvd+rw-tools-7.1/index.html

### Command Explanations

sed -i '/stdlib/a #include <limits.h>' ...: This sed includes `limits.h`, one of the kernel headers. This is needed due to a change in the 2.6.23 kernel headers.

make all rpl8 btcflash: This command uses additional targets so that all the utilities are built.

### Contents

Installed Programs: btcflash, dvd+rw-booktype, dvd+rw-format, dvd+rw-mediainfo, dvd-ram-control, growisofs, and rpl8
Installed Libraries: None
Installed Directory: /usr/share/doc/dvd+rw-tools-7.1

#### Short Descriptions

growisofs | is a combined mkisofs frontend/DVD recording program

Last updated on

## libburn-1.5.4

### Introduction to libburn

libburn is a library for writing preformatted data onto optical media: CD, DVD and BD (Blu-Ray).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://files.libburnia-project.org/releases/libburn-1.5.4.tar.gz

- Download MD5 sum: 454d03ce31addb5b7dca62d213c9660e

- Download size: 968 KB

- Estimated disk space required: 17 MB

- Estimated build time: 0.1 SBU

#### libburn Dependencies

##### Optional

Doxygen-1.9.2 (to generate HTML documentation)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libburn

### Installation of libburn

Install libburn by running the following commands:

    ./configure --prefix=/usr --disable-static &&
    make

If you have installed Doxygen and wish to generate the HTML documentation, issue the following command:

    doxygen doc/doxygen.conf

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have built the HTML documentation, install it by running the following commands as the `root` user:

    install -v -dm755 /usr/share/doc/libburn-1.5.4 &&
    install -v -m644 doc/html/* /usr/share/doc/libburn-1.5.4

### Contents

Installed Program: cdrskin
Installed Library: libburn.so
Installed Directory: /usr/include/libburn

#### Short Descriptions

cdrskin | burns preformatted data to CD, DVD, and BD via libburn
`libburn.so` | contains the libburn API functions

Last updated on

## libisoburn-1.5.4

### Introduction to libisoburn

libisoburn is a frontend for libraries libburn and libisofs which enables creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported by libburn. This includes media like DVD+RW, which do not support multi-session management on media level and even plain disk files or block devices.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://files.libburnia-project.org/releases/libisoburn-1.5.4.tar.gz

- Download MD5 sum: b14473e8ec31a8ebd8d1c8b1b191908c

- Download size: 1.6 MB

- Estimated disk space required: 20 MB (with Tk and HTML documentation)

- Estimated build time: 0.2 SBU (with Tk and HTML documentation)

#### libisoburn Dependencies

##### Required

libburn-1.5.4 and libisofs-1.5.4

##### Optional

Doxygen-1.9.2 (to generate HTML documentation), Tk-8.6.11.1 (for xorriso-tcltk), and libjte

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libisoburn

### Installation of libisoburn

Install libisoburn by running the following commands:

    ./configure --prefix=/usr              \
                --disable-static           \
                --enable-pkg-check-modules &&
    make

If you have installed Doxygen and wish to generate the HTML documentation, issue the following command:

    doxygen doc/doxygen.conf

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have built the HTML documentation, install it by running the following commands as the `root` user:

    install -v -dm755 /usr/share/doc/libisoburn-1.5.4 &&
    install -v -m644 doc/html/* /usr/share/doc/libisoburn-1.5.4

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-pkg-check-modules`: Enable pkg-config check for libburn and libisofs.

### Contents

Installed Programs: osirrox, xorrecord, xorriso, xorriso-dd-target, xorrisofs, and xorriso-tcltk
Installed Library: libisoburn.so
Installed Directories: /usr/include/libisoburn and /usr/share/doc/libisoburn-1.5.4

#### Short Descriptions

osirrox | is a symbolic link to xorriso that copies files from ISO image to a disk filesystem
xorrecord | is a symbolic link to xorriso that provides a cdrecord type user interface
xorriso | is a program to create, load, manipulate, read, and write ISO 9660 filesystem images with Rock Ridge extensions
xorriso-dd-target | is a program to check a USB or memory card device to see whether it is suitable for image copying
xorrisofs | is a symbolic link to xorriso that that provides a mkisofs type user interface
xorriso-tcltk | is a frontend that operates xorriso in dialog mode
`libisoburn.so` | contains the libisoburn API functions

Last updated on

## libisofs-1.5.4

### Introduction to libisofs

libisofs is a library to create an ISO-9660 filesystem with extensions like RockRidge or Joliet.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://files.libburnia-project.org/releases/libisofs-1.5.4.tar.gz

- Download MD5 sum: c34fbf182e79af8fdaddda5e27d326ba

- Download size: 852 KB

- Estimated disk space required: 14 MB

- Estimated build time: 0.1 SBU

#### libisofs Dependencies

##### Optional

Doxygen-1.9.2 (to generate HTML documentation) and libjte

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libisofs

### Installation of libisofs

Install libisofs by running the following commands:

    ./configure --prefix=/usr --disable-static &&
    make

If you have installed Doxygen and wish to generate the HTML documentation, issue the following command:

    doxygen doc/doxygen.conf

This package does not come with a test suite.

Now, as the `root` user:

    make install

If you have built the HTML documentation, install it by running the following commands as the `root` user:

    install -v -dm755 /usr/share/doc/libisofs-1.5.4 &&
    install -v -m644 doc/html/* /usr/share/doc/libisofs-1.5.4

### Command Explanations

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Contents

Installed Programs: None
Installed Library: libisofs.so
Installed Directory: /usr/include/libisofs

#### Short Descriptions

`libisofs.so` | contains the libisofs API functions

Last updated on

# Part XIII. Printing, Scanning and Typesetting

## Chapter 46. Printing

This chapter contains spooling printer management systems and ghostscript applications to render PostScript for display on terminals or paper.

## Cups-2.3.3op2

### Introduction to Cups

The Common Unix Printing System (CUPS) is a print spooler and associated utilities. It is based on the "Internet Printing Protocol" and provides printing services to most PostScript and raster printers.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/OpenPrinting/cups/releases/download/v2.3.3op2/cups-2.3.3op2-source.tar.gz

- Download MD5 sum: 524266752cf243c968921547b18ee594

- Download size: 7.6 MB

- Estimated disk space required: 80 MB (Add 89 MB for tests)

- Estimated build time: 0.5 SBU (Add 0.9 SBU for tests)

#### Cups Dependencies

##### Required

GnuTLS-3.7.2

##### Recommended

colord-1.4.5, dbus-1.12.20, libusb-1.0.24, Linux-PAM-1.5.1, and xdg-utils-1.1.3

##### Optional

Avahi-0.8, libpaper-1.1.24+nmu5, LLVM-12.0.1 (with clang), MIT Kerberos V5-1.19.2, OpenJDK-16.0.2, PHP-8.0.10, and Python-2.7.18

##### Required (Postinstall)

cups-filters-1.28.10

##### Optional (Postinstall)

Gutenprint-5.3.3 and hplip (HP printers)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cups

### Kernel Configuration

### Note

There used to be a conflict between the Cups libusb backend and the usblp kernel driver. This is no longer the case and cups will work with both of these enabled.

If you want to use the kernel usblp driver (for example, if you wish to use escputil from Gutenprint-5.3.3) enable the following options in your kernel configuration and recompile the kernel:

    Device Drivers  --->
      [*] USB support  --->                          [CONFIG_USB_SUPPORT]
        <*/M>  OHCI HCD (USB 1.1) support            [CONFIG_USB_OHCI_HCD]
        <*/M>  UHCI HCD (most Intel and VIA) support [CONFIG_USB_UHCI_HCD]
        <*/M>  USB Printer support                   [CONFIG_USB_PRINTER]

If you have a parallel printer, enable the following options in your kernel configuration and recompile the kernel:

    Device Drivers  --->
      <*/M> Parallel port support  --->    [CONFIG_PARPORT]
        <*/M> PC-style hardware            [CONFIG_PARPORT_PC]
      Character devices  --->
        <*/M> Parallel printer support     [CONFIG_PRINTER]

### Installation of Cups

You will need to add an `lp` user, as Cups will create some files owned by this user. (The `lp` user is the default used by Cups, but may be changed to a different user by passing a parameter to the configure script.) Use the following command as the `root` user:

    useradd -c "Print Service User" -d /var/spool/cups -g lp -s /bin/false -u 9 lp

You will also need a dedicated group that will contain users allowed to do Cups administrative tasks. Add the group by running the following command as the `root` user:

    groupadd -g 19 lpadmin

If you want to add a user to the Cups administrative group, run the following command as the `root` user:

    usermod -a -G lpadmin <username>

If you didn't install xdg-utils-1.1.3, use the following sed to change the default browser that will be used to access the Cups web interface:

    sed -i 's#@CUPS_HTMLVIEW@#firefox#' desktop/cups.desktop.in

Replace firefox with the web browser of your choice.

Upstream perfers clang than gcc, but the building system will try to use a compiler warning option unsupported by clang. If clang is installed, remove this warning option:

    sed -e "s/-Wno-format-truncation//" \
        -i configure \
        -i config-scripts/cups-compiler.m4

Build Cups by running the following commands:

    ./configure --libdir=/usr/lib            \
                --with-system-groups=lpadmin \
                --with-docdir=/usr/share/cups/doc-2.3.3op2 &&
    make

To test the results, issue: LC_ALL=C make -k check. An already active graphical session with bus address is necessary to run the tests. Make sure that there is not other instance of Cups running, otherwise at least 4 tests will fail with "address in use".

Now, as the `root` user:

    make install &&
    ln -svnf ../cups/doc-2.3.3op2 /usr/share/doc/cups-2.3.3op2

Create a basic Cups client configuration file by running the following command as the `root` user:

    echo "ServerName /run/cups/cups.sock" > /etc/cups/client.conf

### Note

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+-2.24.33 or GTK+-3.24.30 installed and issue the following command as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor

### Command Explanations

sed ... configure: This sed removes a compiler option which is no longer supported. Leaving this change out, the compilation will run thru but a warning about an invalid warning option will be emitted on every compiler invocation.

`CC=gcc CXX=g++`: Setting them if you prefer to use gcc instead of clang, which is now preferred by the upstream.

`--with-system-groups=lpadmin`: This switch ensures that only `lpadmin` will be used as the Cups administrative group.

`--disable-libusb`: Use this switch if you have installed libusb-1.0.24, but wish to use the kernel usblp driver.

`--enable-libpaper`: Use this switch if you have installed libpaper and wish to use it with Cups.

### Configuring Cups

#### Config Files

`/etc/cups/*`

#### Configuration Information

Normally, printers are set up via a web browser. The Cups server will normally connect via the url http://localhost:631. From there printers, print jobs, and the server configuration can be set up and managed. Remote system administration can also be set up. Configuration can also be done from the command line via the lpadmin, lpoptions, and lpstat commands.

Configuration of Cups is dependent on the type of printer and can be complex. Generally, PostScript printers are easier. For detailed instructions on configuration and use of Cups, see http://www.cups.org/documentation.php.

For non-PostScript printers to print with Cups, you need to install ghostscript-9.54.0 to convert PostScript to raster images and a driver (e.g. from Gutenprint-5.3.3) to convert the resulting raster images to a form that the printer understands. Foomatic drivers use ghostscript-9.54.0 to convert PostScript to a printable form directly, but this is considered suboptimal by Cups developers.

#### Linux PAM Configuration

If CUPS 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 command as the `root` user to create the configuration file for Linux PAM:

    cat > /etc/pam.d/cups << "EOF"
    # Begin /etc/pam.d/cups

    auth    include system-auth
    account include system-account
    session include system-session

    # End /etc/pam.d/cups
    EOF

#### Systemd Unit

To start the cupsd daemon when something tries to access it, enable the previously installed systemd units by running the following command as the `root` user:

    systemctl enable cups

### Contents

Installed Programs: cancel, cupsaccept, cups-config, cupsctl, cupsd, cupsdisable, cupsenable, cupsfilter, cupsreject, cupstestppd, ippeveprinter, ipptool, lp, lpadmin, lpc, lpinfo, lpmove, lpoptions, lpq, lpr, lprm, lpstat, ppdc, ppdhtml, ppdi, ppdmerge, and ppdpo
Installed Libraries: libcupsimage.so and libcups.so
Installed Directories: /etc/cups, /usr/{include,lib,share}/cups, /usr/share/doc/cups-2.3.3op2, and /var/{cache,log,run,spool}/cups

#### Short Descriptions

cancel | cancels existing print jobs from the print queues
cupsaccept | accept jobs sent to a destination
cups-config | is a Cups program configuration utility
cupsctl | updates or queries the cupsd.conf file for a server
cupsd | is the scheduler for the Common Unix Printing System
cupsdisable | stop printers and classes
cupsenable | start printers and classes
cupsfilter | is a front-end to the Cups filter subsystem which allows you to convert a file to a specific format
cupsreject | reject jobs sent to a destination
cupstestppd | tests the conformance of PPD files
ippeveprinter | is an IPP Everywhere printer for CUPS
ipptool | sends IPP requests to the specified URI and tests and/or displays the results
lp | submits files for printing or alters a pending job
lpadmin | configures printer and class queues provided by Cups
lpc | provides limited control over printer and class queues provided by Cups
lpinfo | lists the available devices or drivers known to the Cups server
lpmove | moves the specified job to a new destination
lpoptions | displays or sets printer options and defaults
lpq | shows the current print queue status on the named printer
lpr | submits files for printing
lprm | cancels print jobs that have been queued for printing
lpstat | displays status information about the current classes, jobs, and printers
ppdc | compiles PPDC source files into one or more PPD files
ppdhtml | reads a driver information file and produces a HTML summary page that lists all of the drivers in a file and the supported options
ppdi | imports one or more PPD files into a PPD compiler source file
ppdmerge | merges two or more PPD files into a single, multi-language PPD file
ppdpo | extracts UI strings from PPDC source files and updates either a GNU gettext or Mac OS X strings format message catalog source file for translation
`libcups.so` | contains the Cups API functions

Last updated on

## cups-filters-1.28.10

### Introduction to CUPS Filters

The CUPS Filters package contains backends, filters and other software that was once part of the core CUPS distribution but is no longer maintained by Apple Inc.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.openprinting.org/download/cups-filters/cups-filters-1.28.10.tar.xz

- Download MD5 sum: 828b8c81534ecb996d6c6b7e1332412f

- Download size: 1.4 MB

- Estimated disk space required: 55 MB (with tests), 17 MB installed

- Estimated build time: 0.2 SBU (Using parallelism=4; with tests)

#### CUPS Filters Dependencies

##### Required

Cups-2.3.3op2, GLib-2.68.4, ghostscript-9.54.0, Little CMS-2.12, Poppler-21.08.0, and Qpdf-10.3.2

##### Recommended

Dejavu fonts (the build fails if they are not installed, although they are only required for the tests), libjpeg-turbo-2.1.1, libpng-1.6.37, libtiff-4.3.0, and mupdf-1.18.0 (mutool)

##### Optional

Avahi-0.8 (required to build the DNSSD backend of the cups-browsed daemon, which is needed for operating some network printers), OpenLDAP-2.5.7, PHP-8.0.10 (use of this might be broken), Liblouis (Braille), and Liblouisutdml (Braille)

##### Optional printer drivers (runtime)

Gutenprint-5.3.3 (for supported printers), or other printer drivers, such as hplip

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cups-filters

### Installation of CUPS Filters

Install CUPS Filters by running the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --without-rcdir      \
                --disable-static     \
                --disable-avahi      \
                --docdir=/usr/share/doc/cups-filters-1.28.10 &&
    make

To test the results, issue: make check. DejaVu fonts are needed for the tests.

Now, as the `root` user:

    make install

Install the systemd unit by running the following command as the `root` user:

    install -v -m644 utils/cups-browsed.service /lib/systemd/system/cups-browsed.service

### Command Explanations

`--disable-avahi`: This switch is needed if the optional Avahi-0.8 is not installed. Remove it if avahi is installed and you need network printer discovery capabilities.

`--without-rcdir`: This switch disables installation of the bundled bootscript which is not compatible with BLFS.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--with-test-font-path=`VALUE``: If you wish to run the tests, but you do not have the default `/usr/share/fonts/dejavu/DejaVuSans.ttf` use this switch to specify where `DejaVuSans.ttf` (or perhaps some other text TTF font - untested) is located.

### Configuring CUPS Filters

#### Systemd Units

To start the cups-browsed daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

    systemctl enable cups-browsed

### Contents

Installed Programs: cups-browsed, driverless, driverless-fax, foomatic-rip, and ttfread
Installed Libraries: libcupsfilters.so and libfontembed.so
Installed Directories: /usr/include/{cupsfilters,fontembed}, /usr/lib/cups/{backend,driver,filter}, /usr/share/cups/{braille,charsets}, /usr/share/doc/cups-filters-1.28.10, and /usr/share/ppd/cupsfilters

#### Short Descriptions

cups-browsed | is a daemon for browsing the Bonjour and CUPS broadcasts of shared, remote CUPS printers
driverless | is a PPD generator utility for driverless printing
driverless-fax | is a wrapper to driverless for FAX type devices
foomatic-rip | is a universal print filter/RIP wrapper which can be used as CUPS filter or stand-alone for spooler-less, direct printing
`libcupsfilters.so` | contains CUPS Filters API functions

Last updated on

## ghostscript-9.54.0

### Introduction to Ghostscript

Ghostscript is a versatile processor for PostScript data with the ability to render PostScript to different targets. It is a mandatory part of the cups printing stack.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9540/ghostscript-9.54.0.tar.xz

- Download MD5 sum: 72535d31018129a1a8ff636a47ba1f92

- Download size: 53 MB

- Estimated disk space required: 342 MB (with fonts and libgs.so)

- Estimated build time: 1.8 SBU (Using parallelism=4; with libgs.so)

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/ghostscript-9.54.0-upstream_fix-1.patch

If you wish, you can download additional fonts.

Standard Fonts

- Download (HTTP): https://downloads.sourceforge.net/gs-fonts/ghostscript-fonts-std-8.11.tar.gz

- Download MD5 sum: 6865682b095f8c4500c54b285ff05ef6

- Download size: 3.7 MB

Other Fonts

- Download (HTTP): https://downloads.sourceforge.net/gs-fonts/gnu-gs-fonts-other-6.0.tar.gz

- Download MD5 sum: 33457d3f37de7ef03d2eea05a9e6aa4f

- Download size: 796 KB

#### Ghostscript Dependencies

##### Recommended

Cups-2.3.3op2 (required for building the “cups” device backend, which is needed by cups-filters), Fontconfig-2.13.1 (required, if you are installing any suggested font), FreeType-2.11.0, libjpeg-turbo-2.1.1, libpng-1.6.37, libtiff-4.3.0, and OpenJPEG-2.4.0

##### Optional

Cairo-1.17.4, GTK+-3.24.30, libidn-1.38, libpaper-1.1.24+nmu5, and X Window System

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gs

### Installation of Ghostscript

### Note

The Ghostscript build system is not user-friendly. In order to use system copies of various graphics libraries, you must do it using unconventional methods.

Ghostscript includes (old) copies of several libraries. Some of these seem to have been patched to fix known vulnerabilities, but others of these copies are less-well maintained. To ensure that any future fixes are applied throughout the whole system, it is recommended that you first install the released versions of these libraries and then configure Ghostscript to link to them.

If you have installed the recommended dependencies on your system, remove the copies of freetype, lcms2, libjpeg, libpng, and openjpeg:

    rm -rf freetype lcms2mt jpeg libpng openjpeg

Apply a patch to prevent a segfault when processing some PDF files:

    patch -Np1 -i ../ghostscript-9.54.0-upstream_fix-1.patch

Compile Ghostscript:

    rm -rf zlib &&

    ./configure --prefix=/usr           \
                --disable-compile-inits \
                --enable-dynamic        \
                --with-system-libtiff   &&
    make

### Note

The shared library depends on GTK+-3.24.30. It is only used by external programs like asymptote-2.70, dvisvgm-2.12, ImageMagick-7.1.0-4, and texlive-20210325.

To compile the shared library `libgs.so`, run the following additional command as an unprivileged user:

    make so

This package does not come with a test suite. A set of example files may be used for testing, but it is only possible after installation of the package.

Now, as the `root` user:

    make install

If you want the shared library too:

    make soinstall &&
    install -v -m644 base/*.h /usr/include/ghostscript &&
    ln -sfvn ghostscript /usr/include/ps

Now make the documentation accessible from a standard place:

    mv -v /usr/share/doc/ghostscript/9.54.0 /usr/share/doc/ghostscript-9.54.0  &&
    rm -rfv /usr/share/doc/ghostscript &&
    cp -r examples/ /usr/share/ghostscript/9.54.0/

If you have downloaded the fonts, unpack them to `/usr/share/ghostscript` and ensure the ownership of the files are `root`: `root`.

    tar -xvf ../ghostscript-fonts-std-8.11.tar.gz -C /usr/share/ghostscript --no-same-owner &&
    tar -xvf ../gnu-gs-fonts-other-6.0.tar.gz     -C /usr/share/ghostscript --no-same-owner &&
    fc-cache -v /usr/share/ghostscript/fonts/

You can now test the rendering of various postscript and pdf files from the `/usr/share/ghostscript/9.54.0/examples` . To do this, run the following command (in a X Windows display):

    gs -q -dBATCH /usr/share/ghostscript/9.54.0/examples/tiger.eps

### Command Explanations

rm -rf zlib : zlib was installed as part of LFS.

`--disable-compile-inits`: This option makes gs and `libgs.so` slightly smaller.

`--with-system-libtiff`: Remove this option if you've not installed libtiff-4.3.0.

install -v -m644 base/*.h... : Some packages (ImageMagick is one) need the Ghostscript interface headers in place to link to the shared library. These commands install the headers.

ln -sfvn ghostscript /usr/include/ps: Some packages expect to find the interface headers in an alternate location.

mv -v /usr/share/doc/ghostscript/9.54.0 /usr/share/doc/ghostscript-9.54.0: This moves the documentation where it is expected to be found.

`--disable-cups`: this option will save a tiny amount of space by not linking gs and `libgs.so` to the Cups-2.3.3op2 libraries if you have installed those.

### Contents

Installed Programs: dvipdf, eps2eps, gs, gsbj, gsc (from soinstall), gsdj, gsdj500, gslj, gslp, gsnd, gsx (from soinstall), lprsetup.sh, pdf2dsc, pdf2ps, pf2afm, pfbtopfa, pphs, printafm, ps2ascii, ps2epsi, ps2pdf, ps2pdf12, ps2pdf13, ps2pdf14, ps2pdfwr, ps2ps, ps2ps2, and unix-lpr.sh
Installed Library: libgs.so and /usr/lib/ghostscript/9.54.0/X11.so
Installed Directories: /usr/include/ghostscript, /usr/lib/ghostscript, /usr/share/ghostscript, and /usr/share/doc/ghostscript-9.54.0

#### Short Descriptions

gs | is an interpreter for Adobe Systems' PostScript(tm) and Portable Document Format (PDF)
`libgs.so` | provides Ghostscript functionality to other programs, such as GSView, ImageMagick, and libspectre

Ghostscript provides many different scripts used to convert PostScript, PDF, and other formats. Please refer to the HTML documentation or the man pages for information about the capabilities provided.

Last updated on

## Gutenprint-5.3.3

### Introduction to Gutenprint

The Gutenprint (formerly Gimp-Print) package contains high quality drivers for many brands and models of printers for use with Cups-2.3.3op2 and the GIMP-2.0. See a list of supported printers at http://gutenprint.sourceforge.net/p_Supported_Printers.php.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/gimp-print/gutenprint-5.3.3.tar.xz

- Download MD5 sum: 8703d3e27283c4cf9cd475aaacfe8e4b

- Download size: 4.8 MB

- Estimated disk space required: 57 MB (without tests)

- Estimated build time: 0.2 SBU (without tests)

#### Gutenprint Dependencies

##### Recommended

Cups-2.3.3op2 and Gimp-2.10.24

##### Recommended (at runtime)

Two families of DyeSub photo printers each require another library at runtime. Unless you have one of these devices you will not want these libraries.

For the Sinfonia S6145 and the Ciaat Brava 21, libS6145ImageReProcess, see Peachy Photos (Sinfonia) for instructions on how to build and test this.

For the Mitsubishi D70 family and the similar Kodak 305, libMitsuD70ImageReProcess, see Peachy Photos (Mitsubishi CP-D70) for instructions on how to build and test this.

##### Optional (to Regenerate Documentation)

ImageMagick-7.1.0-4, texlive-20210325 (or install-tl-unx), Doxygen-1.9.2, and DocBook-utils-0.6.14

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gutenprint

### Kernel Configuration

If you intend to use escputil with a USB-connected Epson Stylus printer for commands such as --ink-level which need to access the raw device, you must enable the kernel's usblp driver. Enable the following options in your kernel configuration and recompile the kernel:

    Device Drivers  --->
      [*] USB support  --->                          [CONFIG_USB_SUPPORT]
        <*/M>  OHCI HCD (USB 1.1) support            [CONFIG_USB_OHCI_HCD]
        <*/M>  UHCI HCD (most Intel and VIA) support [CONFIG_USB_UHCI_HCD]
        <*/M>  USB Printer support                   [CONFIG_USB_PRINTER]

### Installation of Gutenprint

Install Gutenprint by running the following commands:

    sed -i 's|$(PACKAGE)/doc|doc/$(PACKAGE)-$(VERSION)|' \
           {,doc/,doc/developer/}Makefile.in &&

    ./configure --prefix=/usr --disable-static &&

    make

To test the results, issue: make check. The tests take a very long time and use a lot of disk space. When last tested (version 5.2.15 in June 2019) this needed 75 SBU and 13.5 GB to complete the tests (one test, rastertogutenprint failed because the CUPS ppds are for a previous version. Maybe genppds should be run before the tests). Note that the tests used only one CPU.

Now, as the `root` user:

    make install &&
    install -v -m755 -d /usr/share/doc/gutenprint-5.3.3/api/gutenprint{,ui2} &&
    install -v -m644    doc/gutenprint/html/* \
                        /usr/share/doc/gutenprint-5.3.3/api/gutenprint &&
    install -v -m644    doc/gutenprintui2/html/* \
                        /usr/share/doc/gutenprint-5.3.3/api/gutenprintui2

### Command Explanations

sed -i '...' ...Makefile.in: This command is used so that the package documentation is installed in the conventional `/usr/share/doc` directory structure instead of `/usr/share/gutenprint/doc`.

`--disable-static`: This switch prevents installation of static versions of the libraries.

### Configuring Gutenprint

#### Configuration Information

For CUPS to see newly installed print drivers, it has to be restarted (as the `root` user):

    systemctl restart cups

Then point your web browser to http://localhost:631/ to add a new printer to CUPS.

### Contents

Installed Programs: cups-calibrate, cups-genppd.5.2, cups-genppdupdate, escputil, and testpattern
Installed Libraries: libgutenprint.so, libgutenprintui2.so and optionally, various CUPS filters and backend drivers under /usr/lib/gutenprint/5.2/modules/
Installed Directories: /usr/{include,lib,share}/gutenprint, /usr/include/gutenprintui2 and /usr/share/doc/gutenprint-5.3.3

#### Short Descriptions

cups-calibrate | calibrates the color output of printers using the Gutenprint, CUPS or ESP Print Pro drivers
cups-genppd.5.2 | generates Gutenprint PPD files for use with CUPS
cups-genppdupdate | regenerates the Gutenprint PPD files in use by CUPS
escputil | is a command line utility to perform various maintenance tasks on Epson Stylus inkjet printers
testpattern | is a test program to learn how to use libgutenprint

Last updated on

## Chapter 47. Scanning

This chapter contains scanning applications which allow you to convert printed documents into formatted documents readable by other applications.

## SANE-1.0.29

### Introduction to SANE

SANE is short for Scanner Access Now Easy. Scanner access, however, is far from easy, since every vendor has their own protocols. The only known protocol that should bring some unity into this chaos is the TWAIN interface, but this is too imprecise to allow a stable scanning framework. Therefore, SANE comes with its own protocol, and the vendor drivers can't be used.

SANE is split into back ends and front ends. The back ends are drivers for the supported scanners and cameras. The front ends are user interfaces to access the backends.

This package is known to build and work properly using an LFS-11.0 platform.

#### Back Ends Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/sane/sane-backends-1.0.29.tar.gz

- Download MD5 sum: f2618408712399661358ed1ad995f046

- Download size: 6.9 MB

- Estimated disk space required: 364 MB (with tests)

- Estimated build time: 0.7 SBU (with tests)

#### Additional Downloads (Front Ends)

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/sane/sane-frontends-1.0.14.tar.gz

- Downlaod MD5 sum: c63bf7b0bb5f530cf3c08715db721cd3

- Download size: 231 KB

- Estimated disk space required: 3.0 MB

- Estimated build time: less than 0.1 SBU

### Note

The upstream location for these files is at https://gitlab.com/sane-project but the file URLs use embedded md5sums. For convenience, the packages have been copied to the localion above.

#### SANE Dependencies

##### Optional (Back Ends)

Avahi-0.8, Cups-2.3.3op2, libjpeg-turbo-2.1.1, libtiff-4.3.0, libusb-1.0.24, v4l-utils-1.20.0, Net-SNMP, libieee1284, libgphoto2, and texlive-20210325 (or install-tl-unx)

##### Optional (Front Ends)

X Window System, GTK+-2.24.33, and Gimp-2.10.24

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sane

### Kernel Configuration, Drivers and Additional Packages

To access your scanner, you will probably need the related kernel drivers and/or additional support packages. A SCSI scanner will need SCSI drivers, a parallel port scanner needs parallel port support (you should use enhanced EPP modes) and perhaps libieee1284, and a USB scanner will need the libusb-1.0.24 package. For HP devices, you may need hplip. Ensure you have the necessary drivers properly configured to access the devices.

### Installation of SANE

#### Installation of SANE Back Ends

The SANE daemon should run with its own group. Create this group by issuing the following commands as the `root` user:

    groupadd -g 70 scanner

### Note

configure assumes that the user building SANE-backends is a member of the `scanner` group for testing the existence of this group. So the user building the package should be added to the `scanner` group. As the `root` user:

    usermod -G scanner -a username

After adding the `scanner` group as above, you will need to log out and back in to activate it.

For a USB scanner, if you are linking to libusb-1.0.24, include the configure switch --enable-libusb_1_0. Install SANE-backends by running the following commands:

    sg scanner -c "                  \
    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --with-group=scanner \
                --docdir=/usr/share/doc/sane-backends-1.0.29" &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install                                         &&
    install -m 644 -v tools/udev/libsane.rules           \
                      /etc/udev/rules.d/65-scanner.rules &&
    chgrp -v scanner  /var/lock/sane

With the scanner on, run scanimage -L and the name and location of the device should appear. Of course, you need the device drivers configured, in order to run this test.

#### Installation of SANE Front Ends

The SANE-frontends package includes the graphical frontends xscanimage and xcam, and a command-line frontend scanadf. You don't need this package if you intend to use one of the more advanced graphical frontends like XSane-0.999. For a list of frontend packages, see http://www.sane-project.org/sane-frontends.html.

To install SANE-frontends, use the following commands:

    tar -xf ../sane-frontends-1.0.14.tar.gz &&
    cd sane-frontends-1.0.14                &&

    sed -i -e "/SANE_CAP_ALWAYS_SETTABLE/d" src/gtkglue.c &&
    ./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 -v -m644 doc/sane.png xscanimage-icon-48x48-2.png \
        /usr/share/sane

If GIMP was linked into the build and you wish GIMP to use xscanimage as a scanning plugin, issue the following command as the `root` user:

    ln -v -s ../../../../bin/xscanimage /usr/lib/gimp/2.0/plug-ins

### Note

If the plugin xscanimage is disabled in GIMP's menu, in order to enable it, "create" a blank image using the menu or Ctrl-N. After that, it is enabled.

### Command Explanations

sg scanner -c "...": runs the command between double quotes with principal group `scanner`. This may be needed if the user has been newly added to group scanner, and has not logged out and in.

`--sysconfdir=/etc`: This switch installs the configuration files in `/etc/sane.d` instead of `/usr/etc/sane.d`.

`--with-group=scanner`: This parameter causes the directory created for the locking files to be group owned by the `scanner` group instead of the default `uucp` group.

exit: This command is used to exit the shell created by the su command.

### Configuring SANE

#### Config Files

`/etc/sane.d/*.conf`

#### Configuration Information

##### Backend Configuration

The backend configuration files are located in `/etc/sane.d`. Information for configuring the various backends can be found by using the man(5) page for the desired backend. Run man sane-`<backend>`, substituting the desired backend.

Add any desired users to the `scanner` group.

If you want to access a network scanner, include two lines in `net.conf`, as `root` user (make sure to replace <server_ip> by the actual value, below):

    cat >> /etc/sane.d/net.conf << "EOF"
    connect_timeout = 60
    <server_ip>
    EOF

On the server side, include the client ip in the access list of `/etc/sane.d/saned.conf`, restart the saned daemon, and make sure the firewall, if any, is open to the client.

##### Frontend Configuration

If you use a desktop environment like Gnome or KDE you may wish to create a `xscanimage.desktop` file so that xscanimage appears in the panel's menus. As the `root` user:

    mkdir -pv /usr/share/{applications,pixmaps}               &&

    cat > /usr/share/applications/xscanimage.desktop << "EOF" &&
    [Desktop Entry]
    Encoding=UTF-8
    Name=XScanImage - Scanning
    Comment=Acquire images from a scanner
    Exec=xscanimage
    Icon=xscanimage
    Terminal=false
    Type=Application
    Categories=Application;Graphics
    EOF

    ln -svf ../sane/xscanimage-icon-48x48-2.png /usr/share/pixmaps/xscanimage.png

##### General Information

For general information about configuring and using SANE, see man sane. For information about USB scanning devices, run man sane-usb. For information about SCSI devices, run man sane-scsi.

##### Configuration and setup of the 'saned' daemon

The saned daemon is not meant to be used for untrusted clients. You should provide Firewalling protection to ensure only trusted clients access the daemon. Due to the complex security requirements to ensure only trusted clients access the daemon, BLFS does not provide instructions to configure the saned daemon. Some good (but outdated) information for setting up and securing the saned daemon can be found at http://penguin-breeder.org/sane/saned/.

### Contents

##### Back Ends:

Installed Programs: gamma4scanimage, sane-config, saned, sane-find-scanner, and scanimage
Installed Libraries: libsane.so and numerous scanner backend modules
Installed Directories: /etc/sane.d, /usr/{include,lib,share}/sane, and /usr/share/doc/sane-1.0.29

##### Front Ends:

Installed Programs: scanadf, xcam, and xscanimage
Installed Library: GIMP plugin embedded in xscanimage
Installed Directories: None

#### Short Descriptions

gamma4scanimage | creates a gamma table in the format expected by scanimage
sane-config | is a tool used to determine the compiler and linker flags that should be used to compile and link SANE
saned | is the SANE daemon that allows remote clients to access image acquisition devices available on the local host
sane-find-scanner | is a command-line tool to find SCSI and USB scanners and determine their device files. Its primary purpose is to make sure that scanners can be detected by SANE backends
scanadf | is a command-line interface to control image acquisition devices which are equipped with an automatic document feeder (ADF)
scanimage | is a command line interface for scanning from image acquisition devices such as flatbed scanners or cameras. It is also used to list the available backend devices
xcam | is a graphical camera front end for SANE
xscanimage | is a graphical user interface for scanning
`libsane.so` | is the application programming interface that is used to communicate between frontends and backends
`libsane-*.so` | modules are backend scanning library plugins used to interface with scanning devices. See http://www.sane-project.org/sane-supported-devices.html for a list of supported backends

Last updated on

## XSane-0.999

### Introduction to XSane

XSane is another front end for SANE-1.0.29. It has additional features to improve the image quality and ease of use compared to xscanimage.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/xsane/xsane-0.999.tar.gz

- Download (FTP): ftp://anduin.linuxfromscratch.org/BLFS/xsane/xsane-0.999.tar.gz

- Download MD5 sum: 9927f21e1ab6ba96315e7f0e30746deb

- Download size: 2.9 MB

- Estimated disk space required: 23 MB

- Estimated build time: 0.2 SBU

#### XSane Dependencies

##### Required

GTK+-2.24.33 and SANE-1.0.29 (back ends)

##### Optional

Little CMS-1.19 and Gimp-2.10.24

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xsane

### Installation of XSane

Install XSane by running the following commands:

    sed -i -e 's/png_ptr->jmpbuf/png_jmpbuf(png_ptr)/' src/xsane-save.c &&
    ./configure --prefix=/usr                                           &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make xsanedocdir=/usr/share/doc/xsane-0.999 install &&
    ln -v -s ../../doc/xsane-0.999 /usr/share/sane/xsane/doc

A browser of your choice can be used to get inline help, using the following command, as the `root` user:

    ln -v -s <browser> /usr/bin/netscape

### Note

Be sure to replace <browser> with the browser of your choice on your system.

Alternatively, if the environment variable BROWSER is set to the browser you want to use, eg, BROWSER="/usr/bin/firefox", the first time you run xsane, it will be recorded in `~/.sane/xsane/xsane.rc`. If you wish to change it, edit this file, or remove it, and use the instructions above, so that a new one is created.

If GIMP is installed, issue the following command as the `root` user:

    ln -v -s /usr/bin/xsane /usr/lib/gimp/2.0/plug-ins/

### Command Explanations

ln -v -s ../../doc/xsane-0.999 /usr/share/sane/xsane/doc: This symlink is created to ensure that any program that looks for the XSane documentation in the default location will find it, as the documentation is installed in an alternate location specified in the make install command.

ln -v -s /usr/bin/xsane /usr/lib/gimp/2.0/plug-ins/: This creates a link in the system-wide GIMP `plug-ins` directory so that users can access XSane directly from GIMP. GIMP must be available before building XSane for this to work. Alternatively, create the link in `~/.gimp-2.0/plug-ins/` to provide individual user access. man xsane for additional information.

### Contents

Installed Program: xsane
Installed Libraries: None
Installed Directory: /usr/share/doc/xsane-0.999 and /usr/share/sane/xsane

#### Short Descriptions

xsane | is a graphical user-interface to control an image acquisition device such as a flatbed scanner

Last updated on

## Chapter 48. Standard Generalized Markup Language (SGML)

This chapter contains DocBook SGML document type definitions (DTDs), DocBook DSSSL Stylesheets and DocBook tools to validate, transform, format and publish DocBook documents.

## sgml-common-0.6.3

### Introduction to SGML Common

The SGML Common package contains install-catalog. This is useful for creating and maintaining centralized SGML catalogs.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://sourceware.org/ftp/docbook-tools/new-trials/SOURCES/sgml-common-0.6.3.tgz

- Download (FTP): ftp://sourceware.org/pub/docbook-tools/new-trials/SOURCES/sgml-common-0.6.3.tgz

- Download MD5 sum: 103c9828f24820df86e55e7862e28974

- Download size: 75 KB

- Estimated disk space required: 1.5 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/sgml-common-0.6.3-manpage-1.patch

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sgml-common

### Installation of SGML Common

Instead of the normal convention of including the autotools files in the package, the maintainers included symlinks to the files in `/usr/share/automake`. For previous versions of Automake this convention is correct, but recent versions of Automake install the internal files in version specific directories. This causes the configure script to abort. To fix this error, the autotools are regenerated. Since the included `Makefile.am` file uses a syntax not supported by current versions of Automake, a patch is required to fix the syntax.

    patch -Np1 -i ../sgml-common-0.6.3-manpage-1.patch &&
    autoreconf -f -i

Install SGML Common by running the following commands:

    ./configure --prefix=/usr --sysconfdir=/etc &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make docdir=/usr/share/doc install &&

    install-catalog --add /etc/sgml/sgml-ent.cat \
        /usr/share/sgml/sgml-iso-entities-8879.1986/catalog &&

    install-catalog --add /etc/sgml/sgml-docbook.cat \
        /etc/sgml/sgml-ent.cat

### Update Hint

Remove the above catalog items prior to upgrading (as the `root` user) with:

    install-catalog --remove /etc/sgml/sgml-ent.cat \
        /usr/share/sgml/sgml-iso-entities-8879.1986/catalog &&

    install-catalog --remove /etc/sgml/sgml-docbook.cat \
        /etc/sgml/sgml-ent.cat

### Configuring SGML Common

#### Config Files

`/etc/sgml/sgml.conf`

#### Configuration Information

No change in this file is necessary.

### Contents

Installed Programs: install-catalog and sgmlwhich
Installed Libraries: None
Installed Files: SGML and XML DocBook entity files
Installed Directories: /etc/sgml, /usr/share/doc/sgml-common-0.6.3, and /usr/share/sgml

#### Short Descriptions

install-catalog | creates a centralized catalog that maintains references to catalogs scattered throughout the `/usr/share/sgml` directory tree
sgmlwhich | prints to standard output the name of the main configuration file
`SGML entities files` | contains the basic character entities defined with SDATA entries
`XML entities files` | contains the basic character entities defined by a hexadecimal representation of the Unicode character number

Last updated on

## docbook-3.1-dtd

### Introduction to DocBook-3.1 SGML DTD

The DocBook SGML DTD package contains document type definitions for verification of SGML data files against the DocBook rule set. These are useful for structuring books and software documentation to a standard allowing you to utilize transformations already written for that standard.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.docbook.org/sgml/3.1/docbk31.zip

- Download MD5 sum: 432749c0c806dbae81c8bcb70da3b5d3

- Download size: 55 KB

- Estimated disk space required: 676 KB

- Estimated build time: less than 0.1 SBU

#### DocBook-3.1 SGML DTD Dependencies

##### Required

sgml-common-0.6.3 and UnZip-6.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sgml-dtd-3

### Installation of DocBook-3.1 SGML DTD

### Note

The package source is distributed in `zip` format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook-3.1 SGML DTD by running the following commands:

    sed -i -e '/ISO 8879/d' \
           -e 's|DTDDECL "-//OASIS//DTD DocBook V3.1//EN"|SGMLDECL|g' \
           docbook.cat

This package does not come with a test suite.

Now, as the `root` user:

    install -v -d -m755 /usr/share/sgml/docbook/sgml-dtd-3.1 &&
    chown -R root:root . &&
    install -v docbook.cat /usr/share/sgml/docbook/sgml-dtd-3.1/catalog &&
    cp -v -af *.dtd *.mod *.dcl /usr/share/sgml/docbook/sgml-dtd-3.1 &&

    install-catalog --add /etc/sgml/sgml-docbook-dtd-3.1.cat \
        /usr/share/sgml/docbook/sgml-dtd-3.1/catalog &&

    install-catalog --add /etc/sgml/sgml-docbook-dtd-3.1.cat \
        /etc/sgml/sgml-docbook.cat

### Command Explanations

sed -i -e '/ISO 8879/d' docbook.cat: This command removes the ENT definitions from the catalog file.

sed -i -e 's|DTDDECL "-//OASIS//DTD Docbook V3.1//EN"|SGMLDECL|g' docbook.cat: This command replaces the DTDDECL catalog entry, which is not supported by Linux SGML tools, with the SGMLDECL catalog entry.

### Configuring DocBook-3.1 SGML DTD

#### Config Files

`/etc/sgml/catalog`

#### Configuration Information

The above installation script updates the catalog.

Using only the most current 3.x version of DocBook SGML DTD requires the following (perform as the `root` user):

    cat >> /usr/share/sgml/docbook/sgml-dtd-3.1/catalog << "EOF"
      -- Begin Single Major Version catalog changes --

    PUBLIC "-//Davenport//DTD DocBook V3.0//EN" "docbook.dtd"

      -- End Single Major Version catalog changes --
    EOF

### Contents

Installed Programs: None
Installed Libraries: None
Installed Files: SGML DTD and MOD files
Installed Directory: /usr/share/sgml/docbook/sgml-dtd-3.1

#### Short Descriptions

`SGML DTD files` | contains a document type definition which defines the element types and the attribute lists that can be used in the corresponding SGML files
`SGML MOD files` | contains components of the document type definition that are sourced into the `DTD` files

Last updated on

## docbook-4.5-dtd

### Introduction to DocBook-4.5 SGML DTD

The DocBook-4.5 SGML DTD package contains document type definitions for verification of SGML data files against the DocBook rule set. These are useful for structuring books and software documentation to a standard allowing you to utilize transformations already written for that standard.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.docbook.org/sgml/4.5/docbook-4.5.zip

- Download MD5 sum: 07c581f4bbcba6d3aac85360a19f95f7

- Download size: 70 KB

- Estimated disk space required: 784 KB

- Estimated build time: less than 0.1 SBU

#### DocBook-4.5 SGML DTD Dependencies

##### Required

sgml-common-0.6.3 and UnZip-6.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/sgml-dtd

### Installation of DocBook-4.5 SGML DTD

### Note

The package source is distributed in `zip` format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook-4.5 SGML DTD by running the following commands:

    sed -i -e '/ISO 8879/d' \
           -e '/gml/d' docbook.cat

This package does not come with a test suite.

Now, as the `root` user:

    install -v -d /usr/share/sgml/docbook/sgml-dtd-4.5 &&
    chown -R root:root . &&

    install -v docbook.cat /usr/share/sgml/docbook/sgml-dtd-4.5/catalog &&
    cp -v -af *.dtd *.mod *.dcl /usr/share/sgml/docbook/sgml-dtd-4.5 &&

    install-catalog --add /etc/sgml/sgml-docbook-dtd-4.5.cat \
        /usr/share/sgml/docbook/sgml-dtd-4.5/catalog &&

    install-catalog --add /etc/sgml/sgml-docbook-dtd-4.5.cat \
        /etc/sgml/sgml-docbook.cat

### Command Explanations

sed -i -e '/ISO 8879/d' -e '/gml/d' docbook.cat: This command removes the ENT definitions from the catalog file.

### Configuring DocBook-4.5 SGML DTD

#### Config Files

`/etc/sgml/catalog`

#### Configuration Information

The above installation script updates the catalog.

Using only the most current 4.x version of DocBook SGML DTD requires the following (perform as the `root` user):

    cat >> /usr/share/sgml/docbook/sgml-dtd-4.5/catalog << "EOF"
      -- Begin Single Major Version catalog changes --

    PUBLIC "-//OASIS//DTD DocBook V4.4//EN" "docbook.dtd"
    PUBLIC "-//OASIS//DTD DocBook V4.3//EN" "docbook.dtd"
    PUBLIC "-//OASIS//DTD DocBook V4.2//EN" "docbook.dtd"
    PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "docbook.dtd"
    PUBLIC "-//OASIS//DTD DocBook V4.0//EN" "docbook.dtd"

      -- End Single Major Version catalog changes --
    EOF

### Contents

Installed Programs: None
Installed Libraries: None
Installed Files: SGML DTD and MOD files
Installed Directory: /usr/share/sgml/docbook/sgml-dtd-4.5

#### Short Descriptions

`SGML DTD files` | contains a document type definition which defines the element types and the attribute lists that can be used in the corresponding SGML files
`SGML MOD files` | contains components of the document type definition that are sourced into the `DTD` files

Last updated on

## OpenSP-1.5.2

### Introduction to OpenSP

The OpenSP package contains a C++ library for using SGML/XML files. This is useful for validating, parsing and manipulating SGML and XML documents.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/openjade/OpenSP-1.5.2.tar.gz

- Download MD5 sum: 670b223c5d12cee40c9137be86b6c39b

- Download size: 1.5 MB

- Estimated disk space required: 32 MB

- Estimated build time: 1.0 SBU

#### OpenSP Dependencies

##### Required

sgml-common-0.6.3

##### Optional

xmlto-0.0.28

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/opensp

### Installation of OpenSP

Install OpenSP by running the following commands:

    sed -i 's/32,/253,/' lib/Syntax.cxx &&
    sed -i 's/LITLEN          240 /LITLEN          8092/' \
        unicode/{gensyntax.pl,unicode.syn} &&

    ./configure --prefix=/usr                              \
                --disable-static                           \
                --disable-doc-build                        \
                --enable-default-catalog=/etc/sgml/catalog \
                --enable-http                              \
                --enable-default-search-path=/usr/share/sgml &&

    make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2

To test the results, issue: make check. As many as nine of the 23 tests may fail. Do not be alarmed.

Now, as the `root` user:

    make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2 \
         docdir=/usr/share/doc/OpenSP-1.5.2      \
         install &&

    ln -v -sf onsgmls   /usr/bin/nsgmls   &&
    ln -v -sf osgmlnorm /usr/bin/sgmlnorm &&
    ln -v -sf ospam     /usr/bin/spam     &&
    ln -v -sf ospcat    /usr/bin/spcat    &&
    ln -v -sf ospent    /usr/bin/spent    &&
    ln -v -sf osx       /usr/bin/sx       &&
    ln -v -sf osx       /usr/bin/sgml2xml &&
    ln -v -sf libosp.so /usr/lib/libsp.so

### Command Explanations

sed -i 's/32,/253,/...unicode.syn}: These seds prevent some annoying messages that may otherwise appear while running openjade.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-http`: This switch adds support for HTTP.

`--disable-doc-build`: This switch prevents the configure script checking if you have xmlto installed. If you have xmlto, you can remove this option.

`--enable-default-catalog=/etc/sgml/catalog`: This switch sets the path to the centralized catalog.

`--enable-default-search-path`: This switch sets the default value of `SGML_SEARCH_PATH`.

`--enable-xml-messages`: This switch adds support for XML Formatted Messages.

make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2 : This sets the pkgdatadir variable in the `Makefile` from `/usr/share/OpenSP` to `/usr/share/sgml/OpenSP-1.5.2`.

ln -v -sf ...: These commands create the SP equivalents of OpenSP executables and libraries.

### Contents

Installed Programs: onsgmls, osgmlnorm, ospam, ospcat, ospent, osx, and the SP equivalent symlinks: nsgmls, sgml2xml, sgmlnorm, spam, spcat, spent, and sx
Installed Library: libosp.so and the SP equivalent symlink: libsp.so
Installed Directories: /usr/include/OpenSP, /usr/share/doc/OpenSP, and /usr/share/sgml/OpenSP-1.5.2

#### Short Descriptions

onsgmls | is used to process SGML files
osgmlnorm | prints on the standard output a normalized document instance for the SGML document contained in the concatenation of the entities with system identifiers .nf and .fi
ospam | is a markup stream editor
ospcat | prints effective system identifiers found in the catalogs
ospent | provides access to OpenSP's entity manager
osx | is an SGML normalizer or used to convert SGML files to XML files
nsgmls | is a symlink to onsgmls
sgml2xml | is a symlink to osx
sgmlnorm | is a symlink to osgmlnorm
spam | is a symlink to ospam
spcat | is a symlink to ospcat
spent | is a symlink to ospent
sx | is a symlink to osx
`libosp.so` | contains functions required by the OpenSP programs to parse, validate and manipulate SGML and XML files
`libsp.so` | is a symlink to `libosp.so`

Last updated on

## OpenJade-1.3.2

### Introduction to OpenJade

The OpenJade package contains a DSSSL engine. This is useful for SGML and XML transformations into RTF, TeX, SGML and XML.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/openjade/openjade-1.3.2.tar.gz

- Download MD5 sum: 7df692e3186109cc00db6825b777201e

- Download size: 880 KB

- Estimated disk space required: 19.2 MB

- Estimated build time: 0.7 SBU

#### Additional Download

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/openjade-1.3.2-upstream-1.patch

#### OpenJade Dependencies

##### Required

OpenSP-1.5.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/openjade

### Installation of OpenJade

First fix problems when building with newer compilers:

    patch -Np1 -i ../openjade-1.3.2-upstream-1.patch

Now fix a compilation problem with perl-5.16 and later:

    sed -i -e '/getopts/{N;s#&G#g#;s#do .getopts.pl.;##;}' \
           -e '/use POSIX/ause Getopt::Std;' msggen.pl

Install OpenJade by running the following commands:

    export CXXFLAGS="${CXXFLAGS:--O2 -g} -fno-lifetime-dse"            &&
    ./configure --prefix=/usr                                \
                --mandir=/usr/share/man                      \
                --enable-http                                \
                --disable-static                             \
                --enable-default-catalog=/etc/sgml/catalog   \
                --enable-default-search-path=/usr/share/sgml \
                --datadir=/usr/share/sgml/openjade-1.3.2   &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install                                                   &&
    make install-man                                               &&
    ln -v -sf openjade /usr/bin/jade                               &&
    ln -v -sf libogrove.so /usr/lib/libgrove.so                    &&
    ln -v -sf libospgrove.so /usr/lib/libspgrove.so                &&
    ln -v -sf libostyle.so /usr/lib/libstyle.so                    &&

    install -v -m644 dsssl/catalog /usr/share/sgml/openjade-1.3.2/ &&

    install -v -m644 dsssl/*.{dtd,dsl,sgm}              \
        /usr/share/sgml/openjade-1.3.2                             &&

    install-catalog --add /etc/sgml/openjade-1.3.2.cat  \
        /usr/share/sgml/openjade-1.3.2/catalog                     &&

    install-catalog --add /etc/sgml/sgml-docbook.cat    \
        /etc/sgml/openjade-1.3.2.cat

### Command Explanations

export CXXFLAGS=...: This command prevents segmentation faults when the package is compiled with gcc-6.1.

make install-man: This command installs the openjade man page.

`--disable-static`: This switch prevents the building of the static library.

`--enable-http`: This switch adds support for HTTP.

`--enable-default-catalog=/etc/sgml/catalog`: This switch sets the path to the centralized catalog.

`--enable-default-search-path`: This switch sets the default value of `SGML_SEARCH_PATH`.

`--datadir=/usr/share/sgml/openjade-1.3.2`: This switch puts data files in `/usr/share/sgml/openjade-1.3.2` instead of `/usr/share`.

ln -v -sf ...: These commands create the Jade equivalents of OpenJade executables and libraries.

### Configuring OpenJade

#### Configuration Information

As the `root` user:

    echo "SYSTEM \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\" \
        \"/usr/share/xml/docbook/xml-dtd-4.5/docbookx.dtd\"" >> \
        /usr/share/sgml/openjade-1.3.2/catalog

This configuration is only necessary if you intend to use OpenJade to process the BLFS XML files through DSSSL Stylesheets.

### Contents

Installed Programs: openjade and the Jade equivalent symlink, jade
Installed Libraries: libogrove.so, libospgrove.so, libostyle.so, and the Jade equivalent symlinks: libgrove.so, libspgrove.so, and libstyle.so
Installed Directory: /usr/share/sgml/openjade-1.3.2

#### Short Descriptions

openjade | is a DSSSL engine used for transformations
jade | is a symlink to openjade

Last updated on

## docbook-dsssl-1.79

### Introduction to DocBook DSSSL Stylesheets

The DocBook DSSSL Stylesheets package contains DSSSL stylesheets. These are used by OpenJade or other tools to transform SGML and XML DocBook files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/docbook/docbook-dsssl-1.79.tar.bz2

- Download (FTP): ftp://ftp.mirrorservice.org/sites/distfiles.gentoo.org/distfiles/docbook-dsssl-1.79.tar.bz2

- Download MD5 sum: bc192d23266b9a664ca0aba4a7794c7c

- Download size: 277 KB

- Estimated disk space required: 14 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

Documentation and test data

- Download (HTTP): https://downloads.sourceforge.net/docbook/docbook-dsssl-doc-1.79.tar.bz2

- Download MD5 sum: 9a7b809a21ab7d2749bb328334c380f2

- Download size: 142 KB

#### DocBook DSSSL Stylesheets Dependencies

##### Required

sgml-common-0.6.3

##### Required (to Test the DocBook SGML Toolchain)

docbook-3.1-dtd, docbook-4.5-dtd, OpenSP-1.5.2, and OpenJade-1.3.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook-dsssl

### Installation of DocBook DSSSL Stylesheets

If you downloaded the documentation, run:

    tar -xf ../docbook-dsssl-doc-1.79.tar.bz2 --strip-components=1

Install DocBook DSSSL Stylesheets by running the following commands as the `root` user:

    install -v -m755 bin/collateindex.pl /usr/bin                      &&
    install -v -m644 bin/collateindex.pl.1 /usr/share/man/man1         &&
    install -v -d -m755 /usr/share/sgml/docbook/dsssl-stylesheets-1.79 &&
    cp -v -R * /usr/share/sgml/docbook/dsssl-stylesheets-1.79          &&

    install-catalog --add /etc/sgml/dsssl-docbook-stylesheets.cat \
        /usr/share/sgml/docbook/dsssl-stylesheets-1.79/catalog         &&

    install-catalog --add /etc/sgml/dsssl-docbook-stylesheets.cat \
        /usr/share/sgml/docbook/dsssl-stylesheets-1.79/common/catalog  &&

    install-catalog --add /etc/sgml/sgml-docbook.cat              \
        /etc/sgml/dsssl-docbook-stylesheets.cat

### Command Explanations

The above commands create an installation script for this package.

### Testing the DocBook SGML Toolchain (Optional)

The following commands will perform the necessary tests to confirm that your installed DocBook SGML toolchain will produce desired results. You must have the docbook-3.1-dtd, docbook-4.5-dtd, OpenSP-1.5.2, and OpenJade-1.3.2 packages installed, and perform the tests as the `root` user.

All tests will be performed from the `/usr/share/sgml/docbook/dsssl-stylesheets-1.79/doc/testdata` directory as the `root` user:

    cd /usr/share/sgml/docbook/dsssl-stylesheets-1.79/doc/testdata

The first test should produce no output to stdout (your screen) and create a file named `jtest.rtf` in the current directory:

    openjade -t rtf -d jtest.dsl jtest.sgm

The next test should return only the following line to stdout: `onsgmls:I: "OpenSP" version "1.5.2"`

    onsgmls -sv test.sgm

The next test should produce no output to stdout and create a file named `test.rtf` in the current directory:

    openjade -t rtf \
        -d /usr/share/sgml/docbook/dsssl-stylesheets-1.79/print/docbook.dsl \
        test.sgm

The last test should produce no output to stdout and create a file named `c1.htm` in the current directory:

    openjade -t sgml \
        -d /usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/docbook.dsl \
        test.sgm

Finally, clean up:

    rm jtest.rtf test.rtf c1.htm

### Contents

Installed Program: collateindex.pl
Installed Libraries: None
Installed Files: DSSSL stylesheets
Installed Directory: /usr/share/sgml/docbook/dsssl-stylesheets-1.79

#### Short Descriptions

collateindex.pl | is a Perl script that creates a DocBook index from raw index data

Last updated on

## DocBook-utils-0.6.14

### Introduction to DocBook-utils

The DocBook-utils package is a collection of utility scripts used to convert and analyze SGML documents in general, and DocBook files in particular. The scripts are used to convert from DocBook or other SGML formats into “classical” file formats like HTML, man, info, RTF and many more. There's also a utility to compare two SGML files and only display the differences in markup. This is useful for comparing documents prepared for different languages.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://sourceware.org/ftp/docbook-tools/new-trials/SOURCES/docbook-utils-0.6.14.tar.gz

- Download (FTP): ftp://sourceware.org/pub/docbook-tools/new-trials/SOURCES/docbook-utils-0.6.14.tar.gz

- Download MD5 sum: 6b41b18c365c01f225bc417cf632d81c

- Download size: 124 KB

- Estimated disk space required: 1.44 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/docbook-utils-0.6.14-grep_fix-1.patch

#### DocBook-utils Dependencies

##### Required

OpenJade-1.3.2, docbook-dsssl-1.79, and docbook-3.1-dtd

##### Optional (Runtime Dependencies Only)

SGMLSpm-1.1 (for conversion to man and texinfo), and Lynx-2.8.9rel.1 or Links-2.23 or W3m (for conversion to ASCII text)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook-utils

### Installation of DocBook-utils

Install DocBook-utils by running the following commands:

    patch -Np1 -i ../docbook-utils-0.6.14-grep_fix-1.patch &&
    sed -i 's:/html::' doc/HTML/Makefile.in                &&

    ./configure --prefix=/usr --mandir=/usr/share/man      &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make docdir=/usr/share/doc install

Many packages use an alternate name for the DocBook-utils scripts. If you wish to create these alternate names, use the following command as the `root` user:

    for doctype in html ps dvi man pdf rtf tex texi txt
    do
        ln -svf docbook2$doctype /usr/bin/db2$doctype
    done

### Note

The jw script uses the which command to locate required utilities. You must install Which-2.21 before attempting to use any of the DocBook-utils programs.

### Command Explanations

patch -Np1 -i ../docbook-utils-0.6.14-grep_fix-1.patch: This patch corrects the syntax in the jw (Jade Wrapper) script which is at the heart of much db2* processing, so that the current version of grep will not reject it.

sed -i 's:/html::' doc/HTML/Makefile.in: This command changes the installation directory of the HTML documents.

`docdir=/usr/share/doc`: This option is placed on the make install line because is is not recognized by configure.

### Contents

Installed Programs: docbook2dvi, docbook2html, docbook2man, docbook2pdf, docbook2ps, docbook2rtf, docbook2tex, docbook2texi, docbook2txt, jw, and sgmldiff
Installed Libraries: None
Installed Directories: /usr/share/doc/docbook-utils-0.6.14 and /usr/share/sgml/docbook/utils-0.6.14
Installed Symlinks: db2dvi, db2html, db2man, db2pdf, db2ps, db2rtf, db2tex, db2texi, and db2txt

#### Short Descriptions

docbook2* | are simple one-line wrapper scripts to jw. They are provided as easy-to-remember names used to convert DocBook or other SGML files to the respective format
db2* | are symlinks pointing at the respectively named docbook2* commands, created to satisfy some program's use of these names
jw | is a script used to convert DocBook or other SGML files to various output formats. It hides most of OpenJade's complexity and adds comfortable features
sgmldiff | is used to compare two SGML files and only return the differences in the markup. This is especially useful to compare files that should be identical except for language differences in the content

Last updated on

## Chapter 49. Extensible Markup Language (XML)

This chapter contains the DocBook XML document type definition (DTD) and DocBook Stylesheets which are used to validate, transform, format and publish DocBook documents.

## docbook-xml-4.5

### Introduction to DocBook-4.5 XML DTD

The DocBook-4.5 XML DTD-4.5 package contains document type definitions for verification of XML data files against the DocBook rule set. These are useful for structuring books and software documentation to a standard allowing you to utilize transformations already written for that standard.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.docbook.org/xml/4.5/docbook-xml-4.5.zip

- Download MD5 sum: 03083e288e87a7e829e437358da7ef9e

- Download size: 96 KB

- Estimated disk space required: 1.2 MB

- Estimated build time: less than 0.1 SBU

#### DocBook-4.5 XML DTD Dependencies

##### Required

libxml2-2.9.12, sgml-common-0.6.3, and UnZip-6.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook-xml

### Installation of DocBook-4.5 XML DTD

### Note

The package source is distributed in `zip` format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook XML DTD by running the following commands as the `root` user:

    install -v -d -m755 /usr/share/xml/docbook/xml-dtd-4.5 &&
    install -v -d -m755 /etc/xml &&
    chown -R root:root . &&
    cp -v -af docbook.cat *.dtd ent/ *.mod \
        /usr/share/xml/docbook/xml-dtd-4.5

Create (or update) and populate the `/etc/xml/docbook` catalog file by running the following commands as the `root` user:

    if [ ! -e /etc/xml/docbook ]; then
        xmlcatalog --noout --create /etc/xml/docbook
    fi &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//DTD DocBook XML V4.5//EN" \
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//DTD DocBook XML CALS Table Model V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/calstblx.dtd" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/soextblx.dtd" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ELEMENTS DocBook XML Information Pool V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/dbpoolx.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/dbhierx.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ELEMENTS DocBook XML HTML Tables V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/htmltblx.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ENTITIES DocBook XML Notations V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/dbnotnx.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ENTITIES DocBook XML Character Entities V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/dbcentx.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "public" \
        "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.5//EN" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5/dbgenent.mod" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "rewriteSystem" \
        "http://www.oasis-open.org/docbook/xml/4.5" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5" \
        /etc/xml/docbook &&
    xmlcatalog --noout --add "rewriteURI" \
        "http://www.oasis-open.org/docbook/xml/4.5" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5" \
        /etc/xml/docbook

Create (or update) and populate the `/etc/xml/catalog` catalog file by running the following commands as the `root` user:

    if [ ! -e /etc/xml/catalog ]; then
        xmlcatalog --noout --create /etc/xml/catalog
    fi &&
    xmlcatalog --noout --add "delegatePublic" \
        "-//OASIS//ENTITIES DocBook XML" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog &&
    xmlcatalog --noout --add "delegatePublic" \
        "-//OASIS//DTD DocBook XML" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateSystem" \
        "http://www.oasis-open.org/docbook/" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
        "http://www.oasis-open.org/docbook/" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog

### Configuring DocBook-4.5 XML DTD

#### Config Files

`/etc/xml/catalog` and `/etc/xml/docbook`

#### Configuration Information

### Caution

Various BLFS packages request DocBook XML DTD version 4.x before V4.5, so the following step must be done for those packages to be built successfully.

The above installation creates the files and updates the catalogs. In order to utilize DocBook XML DTD V4.5 when any version 4.x is requested in the System Identifier, you need to add additional statements to the catalog files. If you have any of the DocBook XML DTD's referenced below already installed on your system, remove those entries from the for command below (issue the commands as the `root` user):

    for DTDVERSION in 4.1.2 4.2 4.3 4.4
    do
      xmlcatalog --noout --add "public" \
        "-//OASIS//DTD DocBook XML V$DTDVERSION//EN" \
        "http://www.oasis-open.org/docbook/xml/$DTDVERSION/docbookx.dtd" \
        /etc/xml/docbook
      xmlcatalog --noout --add "rewriteSystem" \
        "http://www.oasis-open.org/docbook/xml/$DTDVERSION" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5" \
        /etc/xml/docbook
      xmlcatalog --noout --add "rewriteURI" \
        "http://www.oasis-open.org/docbook/xml/$DTDVERSION" \
        "file:///usr/share/xml/docbook/xml-dtd-4.5" \
        /etc/xml/docbook
      xmlcatalog --noout --add "delegateSystem" \
        "http://www.oasis-open.org/docbook/xml/$DTDVERSION/" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog
      xmlcatalog --noout --add "delegateURI" \
        "http://www.oasis-open.org/docbook/xml/$DTDVERSION/" \
        "file:///etc/xml/docbook" \
        /etc/xml/catalog
    done

### Contents

Installed Programs: None
Installed Libraries: None
Installed Files: DTD, MOD and ENT files
Installed Directories: /etc/xml and /usr/share/xml/docbook/xml-dtd-4.5

#### Short Descriptions

`DTD files` | contain a document type definition which defines the element types and the attribute lists that can be used in the corresponding `XML` files
`MOD files` | contain components of the document type definition that are sourced into the `DTD` files
`ENT files` | contain lists of named character entities allowed in HTML

Last updated on

## docbook-xml-5.0

### Introduction to DocBook XML DTD and Schemas 5.0

The DocBook XML DTD and Schemas-5.0 package contains document type definitions and schemas for verification of XML data files against the DocBook rule set. These are useful for structuring books and software documentation to a standard allowing you to utilize transformations already written for that standard. In addition to providing a DTD, version 5 introduced the RelaxNG schema and Schematron rules, and is incompatible with previous versions of DocBook XML.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://docbook.org/xml/5.0/docbook-5.0.zip

- Download MD5 sum: 2411c19ed4fb141f3fa3d389fae40736

- Download size: 820 KB

- Estimated disk space required: 6.2 MB

- Estimated build time: 0.1 SBU

#### DocBook XML DTD and Schemas 5.0 Dependencies

##### Required

libxml2-2.9.12, sgml-common-0.6.3, and UnZip-6.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook5-xml

### Installation of DocBook XML DTD and Schemas 5.0

Install DocBook XML DTD and Schemas by running the following commands as the `root` user:

    install -vdm755 /usr/share/xml/docbook/schema/{dtd,rng,sch,xsd}/5.0 &&
    install -vm644  dtd/* /usr/share/xml/docbook/schema/dtd/5.0         &&
    install -vm644  rng/* /usr/share/xml/docbook/schema/rng/5.0         &&
    install -vm644  sch/* /usr/share/xml/docbook/schema/sch/5.0         &&
    install -vm644  xsd/* /usr/share/xml/docbook/schema/xsd/5.0

Create (or update) and populate the `/etc/xml/docbook-5.0` catalog file by running the following commands as the `root` user:

    if [ ! -e /etc/xml/docbook-5.0 ]; then
        xmlcatalog --noout --create /etc/xml/docbook-5.0
    fi &&

    xmlcatalog --noout --add "public" \
      "-//OASIS//DTD DocBook XML 5.0//EN" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "system" \
      "http://www.oasis-open.org/docbook/xml/5.0/dtd/docbook.dtd" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "system" \
      "http://docbook.org/xml/5.0/dtd/docbook.dtd" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd" \
      /etc/xml/docbook-5.0 &&

    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbook.rng" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbook.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbook.rng" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbookxi.rng" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbookxi.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbookxi.rng" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rnc/docbook.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbook.rnc" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbook.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbook.rnc" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rnc/docbookxi.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbookxi.rnc" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbookxi.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.0/docbookxi.rnc" \
      /etc/xml/docbook-5.0 &&

    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/docbook.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/docbook.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/docbookxi.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/docbookxi.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/docbookxi.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/docbookxi.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/xi.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xi.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/xi.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xi.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/xlink.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xlink.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/xlink.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xlink.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/xml.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xml.xsd" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/xml.xsd" \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/xml.xsd" \
      /etc/xml/docbook-5.0 &&

    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/sch/docbook.sch" \
      "file:///usr/share/xml/docbook/schema/sch/5.0/docbook.sch" \
      /etc/xml/docbook-5.0 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/sch/docbook.sch" \
      "file:///usr/share/xml/docbook/schema/sch/5.0/docbook.sch" \
      /etc/xml/docbook-5.0

While again as the `root` user, create the individual catalogs:

    xmlcatalog --noout --create /usr/share/xml/docbook/schema/dtd/5.0/catalog.xml &&

    xmlcatalog --noout --add "public" \
      "-//OASIS//DTD DocBook XML 5.0//EN" \
      "docbook.dtd" /usr/share/xml/docbook/schema/dtd/5.0/catalog.xml &&
    xmlcatalog --noout --add "system" \
      "http://www.oasis-open.org/docbook/xml/5.0/dtd/docbook.dtd" \
      "docbook.dtd" /usr/share/xml/docbook/schema/dtd/5.0/catalog.xml &&

    xmlcatalog --noout --create /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbook.rng" \
      "docbook.rng" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" \
      "docbook.rng" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbookxi.rng" \
      "docbookxi.rng" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" \
      "docbookxi.rng" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbook.rnc" \
      "docbook.rnc" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rnc" \
      "docbook.rnc" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/rng/docbookxi.rnc" \
      "docbookxi.rnc" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rnc" \
      "docbookxi.rnc" /usr/share/xml/docbook/schema/rng/5.0/catalog.xml &&

    xmlcatalog --noout --create /usr/share/xml/docbook/schema/sch/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/sch/docbook.sch" \
      "docbook.sch" /usr/share/xml/docbook/schema/sch/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/sch/docbook.sch" \
      "docbook.sch" /usr/share/xml/docbook/schema/sch/5.0/catalog.xml &&

    xmlcatalog --noout --create /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/docbook.xsd" \
      "docbook.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/docbook.xsd" \
      "docbook.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/docbookxi.xsd" \
      "docbookxi.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.0/xsd/docbookxi.xsd" \
      "docbookxi.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.0/xsd/xlink.xsd" \
      "xlink.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
       "http://www.oasis-open.org/docbook/xml/5.0/xsd/xlink.xsd" \
       "xlink.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
       "http://docbook.org/xml/5.0/xsd/xml.xsd" \
       "xml.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml &&
    xmlcatalog --noout --add "uri" \
       "http://www.oasis-open.org/docbook/xml/5.0/xsd/xml.xsd" \
       "xml.xsd" /usr/share/xml/docbook/schema/xsd/5.0/catalog.xml

Create (or update) and populate the system XML catalog (`/etc/xml/catalog`) by running the following commands as the `root` user:

    if [ ! -e /etc/xml/catalog ]; then
        xmlcatalog --noout --create /etc/xml/catalog
    fi &&
    xmlcatalog --noout --add "delegatePublic" \
      "-//OASIS//DTD DocBook XML 5.0//EN" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateSystem" \
      "http://docbook.org/xml/5.0/dtd/" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.0/dtd/" \
      "file:///usr/share/xml/docbook/schema/dtd/5.0/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.0/rng/"  \
      "file:///usr/share/xml/docbook/schema/rng/5.0/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.0/sch/"  \
      "file:///usr/share/xml/docbook/schema/sch/5.0/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.0/xsd/"  \
      "file:///usr/share/xml/docbook/schema/xsd/5.0/catalog.xml" \
      /etc/xml/catalog

### Configuring DocBook XML DTD and Schemas 5.0

#### Config Files

`/etc/xml/catalog` and `/etc/xml/docbook-5.0`

### Contents

Installed Files: DTD, RNC, RNG, SCH and XSD files
Installed Directories: /etc/xml and /usr/share/xml/docbook/schema/{dtd,rng,sch,xsd}/5.0

#### Short Descriptions

`DTD files` | contain the DocBook 5.0 document type definitions which define the element types and the attribute lists that can be used in the corresponding `XML` files
`RNC, RNG, and SCH files` | contain the Docbook 5.0 RelaxNG, RelaxNG Compact, and Schematron schema definitions
`XSD files` | files contain DocBook-5.0 Schematron rules

Last updated on

## docbook-xml-5.1

### Introduction to DocBook XML Schemas 5.1

The DocBook XML Schemas-5.1 package contains schema files and Schematron rules for verification of XML data files against the DocBook rule set. These are useful for structuring books and software documentation to a standard allowing you to utilize transformations already written for that standard.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://docbook.org/xml/5.1/docbook-v5.1-os.zip

- Download MD5 sum: d8bea8ddfc5743578a31cb18f9ae1f5a

- Download size: 752 KB

- Estimated disk space required: 8.5 MB

- Estimated build time: less than 0.1 SBU

#### DocBook XML Schemas 5.1 Dependencies

##### Required

libxml2-2.9.12, sgml-common-0.6.3, and UnZip-6.0

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook51-xml

### Installation of DocBook XML Schemas 5.1

### Note

The package source is distributed in `zip` format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook XML Schemas by running the following commands as the `root` user:

    install -vdm755 /usr/share/xml/docbook/schema/{rng,sch}/5.1         &&
    install -m644   schemas/rng/* /usr/share/xml/docbook/schema/rng/5.1 &&
    install -m644   schemas/sch/* /usr/share/xml/docbook/schema/sch/5.1 &&
    install -m755   tools/db4-entities.pl /usr/bin                      &&
    install -vdm755 /usr/share/xml/docbook/stylesheet/docbook5          &&
    install -m644   tools/db4-upgrade.xsl \
                    /usr/share/xml/docbook/stylesheet/docbook5

Create (or update) and populate the `/etc/xml/docbook-5.1` catalog file by running the following commands as the `root` user:

    if [ ! -e /etc/xml/docbook-5.1 ]; then
      xmlcatalog --noout --create /etc/xml/docbook-5.1
    fi &&

    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/rng/docbook.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbook.rng" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/rng/docbook.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbook.rng" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/rng/docbookxi.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbookxi.rng" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/rng/docbookxi.rng" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbookxi.rng" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/rnc/docbook.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbook.rnc" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/rng/docbook.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbook.rnc" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/rnc/docbookxi.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbookxi.rnc" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/rng/docbookxi.rnc" \
      "file:///usr/share/xml/docbook/schema/rng/5.1/docbookxi.rnc" \
      /etc/xml/docbook-5.1 &&

    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/sch/docbook.sch" \
      "file:///usr/share/xml/docbook/schema/sch/5.1/docbook.sch" \
      /etc/xml/docbook-5.1 &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/sch/docbook.sch" \
      "file:///usr/share/xml/docbook/schema/sch/5.1/docbook.sch" \
      /etc/xml/docbook-5.1

While again as the `root` user, create the individual catalogs:

    xmlcatalog --noout --create /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&

    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/schemas/rng/docbook.schemas/rng" \
      "docbook.schemas/rng" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/schemas/rng/docbook.schemas/rng" \
      "docbook.schemas/rng" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/schemas/rng/docbookxi.schemas/rng" \
      "docbookxi.schemas/rng" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/schemas/rng/docbookxi.schemas/rng" \
      "docbookxi.schemas/rng" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/schemas/rng/docbook.rnc" \
      "docbook.rnc" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/schemas/rng/docbook.rnc" \
      "docbook.rnc" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/schemas/rng/docbookxi.rnc" \
      "docbookxi.rnc" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/schemas/rng/docbookxi.rnc" \
      "docbookxi.rnc" /usr/share/xml/docbook/schema/rng/5.1/catalog.xml
    xmlcatalog --noout --create /usr/share/xml/docbook/schema/sch/5.1/catalog.xml &&

    xmlcatalog --noout --add "uri" \
      "http://docbook.org/xml/5.1/schemas/sch/docbook.schemas/sch" \
      "docbook.schemas/sch" /usr/share/xml/docbook/schema/sch/5.1/catalog.xml &&
    xmlcatalog --noout --add "uri" \
      "http://www.oasis-open.org/docbook/xml/5.1/schemas/sch/docbook.schemas/sch" \
      "docbook.schemas/sch" /usr/share/xml/docbook/schema/sch/5.1/catalog.xml

Create (or update) and populate the system XML catalog (`/etc/xml/catalog`) by running the following commands as the `root` user:

    if [ ! -e /etc/xml/catalog ]; then
      xmlcatalog --noout --create /etc/xml/catalog
    fi &&
    xmlcatalog --noout --add "delegatePublic" \
      "-//OASIS//DTD DocBook XML 5.1//EN" \
      "file:///usr/share/xml/docbook/schema/dtd/5.1/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateSystem" \
      "http://docbook.org/xml/5.1/dtd/" \
      "file:///usr/share/xml/docbook/schema/dtd/5.1/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.1/dtd/" \
      "file:///usr/share/xml/docbook/schema/dtd/5.1/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.1/rng/"  \
      "file:///usr/share/xml/docbook/schema/rng/5.1/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.1/sch/"  \
      "file:///usr/share/xml/docbook/schema/sch/5.1/catalog.xml" \
      /etc/xml/catalog &&
    xmlcatalog --noout --add "delegateURI" \
      "http://docbook.org/xml/5.1/xsd/"  \
      "file:///usr/share/xml/docbook/schema/xsd/5.1/catalog.xml" \
      /etc/xml/catalog

### Configuring DocBook XML Schemas 5.1

#### Config Files

`/etc/xml/catalog` and `/etc/xml/docbook-5.1`

### Contents

Installed Programs: db4-entities.pl
Installed Files: RNC, RNG, SCH, and XSL files
Installed Directories: /etc/xml, /usr/share/xml/docbook/stylesheets, and /usr/share/xml/docbook/schema/{rng,sch}/5.1

#### Short Descriptions

`db4-entities.pl` | is a script to convert DocBook 4.x filed to DocBook 5.1
`RNC, RNG, and SCH files` | contain the Docbook 5.1 RelaxNG, RelaxNG Compact, and Schematron schema definitions
`db4-upgrade.xsl` | is an XSL stylesheet to assist in conversion from DocBook 4.x files to DocBook 5.1

Last updated on

## docbook-xsl-nons-1.79.2

### Introduction to DocBook XSL Stylesheets

The DocBook XSL Stylesheets package contains XSL stylesheets. These are useful for performing transformations on XML DocBook files.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/docbook/xslt10-stylesheets/releases/download/release/1.79.2/docbook-xsl-nons-1.79.2.tar.bz2

- Download MD5 sum: 2666d1488d6ced1551d15f31d7ed8c38

- Download size: 22 MB

- Estimated disk space required: 58 MB (includes installing optional documentation)

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/docbook-xsl-nons-1.79.2-stack_fix-1.patch

Optional documentation

- Download (HTTP): https://github.com/docbook/xslt10-stylesheets/releases/download/release/1.79.2/docbook-xsl-doc-1.79.2.tar.bz2

- Download MD5 sum: 62375ca864fc198cb2b17d98209d0b8c

- Download size: 522 KB

#### DocBook XSL Stylesheets Dependencies

##### Recommended (at runtime)

libxml2-2.9.12

##### Optional (all used at runtime)

apache-ant-1.10.11 (to produce “webhelp” documents), libxslt-1.1.34 (or any other XSLT processor), to process Docbook documents - the Python2 modules libxml2 and libxslt can be used, Python-2.7.18 (at runtime), Ruby-3.0.2 (to utilize the “epub” stylesheets), Zip-3.0 (to produce “epub3” documents), and Saxon6 and Xerces2 Java (used with apache-ant-1.10.11 to produce “webhelp” documents)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/docbook-xsl

### Installation of DocBook XSL Stylesheets

First, fix a problem that causes stack overflows when doing recursion:

    patch -Np1 -i ../docbook-xsl-nons-1.79.2-stack_fix-1.patch

If you downloaded the optional documentation tarball, unpack it with the following command:

    tar -xf ../docbook-xsl-doc-1.79.2.tar.bz2 --strip-components=1

BLFS does not install the required packages to run the test suite and provide meaningful results.

Install DocBook XSL Stylesheets by running the following commands as the `root` user:

    install -v -m755 -d /usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2 &&

    cp -v -R VERSION assembly common eclipse epub epub3 extensions fo        \
             highlighting html htmlhelp images javahelp lib manpages params  \
             profiling roundtrip slides template tests tools webhelp website \
             xhtml xhtml-1_1 xhtml5                                          \
        /usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2 &&

    ln -s VERSION /usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2/VERSION.xsl &&

    install -v -m644 -D README \
                        /usr/share/doc/docbook-xsl-nons-1.79.2/README.txt &&
    install -v -m644    RELEASE-NOTES* NEWS* \
                        /usr/share/doc/docbook-xsl-nons-1.79.2

If you downloaded the optional documentation tarball, install the documentation by issuing the following command as the `root` user:

    cp -v -R doc/* /usr/share/doc/docbook-xsl-nons-1.79.2

### Configuring DocBook XSL Stylesheets

#### Config Files

`/etc/xml/catalog`

#### Configuration Information

### Note

If you are installing the current version of docbook-xsl-nons over a previous version of docbook-xsl, then remove the old rewrite entries in the catalog as the `root` user:

    sed -i '/rewrite/d' /etc/xml/catalog

Create (or append) and populate the XML catalog file using the following commands as the `root` user:

    if [ ! -d /etc/xml ]; then install -v -m755 -d /etc/xml; fi &&
    if [ ! -f /etc/xml/catalog ]; then
        xmlcatalog --noout --create /etc/xml/catalog
    fi &&

    xmlcatalog --noout --add "rewriteSystem" \
               "https://cdn.docbook.org/release/xsl-nons/1.79.2" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteURI" \
               "https://cdn.docbook.org/release/xsl-nons/1.79.2" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteSystem" \
               "https://cdn.docbook.org/release/xsl-nons/current" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteURI" \
               "https://cdn.docbook.org/release/xsl-nons/current" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteSystem" \
               "http://docbook.sourceforge.net/release/xsl/current" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteURI" \
               "http://docbook.sourceforge.net/release/xsl/current" \
               "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
        /etc/xml/catalog

Occasionally, you may find the need to install other versions of the XSL stylesheets as some projects reference a specific version. One example is BLFS-6.0, which required the 1.67.2 version. In these instances you should install any other required version in its own versioned directory and create catalog entries as follows (substitute the desired version number for `<version>`):

    xmlcatalog --noout --add "rewriteSystem" \
               "http://docbook.sourceforge.net/release/xsl/<version>" \
               "/usr/share/xml/docbook/xsl-stylesheets-<version>" \
        /etc/xml/catalog &&

    xmlcatalog --noout --add "rewriteURI" \
               "http://docbook.sourceforge.net/release/xsl/<version>" \
               "/usr/share/xml/docbook/xsl-stylesheets-<version>" \
        /etc/xml/catalog

### Contents

Installed Files: /usr/share/xml/docbook/xsl-stylesheets-1.79.2/*/*.xsl
Installed Directories: /usr/share/xml/docbook/xsl-stylesheets-1.79.2 and /usr/share/doc/docbook-xsl-1.79.2

#### Short Descriptions

`XSL Stylesheets` | are used for performing transformations on XML files

Last updated on

## itstool-2.0.6

### Introduction to itstool

Itstool extracts messages from XML files and outputs PO template files, then merges translations from MO files to create translated XML files. It determines what to translate and how to chunk it into messages using the W3C Internationalization Tag Set (ITS).

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://files.itstool.org/itstool/itstool-2.0.6.tar.bz2

- Download MD5 sum: 4306eeba4f4aee6b393d14f9c3c57ca1

- Download size: 104 KB

- Estimated disk space required: 676 KB

- Estimated build time: less than 0.1 SBU

#### Itstool Dependencies

##### Required

docbook-xml-4.5

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/itstool

### Installation of itstool

Install itstool by running the following commands:

    PYTHON=/usr/bin/python3 ./configure --prefix=/usr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

### Contents

Installed Program: itstool
Installed Libraries: None
Installed Directory: /usr/share/itstool

#### Short Descriptions

itstool | is used to create translated XML files

Last updated on

## xmlto-0.0.28

### Introduction to xmlto

The xmlto package is a front-end to a XSL toolchain. It chooses an appropriate stylesheet for the conversion you want and applies it using an external XSLT processor. It also performs any necessary post-processing.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://releases.pagure.org/xmlto/xmlto-0.0.28.tar.bz2

- Download MD5 sum: 93bab48d446c826399d130d959fe676f

- Download size: 128 KB

- Estimated disk space required: 1.5 MB (with tests)

- Estimated build time: less than 0.1 SBU (with tests)

#### xmlto Dependencies

##### Required

docbook-xml-4.5, docbook-xsl-1.79.2, and libxslt-1.1.34

##### Optional (for DVI, PDF, and postscript backend post-processing)

fop-2.6, dblatex, and PassiveTeX

##### Optional (for text backend post-processing)

One of Links-2.23, Lynx-2.8.9rel.1, W3m, or ELinks

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xmlto

### Installation of xmlto

Install xmlto by running the following commands:

    LINKS="/usr/bin/links" \
    ./configure --prefix=/usr &&

    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`LINKS="/usr/bin/links"`: This environment variable fixes a bug causing xmlto to think that links command is the same as elinks. Setting this variable does not cause problems if links is not installed, unless you have ELinks installed, and wish to use it for text backend post-processing, in which case, remove it.

### Contents

Installed Programs: xmlif and xmlto
Installed Libraries: None
Installed Directory: /usr/share/xmlto

#### Short Descriptions

xmlif | is a conditional processing instructions for XML
xmlto | applies an XSL stylesheet to an XML document

Last updated on

## Chapter 50. PostScript

This chapter includes applications that create, manipulate or view PostScript files and create or view Portable Document Format PDF files.

## Enscript-1.6.6

### Introduction to Enscript

Enscript converts ASCII text files to PostScript, HTML, RTF, ANSI and overstrikes.

This package is known to build and work properly using an LFS-11.0 platform.

### Caution

Enscript cannot convert UTF-8 encoded text to PostScript. The issue is discussed in detail in the Needed Encoding Not a Valid Option section of the Locale Related Issues page. The solution is to use paps-0.7.1, instead of Enscript, for converting UTF-8 encoded text to PostScript.

#### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/enscript/enscript-1.6.6.tar.gz

- Download (FTP): ftp://ftp.gnu.org/gnu/enscript/enscript-1.6.6.tar.gz

- Download MD5 sum: 3acc242b829adacabcaf28533f049afd

- Download size: 1.3 MB

- Estimated disk space required: 14 MB

- Estimated build time: 0.1 SBU

#### Enscript Dependencies

##### Optional

texlive-20210325 (or install-tl-unx)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Enscript

### Installation of Enscript

Install Enscript by running the following commands:

    ./configure --prefix=/usr              \
                --sysconfdir=/etc/enscript \
                --localstatedir=/var       \
                --with-media=Letter &&
    make &&

    pushd docs &&
      makeinfo --plaintext -o enscript.txt enscript.texi &&
    popd

If you have texlive-20210325 installed, you can create Postscript and PDF documentation by issuing (does not support parallel make):

    make -j1 -C docs ps pdf

To test the results, issue: make check.

Now, as the `root` user:

    make install &&

    install -v -m755 -d /usr/share/doc/enscript-1.6.6 &&
    install -v -m644    README* *.txt docs/*.txt \
                        /usr/share/doc/enscript-1.6.6

If you built Postscript and PDF documentation, install it using the following command as the `root` user:

    install -v -m644 docs/*.{dvi,pdf,ps} \
                     /usr/share/doc/enscript-1.6.6

### Command Explanations

`--sysconfdir=/etc/enscript`: This switch puts configuration data in `/etc/enscript` instead of `/usr/etc`.

`--localstatedir=/var`: This switch sets the directory for runtime data to `/var` instead of `/usr/var`.

`--with-media=Letter`: This switch sets the medium format to letter size instead of the A4 default.

### Contents

Installed Programs: diffpp, enscript, mkafmmap, over, sliceprint, and states
Installed Libraries: None
Installed Directories: /etc/enscript, /usr/share/doc/enscript-1.6.6, and /usr/share/enscript

#### Short Descriptions

diffpp | converts diff output files to a format suitable to be printed with enscript
enscript | is a filter, used primarily by printing scripts, that converts ASCII text files to PostScript, HTML, RTF, ANSI and overstrikes
mkafmmap | creates a font map from a given file
over | is a script which calls enscript and passes the correct parameters to create overstriked fonts
sliceprint | slices documents with long lines
states | is an awk-like text processing tool with some state machine extensions. It is designed for program source code highlighting and for similar tasks where state information helps input processing

Last updated on

## ePDFView-0.1.8

### Introduction to ePDFView

ePDFView is a free standalone lightweight PDF document viewer using Poppler and GTK+ libraries. It is a good replacement for Evince as it does not rely upon GNOME libraries.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://anduin.linuxfromscratch.org/BLFS/epdfview/epdfview-0.1.8.tar.bz2

- Download MD5 sum: e50285b01612169b2594fea375f53ae4

- Download size: 456 KB

- Estimated disk space required: 6 MB

- Estimated build time: less than 0.1 SBU

#### Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/epdfview-0.1.8-fixes-2.patch

#### ePDFView Dependencies

##### Required

GTK+-2.24.33 and Poppler-21.08.0

##### Recommended (mainly for Desktop Environments)

desktop-file-utils-0.26 and hicolor-icon-theme-0.17

##### Optional

Cups-2.3.3op2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/epdfview

### Installation of ePDFView

Install ePDFView by running the following commands:

    patch -Np1 -i ../epdfview-0.1.8-fixes-2.patch &&
    ./configure --prefix=/usr &&
    make

This package does not come with a test suite.

Now, as the `root` user:

    make install

For Desktop Environment users, further (optional) instructions are necessary for properly displaying `epdfview.desktop` in the menu. As `root` user:

    for size in 24 32 48; do
      ln -svf ../../../../epdfview/pixmaps/icon_epdfview-$size.png \
              /usr/share/icons/hicolor/${size}x${size}/apps
    done &&
    unset size &&

    update-desktop-database &&
    gtk-update-icon-cache -t -f --include-image-data /usr/share/icons/hicolor

### Command Explanations

patch -Np1 -i ../epdfview-0.1.8-fixes-2.patch The patch does four things: fixes compiling with glib-2.32 or greater, corrects red appearing as blue with recent versions of poppler, allows the application to compile when Cups-2.3.3op2 has been installed, and fixes the display of embedded png images.

### Contents

Installed Program: epdfview
Installed Libraries: None
Installed Directory: /usr/share/epdfview

#### Short Descriptions

epdfview | is a Gtk+-2 program for viewing PDF documents

Last updated on

## fop-2.6

### Introduction to fop

The FOP (Formatting Objects Processor) package contains a print formatter driven by XSL formatting objects (XSL-FO). It is a Java application that reads a formatting object tree and renders the resulting pages to a specified output. Output formats currently supported include PDF, PCL, PostScript, SVG, XML (area tree representation), print, AWT, MIF and ASCII text. The primary output target is PDF.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://archive.apache.org/dist/xmlgraphics/fop/source/fop-2.6-src.tar.gz

- Download MD5 sum: 1d6bc84d2ab7f971bbc628080e3c307f

- Download size: 26 MB

- Estimated disk space required: 522 MB (including files downloaded to the user directory)

- Estimated build time: 0.4 SBU

#### Additional Downloads

Required Additional Downloads:

- PDFBox:
  http://archive.apache.org/dist/pdfbox/2.0.24/pdfbox-2.0.24.jar
  9e97fc59c662738a5fb82dcc447d1e2f
  2.7 MB

- PDFBox Fonts:
  http://archive.apache.org/dist/pdfbox/2.0.24/fontbox-2.0.24.jar
  6c2066df0d706d85e950fe8c73d52ed8
  1.5 MB

- Maven build system:
  http://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  9792c717f5845d952907d5144b8253c3
  9.1 MB (additionally, about 82 MB are downloaded to the building user's directory)

Recommended packages

- Objects for Formatting Objects (OFFO) hyphenation patterns:
  https://downloads.sourceforge.net/offo/2.2/offo-hyphenation.zip
  bf9c09bf05108ef9661b8f08d91c2336
  862 KB

#### fop Dependencies

##### Required

apache-ant-1.10.11

##### Optional

X Window System (to run tests), JAI Image I/O Tools, and JEuclid

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/fop

### Installation of fop

Ensure `$JAVA_HOME` is set correctly before beginning the build. To build the JIMI SDK and/or XMLUnit extension classes, ensure the corresponding `.jar` files can be found via the `CLASSPATH` environment variable.

#### Installing OFFO Hyphenation Patterns

Copy the XML hyphenation patterns into the fop source tree by running the following commands:

    unzip ../offo-hyphenation.zip &&
    cp offo-hyphenation/hyph/* fop/hyph &&
    rm -rf offo-hyphenation

#### Installing a temporary Maven binary

Starting with fop-2.5, the Maven build system is required. We use the binary provided by apache, that we install in a temporary location:

    tar -xf ../apache-maven-3.6.3-bin.tar.gz -C /tmp

#### Installing fop Components

The javadoc command that ships with OpenJDK 10 and later has become much stricter than previous versions regarding conformance of the Javadoc comments in source code to HTML. The FOP documentation does not meet those standards, so the conformance checks have to be disabled. This can be done with the following command:

    sed -i '\@</javad@i\
    <arg value="-Xdoclint:none"/>\
    <arg value="--allow-script-in-comments"/>\
    <arg value="--ignore-source-errors"/>' \
        fop/build.xml

Fix building with JDK-16 due to an outdated Apache Maven plugin:

    sed -i 's/<war.plugin.version>2.2/<war.plugin.version>3.3.1/' pom.xml

The `build.xml` file calls for an old version of PDFBox components that are no longer available. Copy the updated PDFBox components into the source tree:

    cp ../{pdf,font}box-2.0.24.jar fop/lib

Compile fop by running the following commands:

    cd fop &&

    LC_ALL=en_US.UTF-8                     \
    PATH=$PATH:/tmp/apache-maven-3.6.3/bin \
    ant all javadocs &&

    mv build/javadocs .

This package comes with a testsuite, but the java infrastructure installed in this book does not allow running it.

Now, install Fop as the `root` user:

    install -v -d -m755 -o root -g root          /opt/fop-2.6 &&
    cp -vR build conf examples fop* javadocs lib /opt/fop-2.6 &&
    chmod a+x /opt/fop-2.6/fop                                &&
    ln -v -sfn fop-2.6 /opt/fop

The last thing to do is to clean what we have done:

    rm -rf /tmp/apache-maven-3.6.3

### Command Explanations

sed -i ... build.xml: This adds two switches to the javadoc command, preventing some errors from occuring when building the documentation.

export LC_ALL=en_US.UTF-8: the compiler fails if using an ASCII locale.

ant `target`: This reads the file `build.xml` and builds the target: `compile` compiles the java sources, `jar-main` generates jar archives, `jar-hyphenation` generates the hyphenation patterns for FOP, `junit` runs the junit tests, and `javadocs` builds the documentation. The `all` target runs all of the above.

ln -v -sf fop-2.6 /opt/fop: This is optional and creates a convenience symlink so that `$FOP_HOME` doesn't have to be changed each time there's a package version change.

### Configuring fop

#### Config Files

`~/.foprc`

#### Configuration Information

Using fop to process some large FO's (including the FO derived from the BLFS XML sources), can lead to memory errors. Unless you add a parameter to the java command used in the fop script you may receive messages similar to the one shown below:

`Exception in thread "main" java.lang.OutOfMemoryError: Java heap space`

To avoid errors like this, you need to pass an extra parameter to the java command used in the fop script. This can be accomplished by creating a `~/.foprc` (which is sourced by the fop script) and adding the parameter to the `FOP_OPTS` environment variable.

The fop script looks for a `FOP_HOME` environment variable to locate the fop class libraries. You can create this variable using the `~/.foprc` file as well. Create a `~/.foprc` file using the following commands:

    cat > ~/.foprc << "EOF"
    FOP_OPTS="-Xmx<RAM_Installed>m"
    FOP_HOME="/opt/fop"
    EOF

Replace `<RAM_Installed>` with a number representing the amount of RAM installed in your computer (in megabytes). An example would be `FOP_OPTS="-Xmx768m"`.

To include the fop script in your path, update the system-wide profile with the following command as the `root` user:

    cat > /etc/profile.d/fop.sh << "EOF"
    # Begin /etc/profile.d/fop.sh

    pathappend /opt/fop

    # End /etc/profile.d/fop.sh
    EOF

### Note

Running fop can be somewhat verbose. The default logging level can be changed from INFO to any of FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, ALL, or OFF. To do this, edit `$JAVA_HOME/jre/lib/logging.properties` and change the entries for `.level` and `java.util.logging.ConsoleHandler.level` to the desired value.

### Contents

Installed Programs: fop
Installed Libraries: fop.jar and numerous support library classes located in `/opt/fop/{build,lib}`; JAI components include libmlib_jai.so, jai_codec.jar, jai_core.jar, and mlibwrapper_jai.jar
Installed Directory: /opt/fop-2.6

#### Short Descriptions

fop | is a wrapper script to the java command which sets up the fop environment and passes the required parameters
`fop.jar` | contains all the fop Java classes

Last updated on

## MuPDF-1.18.0

### Introduction to MuPDF

MuPDF is a lightweight PDF and XPS viewer.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://www.mupdf.com/downloads/archive/mupdf-1.18.0-source.tar.gz

- Download MD5 sum: 6f42be1365350f05270f8776517a3872

- Download size: 69 MB

- Estimated disk space required: 320 MB

- Estimated build time: 0.2 SBU (Using parallelism=4)

#### Required Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/mupdf-1.18.0-security_fix-1.patch

#### MuPDF Dependencies

##### Required

GLU-9.0.2 and Xorg Libraries

##### Recommended

HarfBuzz-2.9.0, libjpeg-turbo-2.1.1, OpenJPEG-2.4.0, and cURL-7.78.0

##### Optional

xdg-utils-1.1.3 (runtime), jbig2dec, and MuJS

##### Required (runtime)

X Window System

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/mupdf

### Installation of MuPDF

First, fix the Makefile to link properly with the shared library:

    sed -i '/MU.*_EXE. :/{
            s/\(.(MUPDF_LIB)\)\(.*\)$/\2 | \1/
            N
            s/$/ -lmupdf -L$(OUT)/
            }' Makefile

Install MuPDF by running the following commands:

    cat > user.make << EOF &&
    USE_SYSTEM_FREETYPE := yes
    USE_SYSTEM_HARFBUZZ := yes
    USE_SYSTEM_JBIG2DEC := no
    USE_SYSTEM_JPEGXR := no # not used without HAVE_JPEGXR
    USE_SYSTEM_LCMS2 := no # need lcms2-art fork
    USE_SYSTEM_LIBJPEG := yes
    USE_SYSTEM_MUJS := no # build needs source anyways
    USE_SYSTEM_OPENJPEG := yes
    USE_SYSTEM_ZLIB := yes
    USE_SYSTEM_GLUT := no # need freeglut2-art fork
    USE_SYSTEM_CURL := yes
    USE_SYSTEM_GUMBO := no
    EOF

    export XCFLAGS=-fPIC                               &&
    patch -Np1 -i ../mupdf-1.18.0-security_fix-1.patch &&
    make build=release shared=yes                      &&
    unset XCFLAGS

This package does not come with a test suite.

Now, as the `root` user:

    make prefix=/usr                        \
         shared=yes                         \
         docdir=/usr/share/doc/mupdf-1.18.0 \
         install                            &&

    chmod 755 /usr/lib/libmupdf.so          &&
    ln -sfv mupdf-x11 /usr/bin/mupdf

### Command Explanations

ln -sfv mupdf-x11 /usr/bin/mupdf : This symbolic link chooses between mupdf-gl and mupdf-x11 when running mupdf.

### Contents

Installed Program: mupdf (symlink), mupdf-gl, mupdf-x11, mupdf-x11-curl, muraster, and mutool
Installed Libraries: libmupdf.so
Installed Directories: /usr/include/mupdf, /usr/share/doc/mupdf-1.18.0

#### Short Descriptions

mupdf | is a program for viewing PDF, XPS, EPUB, and CBZ documents, and various image formats such as PNG, JPEG, GIFF, and TIFF
mupdf-gl | same as mupdf, using an opengl renderer
mupdf-x11 | same as mupdf, using an X Window renderer
muraster | is a program used to perform rasterization tasks with PDF documents
mutool | is a program to perform various operations on PDF files, such as merging and cleaning PDF documents
`libmupdf.so` | contains the mupdf API functions

Last updated on

## paps-0.7.1

### Introduction to paps

paps is a text to PostScript converter that works through Pango. Its input is a UTF-8 encoded text file and it outputs vectorized PostScript. It may be used for printing any complex script supported by Pango.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/paps/paps-0.7.1.tar.gz

- Download MD5 sum: b058bcc7d958fb53408942088cc1f365

- Download size: 140 KB

- Estimated disk space required: 1 MB

- Estimated build time: less than 0.1 SBU

#### paps Dependencies

##### Required

Pango-1.48.9

##### Optional

Doxygen-1.9.2

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Paps

### Installation of paps

Install paps 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

### Contents

Installed Program: paps
Installed Library: None
Installed Directory: None

#### Short Descriptions

paps | is a text to PostScript converter that supports UTF-8 character encoding

Last updated on

## Chapter 51. Typesetting

This chapter includes texlive applications that create output equivalent to typesetting.

There are two alternative routes through this chapter:

Some people may wish to use the binary installer, either because of the complexity of installing all of texlive from source, or because they only want a part of the package, or perhaps because they wish to get updates as soon as those are available (the source is only updated annually, but the binaries and associated tex and sty files are updated for approximately 10 months). These people should begin at Setting the PATH for TeX Live and then follow the install-tl-unx instructions. After installing, they can run tlmgr to update their system.

Most people reading BLFS will wish to build from source. BLFS used to start by installing install-tl-unx and then use that to bootstrap the build. Nowadays, we build almost the whole of texlive without a binary install, by adding the separately-packaged texmf files into this build. For this, begin at Setting the PATH for TeX Live then go to texlive-20210325 which will install most of texlive, together with all of the supporting files. This almost-complete install can then be used to build the remaining parts of texlive: asymptote-2.70, biber-2.16 and xindy-2.5.1.

Because the texmf files (including documentation, fonts, scripts and supporting files) are all in one tarball, it is not practical to limit what gets extracted in a sensible way (you could exclude one or other of the typesetting engines, not its many supporting files) when building from source in this manner.

In either case, BLFS installs into `/opt/texlive/2021`.

Also, please note that texlive is released annually, and updating from the previous year to the current year is no longer supported. If for some reason you wish to keep versions for multiple years, for most things you can mount the old or new system at /opt/texlive and fix up your PATH as necessary. However doing that will not preserve any changes in `texmf-local` and if you build from source and try to run a newer version of biber with an older version of biblatex it is unlikely to work.

## Setting the PATH for TeX Live

Before starting to build TeX Live, set up your PATH so that the system can properly find the files. If you set up your login scripts as recommended in The Bash Shell Startup Files, update the needed paths by appending to the `extrapaths.sh` script. The programs are always installed in an <ARCH>-linux subdirectory and on 32-bit x86 this is always i386-linux. For x86_64 and i?86 we can generate this as $TEXARCH:

### Note

If upgrading from a previous year's version, you should manually edit `extrapaths.sh` to ensure that the version for the year you wish to use is the only TeX present (some people need to keep multiple years available to ensure there are no regressions in their documents).

    export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&

    cat >> /etc/profile.d/extrapaths.sh << EOF

    # Begin texlive addition

    pathappend /opt/texlive/2021/texmf-dist/doc/man  MANPATH
    pathappend /opt/texlive/2021/texmf-dist/doc/info INFOPATH
    pathappend /opt/texlive/2021/bin/$TEXARCH

    # End texlive addition

    EOF

    unset TEXARCH

### Note

The standard MANPATH and INFOPATH path are specified above to ensure they are included. If they are already set in the boot script procedure, the pathappend function will ensure duplicates are removed, so including them here will do no harm.

The new paths can be immediately activated by running source /etc/profile.

You should now proceed either to install-tl-unx for a binary installation of texlive, or to texlive-20210325 to begin installing from source.

Last updated on

## install-tl-unx

### Introduction to TeX Live and its installer

The TeX Live package is a comprehensive TeX document production system. It includes TeX, LaTeX2e, ConTeXt, Metafont, MetaPost, BibTeX and many other programs; an extensive collection of macros, fonts and documentation; and support for typesetting in many different scripts from around the world.

This page is for people who wish to use the binary installer to provide the programs, the scripts, and a lot of supporting files and documentation. The installer is updated frequently, so any published md5sum will soon be out of date. Newer versions of the installer are expected to work with these instructions, for so long as they install to a `2021/` directory.

There are two reasons why you may wish to install the binaries in BLFS: either you need a smaller install (e.g. at a minimum plain TeX without LaTeX2e, ConTeXt, etc), or you wish to use tlmgr to get updates whilst this version is supported (typically, until April of the year after it was released). For the latter, you might prefer to install in your `/home` directory as an unprivileged user, and to then make corresponding changes to the PATH in your `~/.bashrc` or equivalent.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz

- Download MD5 sum: Varies frequently

- Download size: 6.0 MB

- Estimated disk space required: 7.1 GB if everything is included

- Estimated build time: varies, depending on network speed and traffic

##### Recommended

GnuPG-2.2.29 (to validate both the initial downloads, and also any updates you might later make using tlmgr.)

##### Recommended (at runtime)

The binaries are mostly linked to included static libraries or general (LFS) system libraries, but a few of the programs and several scripts will fail if the following packages are not present:

ghostscript-9.54.0 is dynamically loaded by the external application dvisvgm, which is used by asy when that creates SVG files.

Xorg Libraries and libxcb-1.14 are needed for inimf, mf, pdfclose, pdfopen and xdvi-xaw. But if you are using asy, or using a TeX engine to create a PDF file, you will need an X Window System (for PDF files, this is to support a PDF viewer of your choice, for example epdfview-0.1.8).

The binary version of asy needs Freeglut-3.2.1.

### Note

As always with contributed binary software, it is possible that the required dependencies may change when the installer is updated. In particular, these dependencies have only been checked on x86_64.

Python-2.7.18 is used by many scripts - most are unmaintained. Many invoke `/usr/bin/env python`, a couple invoke `/usr/bin/python`. It is not generally known if these will work with a symlink to python3 (as used in some distros) and two from pythontex invoke python2. Ruby-3.0.2 is used by some scripts, mostly within mtx_context which is part of conTeXt, but also for one or two others, such as match_parens, which are generally useful. The perl module Tk, which needs to be run from an X11 session to run the tests and requires Tk-8.6.11.1, is used by one of the scripts for ptex (Japanese vertical writing), can be used by a conTeXt texfind script, and is needed for texdoctk (a GUI interface for finding documentation files and opening them with the appropriate viewer).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/tl-installer

### Binary Installation of TeX Live

The TeX Live set of programs with its supporting documents, fonts, and utilities is very large. The upstream maintainers recommend placing all files in a single directory structure. BLFS recommends `/opt/texlive`.

As with any other package, unpack the installer and change into its directory, `install-tl-<CCYYMMDD>`. This directory name changes when the installer is updated, so replace <CCYYMMDD> by the correct directory name.

### Note

The distribution binaries installed below may use static linking for general linux system libraries. Additional libraries or interpreters as specified in the dependencies section do not need to be present during the install, but the programs that need them will not run until their specific dependencies have been installed.

With all contributed binary software, there may be a mismatch between the builder's toolchain and your hardware. In most of TeX this will probably not matter, but in uncommon corner cases you might hit problems. e.g. if your x86_64 processor does not support 3dnowext or 3dnow, the 2014-06-28 binary failed in conTeXt when running LuaTeX, although lualatex worked, as did the i686 binaries on the same machine. In such cases, the easiest solution is to install texlive from source. Similarly, the x86_64 binary version of asy runs very slowly when creating 3-D diagrams.

Now, as the `root` user:

    TEXLIVE_INSTALL_PREFIX=/opt/texlive ./install-tl

This command is interactive and allows selection or modification of platform, packages, directories, and other options. The full installation scheme will require about 4.9 gigabytes of disk space. The time to complete the download will depend on your internet connection speed and the number of packages selected.

It has been established by debian that the python scripts in `latex-make` will work with python3, so update them to invoke that by running the following command as the `root` user:

    for F in /opt/texlive/2021/texmf-dist/scripts/latex-make/*.py ; do
      test -f $F && sed -i 's%/usr/bin/env python%/usr/bin/python3%' $F || true
    done

### Command Explanations

test -f $F && sed ...: in a small install these files might not be present, so test if they exist and if not return 'true' to avoid any error if this command has been copied into one of your own install scripts.

`./install-tl --location http://mirror.aut.ac.nz/CTAN/systems/texlive/tlnet/`: use a variation of this if you wish to use a different mirror, e.g. because you are in New Zealand but the installer chooses to use an Australian mirror. The list of mirrors is at http://ctan.org/mirrors.

### Contents

Installed Programs: Over 300 binaries and symlinks to scripts
Installed Libraries: None
Installed Directories: /opt/texlive

#### Short Descriptions

TeX programs | The programs included in TeX are too numerous to individually list. Please refer to the individual program HTML and PDF pages in the various html, man, or pdf files within the subdirectories of `2021/texmf-dist/`. Using texdoc pdflatex ( replace pdflatex with the command name ) may also be useful

Last updated on

## texlive-20210325-source

### Introduction to TeX Live from source

Most of TeX Live can be built from source without a pre-existing installation, but xindy (for indexing) needs working versions of latex and pdflatex when configure is run, and the testsuite and install for asy (for vector graphics) will fail if TeX has not already been installed. Additionally, biber is not provided within the texlive source and the version of dvisvgm in the texlive tree cannot be built if shared system libraries are used.

All of those packages are dealt with on their own pages and can be built after installing this package. If you have not already done so, you should start at Setting the PATH for TeX Live so that the final commands to initialise the new installation will be found.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (FTP): ftp://tug.org/texlive/historic/2021/texlive-20210325-source.tar.xz

- Download MD5 sum: 19da95538956e26570ef7fb202af258f

- Download size: 53 MB

- Estimated disk space required: 8.1 GB including the additional download and the tests, 7.0 GB installed

- Estimated build time: 4.2 SBU including the additional download and the tests, building with parallelism=4

#### Required Additional Downloads

Much of the texlive environment (including scripts, documentation, fonts, and various other files) is not part of the source tarball. You must download it separately. This will give you all of the additional files which are provided by a full install of the binary version, there is no realistic way to restrict which parts get installed.

Because of the size of this package, it is unlikely to be mirrored by BLFS mirrors. In case of difficulty, go to http://www.ctan.org/mirrors/ to find a more-accessible mirror.

- Download (FTP): ftp://tug.org/texlive/historic/2021/texlive-20210325-texmf.tar.xz

- Download MD5 sum: 2426a62e43f8b07397ef2dd8367e0465

- Download size: 3.3 GB

From the 2019 year, the tlpdb database of the packages within texlive is no-longer installed with the source. But texdoc needs a cache file derived from this (and will create the cache on its first run).

- Download (FTP): ftp://tug.org/texlive/historic/2021/texlive-20210325-tlpdb-full.tar.gz

- Download MD5 sum: af0240961ecd28be5fd30d0e99b341d5

- Download size: 3.0 MB

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/texlive-20210325-upstream_fixes-1.patch

#### TeX Live from source Dependencies

##### Recommended

ghostscript-9.54.0 including `libgs.so`, X Window System

The source ships with its own versions of many libraries, and will use them unless it is forced to use the system versions. The following are recommended so that the system version will be used: Fontconfig-2.13.1, FreeType-2.11.0, GC-8.0.4, Graphite2-1.3.14, HarfBuzz-2.9.0 (built with graphite2 enabled), ICU-69.1, libpaper-1.1.24+nmu5 (used by at least context and xelatex), and libpng-1.6.37

Furthermore, the instructions below assume you are using the layout described in Setting the PATH for TeX Live.

##### Optional

The source ships with its own versions of several libraries which are either not under active development, or only used for limited functionality. If you install these, as with some other optional dependencies in this book you will need to tell configure to use the system versions. GD, t1lib, ZZIPlib, TECkit

##### Runtime dependencies

Python-2.7.18 is used by many scripts - most are unmaintained. Many invoke `/usr/bin/env python`, a couple invoke `/usr/bin/python`. It is not generally known if these will work with a symlink to python3 (as used in some distros) and two from pythontex invoke python2. Ruby-3.0.2 is used by some scripts, mostly within mtx_context which is part of conTeXt, but also for one or two others, such as match_parens, which are generally useful. The perl module Tk, which needs to be run from an X11 session to run the tests and requires Tk-8.6.11.1, is used by one of the scripts for ptex (Japanese vertical writing), can be used by a conTeXt texfind script, and is needed for texdoctk (a GUI interface for finding documentation files and opening them with the appropriate viewer).

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/texlive

### Installation of TeX Live

Install TeX Live by running the following commands:

### Caution

If you wish to upgrade to current texlive on an older system where extra packages (asymptote. biber, dvisvgm or xindy) have been installed, you will need to reinstall those as well as fixing up your `PATH` for `/opt/texlive/2021`.

The shared libraries will be installed into a texlive directory. As the `root` user, add it to your `/etc/ld.so.conf`:

    cat >> /etc/ld.so.conf << EOF
    # Begin texlive 2021 addition

    /opt/texlive/2021/lib

    # End texlive 2021 addition
    EOF

### Note

A successful install requires some texlive commands to be run as the root user, so we will export the TEXARCH variable to let `root` use it.

Now, as a normal user:

    export TEXARCH=$(uname -m |
     sed -e 's/i.86/i386/' -e 's/$/-linux/')                 &&
    patch -Np1 -i ../texlive-20210325-upstream_fixes-1.patch &&

    mkdir texlive-build &&
    cd texlive-build    &&

    ../configure                                        \
        --prefix=/opt/texlive/2021                      \
        --bindir=/opt/texlive/2021/bin/$TEXARCH         \
        --datarootdir=/opt/texlive/2021                 \
        --includedir=/opt/texlive/2021/include          \
        --infodir=/opt/texlive/2021/texmf-dist/doc/info \
        --libdir=/opt/texlive/2021/lib                  \
        --mandir=/opt/texlive/2021/texmf-dist/doc/man   \
        --disable-native-texlive-build                  \
        --disable-static --enable-shared                \
        --disable-dvisvgm                               \
        --with-system-cairo                             \
        --with-system-fontconfig                        \
        --with-system-freetype2                         \
        --with-system-gmp                               \
        --with-system-graphite2                         \
        --with-system-harfbuzz                          \
        --with-system-icu                               \
        --with-system-libgs                             \
        --with-system-libpaper                          \
        --with-system-libpng                            \
        --with-system-mpfr                              \
        --with-system-pixman                            \
        --with-system-zlib                              \
        --with-banner-add=" - BLFS" &&

    make

To test the results, issue: make check.

Now, as the `root` user:

    make install-strip &&
    /sbin/ldconfig &&
    make texlinks &&
    mkdir -pv /opt/texlive/2021/tlpkg/TeXLive/ &&
    install -v -m644 ../texk/tests/TeXLive/* /opt/texlive/2021/tlpkg/TeXLive/ &&
    tar -xf ../../texlive-20210325-tlpdb-full.tar.gz -C /opt/texlive/2021/tlpkg

### Note

Only run make texlinks once. If it is rerun, it can change all the program symlinks so that they point to themselves and are useless.

Now install the additional files as the `root` user:

    tar -xf ../../texlive-20210325-texmf.tar.xz -C /opt/texlive/2021 --strip-components=1

It has been established by debian that the python scripts in `latex-make` will work with python3, so update them to invoke that by running the following command as the `root` user:

    for F in /opt/texlive/2021/texmf-dist/scripts/latex-make/*.py ; do
      sed -i 's%/usr/bin/env python%/usr/bin/python3%' $F
    done

Still as the `root` user, initialise the new system (the commands fmtutil-sys --all and mtxrun --generate will produce a lot of output):

    mktexlsr &&
    fmtutil-sys --all &&
    mtxrun --generate

You can now proceed to asymptote-2.70, biber-2.16, dvisvgm-2.12 and / or xindy-2.5.1 if you wish to install them.

### Command Explanations

patch -Np1 -i ../texlive-20210325-source-upstream_fixes-1.patch: A small update to mpost and LuaTeX caused the binaries to be rebuilt. This patch applies the same fixes.

`--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ...` : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent.

`--includedir=, --libdir= ...` : these switches ensure that the libraries and include files will be within the directories for this year's texlive.

`--disable-static`: This switch prevents installation of static versions of the libraries.

`--enable-shared`: Use shared versions of `libkpathsea`, `libptexenc`, `libsynctex`, `libtexlua52` and `libtexluajit`.

`--with-system-...`: Unless this parameter is used, the included versions of these libraries will be statically compiled into the programs which need them. If you decided not to install a recommended library, omit the corresponding switch.

--disable-dvisvgm: As noted above, the shipped version of dvisvgm, which has modified configuration files, cannot be built with shared system libraries.

`--without-x`: use this if you do not have Xorg installed.

/sbin/ldconfig: this has to be run here so that make texlinks can use kpsewhich.

make texlinks : this runs the texlinks.sh script to create symbolic links from formats to engines. In practice, several of the targets such as xetex are now separate binaries and for these it will report "file already exists".

tar -xf texlive-20210325-texmf.tar.xz -C /opt/texlive/2021 --strip-components=1: the tarball contains the files for the texmf-dist directory, and because of its size we do not want to waste time and space untarring it and then copying the files.

install -v -m644 ../texk/tests/TeXLive/* /opt/texlive/2021/tlpkg/TeXLive/: This puts the perl modules `TLConfig.pm` and `TLUtils.pm` into the directory where the binary installer puts them - it is at the start of the perl @INC@ PATH within texlive when installed using the above configure switches. Without these modules, texlive is unusable.

mktexlsr: Create an `ls-R` file which lists what was installed - this is used by kpathsea to find files.

fmtutil-sys --all: This initializes the TeX formats, Metafont bases and Metapost mems.

mtxrun --generate: This initializes the ConTeXt system.

### Contents

Installed Programs: Over 300 binaries and symlinks to scripts
Installed Libraries: libkpathsea.so, libptexenc.so, libsynctex.so, libtexlua52.so, libtexluajit.so
Installed Directories: /opt/texlive/2021/bin, /opt/texlive/2021/include, /opt/texlive/2021/lib, /opt/texlive/2021/texmf-dist

#### Short Descriptions

TeX programs | The programs included in TeX are too numerous to individually list. Please refer to the individual program HTML and PDF pages in the various html, man, or pdf files within the subdirectories of `2021/texmf-dist/`. Using texdoc pdflatex ( replace pdflatex with the command name ) may also be useful
`libkpathsea.so` | (kpathsearch) exists to look up a file in a list of directories and is used by kpsewhich
`libptexenc.so` | is a library for Japanese pTeX (publishing TeX)
`libsynctex.so` | is the SyncTeX (Synchronize TeXnology) parser library
`libtexlua52.so` | provides Lua 5.2, modified for use with LuaTeX
`libtexluajit.so` | provides LuaJIT, modified for use with LuaJITTeX

Last updated on

## asymptote-2.70

### Introduction to asymptote

Asymptote is a powerful descriptive vector graphics language that provides a natural coordinate-based framework for technical drawing. Labels and equations can be typeset with LaTeX. As well as EPS, PDF and PNG output it can produce WebGL 3D HTML rendering and (using dvisvgm) SVG output.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://downloads.sourceforge.net/asymptote/asymptote-2.70.src.tgz

- Download MD5 sum: b57e685568a7cca69024a86c7276eb6d

- Download size: 4.5 MB

- Estimated disk space required: 190 MB (with all the dependencies which are within BLFS)

- Estimated build time: 0.9 SBU (using parallelism=4)

#### asymptote Dependencies

##### Required

ghostscript-9.54.0 and texlive-20210325

##### Recommended

cURL-7.78.0, Freeglut-3.2.1, GC-8.0.4, GLEW-2.2.0, GLM-0.9.9.8 and libtirpc-1.3.2

##### Recommended at runtime

dvisvgm-2.12

##### Optional

fftw-3.3.9, Gsl-2.7, libsigsegv-2.13

##### Optional (at runtime)

ImageMagick-7.1.0-4 to convert output to other formats such as JPEG or to create animated GIFs, PyQt5 (not tested, has a build dependency of Qt-5.15.2) to use xasy.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/asymptote

### Installation of asymptote

Install asymptote by running the following commands:

    export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&

    ./configure --prefix=/opt/texlive/2021                          \
                --bindir=/opt/texlive/2021/bin/$TEXARCH             \
                --datarootdir=/opt/texlive/2021/texmf-dist          \
                --infodir=/opt/texlive/2021/texmf-dist/doc/info     \
                --libdir=/opt/texlive/2021/texmf-dist               \
                --mandir=/opt/texlive/2021/texmf-dist/doc/man       \
                --enable-gc=system                                  \
                --with-latex=/opt/texlive/2021/texmf-dist/tex/latex \
                --with-context=/opt/texlive/2021/texmf-dist/tex/context/third &&

    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

`--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ...` : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent.

`--libdir=/opt/texlive/2021/texmf-dist;`: This parameter ensures that the `asymptote` directory will similarly overwrite any files installed by install-tl-unx.

`--enable-gc=system`: this ensures that the system version of `libgc.so` will be used instead of the version shipped with this package.

`--with-latex= ... --with-context=`: These switches ensure that style files and a tex file will be installed into the texlive directories instead of creating a `texmf-local` directory for them.

### Contents

Installed Programs: asy, xasy
Installed Libraries: None
Installed Directory: /opt/texlive/2021texmf-dist/asymptote, /opt/texlive/2021/doc/asymptote, /opt/texlive/2021/info/asymptote

#### Short Descriptions

asy | is a vector graphics program
xasy | is a Python3 script providing a Qt5 GUI for asy

Last updated on

## biber-2.16

### Introduction to biber

Biber is a BibTeX replacement for users of biblatex, written in Perl, with full Unicode support.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/plk/biber/archive/v2.16/biber-2.16.tar.gz

- Download MD5 sum: fafae81d8ae67314692e2b646024fa98

- Download size: 1.6 MB

- Estimated disk space required: 18 MB

- Estimated build time: 0.5 SBU including tests

### Note

If you have updated to a new release of texlive-source, biber and its perl dependencies are still present in `/usr` and do not need to be rebuilt. However, biblatex installs in `/opt/texlive/2021` and does need to be reinstalled.

If you installed the above dependencies using the BLFS instructions for each of them, perl ./Build.PL will complain that Mozilla::CA is not installed, but that is not needed unless CPAN was used to install the modules. BLFS patches LWP::Protocol::https to use the system certificates, Mozilla::CA uses old certificates.

#### Required Additional Download

- The corresponding version of biblatex is a separate project - the tds tarball is pre-packaged for untarring into the `texmf-dist` directory. Download (HTTP): https://sourceforge.net/projects/biblatex/files/biblatex-3.16/biblatex-3.16.tds.tgz

- Download MD5 sum: 30342c8ef5309e838968fcb06a314a36

- Download size: 20 MB

#### Biber Dependencies

##### Required

autovivification-0.18 Business-ISBN-3.006 Business-ISMN-1.202 Business-ISSN-1.004 Class-Accessor-0.51 Data-Compare-1.27 Data-Dump-1.25 Data-Uniqid-0.12 DateTime-Calendar-Julian-0.104 DateTime-Format-Builder-0.83 Encode-EUCJPASCII-0.03 Encode-HanExtra-0.23 Encode-JIS2K-0.03 File-Slurper-0.012 IO-String-1.08 IPC-Run3-0.048 Lingua-Translit-0.28 List-AllUtils-0.19 List-MoreUtils-0.430 Log-Log4perl-1.54 LWP-Protocol-https-6.10 Module-Build-0.4231 Parse-RecDescent-1.967015 PerlIO-utf8_strict-0.008 Regexp-Common-2017060201 Sort-Key-1.33 Text-BibTeX-0.88 Text-CSV-2.01 Text-Roman-3.5 Unicode-Collate-1.31 Unicode-LineBreak-2019.001 XML-LibXML-Simple-1.01 XML-LibXSLT-1.99 XML-Writer-0.900 and texlive-20210325 (or install-tl-unx, but for that you can use tlmgr update)

##### Recommended (required for the testsuite)

File-Which-1.27 and Test-Differences-0.68

### Note

It is possible to install all missing dependencies automatically. You must first install Module-Build-0.4231 using automatic installation of perl modules. Then run perl ./Build.PL and when it prompts you, become the root user and run ./Build installdeps - this will use CPAN and as noted above it will use Mozilla::CA instead of using system certificates.

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/biber

### Installation of Biber

Install Biber by running the following commands:

    perl ./Build.PL &&
    ./Build

To test the results, enter: ./Build test

Now, as the `root` user:

    tar -xf ../biblatex-3.16.tds.tgz -C /opt/texlive/2021/texmf-dist &&
    texhash &&
    ./Build install

### Command Explanations

tar -xf biblatex-3.16.tds.tar.gz -C /opt/texlive/2021/texmf-dist: this installs the new biblatex files over those installed by texlive.

texhash : this updates the file hash tables (otherwise known as the file name database).

### Contents

Installed Programs: biber
Installed Library: None
Installed Directory: /usr/lib/perl5/site_perl/5.*{,/<arch>-linux/auto}/Biber

#### Short Descriptions

biber | is used for producing bibliographies in LaTeX documents

Last updated on

## dvisvgm-2.12

### Introduction to dvisvgm

The dvisvgm package converts DVI, EPS and PDF files to SVG format.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): https://github.com/mgieseki/dvisvgm/releases/download/2.12/dvisvgm-2.12.tar.gz

- Download MD5 sum: 19f6b1fb0a9a8e9b93059c7c8592f799

- Download size: 3.1 MB

- Estimated disk space required: 274 MB (40 MB installed, add 706 MB for the tests)

- Estimated build time: 0.9 SBU (add 0.6 SBU for the tests, both using parallelism=4)

#### dvisvgm Dependencies

##### Required

Brotli-1.0.9, ghostscript-9.54.0 and Potrace-1.16

##### Recommended

WOFF2-1.0.2

##### Optional

asciidoc-9.1.0 with xmlto-0.0.28 and libxslt-1.1.34 (see command explanations), dblatex (with the above) and xxHash (the current version is included in the tarball)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dvisvgm

### Installation of dvisvgm

To enable the build system to link to `libkpathsea.so`, as the `root` user create a symlink from `/usr/lib`:

    ln -svf /opt/texlive/2021/lib/libkpathsea.so /usr/lib

The testsuite assumes that a modern version of Python has been installed as plain python. Changing this to use python3 requires a sed to one of `Makefile.in` files, but that gets regenerated when autoreconf is run, so the sed must come after that.

Install dvisvgm by running the following commands:

    autoreconf -fiv                               &&
    sed -i 's/python/&3/' tests/Makefile.in       &&
    ./configure                                    \
     --bindir=/opt/texlive/2021/bin/${TEXARCH}     \
     --mandir=/opt/texlive/2021/texmf-dist/doc/man \
     --with-kpathsea=/opt/texlive/2021            &&
    make

To test the results, issue: make check.

Now, as the `root` user:

    make install

### Command Explanations

ln -svf /opt/texlive/2021/lib/libkpathsea.so /usr/lib: Without this, the program will not link correctly,

autoreconf -fiv: The versions of autoconf and automake used when this package was created are older than the current versions in LFS. That causes 'make' to fail when it reaches the 'tests' subdirectory unless autoreconf is forced to install missing (i.e. newer) auxiliary files.

--with-kpathsea=/opt/texlive/2021: This allows the build system to find the headers for `kpathsea`

### Contents

Installed Programs: dvisvgm
Installed Libraries: None
Installed Directories: None

#### Short Descriptions

dvisvgm | converts DVI, EPS and PDF files to the SVG format

Last updated on

## xindy-2.5.1

### Introduction to xindy

Xindy is an index processor that can be used to generate book-like indexes for arbitrary document-preparation systems. This includes systems such as TeX and LaTeX, the roff-family, and SGML/XML-based systems (e.g., HTML) that process some kind of text and generate indexing information.

This package is known to build and work properly using an LFS-11.0 platform.

#### Package Information

- Download (HTTP): http://tug.ctan.org/support/xindy/base/xindy-2.5.1.tar.gz

- Download MD5 sum: 221acfeeb0f6f8388f89a59c56491041

- Download size: 506 KB

- Estimated disk space required: 15 MB

- Estimated build time: less than 0.1 SBU

#### Required Additional Downloads

- Required patch: https://www.linuxfromscratch.org/patches/blfs/11.0/xindy-2.5.1-upstream_fixes-2.patch

#### Xindy Dependencies

##### Required

Clisp-2.49 and texlive-20210325

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xindy

### Installation of xindy

Install xindy by running the following commands:

    export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&

    sed -i "s/ grep -v '^;'/ awk NF/" make-rules/inputenc/Makefile.in &&

    sed -i 's%\(indexentry\)%\1\\%' make-rules/inputenc/make-inp-rules.pl &&

    patch -Np1 -i ../xindy-2.5.1-upstream_fixes-2.patch &&

    ./configure --prefix=/opt/texlive/2021              \
                --bindir=/opt/texlive/2021/bin/$TEXARCH \
                --datarootdir=/opt/texlive/2021         \
                --includedir=/usr/include               \
                --libdir=/opt/texlive/2021/texmf-dist   \
                --mandir=/opt/texlive/2021/texmf-dist/doc/man &&

    make LC_ALL=POSIX

This package does not have a testsuite.

Now, as the `root` user:

    make install

### Command Explanations

sed -i "s/ grep -v '^;'/ awk NF/" ...: The build sorts files in latin{1..3} encodings to create latin.xdy, and unicode versions of these to create utf8.xdy after using grep -v '^;' to remove blank lines. With grep-2.23 any data not in the expected encoding is treated as binary, resulting in a useless file. This command uses an alternative way of removing blank lines.

sed -i 's%\(indexentry\)%\1\\%' ...: A regexp contains `indexentry{` - perl has warned about the unescaped left brace for some time and now treats it as illegal. Change it to `indexentry\{`, doubling the backslash for sed.

patch -Np1 -i ../xindy-2.5.1-upstream_fixes-2.patch: Xindy is now maintained at CTAN. This patch updates the source with some of the changes made there (but ignoring changes which were only made to allow for spaces in pathnames and some trivial recent changes).

`--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ...` : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent.

`--includedir=/usr/include`: This parameter ensures that the `kpathsea` headers from texlive-20210325 will be found.

make LC_ALL=POSIX: with the current version of coreutils it is essential to build xindy in the POSIX (or C) locale because in a UTF-8 locale the file `latin.xdy` will contain only a heading and then a line '`Binary file (standard input) matches`' instead of the many lines of lisp merge-rule commands it ought to contain.

### Contents

Installed Programs: tex2xindy, texindy, xindy
Installed Libraries: None
Installed Directory: /opt/texlive/2021/texmf-dist/xindy

#### Short Descriptions

tex2xindy | transforms a LaTeX index file into a xindy raw index file
texindy | is a wrapper for xindy that turns on many LaTeX conventions by default
xindy | creates a sorted and tagged index from a raw LaTeX index

Last updated on

# Appendix A. Creative Commons License

Creative Commons Legal Code

Attribution-NonCommercial-ShareAlike 2.0

### Important

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

1. Definitions

   1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.

   2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.

   3. "Licensor" means the individual or entity that offers the Work under the terms of this License.

   4. "Original Author" means the individual or entity who created the Work.

   5. "Work" means the copyrightable work of authorship offered under the terms of this License.

   6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.

   7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.

2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.

3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

   1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;

   2. to create and reproduce Derivative Works;

   3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;

   4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works;

   The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Sections 4(e) and 4(f).

4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

   1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any reference to such Licensor or the Original Author, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any reference to such Licensor or the Original Author, as requested.

   2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-NonCommercial-ShareAlike 2.0 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License.

   3. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.

   4. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.

   5. For the avoidance of doubt, where the Work is a musical composition:

      1. Performance Royalties Under Blanket Licenses. Licensor reserves the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work if that performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

      2. Mechanical Rights and Statutory Royalties. Licensor reserves the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions), if Your distribution of such cover version is primarily intended for or directed toward commercial advantage or private monetary compensation. 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

   6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

5. Representations, Warranties and Disclaimer

   UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. Termination

   1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.

   2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

8. Miscellaneous

   1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.

   2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.

   3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

   4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.

   5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.

### Important

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.

Creative Commons may be contacted at http://creativecommons.org/.

# Appendix B. The MIT License

Copyright © 2001-2021 The BLFS Development Team

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# Glossary

### Acronyms

669

  UNIS/Composer 669 Module

ABI

  Application Binary Interface

ADSL

  Asymmetric Digital Subscriber Line

AFS

  Andrew File System

AIFF

  Audio Interchange File Format

ALSA

  Advanced Linux Sound Architecture

ANSI

  American National Standards Institute

API

  Application Programming Interface

APR

  Apache Portable Runtime

ARP

  Address Resolution Protocol

ASCII

  American Standard Code for Information Interchange

ASN

  Abstract Syntax Notation

ASF

  Advanced Streaming Format

ATA

  Advanced Technology Attachment

ATSC

  Advanced Television Systems Committee

ATK

  Accessibility ToolKit

AVI

  Audio Video Interleave

AWT

  Abstract Window Toolkit

BER

  Basic Encoding Rules

BIND

  Berkeley Internet Name Domain

BIOS

  Basic Input/Output System

BLFS

  Beyond Linux From Scratch

BMP

  Bit MaP

CD

  Compact Disk

CDDA

  Compact Disc Digital Audio

CIFS

  Common Internet File System

  See Also SMB .

CMS

  Cryptographic Message Syntax

CODEC

  COmpression/DECompression module

CORBA

  Common Object Request Broker Architecture

CPU

  Central Processing Unit

CRD

  Color Rendering Dictionary

CSA

  Color Space Array

CSS (on DVD)

  Contents Scrambling System

CSS

  Cascading Style Sheets

CUPS

  Common Unix Printing System

CVS

  Concurrent Versions System

DAO

  Disc At Once

DARPA

  Directory Address Resolution Protocol Allocation

DEC

  Digital Equipment Corporation

DER

  Distinguished Encoding Rules

DES

  Data Encryption Standard

DHCP

  Dynamic Host Configuration Protocol

DICT

  Dictionary Server Protocol (RFC 2229)

DIN

  German Industrial Norm

DNS

  Domain Name Service

DOS

  Disk Operating System

DRI

  Direct Rendering Infrastructure

DSC

  Document Structuring Conventions

DSO

  Dynamic Shared Objects

DSSSL

  Document Style Semantics and Specification Language

DV

  Digital Video

DVD

  Digital Versatile Disk (also Digital Video Disk)

DVI

  DeVice Independent

ELF

  Executable and Linking Format

EPP

  Enhanced Parallel Port

EPS

  Encapsulated PostScript

ESD

  Enlighten Sound Daemon

ESMTP

  Extended Simple Mail Transfer Protocol

FAM

  File Alteration Monitor

FAME

  Fast Assembly Mpeg Encoder

FAQ

  Frequently Asked Questions

FAX

  Facsimile

FB

  Frame Buffer

FHS

  File Hierarchy Standard

FLAC

  Free Lossless Audio CODEC

FO

  Formatted Objects

FTP

  File Transfer Protocol

GCC

  GNU Compiler Collection

GDBM

  GNU DataBase Manager

GDK

  GTK+ Drawing Kit

GDM

  GNOME Display Manager

GID

  Group IDentity

GIF

  Graphics Interchange Format

GLUT

  OpenGL Utility Toolkit

GMP

  GNU Multiple Precision Arithmetic

GNAT

  GNU NYU Ada 9x Translator

GNOME

  GNU Network Object Model Environment

GNU

  GNU's Not Unix

GPL

  General Public License

GPM

  General Purpose Mouse

GSS

  Generic Security Service

GSSAPI

  Generic Security Service Application Programming Interface

GTK

  GIMP ToolKit

GUI

  Graphical User Interface

HFS

  Hierarchical File System

HTML

  HyperText Markup Language

HTTP

  HyperText Transfer Protocol

HTTPS

  HyperText Transfer Protocol Secured

HUP

  Hang UP

IANA

  Internet Assigned Numbers Authority

ICC

  International Color Consortium

ICMP

  Internet Control Message Protocol

IDE

  Integrated Drive Electronics

  Integrated Development Environment

IDL

  Interface Definition Language

IJS

  Ink Jet Systems

ILS

  Internet Location Server

IMAP

  Internet Message Access Protocol

IMON

  Inode MONitor

IP

  Internet Protocol

  See Also TCP .

IPX

  Internetwork Packet eXchange

IRC

  Internet Relay Chat

ISDN

  Integrated Services Digital Network

ISO

  International Standards Organisation

ISP

  Internet Service Provider

IT

  ImpulseTracker Module

JAI

  Java Advanced Imaging

JAR

  Java ARchive

JDK

  Java Development Kit

JFIF

  JPEG File Interchange Format

JPEG

  Joint Photographic Experts Group

KDC

  Key Distribution Center

KDE

  KDesktop Environment

LAME

  Lame Ain't an MP3 Encoder

LAN

  Local Area Network

LDAP

  Lightweight Directory Access Protocol

LDIF

  Lightweight Data Interchange Format

LFS

  Linux From Scratch

LGPL

  Library General Public License

LPR

  Line PRinter

LZO

  Lempel-Ziv-Oberhumer

LZW

  Lempel-Ziv-Welch

MAC

  Media Access Control

MCOP

  Multimedia COmmunication Protocol

MCU

  Multipoint Control Unit

MD

  Message-Digest

MDA

  Mail Delivery Agent

MED

  MED/OctaMED Module

MIDI

  Musical Instrument Digital Interface

MIF

  Maker Interchange Format

MII

  Media Independent Interface

MIME

  Multipurpose Internet Mail Extensions

MIT

  Massachusetts Institute of Technology

MNG

  Multiple-image Network Graphics

MOD

  ProTracker Module

MP3

  MPEG-1 audio layer 3

MPEG

  Moving Picture Experts Group

MSL

  Magick Scripting Language

MTA

  Mail Transport Agent

MTM

  MultiTracker Module

MUA

  Mail User Agent

NASM

  Netwide ASseMbler

NNTP

  Network News Transfer Protocol

NFS

  Network File System

NIS

  Network Information Service

NPTL

  Native Posix Thread Library

NSPR

  Netscape Portable Runtime

NSS

  Network Security Services

NTP

  Network Time Protocol

OAF

  Object Activation Framework

ODBC

  Open DataBase Connectivity

OMF

  Open Metadata Framework

ORB

  Object Request Broker

  See Also CORBA .

ORDBMS

  Object Relational Database Management System

OS

  Operating System

OSF

  Open Software Foundation

OSS

  Open Sound System

PAM

  Pluggable authentication Modules

PBM

  Portable BitMap

PCI

  Peripheral Component Interconnect

PCL

  Printer Control Language

PCM

  Pulse Code Modulation

PDC

  Primary Domain Controller

PDF

  Portable Document Format

PEAR

  PHP Extension and Application Repository

PGM

  Portable Grey Map

PGP

  Pretty Good Privacy

PHP

  PHP Hypertext Preprocessor

PIM

  Personal Information Manager

PLIP

  Parallel Line Internet Protocol

PNG

  Portable Network Graphics

PO

  Portable Object

POD

  Plain Old Documentation

POP

  Post Office Protocol

PPD

  PostScript Printer Description

PPM

  Portable Pixel Map

PPP

  Point to Point Protocol

PPPoE

  Point to Point Protocol over Ethernet

PS

  PostScript

RADIUS

  Remote Authentication Dial-In User Service

RAM

  Random Access Memory

RARP

  Reverse Address Resolution Protocol

RCS

  Revision Control System

RFC

  Request For Comments

RGB

  Red Green Blue

RGBA

  Red Green Blue Alpha

ROM

  Read-Only Memory

RP

  Roaring Penguin

RPC

  Remote Procedure Call

RTC

  Real Time Clock

RTP

  Real Time Protocol

RW

  Read Write

S3M

  ScreamTracker Version 3 Module

S/MIME

  Secure/MIME

SANE

  Scanner Access Now Easy

SASL

  Simple Authentication and Security Layer

SATA

  Serial Advanced Technology Attachment

SBU

  Standard Build Unit

SCSI

  Small Computer System Interface

SDK

  Software Development Kit

SGML

  Standard Generalized Markup Language

SMART

  Self Monitoring Analysis and Reporting Technology

SMB

  Server Message Block

SMIL

  Synchronized Multimedia Integration Language

SMTP

  Simple Mail Transfer Protocol

SQL

  Structured Query Language

SSH

  Secure SHell

SSL

  Secure Sockets Layer

SUID

  Set User IDentity

SVG

  Scalable Vector Graphics

SVGA

  Super Video Graphics Array

TCL

  Tool Command Language

TCP

  Transmission Control Protocol

TGT

  Ticket-Granting Ticket

TIFF

  Tag(ged) Image File Format

TLS

  Transport Layer Security

TTF

  TrueType Font

TTS

  Text To Speech

UCS

  Universal Character Set

UDF

  Universal Disk Format

UID

  User IDentity

UDP

  User Datagram Protocol

UI

  User Interface

UML

  Unified Modelling Language

URL

  Uniform Resource Locator

USB

  Universal Serial Bus

USR

  Upstream Ready

UTF

  UCS Transformation Format

UUCP

  Unix-to-Unix Copy Protocol

VCD

  Video Compact Disk

VESA

  Video Electronics Standards Association

VGA

  Video Graphics Array

VNC

  Virtual Network Computer

VOB

  Video OBject

VOIP

  Voice Over IP

W3C

  World Wide Web Consortium

WAV

  Waveform Audio

WWW

  World Wide Web

XDMCP

  XDisplay Manager Control Protocol

XM

  FastTracker Module

XML

  eXtensible Markup Language

XSL

  eXtensible Style Language

XSLT

  eXtensible Style Language Transformation

XSM

  X/Open System Management

XMMS

  XMultiMedia System

YP

  Yellow Pages

YUV

  Luminance-Bandwidth-Chrominance

# Index

## Packages

- AAlib: AAlib-1.4rc5
- AbiWord: AbiWord-3.0.5
- AccountsService: AccountsService-0.6.55
- acpid: acpid-2.0.32
- adwaita-icon-theme: adwaita-icon-theme-40.1.1
- Algorithm::Diff: Algorithm::Diff-1.201
- Alien::Build: Alien::Build-2.41
- Alien::Libxml2: Alien::Libxml2-0.17
- alsa-firmware: alsa-firmware-1.2.4
- alsa-lib: alsa-lib-1.2.5.1
- alsa-oss: alsa-oss-1.1.8
- alsa-plugins: alsa-plugins-1.2.5
- alsa-tools: alsa-tools-1.2.5
- alsa-utils: alsa-utils-1.2.5.1
- amtk: Amtk-5.2.0
- Apache: Apache-2.4.48
- Apache Ant: apache-ant-1.10.11
- Apr: Apr-1.7.0
- Apr-Util: Apr-Util-1.6.1
- Archive::Zip: Archive::Zip-1.68
- Ark: Ark-21.08.0
- asciidoc: Asciidoc-9.1.0
- asciidoctor: Asciidoctor-2.0.16
- Aspell: Aspell-0.60.8
- asymptote: asymptote-2.70
- at: at-3.2.2
- at-spi2-atk: at-spi2-atk-2.38.0
- at-spi2-core: at-spi2-core-2.40.3
- ATK: ATK-2.36.0
- Atkmm: Atkmm-2.28.2
- Audacious: Audacious-4.1
- AudioFile: AudioFile-0.3.6
- Autoconf213: Autoconf2.13
- Autofs: autofs-5.1.7
- autovivification: autovivification-0.18
- Avahi: Avahi-0.8
- B::COW: B::COW-0.004
- B::Hooks::EndOfScope: B::Hooks::EndOfScope-0.24
- Babl: babl-0.1.88
- Balsa: Balsa-2.6.3
- Baobab: Baobab-40.0
- Berkeley DB: Berkeley DB-5.3.28
- Biber: biber-2.16
- BIND: BIND-9.16.20
- BIND Utilities: BIND Utilities-9.16.20
- BLFS Systemd Units: BLFS Systemd Units
- Bluefish: Bluefish-2.2.12
- BlueZ: BlueZ-5.61
- Bogofilter: Bogofilter-1.2.5
- Boost: Boost-1.77.0
- Brasero: Brasero-3.12.2
- breeze-icons: breeze-icons-5.85.0
- bridge-utils: bridge-utils-1.7.1
- Brotli: brotli-1.0.9
- btrfs-progs: btrfs-progs-5.13.1
- bubblewrap: Bubblewrap-0.5.0
- Business::ISBN: Business::ISBN-3.006
- Business-ISBN-Data: Business::ISBN::Data-20210112.006
- Business::ISMN: Business::ISMN-1.202
- Business::ISSN: Business::ISSN-1.004
- c-ares: c-ares-1.17.2
- Cairo: Cairo-1.17.4
- Cantarell fonts: TTF and OTF fonts -- description
- Capture::Tiny: Capture::Tiny-0.48
- cbindgen: Cbindgen-0.20.0
- CDParanoia: CDParanoia-III-10.2
- Cdrdao: Cdrdao-1.2.4
- Cdrtools: Cdrtools-3.02a09
- Cheese: Cheese-3.38.0
- cifs-utils: cifs-utils-6.13
- Class::Accessor: Class::Accessor-0.51
- Class::Data::Inheritable: Class::Data::Inheritable-0.08
- Class::Inspector: Class::Inspector-1.36
- Class::Singleton: Class::Singleton-1.6
- Class:Tiny: Class:Tiny-1.008
- Clisp: Clisp-2.49
- Clone: Clone-0.45
- clucene: CLucene-2.3.3.4
- Clutter: Clutter-1.26.4
- clutter-gst: clutter-gst-3.0.27
- clutter-gtk: clutter-gtk-1.8.4
- CMake: CMake-3.21.2
- Cogl: Cogl-1.22.8
- Colord: Colord-1.4.5
- colord-gtk: colord-gtk-0.2.0
- Compface: Compface-1.5.2
- Config::AutoConf: Config::AutoConf-0.320
- console-fonts: About Console Fonts
- CPAN automated install of perl modules: CPAN automated install of perl modules
- CPAN::Meta::Check: CPAN::Meta::Check-0.014
- Cpio: cpio-2.13
- CrackLib: CrackLib-2.9.7
- cryptsetup: cryptsetup-2.3.6
- Cups: Cups-2.3.3op2
- cups-filters: cups-filters-1.28.10
- cups-pk-helper: cups-pk-helper-0.2.6
- cURL: cURL-7.78.0
- Cyrus SASL: Cyrus SASL-2.1.27
- D-Bus: dbus-1.12.20
- Dash: Dash-0.5.11.4
- Data::Compare: Data::Compare-1.27
- Data::Dump: Data::Dump-1.25
- Data::Uniqid: Data::Uniqid-0.12
- DateTime: DateTime-1.54
- DateTime::Calendar::Julian: DateTime::Calendar::Julian-0.104
- DateTime::Format::Builder: DateTime::Format::Builder-0.83
- DateTime::Format::Strptime: DateTime::Format::Strptime-1.79
- DateTime::Locale: DateTime::Locale-1.32
- DateTime::TimeZone: DateTime::TimeZone-2.47
- dbus-glib: dbus-glib-0.112
- dbus-python: D-Bus Python-1.2.18
- dbusmock: dbusmock-0.23.1
- DConf: DConf-0.40.0 / DConf-Editor-3.38.3
- decorator: decorator-5.0.9
- DejaVu fonts: TTF and OTF fonts -- description
- desktop-file-utils: desktop-file-utils-0.26
- Devel::StackTrace: Devel::StackTrace-2.04
- DHCP: DHCP-4.4.2-P1
- dhcpcd: dhcpcd-9.4.0
- Dist::CheckConflicts: Dist::CheckConflicts-0.11
- DocBook DSSSL Stylesheets: docbook-dsssl-1.79
- DocBook SGML DTD-3.1: docbook-3.1-dtd
- DocBook SGML DTD-4.5: docbook-4.5-dtd
- DocBook-utils: DocBook-utils-0.6.14
- DocBook XML DTD: docbook-xml-4.5
- DocBook XSL Stylesheets: docbook-xsl-nons-1.79.2
- DocBook XML DTD and Schemas 5.0: docbook-xml-5.0
- DocBook XML Schemas 5.1: docbook-xml-5.1
- docutils: docutils-0.17.1
- dosfstools: dosfstools-4.2
- double-conversion: Double-conversion-3.1.5
- Dovecot: Dovecot-2.3.16
- Doxygen: Doxygen-1.9.2
- dvd+rw-tools: dvd+rw-tools-7.1
- dvisvgm: dvisvgm-2.12
- Ed: Ed-1.17
- efibootmgr: efibootmgr-17
- efivar: efivar-37
- Emacs: Emacs-27.2
- enchant: enchant-2.3.1
- Encode::EUCJPASCII: Encode::EUCJPASCII-0.03
- Encode::HanExtra: Encode::HanExtra-0.23
- Encode::JIS2K: Encode::JIS2K-0.03
- Encode::Locale: Encode::Locale-1.05
- Enscript: Enscript-1.6.6
- EOG: EOG-40.3
- epdfview: ePDFView-0.1.8
- Epiphany: Epiphany-40.3
- Eval::Closure: Eval::Closure-0.14
- Evince: Evince-40.4
- Evolution: Evolution-3.40.4
- evolution-data-server: evolution-data-server-3.40.4
- Exception::Class: Exception::Class-1.45
- Exempi: Exempi-2.5.2
- Exim: Exim-4.94.2
- Exiv2: Exiv2-0.27.4
- Exo: Exo-4.16.2
- Exporter::Tiny: Exporter::Tiny-1.002002
- extra-cmake-modules: extra-cmake-modules-5.85.0
- ExtUtils::LibBuilder: ExtUtils::LibBuilder-0.08
- faac: FAAC-1_30
- faad2: FAAD2-2_10_0
- falkon: Falkon-3.1.0
- Fcron: Fcron-3.2.1
- fdk-aac: fdk-aac-2.0.2
- feh: feh-3.7.1
- Fetchmail: Fetchmail-6.4.21
- FFI::CheckLib: FFI::CheckLib-0.28
- FFmpeg: FFmpeg-4.4
- fftw: fftw-3.3.9
- File::chdir: File::chdir-0.1010
- File::Copy::Recursive: File::Copy::Recursive-0.45
- File::Find::Rule: File::Find::Rule-0.34
- File::Listing: File::Listing-6.14
- File-Roller: File-Roller-3.40.0
- File::ShareDir: File::ShareDir-1.118
- File::ShareDir::Install: File::ShareDir::Install-0.13
- File::Slurper: File::Slurper-0.012
- File::Which: File::Which-1.27
- Firefox Legacy: Firefox-78.13.0
- Firefox: Firefox-91.0.1
- FLAC: FLAC-1.3.3
- FLTK: FLTK-1.3.7
- Fluxbox: Fluxbox-1.3.7
- Folks: Folks-0.15.3
- Fontconfig: Fontconfig-2.13.1
- FontForge: FontForge-20201107
- fop: fop-2.6
- Freeglut: Freeglut-3.2.1
- FreeType: FreeType-2.11.0
- frei0r: frei0r-plugins-1.7.0
- FriBidi: FriBidi-1.0.9
- Fuse 3: Fuse-3.10.4
- Garcon: Garcon-4.16.1
- Gavl: gavl-1.4.0
- GC: GC-8.0.4
- GCC-11.2.0: GCC-11.2.0
- GConf: GConf-3.2.6
- Gcr: Gcr-3.40.0
- GDB: GDB-10.2
- gdk-pixbuf: gdk-pixbuf-2.42.6
- gdk-pixbuf-xlib: gdk-pixbuf-xlib-2.40.2
- GDL: GDL-3.40.0
- GDM: GDM-40.1
- Gedit: Gedit-40.1
- Gegl: gegl-0.4.30
- GeoClue: GeoClue-2.5.7
- geocode-glib: geocode-glib-3.26.2
- gexiv2: gexiv2-0.12.3
- gfbgraph: gfbgraph-0.2.4
- Ghostscript: ghostscript-9.54.0
- giflib: giflib-5.2.1
- Gimp: Gimp-2.10.24
- Git: Git-2.33.0
- Gjs: Gjs-1.68.3
- GLEW: GLEW-2.2.0
- glib-networking: glib-networking-2.68.2
- GLib2: GLib-2.68.4
- GLibmm: GLibmm-2.66.1
- GLM: GLM-0.9.9.8
- GLU: GLU-9.0.2
- GMime 3: GMime-3.2.7
- gnome-autoar: gnome-autoar-0.4.0
- gnome-backgrounds: gnome-backgrounds-40.1
- gnome-bluetooth: gnome-bluetooth-3.34.5
- gnome-calculator: gnome-calculator-40.1
- gnome-color-manager: gnome-color-manager-3.36.0
- gnome-control-center: gnome-control-center-40.0
- gnome-desktop: gnome-desktop-40.4
- gnome-disk-utility: gnome-disk-utility-40.2
- gnome-icon-theme: gnome-icon-theme-3.12.0
- gnome-icon-theme-extras: gnome-icon-theme-extras-3.12.0
- gnome-icon-theme-symbolic: gnome-icon-theme-symbolic-3.12.0
- gnome-keyring: gnome-keyring-40.0
- gnome-logs: gnome-logs-3.36.0
- gnome-maps: gnome-maps-40.4
- gnome-menus: gnome-menus-3.36.0
- gnome-nettool: gnome-nettool-3.8.1
- gnome-online-accounts: gnome-online-accounts-3.40.0
- gnome-power-manager: gnome-power-manager-3.32.0
- gnome-screenshot: gnome-screenshot-40.0
- gnome-session: gnome-session-40.1.1
- gnome-settings-daemon: gnome-settings-daemon-40.0.1
- gnome-shell: gnome-shell-40.4
- gnome-shell-extensions: gnome-shell-extensions-40.4
- gnome-system-monitor: gnome-system-monitor-40.1
- gnome-terminal: gnome-terminal-3.40.3
- gnome-themes-extra: gnome-themes-extra-3.28
- gnome-tweaks: gnome-tweaks-40.0
- gnome-user-docs: gnome-user-docs-40.4
- gnome-video-effects: gnome-video-effects-0.5.0
- gnome-weather: gnome-weather-40.1
- Gnumeric: Gnumeric-1.12.50
- GnuPG: GnuPG-2.2.29
- GnuTLS: GnuTLS-3.7.2
- gobject-introspection: gobject-introspection-1.68.0
- GOffice: GOffice-0.10.50
- Gparted: Gparted-1.3.1
- GPGME: GPGME-1.16.0
- GPicView: GPicView-0.2.5
- GPM: GPM-1.20.7
- gptfdisk: gptfdisk-1.0.8
- grantlee: Grantlee-5.2.0
- graphene: Graphene-1.10.6
- Graphite2: Graphite2-1.3.14
- Graphviz: Graphviz-2.48.0
- Grilo: Grilo-0.3.13
- grub-efi: GRUB-2.06 for EFI
- gsettings-desktop-schemas: gsettings-desktop-schemas-40.0
- Gsl: Gsl-2.7
- gsound: GSound-1.0.3
- gspell: gspell-1.8.4
- gst-libav: gst-libav-1.18.4
- gst-plugins-bad: gst-plugins-bad-1.18.4
- gst-plugins-base: gst-plugins-base-1.18.4
- gst-plugins-good: gst-plugins-good-1.18.4
- gst-plugins-ugly: gst-plugins-ugly-1.18.4
- gstreamer: gstreamer-1.18.4
- gstreamer-vaapi: gstreamer-vaapi-1.18.4
- GTK Engines: GTK Engines-2.20.2
- GTK+2: GTK+-2.24.33
- GTK+3: GTK+-3.24.30
- GTK-Doc: GTK-Doc-1.33.2
- gtk-vnc: gtk-vnc-1.2.0
- GTK-4: GTK-4.4.0
- Gtkmm: Gtkmm-3.24.5
- gtkmm2: Gtkmm-2.24.5
- gtksourceview: gtksourceview-3.24.11
- gtksourceview4: gtksourceview4-4.8.1
- gtksourceview5: gtksourceview5-5.0.0
- Gucharmap: Gucharmap-13.0.8
- Guile: Guile-3.0.7
- Gutenprint: Gutenprint-5.3.3
- Gvfs: Gvfs-1.48.1
- Gwenview: Gwenview-21.08.0
- HarfBuzz: HarfBuzz-2.9.0
- Haveged: Haveged-1.9.14
- Hd2u: Hd2u-1.0.4
- Hdparm: Hdparm-9.62
- Heirloom mailx: mailx-12.5
- HexChat: HexChat-2.14.3
- Hicolor-icon-theme: hicolor-icon-theme-0.17
- Highlight: Highlight-4.1
- HTML::Parser: HTML::Parser-3.76
- HTML::Tagset: HTML::Tagset-3.20
- HTTP::Cookies: HTTP::Cookies-6.10
- HTTP::Daemon: HTTP::Daemon-6.12
- HTTP::Date: HTTP::Date-6.05
- HTTP::Message: HTTP::Message-6.33
- HTTP::Negotiate: HTTP::Negotiate-6.01
- ibus: ibus-1.5.25
- icewm: IceWM-2.7.0
- Icon-naming-utils: icon-naming-utils-0.8.90
- ICU: ICU-69.1
- id3lib: id3lib-3.8.3
- ImageMagick: ImageMagick-7.1.0-4
- imlib2: imlib2-1.7.2
- Importer: Importer-0.026
- inih: inih-53
- Inkscape: Inkscape-1.1
- install-tl-unx: install-tl-unx
- IO::HTML: IO::HTML-1.004
- IO::Socket::SSL: IO::Socket::SSL-2.072
- IO::String: IO::String-1.08
- IPAex fonts: TTF and OTF fonts -- description
- IPC::Run3: IPC::Run3-0.048
- IPC::System::Simple: IPC::System::Simple-1.30
- iptables: iptables-1.8.7
- ISO Codes: ISO Codes-4.7.0
- itstool: itstool-2.0.6
- iw: iw-5.9
- jansson: Jansson-2.13.1
- JasPer: JasPer-2.0.33
- JDK Binary: Java-16.0.2
- jfsutils: jfsutils-1.1.15
- Jinja2: Jinja2-3.0.1
- JOE: JOE-4.6
- js78: JS-78.13.0
- JSON-C: JSON-C-0.15
- JSON-GLib: JSON-GLib-1.6.6
- K3b: k3b-21.08.0
- Kate: Kate-21.08.0
- KDE Frameworks: Building KDE Frameworks 5 (KF5)
- KDE Plasma 5: Building Plasma 5
- Konsole: Kdenlive-21.08.0
- keybinder2: keybinder-0.3.1
- keybinder-3.0: keybinder-3.0-0.3.2
- keyutils: keyutils-1.6.1
- khelpcenter: Khelpcenter-21.08.0
- KMix: KMix-21.08.0
- Konsole: Konsole-21.08.0
- kwave: kwave-21.08.0
- LAME: LAME-3.100
- ldns: ldns-1.7.1
- Liba52: Liba52-0.7.4
- libaio: libaio-0.3.112
- Libao: Libao-1.2.0
- libarchive: libarchive-3.5.2
- libass: libass-0.15.1
- libassuan: libassuan-2.5.5
- libatasmart: libatasmart-0.19
- libatomic_ops: libatomic_ops-7.6.10
- libblockdev: libblockdev-2.26
- libburn: libburn-1.5.4
- libbytesize: libbytesize-2.6
- libcairomm-1.0: libcairomm-1.0 (cairomm-1.14.0)
- libcanberra: libcanberra-0.30
- libcap: libcap-2.53 with PAM
- libcddb: libcddb-1.3.2
- libcdio: libcdio-2.1.0
- libchamplain: libchamplain-0.12.20
- libdaemon: libdaemon-0.14
- libdazzle: libdazzle-3.40.0
- libdbusmenu-qt: libdbusmenu-qt-0.9.3+16.04.20160218
- libdiscid: libdiscid-0.6.2
- libdrm: libdrm-2.4.107
- Libdv: Libdv-1.0.0
- libdvdcss: libdvdcss-1.4.3
- Libdvdnav: Libdvdnav-6.1.1
- Libdvdread: Libdvdread-6.1.2
- libepoxy: libepoxy-1.5.9
- Liberation fonts: TTF and OTF fonts -- description
- libevdev: libevdev 1.11.0
- libevent: libevent-2.1.12
- libexif: libexif-0.6.22
- libfm: libfm-1.3.2
- libfm-extra: libfm-extra-1.3.2
- libgcrypt: libgcrypt-1.9.4
- libgdata: libgdata-0.18.1
- libgee: libgee-0.20.4
- Libglade: libglade-2.6.4
- libgpg-error: libgpg-error-1.42
- libgrss: libgrss-0.7.0
- libgsf: libgsf-1.14.47
- libgtop: libgtop-2.40.0
- libgudev: libgudev-237
- libgusb: libgusb-0.3.7
- libgweather: libgweather-40.0
- libgxps: Libgxps-0.3.2
- libhandy1: Libhandy-1.2.3
- libical: libical-3.0.10
- libidn: libidn-1.38
- libidn2: libidn2-2.3.2
- libinput: libinput-1.18.1
- libiodbc: libiodbc-3.52.15
- libisoburn: libisoburn-1.5.4
- libisofs: libisofs-1.5.4
- libjpeg-turbo: libjpeg-turbo-2.1.1
- libkcddb: libkcddb-21.08.0
- libkdcraw: libkdcraw-21.08.0
- libkexiv2: libkexiv2-21.08.0
- libksba: libksba-1.6.0
- liblinear: liblinear-243
- Libmad: libmad-0.15.1b
- libmbim: libmbim-1.26.0
- Libmng: libmng-2.0.3
- libmnl: libmnl-1.0.4
- libmpeg2: libmpeg2-0.5.1
- libmusicbrainz: libmusicbrainz-2.1.5
- libmusicbrainz: libmusicbrainz-5.1.0
- libmypaint: libmypaint-1.6.1
- libndp: libndp-1.8
- libnl: libnl-3.5.0
- libnma: libnma-1.8.32
- libnotify: libnotify-0.7.9
- libnsl: libnsl-1.3.0
- liboauth: liboauth-1.0.3
- Libogg: libogg-1.3.5
- libpaper: libpaper-1.1.24+nmu5
- libpcap: libpcap-1.10.1
- libpeas: libpeas-1.30.0
- libpng: libpng-1.6.37
- libportal: libportal-0.4
- libpsl: libpsl-0.21.1
- libpwquality: libpwquality-1.4.4
- libqmi: libqmi-1.30.0
- libqrencode: qrencode-4.1.1
- libquicktime: libquicktime-1.2.4
- libraw: libraw-0.20.2
- LibreOffice: LibreOffice-7.2.0
- Librep: Librep-0.92.7
- librsvg: librsvg-2.50.7
- libsamplerate: libsamplerate-0.2.1
- libseccomp: libseccomp-2.5.1
- libsecret: libsecret-0.20.4
- libsigc++: libsigc++-2.10.7
- libsigc++3: libsigc++-3.0.7
- libsigsegv: libsigsegv-2.13
- libsndfile: libsndfile-1.0.31
- libsoup: libsoup-2.74.0
- libspiro: Libspiro-20200505
- libssh2: libssh2-1.9.0
- libstatgrab: libstatgrab-0.92.1
- libtasn1: libtasn1-4.17.0
- Libtheora: libtheora-1.1.1
- libtiff: libtiff-4.3.0
- libtirpc: libtirpc-1.3.2
- libuninameslist: libuninameslist-20210626
- libunique: libunique-1.1.6
- libunistring: libunistring-0.9.10
- libusb: libusb-1.0.24
- libuv: libuv-1.42.0
- libva: libva-2.12.0
- libvdpau: libvdpau-1.4
- libvdpau-va-gl: libvdpau-va-gl-0.4.0
- Libvorbis: libvorbis-1.3.7
- libvpx: libvpx-1.10.0
- libwacom: libwacom-1.11
- libwebp: libwebp-1.2.1
- libwnck 2: libwnck-2.30.7
- libwnck 3: libwnck-40.0
- libwpe: libwpe-1.10.1
- libwww-perl: libwww-perl-6.55
- libXau: libXau-1.0.9
- libxcb: libxcb-1.14
- libXdmcp: libXdmcp-1.1.3
- libxfce4ui: libxfce4ui-4.16.0
- libxfce4util: libxfce4util-4.16.0
- libxkbcommon: libxkbcommon-1.3.0
- libxklavier: libxklavier-5.4
- libxml2: libxml2-2.9.12
- libxml2: libxml2-2.9.12 (for its Python2 module)
- libxslt: libxslt-1.1.34
- libyaml: libyaml-0.2.5
- lightdm: lightdm-1.30.0
- Lingua::Translit: Lingua::Translit-0.28
- Links: Links-2.23
- Linux-PAM: Linux-PAM-1.5.1
- List::AllUtils: List::AllUtils-0.19
- List::MoreUtils: List::MoreUtils-0.430
- List::MoreUtils::XS: List::MoreUtils::XS-0.430
- List::SomeUtils: List::SomeUtils-0.58
- List::SomeUtils::XS: List::SomeUtils::XS-0.58
- List::UtilsBy: List::UtilsBy-0.11
- Little CMS: Little CMS-1.19
- Little CMS2: Little CMS-2.12
- LLVM: LLVM-12.0.1
- lmdb: lmdb-0.9.29
- lm_sensors: lm-sensors-3-6-0
- Log::Log4perl: Log::Log4perl-1.54
- logrotate: Logrotate-3.18.1
- LSB-Tools: LSB-Tools-0.9
- lsof: lsof-4.91
- Lua: Lua-5.4.3
  Lua-5.2.4
- LVM2: LVM2-2.03.13
- LWP::MediaTypes: LWP::MediaTypes-6.04
- LWP::Protocol::https: LWP::Protocol::https-6.10
- LXAppearance: LXAppearance-0.6.3
- lxappearance-obconf: lxappearance-obconf-0.2.3
- lxde-common: lxde-common-0.99.2
- lxde-icon-theme: lxde-icon-theme-0.5.1
- lxdm: lxdm-0.5.3
- LXInput: LXInput-0.3.5
- lxmenu-data: lxmenu-data-0.1.5
- lxml: lxml-4.6.3
- LXPanel: LXPanel-0.10.1
- LXRandR: LXRandR-0.3.2
- LXSession: LXSession-0.5.5
- lxshortcut: libfm-1.3.2 -- description
- LXTask: LXTask-0.1.10
- LXTerminal: LXTerminal-0.4.0
- Lynx: Lynx-2.8.9rel.1
- LZO: LZO-2.10
- make-ca: make-ca-1.7
- Mako: Mako-1.1.5
- MariaDB: MariaDB-10.6.4
- MarkupSafe: MarkupSafe-2.0.1
- MC: MC-4.8.27
- mdadm: mdadm-4.1
- menu-cache: menu-cache-1.1.0
- mercurial: Mercurial-5.9
- Mesa: Mesa-21.2.1
- MIME::Charset: MIME::Charset-1.012.2
- MIT Kerberos V5: MIT Kerberos V5-1.19.2
- MLT: MLT-7.0.1
- ModemManager: ModemManager-1.16.10
- Module::Build: Module::Build-0.4231
- Module::Implementation: Module::Implementation-0.09
- Module::Pluggable: Module::Pluggable-5.2
- Module::Runtime: Module::Runtime-0.016
- Mousepad: Mousepad-0.5.6
- mpg123: mpg123-1.28.2
- MPlayer: MPlayer-export-2021-07-29
- MRO::Compat: MRO::Compat-0.13
- mtdev: mtdev-1.1.6
- mupdf: MuPDF-1.18.0
- mutt: Mutt-2.1.2
- Mutter: Mutter-40.4
- mypaint-brushes: mypaint-brushes-1.3.0
- namespace::autoclean: namespace::autoclean-0.29
- namespace::clean: namespace::clean-0.27
- Nano: Nano-5.8
- NASM: NASM-2.15.05
- Nautilus: Nautilus-40.2
- NcFTP: NcFTP-3.2.6
- neon: neon-0.31.2
- Net::DNS: Net::DNS-1.32
- Net::HTTP: Net::HTTP-6.21
- Net::SSLeay: Net::SSLeay-1.90
- Net-tools: Net-tools-2.10
- Nettle: Nettle-3.7.3
- network-manager-applet: network-manager-applet-1.24.0
- NetworkManager: NetworkManager-1.32.10
- newt: newt-0.52.21
- NFS Utilities: NFS-Utils-2.5.4
- nghttp2: nghttp2-1.44.0
- Nmap: Nmap-7.92
- nodejs: Node.js-14.17.5
- notification-daemon: notification-daemon-3.20.0
- Noto fonts: TTF and OTF fonts -- description
- Noto Sans CJK: TTF and OTF fonts -- description
- NPth: npth-1.6
- NSPR: NSPR-4.32
- NSS: NSS-3.69
- ntfs-3g: ntfs-3g-2021.8.22
- ntp: ntp-4.2.8p15
- Number::Compare: Number::Compare-0.03
- Okular: Okular-21.08.0
- Openbox: openbox-3.6.1
- opencv: opencv-4.5.3
- OpenJade: OpenJade-1.3.2
- OpenJDK: OpenJDK-16.0.2
- OpenJPEG: OpenJPEG-2.4.0
- OpenLDAP: OpenLDAP-2.5.7
- OpenSP: OpenSP-1.5.2
- OpenSSH: OpenSSH-8.7p1
- Opus: Opus-1.3.1
- Oxygen fonts: TTF and OTF fonts -- description
- oxygen-icons5: oxygen-icons5-5.85.0
- p11-kit: p11-kit-0.24.0
- p7zip: p7zip-17.04
- Package::Stash: Package::Stash-0.39
- Pango: Pango-1.48.9
- Pangomm: Pangomm-2.46.1
- paps: paps-0.7.1
- Params::Validate: Params::Validate-1.30
- Params::ValidationCompiler: Params::ValidationCompiler-0.30
- Parole: Parole-4.16.0
- Parse::RecDescent: Parse::RecDescent-1.967015
- Parse::Yapp: Parse::Yapp-1.21
- Parted: parted-3.4
- Path::Tiny: Path::Tiny-0.118
- pavucontrol: pavucontrol-5.0
- pax: Pax-20201030
- pciutils: pciutils-3.7.0
- PCManFM: PCManFM-1.3.2
- PCRE: PCRE-8.45
- PCRE2: PCRE2-10.37
- Perl Module Dependencies: Perl Module Dependencies
- Perl Modules: Perl Modules
- PerlIO::utf8_strict: PerlIO::utf8_strict-0.008
- phonon: Phonon-4.11.1
- phonon-backend-gstreamer: Phonon-backend-gstreamer-4.10.0
- phonon-backend-vlc: Phonon-backend-vlc-0.11.3
- PHP: PHP-8.0.10
- Pidgin: Pidgin-2.14.6
- PIN-Entry: pinentry-1.2.0
- pipewire: Pipewire-0.3.34
- Pixman: Pixman-0.40.0
- plasma-wayland-protocols: Plasma-wayland-protocols-1.3.0
- pm-utils: pm-utils-1.4.1
- pnmixer: pnmixer-0.7.2
- Polkit: Polkit-0.119
- polkit-gnome: polkit-gnome-0.105
- polkit-qt: Polkit-Qt-0.114.0
- Poppler: Poppler-21.08.0
- Popt: Popt-1.18
- Postfix: Postfix-3.6.2
- PostgreSQL: PostgreSQL-13.4
- Potrace: Potrace-1.16
- Procmail: Procmail-3.22
- Proftpd: ProFTPD-1.3.7c
- psftools: About Console Fonts -- description
- Pth: Pth-2.0.7
- PulseAudio: PulseAudio-15.0
- Py3c: Py3c-1.3.1
- PyAtSpi2: PyAtSpi2-2.38.1
- PyCairo: PyCairo-1.20.1
- PyCairo2: PyCairo-1.18.2
- pycryptodome: PyCryptodome-3.10.1
- Pygments: Pygments-2.10.0
- PyGObject: PyGObject-2.28.7
- PyGObject3: PyGObject-3.40.1
- PyGTK: PyGTK-2.24.0
- Python Modules: Python Modules
- python-slip: python-slip-0.6.5
- Python2: Python-2.7.18
- Python3: Python-3.9.6
- PyXDG: PyXDG-0.27
- PyYAML: PyYAML-5.3.1
- qca: Qca-2.3.3
- qemu: qemu-6.1.0
- Qpdf: Qpdf-10.3.2
- Qt: Qt-5.15.2
- qtwebengine: QtWebEngine-5.15.6
- Raptor: Raptor-2.0.15
- Rarian: Rarian-0.8.1
- Rasqal: Rasqal-0.9.33
- Redland: Redland-1.0.17
- Regexp::Common: Regexp::Common-2017060201
- reiserfsprogs: reiserfsprogs-3.6.27
- Rep-gtk: Rep-gtk-0.90.8.3
- rest: rest-0.8.1
- Ristretto: Ristretto-0.11.0
- Role::Tiny: Role::Tiny-2.002004
- rox-filer: Rox-Filer-2.11
- rpcbind: rpcbind-1.2.6
- rpcsvc-proto: rpcsvc-proto-1.4.2
- rsync: rsync-3.2.3
- Ruby: Ruby-3.0.2
- Rust: Rustc-1.52.0
- rxvt-unicode: rxvt-unicode-9.26
- Samba: Samba-4.14.7
- SANE: SANE-1.0.29
- sassc: sassc-3.6.2
- Sawfish: sawfish-1.12.0
- SBC: SBC-1.5
- Scalar::List::Utils: Scalar::List::Utils-1.56
- SCons: SCons-4.2.0
- Scope::Guard: Scope::Guard-0.21
- scour: Scour-0.38.2
- Screen: Screen-4.8.0
- SDL: SDL-1.2.15
- SDL2: SDL2-2.0.16
- Seahorse: Seahorse-40.0
- SeaMonkey: SeaMonkey-2.53.9
- sendmail: sendmail-8.17.1
- Serf: Serf-1.3.9
- sg3_utils: sg3_utils-1.46
- SGML Common: sgml-common-0.6.3
- SGMLSpm: SGMLSpm-1.1
- Shadow: Shadow-4.9
- shared-mime-info: shared-mime-info-2.1
- Sharutils: Sharutils-4.15.2
- six: six-1.16.0
- slang: slang-2.3.2
- smartmontools: smartmontools-7.2
- Sort::Key: Sort::Key-1.33
- sound-theme-freedesktop: sound-theme-freedesktop-0.8
- SoundTouch: SoundTouch-2.3.0
- Source Code Pro: TTF and OTF fonts -- description
- Specio: Specio-0.47
- Speex: Speex-1.2.0
- SQLite: SQLite-3.36.0
- ssh-askpass: ssh-askpass-8.7p1
- sshfs: sshfs-3.7.2
- startup-notification: startup-notification-0.12
- stunnel: stunnel-5.60
- Sub::Exporter::Progressive: Sub::Exporter::Progressive-0.001013
- Sub::Identify: Sub::Identify-0.14
- Sub::Info: Sub::Info-0.002
- Sub::Quote: Sub::Quote-2.006006
- Sub::Uplevel: Sub::Uplevel-0.2800
- Subversion: Subversion-1.14.1
- Sudo: Sudo-1.9.7p2
- SUPER: SUPER-1.20190531
- SWIG: SWIG-4.0.2
- sysprof: Sysprof-3.40.1
- Sysstat: Sysstat-12.5.4
- systemd: Systemd-249
- Taglib: Taglib-1.12
- Talloc: Talloc-2.3.3
- Tcsh: Tcsh-6.22.04
- telepathy-glib: telepathy-glib-0.24.2
- telepathy-logger: telepathy-logger-0.8.2
- telepathy-mission-control: telepathy-mission-control-5.16.6
- tepl: Tepl-6.00.0
- Term::Table: Term::Table-0.015
- terminus-font: About Console Fonts -- description
- Test::Command: Test::Command-0.11
- Test::Deep: Test::Deep-1.130
- Test::Differences: Test::Differences-0.68
- Test::Exception: Test::Exception-0.43
- Test::Fatal: Test::Fatal-0.016
- Test::File: Test::File-1.448
- Test::File::ShareDir: Test::File::ShareDir-1.001002
- Test::LeakTrace: Test::LeakTrace-0.17
- Test::MockModule: Test::MockModule-v0.176.0
- Test::Needs: Test::Needs-0.002009
- Test::Requires: Test::Requires-0.11
- Test::RequiresInternet: Test::RequiresInternet-0.05
- Test::utf8: Test::utf8-1.02
- Test::Warnings: Test::Warnings-0.031
- Test::Without::Module: Test::Without::Module-0.20
- Test2::Plugin::NoWarnings: Test2::Plugin::NoWarnings-0.09
- Test2::Suite: Test2::Suite-0.000140
- texlive: texlive-20210325-source
- Text::BibTeX: Text::BibTeX-0.88
- Text::CSV: Text::CSV-2.01
- Text::CSV_XS: Text::CSV_XS-1.46
- Text::Diff: Text::Diff-1.45
- Text::Glob: Text::Glob-0.11
- Text::Roman: Text::Roman-3.5
- Thunar: thunar-4.16.8
- thunar-volman: thunar-volman-4.16.0
- Thunderbird: Thunderbird-91.0.3
- Tidy HTML5: tidy-html5-5.8.0
- Tie::Cycle: Tie::Cycle-1.226
- tigervnc: Tigervnc-1.11.0
- time: Time-1.9
- TimeDate: TimeDate-2.33
- Tk: Tk-8.6.11.1
- totem-pl-parser: totem-pl-parser-3.26.6
- Traceroute: Traceroute-2.1.0
- Tracker3: Tracker-3.1.2
- tracker3-miners: Tracker-miners-3.1.2
- Transcode: Transcode-1.1.7
- Transmission: Transmission-3.00
- tree: tree-1.8.0
- Tripwire: Tripwire-2.4.3.7
- Try::Tiny: Try::Tiny-0.30
- TTF and OTF fonts: TTF and OTF fonts
- Tumbler: tumbler-4.16.0
- twm: twm-1.0.11
- uchardet: Uchardet-0.0.7
- UDisks2: UDisks-2.9.3
- uhttpmock: uhttpmock-0.5.3
- umockdev: Umockdev-0.16.2
- Unbound: Unbound-1.13.2
- Unicode::Collate: Unicode::Collate-1.31
- Unicode::LineBreak: Unicode::LineBreak-2019.001
- unixODBC: unixODBC-2.3.9
- UnRar: UnRar-6.0.7
- UnZip: UnZip-6.0
- UPower: UPower-0_99_13
- URI: URI-5.09
- usbutils: usbutils-014
- util-macros: util-macros-1.19.3
- v4l-utils: v4l-utils-1.20.0
- Vala: Vala-0.52.5
- Valgrind: Valgrind-3.17.0
- Variable::Magic: Variable::Magic-0.62
- Vim: Vim-8.2.3337
- Vinagre: Vinagre-3.22.0
- VLC: VLC-3.0.16
- VL Gothic: TTF and OTF fonts -- description
- volume_key: volume_key-0.3.12
- Vorbis Tools: vorbis-tools-1.4.2
- vsftpd: vsftpd-3.0.5
- VTE: VTE-0.64.2
- Vte: Vte-0.28.2
- Wayland: Wayland-1.19.0
- wayland-protocols: Wayland-Protocols-1.21
- WebKitGTK: WebKitGTK-2.32.3
- WenQuanYi Zen Hei: TTF and OTF fonts -- description
- Wget: Wget-1.21.1
- Which: Which-2.21 and Alternatives
- Whois: Whois-5.4.3
- Wireless Tools: Wireless Tools-29
- Wireshark: Wireshark-3.4.8
- woff2: woff2-1.0.2
- wpa_supplicant: wpa_supplicant-2.9
- wpebackend-fdo: wpebackend-fdo-1.10.0
- Wv: wv-1.2.9
- WWW::RobotRules: WWW::RobotRules-6.02
- x264: x264-20210814
- x265: x265-3.4
- xapian: Xapian-1.4.18
- xarchiver: xarchiver-0.5.4.17
- xbitmaps: xbitmaps-1.1.2
- xcb-proto: xcb-proto-1.14.1
- xcb-util: xcb-util-0.4.0
- xcb-util-cursor: xcb-util-cursor-0.1.3
- xcb-util-image: xcb-util-image-0.4.0
- xcb-util-keysyms: xcb-util-keysyms-0.4.0
- xcb-util-renderutil: xcb-util-renderutil-0.3.9
- xcb-util-wm: xcb-util-wm-0.4.1
- xclock: xclock-1.0.9
- xcursor-themes: xcursor-themes-1.0.6
- xdg-user-dirs: Xdg-user-dirs-0.17
- xdg-utils: xdg-utils-1.1.3
- Xfburn: Xfburn-0.6.2
- xfce4-appfinder: xfce4-appfinder-4.16.1
- xfce4-notifyd: xfce4-notifyd-0.6.2
- xfce4-panel: xfce4-panel-4.16.3
- xfce4-power-manager: xfce4-power-manager-4.16.0
- xfce4-pulseaudio-plugin: xfce4-pulseaudio-plugin-0.4.3
- xfce4-session: xfce4-session-4.16.0
- xfce4-settings: xfce4-settings-4.16.2
- xfce4-terminal: xfce4-terminal-0.8.10
- Xfconf: Xfconf-4.16.0
- Xfdesktop: Xfdesktop-4.16.0
- xfsprogs: xfsprogs-5.13.0
- Xfwm4: Xfwm4-4.16.1
- xindy: xindy-2.5.1
- Xine Libraries: xine-lib-1.2.11
- Xine User Interface: xine-ui-0.99.12
- xinit: xinit-1.4.1
- XKeyboardConfig: XKeyboardConfig-2.33
- XML::LibXML: XML::LibXML-2.0207
- XML::LibXML::Simple: XML::LibXML::Simple-1.01
- XML-LibXSLT: XML::LibXSLT-1.99
- XML::NamespaceSupport: XML::NamespaceSupport-1.12
- XML::SAX: XML::SAX-1.02
- XML::SAX::Base: XML::SAX::Base-1.09
- XML::Simple: XML::Simple-2.25
- XML::Writer: XML::Writer-0.900
- xmlto: xmlto-0.0.28
- xorg-amdgpu-driver: Xorg AMDGPU Driver-21.0.0
- xorg-ati-driver: Xorg ATI Driver-19.1.0
- xorg-evdev-driver: Xorg Evdev Driver-2.10.6
- xorg-fbdev-driver: Xorg Fbdev Driver-0.5.0
- xorg-intel-driver: Xorg Intel Driver-20210222
- xorg-libinput-driver: Xorg Libinput Driver-1.1.0
- xorg-nouveau-driver: Xorg Nouveau Driver-1.0.17
- xorg-server: Xorg-Server-1.20.13
- xorg-synaptics-driver: Xorg Synaptics Driver-1.9.1
- xorg-vmware-driver: Xorg VMware Driver-13.3.0
- xorg-wacom-driver: Xorg Wacom Driver-0.40.0
- Xorg: Introduction to Xorg-7
- Xorg-7 Applications: Xorg Applications
- xorg7-driver: Xorg Drivers
- Xorg Fonts: Xorg Fonts
- Xorg Legacy: Xorg Legacy
- Xorg Libraries: Xorg Libraries
- xorgproto: xorgproto-2021.4
- XSane: XSane-0.999
- XScreenSaver: XScreenSaver-6.01
- xterm: xterm-368
- XviD: XviD-1.3.7
- yasm: yasm-1.3.0
- Yelp: Yelp-40.3
- yelp-xsl: yelp-xsl-40.2
- Zenity: Zenity-3.32.0
- Zip: Zip-3.0
- zsh: zsh-5.8

## Programs

- 7z: p7zip-17.04 -- description
- 7za: p7zip-17.04 -- description
- 7zr: p7zip-17.04 -- description
- a2x: Asciidoc-9.1.0 -- description
- a52dec: Liba52-0.7.4 -- description
- aafire: AAlib-1.4rc5 -- description
- aainfo: AAlib-1.4rc5 -- description
- aalib-config: AAlib-1.4rc5 -- description
- aasavefont: AAlib-1.4rc5 -- description
- aatest: AAlib-1.4rc5 -- description
- aaxine: xine-ui-0.99.12 -- description
- ab: Apache-2.4.48 -- description
- abiword: AbiWord-3.0.5 -- description
- accounts-daemon: AccountsService-0.6.55 -- description
- aconnect: alsa-utils-1.2.5.1 -- description
- acountry: c-ares-1.17.2 -- description
- acpid: acpid-2.0.32 -- description
- acpi_listen: acpid-2.0.32 -- description
- acyclic: Graphviz-2.48.0 -- description
- addgnupghome: GnuPG-2.2.29 -- description
- adig: c-ares-1.17.2 -- description
- ahost: c-ares-1.17.2 -- description
- alsactl: alsa-utils-1.2.5.1 -- description
- alsaloop: alsa-utils-1.2.5.1 -- description
- alsamixer: alsa-utils-1.2.5.1 -- description
- alsatplg: alsa-utils-1.2.5.1 -- description
- alsaucm: alsa-utils-1.2.5.1 -- description
- amidi: alsa-utils-1.2.5.1 -- description
- amixer: alsa-utils-1.2.5.1 -- description
- animate: ImageMagick-7.1.0-4 -- description
- ant: apache-ant-1.10.11 -- description
- antRun: apache-ant-1.10.11 -- description
- antRun.pl: apache-ant-1.10.11 -- description
- aoss: alsa-oss-1.1.8 -- description
- apachectl: Apache-2.4.48 -- description
- aplay: alsa-utils-1.2.5.1 -- description
- aplaymidi: alsa-utils-1.2.5.1 -- description
- applygnupgdefaults: GnuPG-2.2.29 -- description
- apr-1-config: Apr-1.7.0 -- description
- apu-1-config: Apr-Util-1.6.1 -- description
- apxs: Apache-2.4.48 -- description
- arecord: alsa-utils-1.2.5.1 -- description
- arecordmidi: alsa-utils-1.2.5.1 -- description
- aria_chk: MariaDB-10.6.4 -- description
- aria_dump_log: MariaDB-10.6.4 -- description
- aria_ftdump: MariaDB-10.6.4 -- description
- aria_pack: MariaDB-10.6.4 -- description
- aria_read_log: MariaDB-10.6.4 -- description
- aria_s3_copy: MariaDB-10.6.4 -- description
- ark: Ark-21.08.0 -- description
- arp: Net-tools-2.10 -- description
- arpaname: BIND-9.16.20 -- description
- as10k1: alsa-tools-1.2.5 -- description
- asciidoc: Asciidoc-9.1.0 -- description
- asciidoctor: Asciidoctor-2.0.16 -- description
- aseqdump: alsa-utils-1.2.5.1 -- description
- aseqnet: alsa-utils-1.2.5.1 -- description
- aserver: alsa-lib-1.2.5.1 -- description
- asn1Coding: libtasn1-4.17.0 -- description
- asn1Decoding: libtasn1-4.17.0 -- description
- asn1Parser: libtasn1-4.17.0 -- description
- aspell: Aspell-0.60.8 -- description
- aspell-import: Aspell-0.60.8 -- description
- assistant: Qt-5.15.2 -- description
- asy: asymptote-2.70 -- description
- at: at-3.2.2 -- description
- atd: at-3.2.2 -- description
- atq: at-3.2.2 -- description
- atrm: at-3.2.2 -- description
- atrun: at-3.2.2 -- description
- audacious: Audacious-4.1 -- description
- audtool: Audacious-4.1 -- description
- autoconf2.13: Autoconf2.13 -- description
- autoheader2.13: Autoconf2.13 -- description
- automount: autofs-5.1.7 -- description
- autoreconf2.13: Autoconf2.13 -- description
- autoscan2.13: Autoconf2.13 -- description
- autoupdate2.13: Autoconf2.13 -- description
- avahi-autoipd: Avahi-0.8 -- description
- avahi-browse: Avahi-0.8 -- description
- avahi-browse-domains: Avahi-0.8 -- description
- avahi-daemon: Avahi-0.8 -- description
- avahi-discover-standalone: Avahi-0.8 -- description
- avahi-dnsconfd: Avahi-0.8 -- description
- avahi-publish: Avahi-0.8 -- description
- avahi-publish-address: Avahi-0.8 -- description
- avahi-publish-service: Avahi-0.8 -- description
- avahi-resolve: Avahi-0.8 -- description
- avahi-resolve-address: Avahi-0.8 -- description
- avahi-resolve-host-name: Avahi-0.8 -- description
- avahi-set-host-name: Avahi-0.8 -- description
- avifix: Transcode-1.1.7 -- description
- aviindex: Transcode-1.1.7 -- description
- avimerge: Transcode-1.1.7 -- description
- avisplit: Transcode-1.1.7 -- description
- avisync: Transcode-1.1.7 -- description
- axfer: alsa-utils-1.2.5.1 -- description
- balsa: Balsa-2.6.3 -- description
- balsa-ab: Balsa-2.6.3 -- description
- balsam: Qt-5.15.2 -- description
- baobab: Baobab-40.0 -- description
- batch: at-3.2.2 -- description
- bcomps: Graphviz-2.48.0 -- description
- bdftopcf: Xorg Legacy -- description
- bdftruncate: Xorg Fonts -- description
- bf_compact: Bogofilter-1.2.5 -- description
- bf_copy: Bogofilter-1.2.5 -- description
- bf_tar: Bogofilter-1.2.5 -- description
- biber: biber-2.16 -- description
- biblex: Text::BibTeX-0.88 -- description
- bibparse: Text::BibTeX-0.88 -- description
- blkdeactivate: LVM2-2.03.13 -- description
- blocks: FLTK-1.3.7 -- description
- bluefish: Bluefish-2.2.12 -- description
- bluemoon: BlueZ-5.61 -- description
- bluetooth-sendto: gnome-bluetooth-3.34.5 -- description
- bluetoothctl: BlueZ-5.61 -- description
- bluetoothd: BlueZ-5.61 -- description
- bogofilter: Bogofilter-1.2.5 -- description
- bogolexer: Bogofilter-1.2.5 -- description
- bogotune: Bogofilter-1.2.5 -- description
- bogoupgrade: Bogofilter-1.2.5 -- description
- bogoutil: Bogofilter-1.2.5 -- description
- brasero: Brasero-3.12.2 -- description
- brctl: bridge-utils-1.7.1 -- description
- broadwayd: GTK+-3.24.30 -- description
- brotli: brotli-1.0.9 -- description
- bscalc: libbytesize-2.6 -- description
- bsdcat: libarchive-3.5.2 -- description
- bsdcpio: libarchive-3.5.2 -- description
- bsdtar: libarchive-3.5.2 -- description
- bssh: Avahi-0.8 -- description
- btcflash: Cdrtools-3.02a09 -- description
- btmon: BlueZ-5.61 -- description
- btrfs: btrfs-progs-5.13.1 -- description
- btrfs-convert: btrfs-progs-5.13.1 -- description
- btrfs-find-root: btrfs-progs-5.13.1 -- description
- btrfs-map-logical: btrfs-progs-5.13.1 -- description
- btrfs-select-super: btrfs-progs-5.13.1 -- description
- btrfstune: btrfs-progs-5.13.1 -- description
- bugpoint: LLVM-12.0.1 -- description
- bundle: Ruby-3.0.2 -- description
- bundler: Ruby-3.0.2 -- description
- bvnc: Avahi-0.8 -- description
- bwrap: Bubblewrap-0.5.0 -- description
- c-index-test: LLVM-12.0.1 -- description
- cacaxine: xine-ui-0.99.12 -- description
- cairo-trace: Cairo-1.17.4 -- description
- calc_tickadj: ntp-4.2.8p15 -- description
- callgrind_annotate: Valgrind-3.17.0 -- description
- callgrind_control: Valgrind-3.17.0 -- description
- canberra-gtk-play: libcanberra-0.30 -- description
- canbusutil: Qt-5.15.2 -- description
- cancel: Cups-2.3.3op2 -- description
- capinfos: Wireshark-3.4.8 -- description
- captype: Wireshark-3.4.8 -- description
- cargo: Rustc-1.52.0 -- description
- cargo-clippy: Rustc-1.52.0 -- description
- cargo-fmt: Rustc-1.52.0 -- description
- cargo-miri: Rustc-1.52.0 -- description
- cbindgen: Cbindgen-0.20.0 -- description
- ccache-swig: SWIG-4.0.2 -- description
- ccmake: CMake-3.21.2 -- description
- ccomps: Graphviz-2.48.0 -- description
- cd-convert: colord-gtk-0.2.0 -- description
- cd-create-profile: Colord-1.4.5 -- description
- cd-drive: libcdio-2.1.0 -- description
- cd-fix-profile: Colord-1.4.5 -- description
- cd-iccdump: Colord-1.4.5 -- description
- cd-info: libcdio-2.1.0 -- description
- cd-it8: Colord-1.4.5 -- description
- cd-paranoia: libcdio-2.1.0 -- description
- cd-read: libcdio-2.1.0 -- description
- cdda-player: libcdio-2.1.0 -- description
- cdda2wav: Cdrtools-3.02a09 -- description
- cddb_query: libcddb-1.3.2 -- description
- cdparanoia: CDParanoia-III-10.2 -- description
- cdrdao: Cdrdao-1.2.4 -- description
- cdrecord: Cdrtools-3.02a09 -- description
- cdrskin: libburn-1.5.4 -- description
- certtool: GnuTLS-3.7.2 -- description
- certutil: NSS-3.69 -- description
- cgdisk: gptfdisk-1.0.8 -- description
- cg_annotate: Valgrind-3.17.0 -- description
- cg_diff: Valgrind-3.17.0 -- description
- cg_merge: Valgrind-3.17.0 -- description
- checkers: FLTK-1.3.7 -- description
- checkgid: Apache-2.4.48 -- description
- checkXML5: Building KDE Frameworks 5 (KF5) -- description
- cheese: Cheese-3.38.0 -- description
- cifs.idmap: cifs-utils-6.13 -- description
- cifs.upcall: cifs-utils-6.13 -- description
- cifscreds: cifs-utils-6.13 -- description
- cifsdd: Samba-4.14.7 -- description
- cifsiostat: Sysstat-12.5.4 -- description
- circo: Graphviz-2.48.0 -- description
- cjpeg: libjpeg-turbo-2.1.1 -- description
- clang: LLVM-12.0.1 -- description
- clang-check: LLVM-12.0.1 -- description
- clang-extdef-mapping: LLVM-12.0.1 -- description
- clang-format: LLVM-12.0.1 -- description
- clang-offload-bundler: LLVM-12.0.1 -- description
- clang-offload-wrapper: LLVM-12.0.1 -- description
- clang-refactor: LLVM-12.0.1 -- description
- clang-rename: LLVM-12.0.1 -- description
- clang-scan-deps: LLVM-12.0.1 -- description
- clippy-driver: Rustc-1.52.0 -- description
- clisp: Clisp-2.49 -- description
- clisp-link: Clisp-2.49 -- description
- cluster: Graphviz-2.48.0 -- description
- clusterdb: PostgreSQL-13.4 -- description
- cmake: CMake-3.21.2 -- description
- cmake-gui: CMake-3.21.2 -- description
- collateindex.pl: docbook-dsssl-1.79 -- description
- colormgr: Colord-1.4.5 -- description
- compare: ImageMagick-7.1.0-4 -- description
- comparerender: Graphite2-1.3.14 -- description
- compface: Compface-1.5.2 -- description
- complete-ant-cmd.pl: apache-ant-1.10.11 -- description
- composite: ImageMagick-7.1.0-4 -- description
- config_data: Module::Build-0.4231 -- description
- conjure: ImageMagick-7.1.0-4 -- description
- cons.saver: MC-4.8.27 -- description
- convert: ImageMagick-7.1.0-4 -- description
- copydatabase: Xapian-1.4.18 -- description
- cpack: CMake-3.21.2 -- description
- cpio: cpio-2.13 -- description
- cracklib-check: CrackLib-2.9.7 -- description
- cracklib-format: CrackLib-2.9.7 -- description
- cracklib-packer: CrackLib-2.9.7 -- description
- crc32: Archive::Zip-1.68 -- description
- create-cracklib-dict: CrackLib-2.9.7 -- description
- createdb: PostgreSQL-13.4 -- description
- createuser: PostgreSQL-13.4 -- description
- cryptsetup: cryptsetup-2.3.6 -- description
- cryptsetup-reencrypt: cryptsetup-2.3.6 -- description
- cspctl: alsa-tools-1.2.5 -- description
- ctags: Emacs-27.2 -- description
- ctest: CMake-3.21.2 -- description
- cue2toc: Cdrdao-1.2.4 -- description
- cups-browsed: cups-filters-1.28.10 -- description
- cups-calibrate: Gutenprint-5.3.3 -- description
- cups-config: Cups-2.3.3op2 -- description
- cups-genppd.5.2: Gutenprint-5.3.3 -- description
- cups-genppdupdate: Gutenprint-5.3.3 -- description
- cupsaccept: Cups-2.3.3op2 -- description
- cupsctl: Cups-2.3.3op2 -- description
- cupsd: Cups-2.3.3op2 -- description
- cupsdisable: Cups-2.3.3op2 -- description
- cupsenable: Cups-2.3.3op2 -- description
- cupsfilter: Cups-2.3.3op2 -- description
- cupsreject: Cups-2.3.3op2 -- description
- cupstestppd: Cups-2.3.3op2 -- description
- curl: cURL-7.78.0 -- description
- curl-config: cURL-7.78.0 -- description
- cvlc: VLC-3.0.16 -- description
- cvt: Xorg-Server-1.20.13 -- description
- cvtsudoers: Sudo-1.9.7p2 -- description
- cwebp: libwebp-1.2.1 -- description
- cx18-ctl: v4l-utils-1.20.0 -- description
- cxpm: Xorg Libraries -- description
- danetool: GnuTLS-3.7.2 -- description
- dash: Dash-0.5.11.4 -- description
- dazzle-list-counters: libdazzle-3.40.0 -- description
- db2*: DocBook-utils-0.6.14 -- description
- db4-entities.pl: docbook-xml-5.1 -- description
- dbmmanage: Apache-2.4.48 -- description
- dbus-binding-tool: dbus-glib-0.112 -- description
- dbwrap_tool: Samba-4.14.7 -- description
- db_archive: Berkeley DB-5.3.28 -- description
- db_checkpoint: Berkeley DB-5.3.28 -- description
- db_deadlock: Berkeley DB-5.3.28 -- description
- db_dump: Berkeley DB-5.3.28 -- description
- db_hotbackup: Berkeley DB-5.3.28 -- description
- db_load: Berkeley DB-5.3.28 -- description
- db_log_verify: Berkeley DB-5.3.28 -- description
- db_printlog: Berkeley DB-5.3.28 -- description
- db_recover: Berkeley DB-5.3.28 -- description
- db_replicate: Berkeley DB-5.3.28 -- description
- db_stat: Berkeley DB-5.3.28 -- description
- db_tuner: Berkeley DB-5.3.28 -- description
- db_upgrade: Berkeley DB-5.3.28 -- description
- db_verify: Berkeley DB-5.3.28 -- description
- dconf: DConf-0.40.0 / DConf-Editor-3.38.3 -- description
- dconf-editor: DConf-0.40.0 / DConf-Editor-3.38.3 -- description
- dcraw_emu: libraw-0.20.2 -- description
- dcraw_half: libraw-0.20.2 -- description
- ddns-confgen: BIND-9.16.20 -- description
- debugreiserfs: reiserfsprogs-3.6.27 -- description
- decode_tm6000: v4l-utils-1.20.0 -- description
- delv: BIND-9.16.20 -- description
- depdiagram-generate: Building KDE Frameworks 5 (KF5) -- description
- depdiagram-generate-all: Building KDE Frameworks 5 (KF5) -- description
- depdiagram-prepare: Building KDE Frameworks 5 (KF5) -- description
- derb: ICU-69.1 -- description
- designer: Qt-5.15.2 -- description
- desktop-file-edit: desktop-file-utils-0.26 -- description
- desktop-file-install: desktop-file-utils-0.26 -- description
- desktop-file-validate: desktop-file-utils-0.26 -- description
- desktoptojson: Building KDE Frameworks 5 (KF5) -- description
- devdump: Cdrtools-3.02a09 -- description
- dhclient: DHCP-4.4.2-P1 -- description
- dhclient-script: DHCP-4.4.2-P1 -- description
- dhcpcd: dhcpcd-9.4.0 -- description
- dhcpd: DHCP-4.4.2-P1 -- description
- dhcrelay: DHCP-4.4.2-P1 -- description
- diagtool: LLVM-12.0.1 -- description
- diffimg: Graphviz-2.48.0 -- description
- diffpp: Enscript-1.6.6 -- description
- dig: BIND-9.16.20 -- description
- dijkstra: Graphviz-2.48.0 -- description
- dirmngr: GnuPG-2.2.29 -- description
- dirmngr-client: GnuPG-2.2.29 -- description
- disable-paste: GPM-1.20.7 -- description
- display: ImageMagick-7.1.0-4 -- description
- display-buttons: GPM-1.20.7 -- description
- display-coords: GPM-1.20.7 -- description
- djpeg: libjpeg-turbo-2.1.1 -- description
- dl10k1: alsa-tools-1.2.5 -- description
- dltest: unixODBC-2.3.9 -- description
- dmeventd: LVM2-2.03.13 -- description
- dmsetup: LVM2-2.03.13 -- description
- dmx*: Xorg-Server-1.20.13 -- description
- dnssec-cds: BIND-9.16.20 -- description
- dnssec-checkds: BIND-9.16.20 -- description
- dnssec-coverage: BIND-9.16.20 -- description
- dnssec-dsfromkey: BIND-9.16.20 -- description
- dnssec-importkey: BIND-9.16.20 -- description
- dnssec-keyfromlabel: BIND-9.16.20 -- description
- dnssec-keygen: BIND-9.16.20 -- description
- dnssec-keymgr: BIND-9.16.20 -- description
- dnssec-revoke: BIND-9.16.20 -- description
- dnssec-settime: BIND-9.16.20 -- description
- dnssec-signzone: BIND-9.16.20 -- description
- dnssec-verify: BIND-9.16.20 -- description
- docbook2*: DocBook-utils-0.6.14 -- description
- dos2unix: Hd2u-1.0.4 -- description
- dot: Graphviz-2.48.0 -- description
- dot2gxl: Graphviz-2.48.0 -- description
- dotty: Graphviz-2.48.0 -- description
- doveadm: Dovecot-2.3.16 -- description
- doveconf: Dovecot-2.3.16 -- description
- dovecot: Dovecot-2.3.16 -- description
- dovecot-sysreport: Dovecot-2.3.16 -- description
- doxygen: Doxygen-1.9.2 -- description
- doxyindexer: Doxygen-1.9.2 -- description
- doxysearch.cgi: Doxygen-1.9.2 -- description
- doxywizard: Doxygen-1.9.2 -- description
- drill: ldns-1.7.1 -- description
- driverless: cups-filters-1.28.10 -- description
- driverless-fax: cups-filters-1.28.10 -- description
- dropdb: PostgreSQL-13.4 -- description
- dropuser: PostgreSQL-13.4 -- description
- drv_libxml2.py for Python2: libxml2-2.9.12 (for its Python2 module) -- description
- dsymutil: LLVM-12.0.1 -- description
- dsync: Dovecot-2.3.16 -- description
- dubdv: Libdv-1.0.0 -- description
- dumpcap: Wireshark-3.4.8 -- description
- dumpnames: Text::BibTeX-0.88 -- description
- dumpsexp: libgcrypt-1.9.4 -- description
- dvb-fe-tool: v4l-utils-1.20.0 -- description
- dvb-format-convert: v4l-utils-1.20.0 -- description
- dvbv5-scan: v4l-utils-1.20.0 -- description
- dvbv5-zap: v4l-utils-1.20.0 -- description
- dvconnect: Libdv-1.0.0 -- description
- dvisvgm: dvisvgm-2.12 -- description
- dwebp: libwebp-1.2.1 -- description
- ebrowse: Emacs-27.2 -- description
- echomixer: alsa-tools-1.2.5 -- description
- ecpg: PostgreSQL-13.4 -- description
- ed: Ed-1.17 -- description
- edgepaint: Graphviz-2.48.0 -- description
- editcap: Wireshark-3.4.8 -- description
- editmap: sendmail-8.17.1 -- description
- efibootdump: Contents
- efibootmgr: efibootmgr-17 -- description
- efivar: efivar-37 -- description
- elf2dmp: qemu-6.1.0 -- description
- emacs: Emacs-27.2 -- description
- emacsclient: Emacs-27.2 -- description
- enchant-2: enchant-2.3.1 -- description
- enchant-lsmod-2: enchant-2.3.1 -- description
- encodedv: Libdv-1.0.0 -- description
- enscript: Enscript-1.6.6 -- description
- envy24control: alsa-tools-1.2.5 -- description
- eog: EOG-40.3 -- description
- epdfview: ePDFView-0.1.8 -- description
- epiphany: Epiphany-40.3 -- description
- erb: Ruby-3.0.2 -- description
- escapesrc: ICU-69.1 -- description
- escputil: Gutenprint-5.3.3 -- description
- etags: Emacs-27.2 -- description
- eventlogadm: Samba-4.14.7 -- description
- evince: Evince-40.4 -- description
- evince-previewer: Evince-40.4 -- description
- evince-thumbnailer: Evince-40.4 -- description
- evolution: Evolution-3.40.4 -- description
- exempi: Exempi-2.5.2 -- description
- exicyclog: Exim-4.94.2 -- description
- exigrep: Exim-4.94.2 -- description
- exim: Exim-4.94.2 -- description
- exim-4.94.2-2: Exim-4.94.2 -- description
- eximon: Exim-4.94.2 -- description
- eximon.bin: Exim-4.94.2 -- description
- eximstats: Exim-4.94.2 -- description
- exim_checkaccess: Exim-4.94.2 -- description
- exim_dbmbuild: Exim-4.94.2 -- description
- exim_dumpdb: Exim-4.94.2 -- description
- exim_fixdb: Exim-4.94.2 -- description
- exim_lock: Exim-4.94.2 -- description
- exim_tidydb: Exim-4.94.2 -- description
- exinext: Exim-4.94.2 -- description
- exipick: Exim-4.94.2 -- description
- exiqgrep: Exim-4.94.2 -- description
- exiqsumm: Exim-4.94.2 -- description
- exiv2: Exiv2-0.27.4 -- description
- exiwhat: Exim-4.94.2 -- description
- exo-desktop-item-edit: Exo-4.16.2 -- description
- exo-open: Exo-4.16.2 -- description
- exportfs: NFS-Utils-2.5.4 -- description
- extract_a52: Liba52-0.7.4 -- description
- extract_mpeg2: libmpeg2-0.5.1 -- description
- faac: FAAC-1_30 -- description
- faad: FAAD2-2_10_0 -- description
- faillock: Linux-PAM-1.5.1 -- description
- falkon: Falkon-3.1.0 -- description
- fancontrol: lm-sensors-3-6-0 -- description
- fatlabel: dosfstools-4.2 -- description
- fax2ps: libtiff-4.3.0 -- description
- fax2tiff: libtiff-4.3.0 -- description
- fbrun: Fluxbox-1.3.7 -- description
- fbsetbg: Fluxbox-1.3.7 -- description
- fbsetroot: Fluxbox-1.3.7 -- description
- fbxine: xine-ui-0.99.12 -- description
- fc-cache: Fontconfig-2.13.1 -- description
- fc-cat: Fontconfig-2.13.1 -- description
- fc-conflist: Fontconfig-2.13.1 -- description
- fc-list: Fontconfig-2.13.1 -- description
- fc-match: Fontconfig-2.13.1 -- description
- fc-pattern: Fontconfig-2.13.1 -- description
- fc-query: Fontconfig-2.13.1 -- description
- fc-scan: Fontconfig-2.13.1 -- description
- fc-validate: Fontconfig-2.13.1 -- description
- fcgistarter: Apache-2.4.48 -- description
- fcron: Fcron-3.2.1 -- description
- fcrondyn: Fcron-3.2.1 -- description
- fcronsighup: Fcron-3.2.1 -- description
- fcrontab: Fcron-3.2.1 -- description
- fdp: Graphviz-2.48.0 -- description
- feh: feh-3.7.1 -- description
- fetchmail: Fetchmail-6.4.21 -- description
- fetchmailconf: Fetchmail-6.4.21 -- description
- ffmpeg: FFmpeg-4.4 -- description
- ffplay: FFmpeg-4.4 -- description
- ffprobe: FFmpeg-4.4 -- description
- fftw-wisdom: fftw-3.3.9 -- description
- fftw-wisdom-to-conf: fftw-3.3.9 -- description
- file-roller: File-Roller-3.40.0 -- description
- findrule: File::Find::Rule-0.34 -- description
- findsmb: Samba-4.14.7 -- description
- firefox: Firefox-78.13.0 -- description
  Firefox-91.0.1 -- description
- fix-qdf: Qpdf-10.3.2 -- description
- fixparts: gptfdisk-1.0.8 -- description
- fixqt4headers.pl: Qt-5.15.2 -- description
- flac: FLAC-1.3.3 -- description
- flea: Mutt-2.1.2 -- description
- fltk-config: FLTK-1.3.7 -- description
- fluid: FLTK-1.3.7 -- description
- fluxbox: Fluxbox-1.3.7 -- description
- fluxbox-generate_menu: Fluxbox-1.3.7 -- description
- fluxbox-remote: Fluxbox-1.3.7 -- description
- fluxbox-update_configs: Fluxbox-1.3.7 -- description
- folks-import: Folks-0.15.3 -- description
- folks-inspect: Folks-0.15.3 -- description
- fontforge: FontForge-20201107 -- description
- fontimage: FontForge-20201107 -- description
- fontlint: FontForge-20201107 -- description
- foomatic-rip: cups-filters-1.28.10 -- description
- fop: fop-2.6 -- description
- formail: Procmail-3.22 -- description
- freetype2-config: FreeType-2.11.0 -- description
- fribidi: FriBidi-1.0.9 -- description
- fsadm: LVM2-2.03.13 -- description
- fsck.btrfs: btrfs-progs-5.13.1 -- description
- fsck.jfs: jfsutils-1.1.15 -- description
- fsck.xfs: xfsprogs-5.13.0 -- description
- fsck.fat: dosfstools-4.2 -- description
- ftpasswd: ProFTPD-1.3.7c -- description
- ftpcount: ProFTPD-1.3.7c -- description
- ftpdctl: ProFTPD-1.3.7c -- description
- ftpmail: ProFTPD-1.3.7c -- description
- ftpquota: ProFTPD-1.3.7c -- description
- ftpscrub: ProFTPD-1.3.7c -- description
- ftpshut: ProFTPD-1.3.7c -- description
- ftptop: ProFTPD-1.3.7c -- description
- ftpwho: ProFTPD-1.3.7c -- description
- funzip: UnZip-6.0 -- description
- fusermount3: Fuse-3.10.4 -- description
- g-ir-annotation-tool: gobject-introspection-1.68.0 -- description
- g-ir-compiler: gobject-introspection-1.68.0 -- description
- g-ir-doc-tool: gobject-introspection-1.68.0 -- description
- g-ir-generate: gobject-introspection-1.68.0 -- description
- g-ir-inspect: gobject-introspection-1.68.0 -- description
- g-ir-scanner: gobject-introspection-1.68.0 -- description
- g13: GnuPG-2.2.29 -- description
- galera_new_cluster: MariaDB-10.6.4 -- description
- galera_recovery: MariaDB-10.6.4 -- description
- gamma4scanimage: SANE-1.0.29 -- description
- application: GLib-2.68.4 -- description
- gc: Graphviz-2.48.0 -- description
- gcalccmd: gnome-calculator-40.1 -- description
- gccgo: GCC-11.2.0 -- description
- gcm-import: gnome-color-manager-3.36.0 -- description
- gcm-inspect: gnome-color-manager-3.36.0 -- description
- gcm-picker: gnome-color-manager-3.36.0 -- description
- gcm-viewer: gnome-color-manager-3.36.0 -- description
- gconf-merge-tree: GConf-3.2.6 -- description
- gconftool-2: GConf-3.2.6 -- description
- gcore: GDB-10.2 -- description
- gcr-viewer: Gcr-3.40.0 -- description
- gdb-prog: GDB-10.2 -- description
- gdbserver: GDB-10.2 -- description
- gdbus: GLib-2.68.4 -- description
- gdbus-codegen: GLib-2.68.4 -- description
- gdc: GCC-11.2.0 -- description
- gdialog: Zenity-3.32.0 -- description
- gdisk: gptfdisk-1.0.8 -- description
- gdk-pixbuf-csource: gdk-pixbuf-2.42.6 -- description
- gdk-pixbuf-pixdata: gdk-pixbuf-2.42.6 -- description
- gdk-pixbuf-query-loaders: gdk-pixbuf-2.42.6 -- description
- gdk-pixbuf-thumbnailer: gdk-pixbuf-2.42.6 -- description
- gdm: GDM-40.1 -- description
- gdm-control: openbox-3.6.1 -- description
- gdm-screenshot: GDM-40.1 -- description
- gedit: Gedit-40.1 -- description
- gegl: gegl-0.4.30 -- description
- gegl-imgcmp: gegl-0.4.30 -- description
- gem: Ruby-3.0.2 -- description
- genbrk: ICU-69.1 -- description
- genccode: ICU-69.1 -- description
- gencfu: ICU-69.1 -- description
- gencmn: ICU-69.1 -- description
- gencnval: ICU-69.1 -- description
- gendict: ICU-69.1 -- description
- genl-ctrl-list: libnl-3.5.0 -- description
- gennorm2: ICU-69.1 -- description
- genrb: ICU-69.1 -- description
- gensprep: ICU-69.1 -- description
- gentest: Samba-4.14.7 -- description
- get-versions: GPM-1.20.7 -- description
- getcifsacl: cifs-utils-6.13 -- description
- gfortran: GCC-11.2.0 -- description
- gif2rgb: giflib-5.2.1 -- description
- gif2webp: libwebp-1.2.1 -- description
- gifbuild: giflib-5.2.1 -- description
- gifclrmp: giflib-5.2.1 -- description
- giffix: giflib-5.2.1 -- description
- giftext: giflib-5.2.1 -- description
- giftool: giflib-5.2.1 -- description
- gimp: Gimp-2.10.24 -- description
- gimp-2.10: Gimp-2.10.24 -- description
- gimp-console: Gimp-2.10.24 -- description
- gimp-console-2.10: Gimp-2.10.24 -- description
- gimptool-2.0: Gimp-2.10.24 -- description
- gio: GLib-2.68.4 -- description
- gio-querymodules: GLib-2.68.4 -- description
- git: Git-2.33.0 -- description
- git-clang-format: LLVM-12.0.1 -- description
- git-cvsserver: Git-2.33.0 -- description
- git-receive-pack: Git-2.33.0 -- description
- git-shell: Git-2.33.0 -- description
- git-upload-archive: Git-2.33.0 -- description
- git-upload-pack: Git-2.33.0 -- description
- gitk: Git-2.33.0 -- description
- gjs-console: Gjs-1.68.3 -- description
- glewinfo: GLEW-2.2.0 -- description
- glib-compile-resources: GLib-2.68.4 -- description
- glib-compile-schemas: GLib-2.68.4 -- description
- glib-genmarshal: GLib-2.68.4 -- description
- glib-gettextize: GLib-2.68.4 -- description
- glib-mkenums: GLib-2.68.4 -- description
- glxgears: Mesa-21.2.1 -- description
- glxinfo: Mesa-21.2.1 -- description
- gml2gv: Graphviz-2.48.0 -- description
- gmplayer: MPlayer-export-2021-07-29 -- description
- gnome-calculator: gnome-calculator-40.1 -- description
- gnome-control-center: gnome-control-center-40.0 -- description
- gnome-disk-image-mounter: gnome-disk-utility-40.2 -- description
- gnome-disks: gnome-disk-utility-40.2 -- description
- gnome-keyring-daemon: gnome-keyring-40.0 -- description
- gnome-logs: gnome-logs-3.36.0 -- description
- gnome-maps: gnome-maps-40.4 -- description
- gnome-nettool: gnome-nettool-3.8.1 -- description
- gnome-panel-control: openbox-3.6.1 -- description
- gnome-power-statistics: gnome-power-manager-3.32.0 -- description
- gnome-screenshot: gnome-screenshot-40.0 -- description
- gnome-session: gnome-session-40.1.1 -- description
- gnome-session-inhibit: gnome-session-40.1.1 -- description
- gnome-session-quit: gnome-session-40.1.1 -- description
- gnome-shell: gnome-shell-40.4 -- description
- gnome-system-monitor: gnome-system-monitor-40.1 -- description
- gnome-terminal: gnome-terminal-3.40.3 -- description
- gnome-tweaks: gnome-tweaks-40.0 -- description
- gnome-weather: gnome-weather-40.1 -- description
- gnumeric: Gnumeric-1.12.50 -- description
- gnumeric-1.12.50: Gnumeric-1.12.50 -- description
- gnutls-cli: GnuTLS-3.7.2 -- description
- gnutls-cli-debug: GnuTLS-3.7.2 -- description
- gnutls-serv: GnuTLS-3.7.2 -- description
- go: GCC-11.2.0 -- description
- goa-daemon: gnome-online-accounts-3.40.0 -- description
- gobject-query: GLib-2.68.4 -- description
- gofmt: GCC-11.2.0 -- description
- gparted: Gparted-1.3.1 -- description
- gparted_polkit: Gparted-1.3.1 -- description
- gpg: GnuPG-2.2.29 -- description
- gpg-agent: GnuPG-2.2.29 -- description
- gpg-connect-agent: GnuPG-2.2.29 -- description
- gpg-error: libgpg-error-1.42 -- description
- gpg-error-config: libgpg-error-1.42 -- description
- gpg-wks-server: GnuPG-2.2.29 -- description
- gpg-zip: GnuPG-2.2.29 -- description
- gpgconf: GnuPG-2.2.29 -- description
- gpgme-config: GPGME-1.16.0 -- description
- gpgme-json: GPGME-1.16.0 -- description
- gpgme-tool: GPGME-1.16.0 -- description
- gpgparsemail: GnuPG-2.2.29 -- description
- gpgrt-config: libgpg-error-1.42 -- description
- gpgscm: GnuPG-2.2.29 -- description
- gpgsm: GnuPG-2.2.29 -- description
- gpgsplit: GnuPG-2.2.29 -- description
- gpgtar: GnuPG-2.2.29 -- description
- gpgv: GnuPG-2.2.29 -- description
- gpicview: GPicView-0.2.5 -- description
- gpm: GPM-1.20.7 -- description
- gpm-root: GPM-1.20.7 -- description
- gr2fonttest: Graphite2-1.3.14 -- description
- graphml2gv: Graphviz-2.48.0 -- description
- gresource: GLib-2.68.4 -- description
- grilo-test-ui: Grilo-0.3.13 -- description
- grl-inspect: Grilo-0.3.13 -- description
- grl-launch: Grilo-0.3.13 -- description
- growisofs: dvd+rw-tools-7.1 -- description
- gs: ghostscript-9.54.0 -- description
- gsettings: GLib-2.68.4 -- description
- gsettings-data-convert: GConf-3.2.6 -- description
- gsettings-schemas-convert: GConf-3.2.6 -- description
- gsf: libgsf-1.14.47 -- description
- gsf-office-thumbnailer: libgsf-1.14.47 -- description
- gsf-vba-dump: libgsf-1.14.47 -- description
- gsl-config: Gsl-2.7 -- description
- gsl-histogram: Gsl-2.7 -- description
- gsl-randist: Gsl-2.7 -- description
- gsound-play: GSound-1.0.3 -- description
- gspell-app1: gspell-1.8.4 -- description
- gss-client: MIT Kerberos V5-1.19.2 -- description
- gss-server: MIT Kerberos V5-1.19.2 -- description
- gst-device-monitor-1.0: gst-plugins-base-1.18.4 -- description
- gst-discoverer-1.0: gst-plugins-base-1.18.4 -- description
- gst-inspect-1.0: gstreamer-1.18.4 -- description
- gst-launch-1.0: gstreamer-1.18.4 -- description
- gst-play-1.0: gst-plugins-base-1.18.4 -- description
- gst-stats-1.0: gstreamer-1.18.4 -- description
- gst-tester-1.0: gstreamer-1.18.4 -- description
- gst-transcoder-1.0: gst-plugins-bad-1.18.4 -- description
- gst-typefind-1.0: gstreamer-1.18.4 -- description
- gtester: GLib-2.68.4 -- description
- gtester-report: GLib-2.68.4 -- description
- gtf: Xorg-Server-1.20.13 -- description
- gtk-builder-convert: GTK+-2.24.33 -- description
- gtk-builder-tool: GTK+-3.24.30 -- description
- gtk-demo: GTK+-2.24.33 -- description
- gtk-encode-symbolic-svg: GTK+-3.24.30 -- description
- gtk-launch: GTK+-3.24.30 -- description
- gtk-query-immodules-2.0: GTK+-2.24.33 -- description
- gtk-query-immodules-3.0: GTK+-3.24.30 -- description
- gtk-query-settings: GTK+-3.24.30 -- description
- gtk-update-icon-cache: GTK+-2.24.33 -- description
- gtk-update-icon-cache: GTK+-3.24.30 -- description
- gtk3-demo: GTK+-3.24.30 -- description
- gtk3-demo-application: GTK+-3.24.30 -- description
- gtk3-icon-browser: GTK+-3.24.30 -- description
- gtk3-widget-factory: GTK+-3.24.30 -- description
- gtk4-broadwayd: GTK-4.4.0 -- description
- gtk4-builder-tool: GTK-4.4.0 -- description
- gtk4-demo: GTK-4.4.0 -- description
- gtk4-demo-application: GTK-4.4.0 -- description
- gtk4-encode-symbolic-svg: GTK-4.4.0 -- description
- gtk4-icon-browser: GTK-4.4.0 -- description
- gtk4-launch: GTK-4.4.0 -- description
- gtk4-print-editor: GTK-4.4.0 -- description
- gtk4-query-settings: GTK-4.4.0 -- description
- gtk4-update-icon-cache: GTK-4.4.0 -- description
- gtk4-widget-factory: GTK-4.4.0 -- description
- gtkdoc*: GTK-Doc-1.33.2 -- description
- gucharmap: Gucharmap-13.0.8 -- description
- guild: Guile-3.0.7 -- description
- guile: Guile-3.0.7 -- description
- guile-config: Guile-3.0.7 -- description
- guile-snarf: Guile-3.0.7 -- description
- guile-tools: Guile-3.0.7 -- description
- gusbcmd: libgusb-0.3.7 -- description
- gv2gml: Graphviz-2.48.0 -- description
- gv2gxl: Graphviz-2.48.0 -- description
- gvcolor: Graphviz-2.48.0 -- description
- gvedit: Graphviz-2.48.0 -- description
- gvgen: Graphviz-2.48.0 -- description
- gview: Vim-8.2.3337 -- description
- gvim: Vim-8.2.3337 -- description
- gvimdiff: Vim-8.2.3337 -- description
- gvimtutor: Vim-8.2.3337 -- description
- gvmap: Graphviz-2.48.0 -- description
- gvmap.sh: Graphviz-2.48.0 -- description
- gvnccapture: gtk-vnc-1.2.0 -- description
- gvpack: Graphviz-2.48.0 -- description
- gvpr: Graphviz-2.48.0 -- description
- gwenview: Gwenview-21.08.0 -- description
- gwenview_importer: Gwenview-21.08.0 -- description
- gxl2dot: Graphviz-2.48.0 -- description
- gxl2gv: Graphviz-2.48.0 -- description
- half_mt: libraw-0.20.2 -- description
- handy-1-demo: Libhandy-1.2.3 -- description
- haveged: Haveged-1.9.14 -- description
- hb-ot-shape-closure: HarfBuzz-2.9.0 -- description
- hb-shape: HarfBuzz-2.9.0 -- description
- hb-subset: HarfBuzz-2.9.0 -- description
- hb-view: HarfBuzz-2.9.0 -- description
- hda-verb: alsa-tools-1.2.5 -- description
- hdajackretask: alsa-tools-1.2.5 -- description
- hdparm: Hdparm-9.62 -- description
- hdspconf: alsa-tools-1.2.5 -- description
- hdsploader: alsa-tools-1.2.5 -- description
- hdspmixer: alsa-tools-1.2.5 -- description
- hex2hcd: BlueZ-5.61 -- description
- hexchat: HexChat-2.14.3 -- description
- hg: Mercurial-5.9 -- description
- highlight: Highlight-4.1 -- description
- highlight-gui: Highlight-4.1 -- description
- hltest: GPM-1.20.7 -- description
- hmac256: libgcrypt-1.9.4 -- description
- hmaptool: LLVM-12.0.1 -- description
- homectl: Systemd-249 -- description
- host: BIND-9.16.20 -- description
- hoststat: sendmail-8.17.1 -- description
- htcacheclean: Apache-2.4.48 -- description
- htdbm: Apache-2.4.48 -- description
- htdigest: Apache-2.4.48 -- description
- htpasswd: Apache-2.4.48 -- description
- httpd: Apache-2.4.48 -- description
- httxt2dbm: Apache-2.4.48 -- description
- hwmixvolume: alsa-tools-1.2.5 -- description
- ibus-daemon: ibus-1.5.25 -- description
- ibus-setup: ibus-1.5.25 -- description
- icc2ps: Little CMS-1.19 -- description
- icclink: Little CMS-1.19 -- description
- icctrans: Little CMS-1.19 -- description
- iceauth: Xorg Applications -- description
- icehelp: IceWM-2.7.0 -- description
- icesh: IceWM-2.7.0 -- description
- icesound: IceWM-2.7.0 -- description
- icewm: IceWM-2.7.0 -- description
- icewm-menu-fdo: IceWM-2.7.0 -- description
- icewm-menu-xrandr: IceWM-2.7.0 -- description
- icewm-session: IceWM-2.7.0 -- description
- icewm-set-gnomewm: IceWM-2.7.0 -- description
- icewmbg: IceWM-2.7.0 -- description
- icewmhint: IceWM-2.7.0 -- description
- icewmtray: IceWM-2.7.0 -- description
- icon-name-mapping: icon-naming-utils-0.8.90 -- description
- icu-config: ICU-69.1 -- description
- icuinfo: ICU-69.1 -- description
- icupkg: ICU-69.1 -- description
- id3convert: id3lib-3.8.3 -- description
- id3cp: id3lib-3.8.3 -- description
- id3info: id3lib-3.8.3 -- description
- id3tag: id3lib-3.8.3 -- description
- identify: ImageMagick-7.1.0-4 -- description
- idl2wrs: Wireshark-3.4.8 -- description
- idle: Python-2.7.18 -- description
- idle3: Python-3.9.6 -- description
- idn: libidn-1.38 -- description
- idn2: libidn2-2.3.2 -- description
- iecset: alsa-utils-1.2.5.1 -- description
- ifnames2.13: Autoconf2.13 -- description
- ifrename: Wireless Tools-29 -- description
- img2webp: libwebp-1.2.1 -- description
- imgcmp: JasPer-2.0.33 -- description
- imginfo: JasPer-2.0.33 -- description
- imlib2-config: imlib2-1.7.2 -- description
- imlib2_bumpmap: imlib2-1.7.2 -- description
- imlib2_colorspace: imlib2-1.7.2 -- description
- imlib2_conv: imlib2-1.7.2 -- description
- imlib2_grab: imlib2-1.7.2 -- description
- imlib2_poly: imlib2-1.7.2 -- description
- imlib2_show: imlib2-1.7.2 -- description
- imlib2_test: imlib2-1.7.2 -- description
- imlib2_view: imlib2-1.7.2 -- description
- import: ImageMagick-7.1.0-4 -- description
- initdb: PostgreSQL-13.4 -- description
- init_audigy*: alsa-tools-1.2.5 -- description
- init_live: alsa-tools-1.2.5 -- description
- inkscape: Inkscape-1.1 -- description
- inkview: Inkscape-1.1 -- description
- innochecksum: MariaDB-10.6.4 -- description
- install-catalog: sgml-common-0.6.3 -- description
- integritysetup: cryptsetup-2.3.6 -- description
- intel-virtual-output: Xorg Intel Driver-20210222 -- description
- iodbc-config: libiodbc-3.52.15 -- description
- iodbcadm: libiodbc-3.52.15 -- description
- iodbctest: libiodbc-3.52.15 -- description
- iostat: Sysstat-12.5.4 -- description
- ip6tables: iptables-1.8.7 -- description
- ipmaddr: Net-tools-2.10 -- description
- ippeveprinter: Cups-2.3.3op2 -- description
- ipptool: Cups-2.3.3op2 -- description
- iptables: iptables-1.8.7 -- description
- iptables-apply: iptables-1.8.7 -- description
- iptables-legacy: iptables-1.8.7 -- description
- iptables-legacy-restore: iptables-1.8.7 -- description
- iptables-legacy-save: iptables-1.8.7 -- description
- iptables-restore: iptables-1.8.7 -- description
- iptables-save: iptables-1.8.7 -- description
- iptables-xml: iptables-1.8.7 -- description
- iptunnel: Net-tools-2.10 -- description
- ir-keytable: v4l-utils-1.20.0 -- description
- irb: Ruby-3.0.2 -- description
- isadump: lm-sensors-3-6-0 -- description
- isaset: lm-sensors-3-6-0 -- description
- iso-info: libcdio-2.1.0 -- description
- iso-read: libcdio-2.1.0 -- description
- isodebug: Cdrtools-3.02a09 -- description
- isodump: Cdrtools-3.02a09 -- description
- isoinfo: Cdrtools-3.02a09 -- description
- isovfy: Cdrtools-3.02a09 -- description
- ispell: Aspell-0.60.8 -- description
- isql: unixODBC-2.3.9 -- description
- itstool: itstool-2.0.6 -- description
- iusql: unixODBC-2.3.9 -- description
- ivtv-ctl: v4l-utils-1.20.0 -- description
- iw: iw-5.9 -- description
- iwconfig: Wireless Tools-29 -- description
- iwevent: Wireless Tools-29 -- description
- iwgetid: Wireless Tools-29 -- description
- iwlist: Wireless Tools-29 -- description
- iwpriv: Wireless Tools-29 -- description
- iwspy: Wireless Tools-29 -- description
- jade: OpenJade-1.3.2 -- description
- jaotc: OpenJDK-16.0.2 -- description
- jar: OpenJDK-16.0.2 -- description
- jarsigner: OpenJDK-16.0.2 -- description
- jasper: JasPer-2.0.33 -- description
- java: OpenJDK-16.0.2 -- description
- javac: OpenJDK-16.0.2 -- description
- javadoc: OpenJDK-16.0.2 -- description
- javap: OpenJDK-16.0.2 -- description
- jcmd: OpenJDK-16.0.2 -- description
- jconsole: OpenJDK-16.0.2 -- description
- jdb: OpenJDK-16.0.2 -- description
- jdeprscan: OpenJDK-16.0.2 -- description
- jdeps: OpenJDK-16.0.2 -- description
- jfr: OpenJDK-16.0.2 -- description
- jfs_debugfs: jfsutils-1.1.15 -- description
- jfs_fsck: jfsutils-1.1.15 -- description
- jfs_fscklog: jfsutils-1.1.15 -- description
- jfs_logdump: jfsutils-1.1.15 -- description
- jfs_mkfs: jfsutils-1.1.15 -- description
- jfs_tune: jfsutils-1.1.15 -- description
- jhsdb: OpenJDK-16.0.2 -- description
- jimage: OpenJDK-16.0.2 -- description
- jinfo: OpenJDK-16.0.2 -- description
- jiv: JasPer-2.0.33 -- description
- jlink: OpenJDK-16.0.2 -- description
- jmacs: JOE-4.6 -- description
- jmap: OpenJDK-16.0.2 -- description
- jmod: OpenJDK-16.0.2 -- description
- joe: JOE-4.6 -- description
- jpackage: OpenJDK-16.0.2 -- description
- jpegicc: Little CMS-1.19 -- description
- jpegtran: libjpeg-turbo-2.1.1 -- description
- jpgicc: Little CMS-2.12 -- description
- jpico: JOE-4.6 -- description
- jps: OpenJDK-16.0.2 -- description
- jrunscript: OpenJDK-16.0.2 -- description
- js78: JS-78.13.0 -- description
- js78-config: JS-78.13.0 -- description
- jshell: OpenJDK-16.0.2 -- description
- json-glib-format: JSON-GLib-1.6.6 -- description
- json-glib-validate: JSON-GLib-1.6.6 -- description
- jstack: OpenJDK-16.0.2 -- description
- jstar: JOE-4.6 -- description
- jstat: OpenJDK-16.0.2 -- description
- jstatd: OpenJDK-16.0.2 -- description
- jw: DocBook-utils-0.6.14 -- description
- k3b: k3b-21.08.0 -- description
- k5srvutil: MIT Kerberos V5-1.19.2 -- description
- kacpimon: acpid-2.0.32 -- description
- kadmin: MIT Kerberos V5-1.19.2 -- description
- kadmin.local: MIT Kerberos V5-1.19.2 -- description
- kadmind: MIT Kerberos V5-1.19.2 -- description
- kate: Kate-21.08.0 -- description
- kbuildsycoca5: Building KDE Frameworks 5 (KF5) -- description
- kbxutil: GnuPG-2.2.29 -- description
- kcookiejar5: Building KDE Frameworks 5 (KF5) -- description
- kdb5_ldap_util: MIT Kerberos V5-1.19.2 -- description
- kdb5_util: MIT Kerberos V5-1.19.2 -- description
- kded5: Building KDE Frameworks 5 (KF5) -- description
- kdeinit5: Building KDE Frameworks 5 (KF5) -- description
- kdenlive: Kdenlive-21.08.0 -- description
- kdenlive_render: Kdenlive-21.08.0 -- description
- kdestroy: MIT Kerberos V5-1.19.2 -- description
- key.dns_resolver: keyutils-1.6.1 -- description
- keyctl: keyutils-1.6.1 -- description
- keytool: OpenJDK-16.0.2 -- description
- kf5-config: Building KDE Frameworks 5 (KF5) -- description
- kf5kross: Building KDE Frameworks 5 (KF5) -- description
- kgendesignerplugin: Building KDE Frameworks 5 (KF5) -- description
- kglobalaccel5: Building KDE Frameworks 5 (KF5) -- description
- khelpcenter: Khelpcenter-21.08.0 -- description
- kinit: MIT Kerberos V5-1.19.2 -- description
- kjs5: Building KDE Frameworks 5 (KF5) -- description
- kjscmd5: Building KDE Frameworks 5 (KF5) -- description
- kjsconsole: Building KDE Frameworks 5 (KF5) -- description
- klist: MIT Kerberos V5-1.19.2 -- description
- kmix: KMix-21.08.0 -- description
- kmixctrl: KMix-21.08.0 -- description
- kmixremote: KMix-21.08.0 -- description
- koi8rxterm: xterm-368 -- description
- konsole: Konsole-21.08.0 -- description
- konsoleprofile: Konsole-21.08.0 -- description
- kpackagelauncherqml: Building KDE Frameworks 5 (KF5) -- description
- kpackagetool5: Building KDE Frameworks 5 (KF5) -- description
- kpasswd: MIT Kerberos V5-1.19.2 -- description
- kprop: MIT Kerberos V5-1.19.2 -- description
- kpropd: MIT Kerberos V5-1.19.2 -- description
- kproplog: MIT Kerberos V5-1.19.2 -- description
- krb5-send-pr: MIT Kerberos V5-1.19.2 -- description
- krb5-config: MIT Kerberos V5-1.19.2 -- description
- krb5kdc: MIT Kerberos V5-1.19.2 -- description
- kreadconfig5: Building KDE Frameworks 5 (KF5) -- description
- ksba-config: libksba-1.6.0 -- description
- kshell5: Building KDE Frameworks 5 (KF5) -- description
- ksu: MIT Kerberos V5-1.19.2 -- description
- kswitch: MIT Kerberos V5-1.19.2 -- description
- ktelnetservice5: Building KDE Frameworks 5 (KF5) -- description
- ktrash5: Building KDE Frameworks 5 (KF5) -- description
- ktutil: MIT Kerberos V5-1.19.2 -- description
- kvno: MIT Kerberos V5-1.19.2 -- description
- kwalletd5: Building KDE Frameworks 5 (KF5) -- description
- kwave: kwave-21.08.0 -- description
- kwrite: Kate-21.08.0 -- description
- kwriteconfig5: Building KDE Frameworks 5 (KF5) -- description
- l2ping: BlueZ-5.61 -- description
- l2test: BlueZ-5.61 -- description
- l4p-templ: Log::Log4perl-1.54 -- description
- lame: LAME-3.100 -- description
- lconvert: Qt-5.15.2 -- description
- ld10k1: alsa-tools-1.2.5 -- description
- ld10k1d: alsa-tools-1.2.5 -- description
- ldapadd: OpenLDAP-2.5.7 -- description
- ldapcompare: OpenLDAP-2.5.7 -- description
- ldapdelete: OpenLDAP-2.5.7 -- description
- ldapexop: OpenLDAP-2.5.7 -- description
- ldapmodify: OpenLDAP-2.5.7 -- description
- ldapmodrdn: OpenLDAP-2.5.7 -- description
- ldappasswd: OpenLDAP-2.5.7 -- description
- ldapsearch: OpenLDAP-2.5.7 -- description
- ldapurl: OpenLDAP-2.5.7 -- description
- ldapvc: OpenLDAP-2.5.7 -- description
- ldapwhoami: OpenLDAP-2.5.7 -- description
- ldbadd: Samba-4.14.7 -- description
- ldbdel: Samba-4.14.7 -- description
- ldbedit: Samba-4.14.7 -- description
- ldbmodify: Samba-4.14.7 -- description
- ldbrename: Samba-4.14.7 -- description
- ldbsearch: Samba-4.14.7 -- description
- ldns-config: ldns-1.7.1 -- description
- lefty: Graphviz-2.48.0 -- description
- libassuan-config: libassuan-2.5.5 -- description
- libevdev-tweak-device: libevdev 1.11.0 -- description
- libfm-pref-apps: libfm-1.3.2 -- description
- libgcrypt-config: libgcrypt-1.9.4 -- description
- libglade-convert: libglade-2.6.4 -- description
- libinput: libinput-1.18.1 -- description
- libndp: libndp-1.8 -- description
- libnewt: newt-0.52.21 -- description
- libpng-config: libpng-1.6.37 -- description
- libquicktime_config: libquicktime-1.2.4 -- description
- libreoffice-suite: LibreOffice-7.2.0 -- description
- libwacom-list-devices: libwacom-1.11 -- description
- libwacom-list-local-devices: libwacom-1.11 -- description
- libwacom-show-stylus: libwacom-1.11 -- description
- libwacom-update-db: libwacom-1.11 -- description
- libxml2.py for Python2: libxml2-2.9.12 (for its Python2 module) -- description
- lightdm: lightdm-1.30.0 -- description
- lightdm-gtk-greeter: lightdm-1.30.0 -- description
- linguist: Qt-5.15.2 -- description
- linkicc: Little CMS-2.12 -- description
- links: Links-2.23 -- description
- llc: LLVM-12.0.1 -- description
- lli: LLVM-12.0.1 -- description
- llvm-addr2line: LLVM-12.0.1 -- description
- llvm-ar: LLVM-12.0.1 -- description
- llvm-as: LLVM-12.0.1 -- description
- llvm-bcanalyzer: LLVM-12.0.1 -- description
- llvm-bitcode-strip: LLVM-12.0.1 -- description
- llvm-c-test: LLVM-12.0.1 -- description
- llvm-cat: LLVM-12.0.1 -- description
- llvm-cfi-verify: LLVM-12.0.1 -- description
- llvm-config: LLVM-12.0.1 -- description
- llvm-cov: LLVM-12.0.1 -- description
- llvm-cvtres: LLVM-12.0.1 -- description
- llvm-cxxdump: LLVM-12.0.1 -- description
- llvm-cxxfilt: LLVM-12.0.1 -- description
- llvm-cxxmap: LLVM-12.0.1 -- description
- llvm-diff: LLVM-12.0.1 -- description
- llvm-dis: LLVM-12.0.1 -- description
- llvm-dwarfdump: LLVM-12.0.1 -- description
- llvm-dwp: LLVM-12.0.1 -- description
- llvm-elfabi: LLVM-12.0.1 -- description
- llvm-exegesis: LLVM-12.0.1 -- description
- llvm-extract: LLVM-12.0.1 -- description
- llvm-gsymutil: LLVM-12.0.1 -- description
- llvm-ifs: LLVM-12.0.1 -- description
- llvm-install-name-tool: LLVM-12.0.1 -- description
- llvm-jitlink: LLVM-12.0.1 -- description
- llvm-libtool-darwin: LLVM-12.0.1 -- description
- llvm-link: LLVM-12.0.1 -- description
- llvm-lipo: LLVM-12.0.1 -- description
- llvm-lto: LLVM-12.0.1 -- description
- llvm-lto2: LLVM-12.0.1 -- description
- llvm-mc: LLVM-12.0.1 -- description
- llvm-mca: LLVM-12.0.1 -- description
- llvm-ml: LLVM-12.0.1 -- description
- llvm-modextract: LLVM-12.0.1 -- description
- llvm-mt: LLVM-12.0.1 -- description
- llvm-nm: LLVM-12.0.1 -- description
- llvm-objcopy: LLVM-12.0.1 -- description
- llvm-objdump: LLVM-12.0.1 -- description
- llvm-opt-report: LLVM-12.0.1 -- description
- llvm-pdbutil: LLVM-12.0.1 -- description
- llvm-profdata: LLVM-12.0.1 -- description
- llvm-profgen: LLVM-12.0.1 -- description
- llvm-ranlib: LLVM-12.0.1 -- description
- llvm-rc: LLVM-12.0.1 -- description
- llvm-readobj: LLVM-12.0.1 -- description
- llvm-reduce: LLVM-12.0.1 -- description
- llvm-rtdyld: LLVM-12.0.1 -- description
- llvm-size: LLVM-12.0.1 -- description
- llvm-split: LLVM-12.0.1 -- description
- llvm-stress: LLVM-12.0.1 -- description
- llvm-strings: LLVM-12.0.1 -- description
- llvm-symbolizer: LLVM-12.0.1 -- description
- llvm-tblgen: LLVM-12.0.1 -- description
- llvm-undname: LLVM-12.0.1 -- description
- llvm-xray: LLVM-12.0.1 -- description
- lneato: Graphviz-2.48.0 -- description
- lo10k1: alsa-tools-1.2.5 -- description
- lobase: LibreOffice-7.2.0 -- description
- localc: LibreOffice-7.2.0 -- description
- lockfile: Procmail-3.22 -- description
- locktest: Samba-4.14.7 -- description
- lodraw: LibreOffice-7.2.0 -- description
- logresolve: Apache-2.4.48 -- description
- logrotate: Logrotate-3.18.1 -- description
- loimpress: LibreOffice-7.2.0 -- description
- lomath: LibreOffice-7.2.0 -- description
- loweb: LibreOffice-7.2.0 -- description
- lowntfs-3g: ntfs-3g-2021.8.22 -- description
- lowriter: LibreOffice-7.2.0 -- description
- lp: Cups-2.3.3op2 -- description
- lpadmin: Cups-2.3.3op2 -- description
- lpc: Cups-2.3.3op2 -- description
- lpinfo: Cups-2.3.3op2 -- description
- lpmove: Cups-2.3.3op2 -- description
- lpoptions: Cups-2.3.3op2 -- description
- lpq: Cups-2.3.3op2 -- description
- lpr: Cups-2.3.3op2 -- description
- lprm: Cups-2.3.3op2 -- description
- lpstat: Cups-2.3.3op2 -- description
- lqtplay: libquicktime-1.2.4 -- description
- lqt_transcode: libquicktime-1.2.4 -- description
- lrelease-pro: Qt-5.15.2 -- description
- lrelease: Qt-5.15.2 -- description
- lsb_release: LSB-Tools-0.9 -- description
- install_initd: LSB-Tools-0.9 -- description
- remove_initd: LSB-Tools-0.9 -- description
- lsof: lsof-4.91 -- description
- lspci: pciutils-3.7.0 -- description
- lsusb: usbutils-014 -- description
- lsusb.py: usbutils-014 -- description
- lua: Lua-5.4.3 -- description
- lua5.2: Lua-5.2.4 -- description
- luac: Lua-5.4.3 -- description
- luac5.2: Lua-5.2.4 -- description
- luit: Xorg Applications -- description
- lupdate-pro: Qt-5.15.2 -- description
- lupdate: Qt-5.15.2 -- description
- lvm: LVM2-2.03.13 -- description
- lvm-cache-stats: libblockdev-2.26 -- description
- lvmdump: LVM2-2.03.13 -- description
- lwp-download: libwww-perl-6.55 -- description
- lwp-dump: libwww-perl-6.55 -- description
- lwp-mirror: libwww-perl-6.55 -- description
- lwp-request: libwww-perl-6.55 -- description
- lxappearance: LXAppearance-0.6.3 -- description
- lxclipboard: LXSession-0.5.5 -- description
- lxde-logout: lxde-common-0.99.2 -- description
- lxdm: lxdm-0.5.3 -- description
- lxdm-binary: lxdm-0.5.3 -- description
- lxinput: LXInput-0.3.5 -- description
- lxlock: LXSession-0.5.5 -- description
- lxpanel: LXPanel-0.10.1 -- description
- lxpanelctl: LXPanel-0.10.1 -- description
- lxpolkit: LXSession-0.5.5 -- description
- lxrandr: LXRandR-0.3.2 -- description
- lxsession: LXSession-0.5.5 -- description
- lxsession-db: LXSession-0.5.5 -- description
- lxsession-default: LXSession-0.5.5 -- description
- lxsession-default-apps: LXSession-0.5.5 -- description
- lxsession-default-terminal: LXSession-0.5.5 -- description
- lxsession-edit: LXSession-0.5.5 -- description
- lxsession-logout: LXSession-0.5.5 -- description
- lxsession-xdg-autostart: LXSession-0.5.5 -- description
- lxsession-xsettings: LXSession-0.5.5 -- description
- lxsettings-daemon: LXSession-0.5.5 -- description
- lxtask: LXTask-0.1.10 -- description
- lxterminal: LXTerminal-0.4.0 -- description
- lynx: Lynx-2.8.9rel.1 -- description
- magick: ImageMagick-7.1.0-4 -- description
- Magick-config: ImageMagick-7.1.0-4 -- description
- mail: mailx-12.5 -- description
- mailq: Postfix-3.6.2 -- description
  sendmail-8.17.1 -- description
- mailstat: Procmail-3.22 -- description
- mailstats: sendmail-8.17.1 -- description
- mailx: mailx-12.5 -- description
- make-ca: make-ca-1.7 -- description
- makeconv: ICU-69.1 -- description
- makemap: sendmail-8.17.1 -- description
- mariabackup: MariaDB-10.6.4 -- description
- mariadb-access: MariaDB-10.6.4 -- description
- mariadb-admin: MariaDB-10.6.4 -- description
- mariadb-binlog: MariaDB-10.6.4 -- description
- mariadb-check: MariaDB-10.6.4 -- description
- mariadb-client-test-embedded: MariaDB-10.6.4 -- description
- mariadb-client-test: MariaDB-10.6.4 -- description
- mariadb-conv: MariaDB-10.6.4 -- description
- mariadb-convert-table-format: MariaDB-10.6.4 -- description
- mariadb-dump: MariaDB-10.6.4 -- description
- mariadb-dumpslow: MariaDB-10.6.4 -- description
- mariadb-find-rows: MariaDB-10.6.4 -- description
- mariadb-fix-extensions: MariaDB-10.6.4 -- description
- mariadb-hotcopy: MariaDB-10.6.4 -- description
- mariadb-import: MariaDB-10.6.4 -- description
- mariadb-install-db: MariaDB-10.6.4 -- description
- mariadb-ldb: MariaDB-10.6.4 -- description
- mariadb: MariaDB-10.6.4 -- description
- mariadb-plugin: MariaDB-10.6.4 -- description
- mariadb-secure-installation: MariaDB-10.6.4 -- description
- mariadb-service-convert: MariaDB-10.6.4 -- description
- mariadb-setpermission: MariaDB-10.6.4 -- description
- mariadb-show: MariaDB-10.6.4 -- description
- mariadb-slap: MariaDB-10.6.4 -- description
- mariadb-test-embedded: MariaDB-10.6.4 -- description
- mariadb-test: MariaDB-10.6.4 -- description
- mariadb-tzinfo-to-sql: MariaDB-10.6.4 -- description
- mariadb-upgrade: MariaDB-10.6.4 -- description
- mariadb-waitpid: MariaDB-10.6.4 -- description
- mariadbd-embedded: MariaDB-10.6.4 -- description
- mariadbd: MariaDB-10.6.4 -- description
- mariadbd-multi: MariaDB-10.6.4 -- description
- mariadbd-safe: MariaDB-10.6.4 -- description
- mariadb_config: MariaDB-10.6.4 -- description
- masktest: Samba-4.14.7 -- description
- mbim-network: libmbim-1.26.0 -- description
- mbimcli: libmbim-1.26.0 -- description
- mbstream: MariaDB-10.6.4 -- description
- mc: MC-4.8.27 -- description
- mc-tool: telepathy-mission-control-5.16.6 -- description
- mc-wait-for-name: telepathy-mission-control-5.16.6 -- description
- mcdiff: MC-4.8.27 -- description
- mcedit: MC-4.8.27 -- description
- mcview: MC-4.8.27 -- description
- mdadm: mdadm-4.1 -- description
- mdfind: Samba-4.14.7 -- description
- mdig: BIND-9.16.20 -- description
- mdmon: mdadm-4.1 -- description
- media-ctl: v4l-utils-1.20.0 -- description
- meinproc5: Building KDE Frameworks 5 (KF5) -- description
- melt: MLT-7.0.1 -- description
- mem_image: libraw-0.20.2 -- description
- mencoder: MPlayer-export-2021-07-29 -- description
- mergecap: Wireshark-3.4.8 -- description
- meshdebug: Qt-5.15.2 -- description
- metaflac: FLAC-1.3.3 -- description
- mev: GPM-1.20.7 -- description
- mii-tool: Net-tools-2.10 -- description
- miri: Rustc-1.52.0 -- description
- mission-control-5: telepathy-mission-control-5.16.6 -- description
- mixartloader: alsa-tools-1.2.5 -- description
- mkafmmap: Enscript-1.6.6 -- description
- mkbitmap: Potrace-1.16 -- description
- mkfontdir: Xorg Applications -- description
- mkfontscale: Xorg Applications -- description
- mkfs.btrfs: btrfs-progs-5.13.1 -- description
- mkfs.jfs: jfsutils-1.1.15 -- description
- mkfs.ntfs: ntfs-3g-2021.8.22 -- description
- mkfs.xfs: xfsprogs-5.13.0 -- description
- mkfs.fat: dosfstools-4.2 -- description
- mkhomedir_helper: Linux-PAM-1.5.1 -- description
- mkhybrid: Cdrtools-3.02a09 -- description
- mkisofs: Cdrtools-3.02a09 -- description
- mkntfs: ntfs-3g-2021.8.22 -- description
- mkpasswd: Whois-5.4.3 -- description
- mkreiserfs: reiserfsprogs-3.6.27 -- description
- mm2gv: Graphviz-2.48.0 -- description
- mmc-tool: libcdio-2.1.0 -- description
- mmcli: ModemManager-1.16.10 -- description
- moc: Qt-5.15.2 -- description
- ModemManager: ModemManager-1.16.10 -- description
- mogrify: ImageMagick-7.1.0-4 -- description
- montage: ImageMagick-7.1.0-4 -- description
- mount.cifs: cifs-utils-6.13 -- description
- mount.fuse3: Fuse-3.10.4 -- description
- mount.lowntfs-3g: ntfs-3g-2021.8.22 -- description
- mount.nfs: NFS-Utils-2.5.4 -- description
- mount.nfs4: NFS-Utils-2.5.4 -- description
- mount.ntfs: ntfs-3g-2021.8.22 -- description
- mount.ntfs-3g: ntfs-3g-2021.8.22 -- description
- mount.smb3: cifs-utils-6.13 -- description
- mountstats: NFS-Utils-2.5.4 -- description
- mouse-dpi-tool: libevdev 1.11.0 -- description
- mouse-test: GPM-1.20.7 -- description
- mousepad: Mousepad-0.5.6 -- description
- mozcerts-qt5: Qca-2.3.3 -- description
- mp3rtp: LAME-3.100 -- description
- mpeg2dec: libmpeg2-0.5.1 -- description
- mpg123: mpg123-1.28.2 -- description
- mpg123-id3dump: mpg123-1.28.2 -- description
- mpg123-strip: mpg123-1.28.2 -- description
- out123: mpg123-1.28.2 -- description
- mpicalc: libgcrypt-1.9.4 -- description
- mplayer: MPlayer-export-2021-07-29 -- description
- mpstat: Sysstat-12.5.4 -- description
- msql2mysql: MariaDB-10.6.4 -- description
- ms_print: Valgrind-3.17.0 -- description
- mt: cpio-2.13 -- description
- mtdev-test: mtdev-1.1.6 -- description
- multirender_test: libraw-0.20.2 -- description
- mupdf: MuPDF-1.18.0 -- description
- mupdf-gl: MuPDF-1.18.0 -- description
- mupdf-x11: MuPDF-1.18.0 -- description
- muraster: MuPDF-1.18.0 -- description
- mutool: MuPDF-1.18.0 -- description
- mutt: Mutt-2.1.2 -- description
- muttbug: Mutt-2.1.2 -- description
- mutter: Mutter-40.4 -- description
- mutt_dotlock: Mutt-2.1.2 -- description
- mvxattr: Samba-4.14.7 -- description
- myisamchk: MariaDB-10.6.4 -- description
- myisamlog: MariaDB-10.6.4 -- description
- myisampack: MariaDB-10.6.4 -- description
- myisam_ftdump: MariaDB-10.6.4 -- description
- mysql_config: MariaDB-10.6.4 -- description
- mytop: MariaDB-10.6.4 -- description
- my_print_defaults: MariaDB-10.6.4 -- description
- nail: mailx-12.5 -- description
- named: BIND-9.16.20 -- description
- named-checkconf: BIND-9.16.20 -- description
- named-checkzone: BIND-9.16.20 -- description
- named-compilezone: BIND-9.16.20 -- description
- named-journalprint: BIND-9.16.20 -- description
- named-nzd2nzf: BIND-9.16.20 -- description
- named-rrchecker: BIND-9.16.20 -- description
- nameif: Net-tools-2.10 -- description
- nano: Nano-5.8 -- description
- nasm: NASM-2.15.05 -- description
- nautilus: Nautilus-40.2 -- description
- ncat: Nmap-7.92 -- description
- ncftp: NcFTP-3.2.6 -- description
- ncftpbatch: NcFTP-3.2.6 -- description
- ncftpbookmarks: NcFTP-3.2.6 -- description
- ncftpget: NcFTP-3.2.6 -- description
- ncftpls: NcFTP-3.2.6 -- description
- ncftpput: NcFTP-3.2.6 -- description
- ncftpspooler: NcFTP-3.2.6 -- description
- ndiff: Nmap-7.92 -- description
- ndisasm: NASM-2.15.05 -- description
- ndptool: libndp-1.8 -- description
- ndrdump: Samba-4.14.7 -- description
- neato: Graphviz-2.48.0 -- description
- neon-config: neon-0.31.2 -- description
- net: Samba-4.14.7 -- description
- netstat: Net-tools-2.10 -- description
- nettle-hash: Nettle-3.7.3 -- description
- nettle-lfib-stream: Nettle-3.7.3 -- description
- nettle-pbkdf2: Nettle-3.7.3 -- description
- NetworkManager: NetworkManager-1.32.10 -- description
- newaliases: Postfix-3.6.2 -- description
  sendmail-8.17.1 -- description
- nfsconf: NFS-Utils-2.5.4 -- description
- nfsdclnts: NFS-Utils-2.5.4 -- description
- nfsiostat: NFS-Utils-2.5.4 -- description
- nfsstat: NFS-Utils-2.5.4 -- description
- nfsynproxy: iptables-1.8.7 -- description
- nl-class-add: libnl-3.5.0 -- description
- nl-class-delete: libnl-3.5.0 -- description
- nl-class-list: libnl-3.5.0 -- description
- nl-classid-lookup: libnl-3.5.0 -- description
- nl-cls-add: libnl-3.5.0 -- description
- nl-cls-delete: libnl-3.5.0 -- description
- nl-cls-list: libnl-3.5.0 -- description
- nl-link-list: libnl-3.5.0 -- description
- nl-pktloc-lookup: libnl-3.5.0 -- description
- nl-qdisc-add: libnl-3.5.0 -- description
- nl-qdisc-delete: libnl-3.5.0 -- description
- nl-qdisc-list: libnl-3.5.0 -- description
- nm-connection-editor: network-manager-applet-1.24.0 -- description
- nm-online: NetworkManager-1.32.10 -- description
- nmap: Nmap-7.92 -- description
- nmbd: Samba-4.14.7 -- description
- nmblookup: Samba-4.14.7 -- description
- nmcli: NetworkManager-1.32.10 -- description
- nmtui: NetworkManager-1.32.10 -- description
- nmtui-connect: NetworkManager-1.32.10 -- description
- nmtui-edit: NetworkManager-1.32.10 -- description
- nmtui-hostname: NetworkManager-1.32.10 -- description
- node: Node.js-14.17.5 -- description
- nop: Graphviz-2.48.0 -- description
- notify-send: libnotify-0.7.9 -- description
- nping: Nmap-7.92 -- description
- npm: Node.js-14.17.5 -- description
- npth-config: npth-1.6 -- description
- nsec3hash: BIND-9.16.20 -- description
- nsgmls: OpenSP-1.5.2 -- description
- nslookup: BIND-9.16.20 -- description
- nspr-config: NSPR-4.32 -- description
- nss-config: NSS-3.69 -- description
- nsupdate: BIND-9.16.20 -- description
- ntfs-3g: ntfs-3g-2021.8.22 -- description
- ntfs-3g.probe: ntfs-3g-2021.8.22 -- description
- ntfscat: ntfs-3g-2021.8.22 -- description
- ntfsclone: ntfs-3g-2021.8.22 -- description
- ntfscluster: ntfs-3g-2021.8.22 -- description
- ntfscmp: ntfs-3g-2021.8.22 -- description
- ntfscp: ntfs-3g-2021.8.22 -- description
- ntfsfix: ntfs-3g-2021.8.22 -- description
- ntfsinfo: ntfs-3g-2021.8.22 -- description
- ntfslabel: ntfs-3g-2021.8.22 -- description
- ntfsls: ntfs-3g-2021.8.22 -- description
- ntfsresize: ntfs-3g-2021.8.22 -- description
- ntfsundelete: ntfs-3g-2021.8.22 -- description
- ntlm_auth: Samba-4.14.7 -- description
- ntp-keygen: ntp-4.2.8p15 -- description
- ntp-wait: ntp-4.2.8p15 -- description
- ntpd: ntp-4.2.8p15 -- description
- ntpdate: ntp-4.2.8p15 -- description
- ntpdc: ntp-4.2.8p15 -- description
- ntpq: ntp-4.2.8p15 -- description
- ntptime: ntp-4.2.8p15 -- description
- ntptrace: ntp-4.2.8p15 -- description
- nvlc: VLC-3.0.16 -- description
- obxprop: openbox-3.6.1 -- description
- ocsptool: GnuTLS-3.7.2 -- description
- odbcinst: unixODBC-2.3.9 -- description
- odbc_config: unixODBC-2.3.9 -- description
- ogg123: vorbis-tools-1.4.2 -- description
- oggdec: vorbis-tools-1.4.2 -- description
- oggenc: vorbis-tools-1.4.2 -- description
- ogginfo: vorbis-tools-1.4.2 -- description
- oid2name: PostgreSQL-13.4 -- description
- okular: Okular-21.08.0 -- description
- oLschema2ldif: Samba-4.14.7 -- description
- omshell: DHCP-4.4.2-P1 -- description
- onsgmls: OpenSP-1.5.2 -- description
- on_ac_power: pm-utils-1.4.1 -- description
- openbox: openbox-3.6.1 -- description
- openbox-gnome-session: openbox-3.6.1 -- description
- openbox-kde-session: openbox-3.6.1 -- description
- openbox-lxde: lxde-common-0.99.2 -- description
- openbox-session: openbox-3.6.1 -- description
- openjade: OpenJade-1.3.2 -- description
- opj_compress: OpenJPEG-2.4.0 -- description
- opj_decompress: OpenJPEG-2.4.0 -- description
- opj_dump: OpenJPEG-2.4.0 -- description
- opt: LLVM-12.0.1 -- description
- osage: Graphviz-2.48.0 -- description
- osgmlnorm: OpenSP-1.5.2 -- description
- osirrox: libisoburn-1.5.4 -- description
- ospam: OpenSP-1.5.2 -- description
- ospcat: OpenSP-1.5.2 -- description
- ospent: OpenSP-1.5.2 -- description
- osx: OpenSP-1.5.2 -- description
- over: Enscript-1.6.6 -- description
- p11-kit: p11-kit-0.24.0 -- description
- p11tool: GnuTLS-3.7.2 -- description
- pa-info: PulseAudio-15.0 -- description
- pacat: PulseAudio-15.0 -- description
- pacmd: PulseAudio-15.0 -- description
- pactl: PulseAudio-15.0 -- description
- padsp: PulseAudio-15.0 -- description
- pal2rgb: libtiff-4.3.0 -- description
- pamon: PulseAudio-15.0 -- description
- pam_namespace_helper: Linux-PAM-1.5.1 -- description
- pam_timestamp_check: Linux-PAM-1.5.1 -- description
- pango-list: Pango-1.48.9 -- description
- pango-segmentation: Pango-1.48.9 -- description
- pango-view: Pango-1.48.9 -- description
- paperconf: libpaper-1.1.24+nmu5 -- description
- paperconfig: libpaper-1.1.24+nmu5 -- description
- paplay: PulseAudio-15.0 -- description
- paps: paps-0.7.1 -- description
- parec: PulseAudio-15.0 -- description
- parecord: PulseAudio-15.0 -- description
- parole: Parole-4.16.0 -- description
- parted: parted-3.4 -- description
- partprobe: parted-3.4 -- description
- pasuspender: PulseAudio-15.0 -- description
- patchwork: Graphviz-2.48.0 -- description
- pavucontrol: pavucontrol-5.0 -- description
- pax: Pax-20201030 -- description
- pax11publish: PulseAudio-15.0 -- description
- pcmanfm: PCManFM-1.3.2 -- description
- pcre-config: PCRE-8.45 -- description
- pcre2-config: PCRE2-10.37 -- description
- pcre2grep: PCRE2-10.37 -- description
- pcre2: PCRE2-10.37 -- description
- pcregrep: PCRE-8.45 -- description
- pcretest: PCRE-8.45 -- description
- pcxhrloader: alsa-tools-1.2.5 -- description
- pdbedit: Samba-4.14.7 -- description
- pdfattach: Poppler-21.08.0 -- description
- pdfdetach: Poppler-21.08.0 -- description
- pdffonts: Poppler-21.08.0 -- description
- pdfimages: Poppler-21.08.0 -- description
- pdfinfo: Poppler-21.08.0 -- description
- pdftocairo: Poppler-21.08.0 -- description
- pdftohtml: Poppler-21.08.0 -- description
- pdftoppm: Poppler-21.08.0 -- description
- pdftops: Poppler-21.08.0 -- description
- pdftotext: Poppler-21.08.0 -- description
- pdfunite: Poppler-21.08.0 -- description
- pdfseparate: Poppler-21.08.0 -- description
- pdfsig: Poppler-21.08.0 -- description
- pear: PHP-8.0.10 -- description
- peas-demo: libpeas-1.30.0 -- description
- perror: MariaDB-10.6.4 -- description
- pgbench: PostgreSQL-13.4 -- description
- pgpewrap: Mutt-2.1.2 -- description
- pgpring: Mutt-2.1.2 -- description
- pg_archivecleanup: PostgreSQL-13.4 -- description
- pg_basebackup: PostgreSQL-13.4 -- description
- pg_checksums: PostgreSQL-13.4 -- description
- pg_config: PostgreSQL-13.4 -- description
- pg_controldata: PostgreSQL-13.4 -- description
- pg_ctl: PostgreSQL-13.4 -- description
- pg_dump: PostgreSQL-13.4 -- description
- pg_dumpall: PostgreSQL-13.4 -- description
- pg_isready: PostgreSQL-13.4 -- description
- pg_receivewal: PostgreSQL-13.4 -- description
- pg_recvlogical: PostgreSQL-13.4 -- description
- pg_resetwal: PostgreSQL-13.4 -- description
- pg_restore: PostgreSQL-13.4 -- description
- pg_rewind: PostgreSQL-13.4 -- description
- pg_standby: PostgreSQL-13.4 -- description
- pg_test_fsync: PostgreSQL-13.4 -- description
- pg_test_timing: PostgreSQL-13.4 -- description
- pg_upgrade: PostgreSQL-13.4 -- description
- pg_verifybackup: PostgreSQL-13.4 -- description
- pg_waldump: PostgreSQL-13.4 -- description
- php: PHP-8.0.10 -- description
- php-fpm: PHP-8.0.10 -- description
- phpdbg: PHP-8.0.10 -- description
- pidgin: Pidgin-2.14.6 -- description
- pidstat: Sysstat-12.5.4 -- description
- pinentry: pinentry-1.2.0 -- description
- pinentry-curses: pinentry-1.2.0 -- description
- pinentry-emacs: pinentry-1.2.0 -- description
- pinentry-fltk: pinentry-1.2.0 -- description
- pinentry-gnome3: pinentry-1.2.0 -- description
- pinentry-gtk-2: pinentry-1.2.0 -- description
- pinentry-qt: pinentry-1.2.0 -- description
- pinentry-tty: pinentry-1.2.0 -- description
- pipewire: Pipewire-0.3.34 -- description
- pipewire-media-session: Pipewire-0.3.34 -- description
- pipewire-pulse: Pipewire-0.3.34 -- description
- pixeltool: Qt-5.15.2 -- description
- pk-example-frobnicate: Polkit-0.119 -- description
- pk12util: NSS-3.69 -- description
- pkaction: Polkit-0.119 -- description
- pkcheck: Polkit-0.119 -- description
- pkcs1-conv: Nettle-3.7.3 -- description
- pkexec: Polkit-0.119 -- description
- pkgdata: ICU-69.1 -- description
- pkttyagent: Polkit-0.119 -- description
- plasmapkg2: Building KDE Frameworks 5 (KF5) -- description
- playout: gst-plugins-bad-1.18.4 -- description
- plipconfig: Net-tools-2.10 -- description
- pltcl_delmod: PostgreSQL-13.4 -- description
- pltcl_listmod: PostgreSQL-13.4 -- description
- pltcl_loadmod: PostgreSQL-13.4 -- description
- pluginviewer: Cyrus SASL-2.1.27 -- description
- pm-hibernate: pm-utils-1.4.1 -- description
- pm-is-supported: pm-utils-1.4.1 -- description
- pm-powersave: pm-utils-1.4.1 -- description
- pm-suspend: pm-utils-1.4.1 -- description
- pm-suspend-hybrid: pm-utils-1.4.1 -- description
- png-fix-itxt: libpng-1.6.37 -- description
- pngfix: libpng-1.6.37 -- description
- pnmixer: pnmixer-0.7.2 -- description
- polkit-gnome-authentication-agent-1: polkit-gnome-0.105 -- description
- polkitd: Polkit-0.119 -- description
- postalias: Postfix-3.6.2 -- description
- postcat: Postfix-3.6.2 -- description
- postconf: Postfix-3.6.2 -- description
- postdrop: Postfix-3.6.2 -- description
- postfix: Postfix-3.6.2 -- description
- postgres: PostgreSQL-13.4 -- description
- postkick: Postfix-3.6.2 -- description
- postlock: Postfix-3.6.2 -- description
- postlog: Postfix-3.6.2 -- description
- postmap: Postfix-3.6.2 -- description
- postmaster: PostgreSQL-13.4 -- description
- postmulti: Postfix-3.6.2 -- description
- postprocessing_benchmark: libraw-0.20.2 -- description
- postqueue: Postfix-3.6.2 -- description
- postsuper: Postfix-3.6.2 -- description
- potrace: Potrace-1.16 -- description
- ppdc: Cups-2.3.3op2 -- description
- ppdhtml: Cups-2.3.3op2 -- description
- ppdi: Cups-2.3.3op2 -- description
- ppdmerge: Cups-2.3.3op2 -- description
- ppdpo: Cups-2.3.3op2 -- description
- ppm2tiff: libtiff-4.3.0 -- description
- praliases: sendmail-8.17.1 -- description
- precat: Aspell-0.60.8 -- description
- preparetips5: Building KDE Frameworks 5 (KF5) -- description
- preunzip: Aspell-0.60.8 -- description
- prezip: Aspell-0.60.8 -- description
- prezip-bin: Aspell-0.60.8 -- description
- procmail: Procmail-3.22 -- description
- profiles: Samba-4.14.7 -- description
- proftpd: ProFTPD-1.3.7c -- description
- prune: Graphviz-2.48.0 -- description
- prxs: ProFTPD-1.3.7c -- description
- psicc: Little CMS-2.12 -- description
- psktool: GnuTLS-3.7.2 -- description
- psl: libpsl-0.21.1 -- description
- pspell-config: Aspell-0.60.8 -- description
- psql: PostgreSQL-13.4 -- description
- pth-config: Pth-2.0.7 -- description
- pulseaudio: PulseAudio-15.0 -- description
- purgestat: sendmail-8.17.1 -- description
- purple-client-example: Pidgin-2.14.6 -- description
- purple-remote: Pidgin-2.14.6 -- description
- purple-send: Pidgin-2.14.6 -- description
- purple-send-async: Pidgin-2.14.6 -- description
- purple-url-handler: Pidgin-2.14.6 -- description
- pw-cat: Pipewire-0.3.34 -- description
- pw-cli: Pipewire-0.3.34 -- description
- pw-dot: Pipewire-0.3.34 -- description
- pw-dump: Pipewire-0.3.34 -- description
- pw-jack: Pipewire-0.3.34 -- description
- pw-link: Pipewire-0.3.34 -- description
- pw-loopback: Pipewire-0.3.34 -- description
- pw-metadata: Pipewire-0.3.34 -- description
- pw-mididump: Pipewire-0.3.34 -- description
- pw-mon: Pipewire-0.3.34 -- description
- pw-profiler: Pipewire-0.3.34 -- description
- pw-reserve: Pipewire-0.3.34 -- description
- pw-top: Pipewire-0.3.34 -- description
- pwhistory_helper: Linux-PAM-1.5.1 -- description
- pwmake: libpwquality-1.4.4 -- description
- pwmconfig: lm-sensors-3-6-0 -- description
- pwscore: libpwquality-1.4.4 -- description
- pydoc: Python-2.7.18 -- description
- pydo3c: Python-3.9.6 -- description
- pygtk-codegen-2.0: PyGTK-2.24.0 -- description
- pygtk-demo: PyGTK-2.24.0 -- description
- python: Python-2.7.18 -- description
- python2.7: Python-2.7.18 -- description
- python3: Python-3.9.6 -- description
- python3.9: Python-3.9.6 -- description
- qcatool-qt5: Qca-2.3.3 -- description
- qcollectiongenerator-qt5: Qt-5.15.2 -- description
- qdbus: Qt-5.15.2 -- description
- qdbuscpp2xml: Qt-5.15.2 -- description
- qdbusviewer: Qt-5.15.2 -- description
- qdbusxml2cpp: Qt-5.15.2 -- description
- qdistancefieldgenerator: Qt-5.15.2 -- description
- qdoc: Qt-5.15.2 -- description
- qemu-edid: qemu-6.1.0 -- description
- qemu-ga: qemu-6.1.0 -- description
- qemu-img: qemu-6.1.0 -- description
- qemu-io: qemu-6.1.0 -- description
- qemu-keymap: qemu-6.1.0 -- description
- qemu-nbd: qemu-6.1.0 -- description
- qemu-pr-helper: qemu-6.1.0 -- description
- qemu-storage-daemon: qemu-6.1.0 -- description
- qemu-system-x86_64: qemu-6.1.0 -- description
- qgltf: Qt-5.15.2 -- description
- qhelpgenerator: Qt-5.15.2 -- description
- qlalr: Qt-5.15.2 -- description
- qmake: Qt-5.15.2 -- description
- qmi-firmware-update: libqmi-1.30.0 -- description
- qmi-network: libqmi-1.30.0 -- description
- qmicli: libqmi-1.30.0 -- description
- qml: Qt-5.15.2 -- description
- qmlcachegen: Qt-5.15.2 -- description
- qmleasing: Qt-5.15.2 -- description
- qmlformat: Qt-5.15.2 -- description
- qmlimportscanner: Qt-5.15.2 -- description
- qmllint: Qt-5.15.2 -- description
- qmlmin: Qt-5.15.2 -- description
- qmlplugindump: Qt-5.15.2 -- description
- qmlpreview: Qt-5.15.2 -- description
- qmlprofiler: Qt-5.15.2 -- description
- qmlscene: Qt-5.15.2 -- description
- qmltestrunner: Qt-5.15.2 -- description
- qpaeq: PulseAudio-15.0 -- description
- qpdf: Qpdf-10.3.2 -- description
- zlib-flate: Qpdf-10.3.2 -- description
- qrencode: qrencode-4.1.1 -- description
- qscxmlc: Qt-5.15.2 -- description
- qt-faststart: FFmpeg-4.4 -- description
- qt2text: libquicktime-1.2.4 -- description
- qtattributionsscanner: Qt-5.15.2 -- description
- qtdechunk: libquicktime-1.2.4 -- description
- qtdiag: Qt-5.15.2 -- description
- qtdump: libquicktime-1.2.4 -- description
- qtinfo: libquicktime-1.2.4 -- description
- qtpaths: Qt-5.15.2 -- description
- qtplugininfo: Qt-5.15.2 -- description
- qtrechunk: libquicktime-1.2.4 -- description
- qtstreamize: libquicktime-1.2.4 -- description
- qtwaylandscanner: Qt-5.15.2 -- description
- QtWebEngineProcess: QtWebEngine-5.15.6 -- description
- qtwebengine_convert_dict: QtWebEngine-5.15.6 -- description
- qtyuv4toyuv: libquicktime-1.2.4 -- description
- quest: Xapian-1.4.18 -- description
- qv4l2: v4l-utils-1.20.0 -- description
- qvidcap: v4l-utils-1.20.0 -- description
- qvkgen: Qt-5.15.2 -- description
- qvlc: VLC-3.0.16 -- description
- rake: Ruby-3.0.2 -- description
- randpkt: Wireshark-3.4.8 -- description
- rapper: Raptor-2.0.15 -- description
- rarian-example: Rarian-0.8.1 -- description
- rarian-sk-config: Rarian-0.8.1 -- description
- rarian-sk-extract: Rarian-0.8.1 -- description
- rarian-sk-gen-uuid: Rarian-0.8.1 -- description
- rarian-sk-get-cl: Rarian-0.8.1 -- description
- rarian-sk-get-content-list: Rarian-0.8.1 -- description
- rarian-sk-get-extended-content-list: Rarian-0.8.1 -- description
- rarian-sk-get-scripts: Rarian-0.8.1 -- description
- rarian-sk-install: Rarian-0.8.1 -- description
- rarian-sk-migrate: Rarian-0.8.1 -- description
- rarian-sk-preinstall: Rarian-0.8.1 -- description
- rarian-sk-rebuild: Rarian-0.8.1 -- description
- rarian-sk-update: Rarian-0.8.1 -- description
- rarp: Net-tools-2.10 -- description
- rasqal-config: Rasqal-0.9.33 -- description
- half_mt: libraw-0.20.2 -- description
- raw2tiff: libtiff-4.3.0 -- description
- rawshark: Wireshark-3.4.8 -- description
- rcc: Qt-5.15.2 -- description
- rctest: BlueZ-5.61 -- description
- rdfproc: Redland-1.0.17 -- description
- rdjpgcom: libjpeg-turbo-2.1.1 -- description
- rdoc: Ruby-3.0.2 -- description
- rds-ctl: v4l-utils-1.20.0 -- description
- readcd: Cdrtools-3.02a09 -- description
- red: Ed-1.17 -- description
- redland-config: Redland-1.0.17 -- description
- redland-db-upgrade: Redland-1.0.17 -- description
- regdiff: Samba-4.14.7 -- description
- regpatch: Samba-4.14.7 -- description
- regshell: Samba-4.14.7 -- description
- regtree: Samba-4.14.7 -- description
- reindexdb: PostgreSQL-13.4 -- description
- reiserfsck: reiserfsprogs-3.6.27 -- description
- reiserfstune: reiserfsprogs-3.6.27 -- description
- reordercap: Wireshark-3.4.8 -- description
- rep: Librep-0.92.7 -- description
- repc: Qt-5.15.2 -- description
- replace: MariaDB-10.6.4 -- description
- request-key: keyutils-1.6.1 -- description
- rescan-scsi-bus.sh: sg3_utils-1.46 -- description
- resize: xterm-368 -- description
- resize_reiserfs: reiserfsprogs-3.6.27 -- description
- resolveip: MariaDB-10.6.4 -- description
- resolve_stack_dump: MariaDB-10.6.4 -- description
- rgview: Vim-8.2.3337 -- description
- ri: Ruby-3.0.2 -- description
- ristretto: Ristretto-0.11.0 -- description
- rjoe: JOE-4.6 -- description
- rls: Rustc-1.52.0 -- description
- rmedigicontrol: alsa-tools-1.2.5 -- description
- rmid: OpenJDK-16.0.2 -- description
- rmiregistry: OpenJDK-16.0.2 -- description
- rnano: Nano-5.8 -- description
- rndc: BIND-9.16.20 -- description
- rndc-confgen: BIND-9.16.20 -- description
- roqet: Rasqal-0.9.33 -- description
- rotatelogs: Apache-2.4.48 -- description
- route: Net-tools-2.10 -- description
- rox-filer: Rox-Filer-2.11 -- description
- rpc.mountd: NFS-Utils-2.5.4 -- description
- rpc.nfsd: NFS-Utils-2.5.4 -- description
- rpc.statd: NFS-Utils-2.5.4 -- description
- rpcbind: rpcbind-1.2.6 -- description
- rpcclient: Samba-4.14.7 -- description
- rpcdebug: NFS-Utils-2.5.4 -- description
- rpcgen: rpcsvc-proto-1.4.2 -- description
- rpcinfo: rpcbind-1.2.6 -- description
- rscsi: Cdrtools-3.02a09 -- description
- rsvg-convert: librsvg-2.50.7 -- description
- rsync: rsync-3.2.3 -- description
- rsync-ssl: rsync-3.2.3 -- description
- ruby: Ruby-3.0.2 -- description
- run-with-aspell: Aspell-0.60.8 -- description
- runant.pl: apache-ant-1.10.11 -- description
- runant.py: apache-ant-1.10.11 -- description
- rust-analyzer: Rustc-1.52.0 -- description
- rust-gdb: Rustc-1.52.0 -- description
- rust-gdbgui: Rustc-1.52.0 -- description
- rust=lldb: Rustc-1.52.0 -- description
- rustc: Rustc-1.52.0 -- description
- rustdoc: Rustc-1.52.0 -- description
- rustfmt: Rustc-1.52.0 -- description
- rvlc: VLC-3.0.16 -- description
- sadf: Sysstat-12.5.4 -- description
- saidar: libstatgrab-0.92.1 -- description
- samba-gpupdate: Samba-4.14.7 -- description
- samba: Samba-4.14.7 -- description
- samba-regedit: Samba-4.14.7 -- description
- samba-tool: Samba-4.14.7 -- description
- samba_dnsupdate: Samba-4.14.7 -- description
- samba_downgrade_db: Samba-4.14.7 -- description
- samba_kcc: Samba-4.14.7 -- description
- samba_spnupdate: Samba-4.14.7 -- description
- samba_upgradedns: Samba-4.14.7 -- description
- sancov: LLVM-12.0.1 -- description
- sane-config: SANE-1.0.29 -- description
- sane-find-scanner: SANE-1.0.29 -- description
- saned: SANE-1.0.29 -- description
- sanstats: LLVM-12.0.1 -- description
- sar: Sysstat-12.5.4 -- description
- saslauthd: Cyrus SASL-2.1.27 -- description
- sasldblistusers2: Cyrus SASL-2.1.27 -- description
- saslpasswd2: Cyrus SASL-2.1.27 -- description
- sassc: sassc-3.6.2 -- description
- sawfish: sawfish-1.12.0 -- description
- sawfish-about: sawfish-1.12.0 -- description
- sawfish-client: sawfish-1.12.0 -- description
- sawfish-config: sawfish-1.12.0 -- description
- sawfish-kde4-session: sawfish-1.12.0 -- description
- sawfish-kde5-session: sawfish-1.12.0 -- description
- sawfish-lumina-session: sawfish-1.12.0 -- description
- sawfish-mate-session: sawfish-1.12.0 -- description
- sawfish-xfce-session: sawfish-1.12.0 -- description
- sbcdec: SBC-1.5 -- description
- sbcenc: SBC-1.5 -- description
- sbcinfo: SBC-1.5 -- description
- sbiload: alsa-tools-1.2.5 -- description
- scan-build: LLVM-12.0.1 -- description
- scan-view: LLVM-12.0.1 -- description
- scanadf: SANE-1.0.29 -- description
- scanimage: SANE-1.0.29 -- description
- sccmap: Graphviz-2.48.0 -- description
- scgcheck: Cdrtools-3.02a09 -- description
- sclient: MIT Kerberos V5-1.19.2 -- description
- scmp_sys_resolver: libseccomp-2.5.1 -- description
- scons: SCons-4.2.0 -- description
- scons-configure-cache: SCons-4.2.0 -- description
- sconsign: SCons-4.2.0 -- description
- scour: Scour-0.38.2 -- description
- scp: OpenSSH-8.7p1 -- description
- screen: Screen-4.8.0 -- description
- scsi_logging_level: sg3_utils-1.46 -- description
- scsi_mandat: sg3_utils-1.46 -- description
- scsi_readcap: sg3_utils-1.46 -- description
- scsi_ready: sg3_utils-1.46 -- description
- scsi_satl: sg3_utils-1.46 -- description
- scsi_start: sg3_utils-1.46 -- description
- scsi_stop: sg3_utils-1.46 -- description
- scsi_temperature: sg3_utils-1.46 -- description
- sdl-config: SDL-1.2.15 -- description
- sdl2-config: SDL2-2.0.16 -- description
- sdpscanner: Qt-5.15.2 -- description
- seahorse: Seahorse-40.0 -- description
- seamonkey: SeaMonkey-2.53.9 -- description
- secret-tool: libsecret-0.20.4 -- description
- sendmail: Postfix-3.6.2 -- description
  sendmail-8.17.1 -- description
- sensord: lm-sensors-3-6-0 -- description
- sensors: lm-sensors-3-6-0 -- description
- sensors-conf-convert: lm-sensors-3-6-0 -- description
- sensors-detect: lm-sensors-3-6-0 -- description
- serialver: OpenJDK-16.0.2 -- description
- sessreg: Xorg Applications -- description
- setcifsacl: cifs-utils-6.13 -- description
- setpci: pciutils-3.7.0 -- description
- setxkbmap: Xorg Applications -- description
- sexp-conv: Nettle-3.7.3 -- description
- sfconvert: AudioFile-0.3.6 -- description
- sfddiff: FontForge-20201107 -- description
- sfdp: Graphviz-2.48.0 -- description
- sfinfo: AudioFile-0.3.6 -- description
- sftp: OpenSSH-8.7p1 -- description
- sgdisk: gptfdisk-1.0.8 -- description
- sginfo: sg3_utils-1.46 -- description
- sgml2xml: OpenSP-1.5.2 -- description
- sgmldiff: DocBook-utils-0.6.14 -- description
- sgmlnorm: OpenSP-1.5.2 -- description
- sgmlspl: SGMLSpm-1.1 -- description
- sgmlspl.pl: SGMLSpm-1.1 -- description
- sgmlwhich: sgml-common-0.6.3 -- description
- sgm_dd: sg3_utils-1.46 -- description
- sgp_dd: sg3_utils-1.46 -- description
- sg_bg_ctl: sg3_utils-1.46 -- description
- sg_compare_and_write: sg3_utils-1.46 -- description
- sg_copy_results: sg3_utils-1.46 -- description
- sg_dd: sg3_utils-1.46 -- description
- sg_decode_sense: sg3_utils-1.46 -- description
- sg_emc_trespass: sg3_utils-1.46 -- description
- sg_format: sg3_utils-1.46 -- description
- sg_get_config: sg3_utils-1.46 -- description
- sg_get_elem_status: sg3_utils-1.46 -- description
- sg_get_lba_status: sg3_utils-1.46 -- description
- sg_ident: sg3_utils-1.46 -- description
- sg_inq: sg3_utils-1.46 -- description
- sg_logs: sg3_utils-1.46 -- description
- sg_luns: sg3_utils-1.46 -- description
- sg_map: sg3_utils-1.46 -- description
- sg_map26: sg3_utils-1.46 -- description
- sg_modes: sg3_utils-1.46 -- description
- sg_opcodes: sg3_utils-1.46 -- description
- sg_persist: sg3_utils-1.46 -- description
- sg_prevent: sg3_utils-1.46 -- description
- sg_raw: sg3_utils-1.46 -- description
- sg_rbuf: sg3_utils-1.46 -- description
- sg_rdac: sg3_utils-1.46 -- description
- sg_read: sg3_utils-1.46 -- description
- sg_readcap: sg3_utils-1.46 -- description
- sg_read_attr: sg3_utils-1.46 -- description
- sg_read_block_limits: sg3_utils-1.46 -- description
- sg_read_buffer: sg3_utils-1.46 -- description
- sg_read_long: sg3_utils-1.46 -- description
- sg_reassign: sg3_utils-1.46 -- description
- sg_referrals: sg3_utils-1.46 -- description
- sg_rep_pip: sg3_utils-1.46 -- description
- sg_rep_zones: sg3_utils-1.46 -- description
- sg_requests: sg3_utils-1.46 -- description
- sg_reset: sg3_utils-1.46 -- description
- sg_reset_wp: sg3_utils-1.46 -- description
- sg_rmsn: sg3_utils-1.46 -- description
- sg_rtpg: sg3_utils-1.46 -- description
- sg_safte: sg3_utils-1.46 -- description
- sg_sanitize: sg3_utils-1.46 -- description
- sg_sat_identify: sg3_utils-1.46 -- description
- sg_sat_phy_event: sg3_utils-1.46 -- description
- sg_sat_read_gplog: sg3_utils-1.46 -- description
- sg_sat_set_features: sg3_utils-1.46 -- description
- sg_scan: sg3_utils-1.46 -- description
- sg_seek: sg3_utils-1.46 -- description
- sg_senddiag: sg3_utils-1.46 -- description
- sg_ses: sg3_utils-1.46 -- description
- sg_ses_microcode: sg3_utils-1.46 -- description
- sg_start: sg3_utils-1.46 -- description
- sg_stpg: sg3_utils-1.46 -- description
- sg_stream_ctl: sg3_utils-1.46 -- description
- sg_sync: sg3_utils-1.46 -- description
- sg_test_rwbuf: sg3_utils-1.46 -- description
- sg_timestamp: sg3_utils-1.46 -- description
- sg_turs: sg3_utils-1.46 -- description
- sg_unmap: sg3_utils-1.46 -- description
- sg_verify: sg3_utils-1.46 -- description
- sg_vpd: sg3_utils-1.46 -- description
- sg_write_buffer: sg3_utils-1.46 -- description
- sg_write_long: sg3_utils-1.46 -- description
- sg_write_same: sg3_utils-1.46 -- description
- sg_write_verify: sg3_utils-1.46 -- description
- sg_write_x: sg3_utils-1.46 -- description
- sg_wr_mode: sg3_utils-1.46 -- description
- sg_xcopy: sg3_utils-1.46 -- description
- sg_zone: sg3_utils-1.46 -- description
- shar: Sharutils-4.15.2 -- description
- sharesec: Samba-4.14.7 -- description
- sharkd: Wireshark-3.4.8 -- description
- showmount: NFS-Utils-2.5.4 -- description
- siggen: Tripwire-2.4.3.7 -- description
- simpleexpand: Xapian-1.4.18 -- description
- simpleindex: Xapian-1.4.18 -- description
- simplesearch: Xapian-1.4.18 -- description
- simple_dcraw: libraw-0.20.2 -- description
- sim_client: MIT Kerberos V5-1.19.2 -- description
- sim_server: MIT Kerberos V5-1.19.2 -- description
- skdump: libatasmart-0.19 -- description
- sktest: libatasmart-0.19 -- description
- slapacl: OpenLDAP-2.5.7 -- description
- slapadd: OpenLDAP-2.5.7 -- description
- slapauth: OpenLDAP-2.5.7 -- description
- slapcat: OpenLDAP-2.5.7 -- description
- slapd: OpenLDAP-2.5.7 -- description
- slapdn: OpenLDAP-2.5.7 -- description
- slapindex: OpenLDAP-2.5.7 -- description
- slapmodify: OpenLDAP-2.5.7 -- description
- slappasswd: OpenLDAP-2.5.7 -- description
- slapschema: OpenLDAP-2.5.7 -- description
- slaptest: OpenLDAP-2.5.7 -- description
- slattach: Net-tools-2.10 -- description
- slencheck: unixODBC-2.3.9 -- description
- sliceprint: Enscript-1.6.6 -- description
- slsh: slang-2.3.2 -- description
- sm-notify: NFS-Utils-2.5.4 -- description
- smartctl: smartmontools-7.2 -- description
- smartd: smartmontools-7.2 -- description
- smb2-quota: cifs-utils-6.13 -- description
- smbcacls: Samba-4.14.7 -- description
- smbclient: Samba-4.14.7 -- description
- smbcontrol: Samba-4.14.7 -- description
- smbcquotas: Samba-4.14.7 -- description
- smbd: Samba-4.14.7 -- description
- smbget: Samba-4.14.7 -- description
- smbinfo: cifs-utils-6.13 -- description
- smbpasswd: Samba-4.14.7 -- description
- smbspool: Samba-4.14.7 -- description
- smbstatus: Samba-4.14.7 -- description
- smbtar: Samba-4.14.7 -- description
- smbtorture: Samba-4.14.7 -- description
- smbtree: Samba-4.14.7 -- description
- smime_keys: Mutt-2.1.2 -- description
- smproxy: Xorg Applications -- description
- smrsh: sendmail-8.17.1 -- description
- smtpd.py: Python-2.7.18 -- description
- sndfile-cmp: libsndfile-1.0.31 -- description
- sndfile-concat: libsndfile-1.0.31 -- description
- sndfile-convert: libsndfile-1.0.31 -- description
- sndfile-deinterleave: libsndfile-1.0.31 -- description
- sndfile-info: libsndfile-1.0.31 -- description
- sndfile-interleave: libsndfile-1.0.31 -- description
- sndfile-metadata-get: libsndfile-1.0.31 -- description
- sndfile-metadata-set: libsndfile-1.0.31 -- description
- sndfile-play: libsndfile-1.0.31 -- description
- sndfile-salvage: libsndfile-1.0.31 -- description
- sntp: ntp-4.2.8p15 -- description
- solid-hardware5: Building KDE Frameworks 5 (KF5) -- description
- soundstretch: SoundTouch-2.3.0 -- description
- spa-acp-tool: Pipewire-0.3.34 -- description
- spa-inspect: Pipewire-0.3.34 -- description
- spa-json-dump: Pipewire-0.3.34 -- description
- spa-monitor: Pipewire-0.3.34 -- description
- spa-resample: Pipewire-0.3.34 -- description
- spam: OpenSP-1.5.2 -- description
- spcat: OpenSP-1.5.2 -- description
- speaker-test: alsa-utils-1.2.5.1 -- description
- speexdec: Speex-1.2.0 -- description
- speexenc: Speex-1.2.0 -- description
- spell: Aspell-0.60.8 -- description
- spent: OpenSP-1.5.2 -- description
- split-file: LLVM-12.0.1 -- description
- sqlite3: SQLite-3.36.0 -- description
- srptool: GnuTLS-3.7.2 -- description
- sscape_ctl: alsa-tools-1.2.5 -- description
- ssconvert: Gnumeric-1.12.50 -- description
- ssdiff: Gnumeric-1.12.50 -- description
- sserver: MIT Kerberos V5-1.19.2 -- description
- ssindex: Gnumeric-1.12.50 -- description
- ssh: OpenSSH-8.7p1 -- description
- ssh-add: OpenSSH-8.7p1 -- description
- ssh-agent: OpenSSH-8.7p1 -- description
- ssh-copy-id: OpenSSH-8.7p1 -- description
- ssh-keygen: OpenSSH-8.7p1 -- description
- ssh-keyscan: OpenSSH-8.7p1 -- description
- sshd: OpenSSH-8.7p1 -- description
- sshfs: sshfs-3.7.2 -- description
- ssindex: Gnumeric-1.12.50 -- description
- sst_sump: MariaDB-10.6.4 -- description
- start-pulseaudio-x11: PulseAudio-15.0 -- description
- start-statd: NFS-Utils-2.5.4 -- description
- startfluxbox: Fluxbox-1.3.7 -- description
- startlxde: lxde-common-0.99.2 -- description
- startx: xinit-1.4.1 -- description
- states: Enscript-1.6.6 -- description
- statgrab: libstatgrab-0.92.1 -- description
- statgrab-make-mrtg-config: libstatgrab-0.92.1 -- description
- statgrab-make-mrtg-index: libstatgrab-0.92.1 -- description
- stream: ImageMagick-7.1.0-4 -- description
- stringify: JOE-4.6 -- description
- stunnel: stunnel-5.60 -- description
- stunnel3: stunnel-5.60 -- description
- sudo: Sudo-1.9.7p2 -- description
- sudoedit: Sudo-1.9.7p2 -- description
- sudoku: FLTK-1.3.7 -- description
- sudoreplay: Sudo-1.9.7p2 -- description
- sudo_logsrvd: Sudo-1.9.7p2 -- description
- sudo_sendlog: Sudo-1.9.7p2 -- description
- suexec: Apache-2.4.48 -- description
- svlc: VLC-3.0.16 -- description
- svn: Subversion-1.14.1 -- description
- svnadmin: Subversion-1.14.1 -- description
- svnbench: Subversion-1.14.1 -- description
- svndumpfilter: Subversion-1.14.1 -- description
- svnfsfs: Subversion-1.14.1 -- description
- svnlook: Subversion-1.14.1 -- description
- svnmucc: Subversion-1.14.1 -- description
- svnrdump: Subversion-1.14.1 -- description
- svnserve: Subversion-1.14.1 -- description
- svnsync: Subversion-1.14.1 -- description
- svnversion: Subversion-1.14.1 -- description
- swig: SWIG-4.0.2 -- description
- sx: OpenSP-1.5.2 -- description
- sxpm: Xorg Libraries -- description
- synclient: Xorg Synaptics Driver-1.9.1 -- description
- syncqt.pl: Qt-5.15.2 -- description
- syndaemon: Xorg Synaptics Driver-1.9.1 -- description
- sysprof: Sysprof-3.40.1 -- description
- sysprof-cli: Sysprof-3.40.1 -- description
- tab2space: tidy-html5-5.8.0 -- description
- taglib-config: Taglib-1.12 -- description
- tapestat: Sysstat-12.5.4 -- description
- tccat: Transcode-1.1.7 -- description
- tcdecode: Transcode-1.1.7 -- description
- tcdemux: Transcode-1.1.7 -- description
- tcextract: Transcode-1.1.7 -- description
- tcmodinfo: Transcode-1.1.7 -- description
- tcmp3cut: Transcode-1.1.7 -- description
- tcprobe: Transcode-1.1.7 -- description
- tcscan: Transcode-1.1.7 -- description
- tcsh: Tcsh-6.22.04 -- description
- tcxmlcheck: Transcode-1.1.7 -- description
- tdbbackup: Samba-4.14.7 -- description
- tdbdump: Samba-4.14.7 -- description
- tdbrestore: Samba-4.14.7 -- description
- tdbtool: Samba-4.14.7 -- description
- telepathy-logger: telepathy-logger-0.8.2 -- description
- termidx: JOE-4.6 -- description
- testparm: Samba-4.14.7 -- description
- testpattern: Gutenprint-5.3.3 -- description
- testsaslauthd: Cyrus SASL-2.1.27 -- description
- tex2xindy: xindy-2.5.1 -- description
- texindy: xindy-2.5.1 -- description
- TeX Live programs: texlive-20210325-source -- description
- text2pcap: Wireshark-3.4.8 -- description
- thunar: thunar-4.16.8 -- description
- thunar-settings: thunar-4.16.8 -- description
- thunar-volman: thunar-volman-4.16.0 -- description
- thunar-volman-settings: thunar-volman-4.16.0 -- description
- thunderbird: Thunderbird-91.0.3 -- description
- tickadj: ntp-4.2.8p15 -- description
- tidy: tidy-html5-5.8.0 -- description
- tiff2bw: libtiff-4.3.0 -- description
- tiff2pdf: libtiff-4.3.0 -- description
- tiff2ps: libtiff-4.3.0 -- description
- tiff2rgba: libtiff-4.3.0 -- description
- tiffcmp: libtiff-4.3.0 -- description
- tiffcp: libtiff-4.3.0 -- description
- tiffcrop: libtiff-4.3.0 -- description
- tiffdiff: Little CMS-1.19 -- description
- tiffdither: libtiff-4.3.0 -- description
- tiffdump: libtiff-4.3.0 -- description
- tiffgt: libtiff-4.3.0 -- description
- tifficc: Little CMS-1.19 -- description
- tiffinfo: libtiff-4.3.0 -- description
- tiffmedian: libtiff-4.3.0 -- description
- tiffset: libtiff-4.3.0 -- description
- tiffsplit: libtiff-4.3.0 -- description
- tificc: Little CMS-2.12 -- description
- time: Time-1.9 -- description
- tjbench: libjpeg-turbo-2.1.1 -- description
- TeX Live programs: install-tl-unx -- description
- toc2cddb: Cdrdao-1.2.4 -- description
- toc2cue: Cdrdao-1.2.4 -- description
- toc2mp3: Cdrdao-1.2.4 -- description
- touchpad-edge-detector: libevdev 1.11.0 -- description
- tracegen: Qt-5.15.2 -- description
- traceroute: Traceroute-2.1.0 -- description
- traceroute6: Traceroute-2.1.0 -- description
- tracker3: Tracker-3.1.2 -- description
- transcode: Transcode-1.1.7 -- description
- transicc: Little CMS-2.12 -- description
- translit: Lingua::Translit-0.28 -- description
- transmission-cli: Transmission-3.00 -- description
- transmission-create: Transmission-3.00 -- description
- transmission-daemon: Transmission-3.00 -- description
- transmission-edit: Transmission-3.00 -- description
- transmission-gtk: Transmission-3.00 -- description
- transmission-qt: Transmission-3.00 -- description
- transmission-remote: Transmission-3.00 -- description
- transmission-show: Transmission-3.00 -- description
- tred: Graphviz-2.48.0 -- description
- tree: tree-1.8.0 -- description
- tripwire: Tripwire-2.4.3.7 -- description
- trust: p11-kit-0.24.0 -- description
- tshark: Wireshark-3.4.8 -- description
- tsig-keygen: BIND-9.16.20 -- description
- tumblerd: tumbler-4.16.0 -- description
- twadmin: Tripwire-2.4.3.7 -- description
- twm: twm-1.0.11 -- description
- twopi: Graphviz-2.48.0 -- description
- twprint: Tripwire-2.4.3.7 -- description
- uchardet: Uchardet-0.0.7 -- description
- uconv: ICU-69.1 -- description
- ucs2any: Xorg Fonts -- description
- udisksctl: UDisks-2.9.3 -- description
- uic: Qt-5.15.2 -- description
- umockdev-record: Umockdev-0.16.2 -- description
- umockdev-run: Umockdev-0.16.2 -- description
- umockdev-wrapper: Umockdev-0.16.2 -- description
- umount.nfs: NFS-Utils-2.5.4 -- description
- umount.nfs4: NFS-Utils-2.5.4 -- description
- umount.udisks2: UDisks-2.9.3 -- description
- unbound: Unbound-1.13.2 -- description
- unbound-anchor: Unbound-1.13.2 -- description
- unbound-checkconf: Unbound-1.13.2 -- description
- unbound-control: Unbound-1.13.2 -- description
- unbound-control-setup: Unbound-1.13.2 -- description
- unbound-host: Unbound-1.13.2 -- description
- uncompface: Compface-1.5.2 -- description
- unflatten: Graphviz-2.48.0 -- description
- uninstall_ndiff: Nmap-7.92 -- description
- uninstall_zenmap: Nmap-7.92 -- description
- uniproc: JOE-4.6 -- description
- unix_chkpwd: Linux-PAM-1.5.1 -- description
- unix_update: Linux-PAM-1.5.1 -- description
- unopkg: LibreOffice-7.2.0 -- description
- unprocessed_raw: libraw-0.20.2 -- description
- unrar: UnRar-6.0.7 -- description
- unshar: Sharutils-4.15.2 -- description
- unzip: UnZip-6.0 -- description
- unzipfsx: UnZip-6.0 -- description
- update-ca-certificates: p11-kit-0.24.0 -- description
- update-desktop-database: desktop-file-utils-0.26 -- description
- update-leap: ntp-4.2.8p15 -- description
- update-mime-database: shared-mime-info-2.1 -- description
- update-pciids: pciutils-3.7.0 -- description
- update-smart-drivedb: smartmontools-7.2 -- description
- upower: UPower-0_99_13 -- description
- urxvt: rxvt-unicode-9.26 -- description
- urxvtc: rxvt-unicode-9.26 -- description
- urxvtd: rxvt-unicode-9.26 -- description
- us428control: alsa-tools-1.2.5 -- description
- usb-devices: usbutils-014 -- description
- usbhid-dump: usbutils-014 -- description
- userdbctl: Systemd-249 -- description
- usx2yloader: alsa-tools-1.2.5 -- description
- uuclient: MIT Kerberos V5-1.19.2 -- description
- uudecode: Sharutils-4.15.2 -- description
- uuencode: Sharutils-4.15.2 -- description
- uuserver: MIT Kerberos V5-1.19.2 -- description
- uxterm: xterm-368 -- description
- v4l2-compliance: v4l-utils-1.20.0 -- description
- v4l2-ctl: v4l-utils-1.20.0 -- description
- v4l2-dbg: v4l-utils-1.20.0 -- description
- v4l2-sysfs-path: v4l-utils-1.20.0 -- description
- vacation: sendmail-8.17.1 -- description
- vacuumdb: PostgreSQL-13.4 -- description
- vacuumlo: PostgreSQL-13.4 -- description
- vala-gen-introspect: Vala-0.52.5 -- description
- valac: Vala-0.52.5 -- description
- valadoc: Vala-0.52.5 -- description
- valgrind: Valgrind-3.17.0 -- description
- valgrind-di-server: Valgrind-3.17.0 -- description
- valgrind-listener: Valgrind-3.17.0 -- description
- vapigen: Vala-0.52.5 -- description
- vcut: vorbis-tools-1.4.2 -- description
- vdltodmx: Xorg-Server-1.20.13 -- description
- verify-uselistorder: LLVM-12.0.1 -- description
- veritysetup: cryptsetup-2.3.6 -- description
- vgdb: Valgrind-3.17.0 -- description
- vgimportclone: LVM2-2.03.13 -- description
- vimdot: Graphviz-2.48.0 -- description
- vinagre: Vinagre-3.22.0 -- description
- visualinfo: GLEW-2.2.0 -- description
- visudo: Sudo-1.9.7p2 -- description
- vlc: VLC-3.0.16 -- description
- vlc-wrapper: VLC-3.0.16 -- description
- vncconfig: Tigervnc-1.11.0 -- description
- vncpasswd: Tigervnc-1.11.0 -- description
- vncserver: Tigervnc-1.11.0 -- description
- vncviewer: Tigervnc-1.11.0 -- description
- volume_key: volume_key-0.3.12 -- description
- vorbiscomment: vorbis-tools-1.4.2 -- description
- vpxdec: libvpx-1.10.0 -- description
- vpxenc: libvpx-1.10.0 -- description
- vsftpd: vsftpd-3.0.5 -- description
- vte: Vte-0.28.2 -- description
- vte-2.91: VTE-0.64.2 -- description
- vwebp: libwebp-1.2.1 -- description
- vxloader: alsa-tools-1.2.5 -- description
- watchgnupg: GnuPG-2.2.29 -- description
- wayland-scanner: Wayland-1.19.0 -- description
- wbinfo: Samba-4.14.7 -- description
- WebKitWebDriver: WebKitGTK-2.32.3 -- description
- webpinfo: libwebp-1.2.1 -- description
- webpmux: libwebp-1.2.1 -- description
- wget: Wget-1.21.1 -- description
- which: Which-2.21 and Alternatives -- description
- newt: newt-0.52.21 -- description
- whois: Whois-5.4.3 -- description
- winbindd: Samba-4.14.7 -- description
- wireshark: Wireshark-3.4.8 -- description
- wish: Tk-8.6.11.1 -- description
- wish8.6: Tk-8.6.11.1 -- description
- wnckprop: libwnck-40.0 -- description
- wnckprop-1: libwnck-2.30.7 -- description
- word-list-compress: Aspell-0.60.8 -- description
- wpa_cli: wpa_supplicant-2.9 -- description
- wpa_gui: wpa_supplicant-2.9 -- description
- wpa_passphrase: wpa_supplicant-2.9 -- description
- wpa_supplicant: wpa_supplicant-2.9 -- description
- wrjpgcom: libjpeg-turbo-2.1.1 -- description
- wtpt: Little CMS-1.19 -- description
- wv: wv-1.2.9 -- description
- X: Xorg-Server-1.20.13 -- description
- x0vncserver: Tigervnc-1.11.0 -- description
- x11perf: Xorg Applications -- description
- x11perfcomp: Xorg Applications -- description
- xapian-check: Xapian-1.4.18 -- description
- xapian-compact: Xapian-1.4.18 -- description
- xapian-config: Xapian-1.4.18 -- description
- xapian-delve: Xapian-1.4.18 -- description
- xapian-metadata: Xapian-1.4.18 -- description
- xapian-pos: Xapian-1.4.18 -- description
- xapian-progsrv: Xapian-1.4.18 -- description
- xapian-replicate: Xapian-1.4.18 -- description
- xapian-replicate-server: Xapian-1.4.18 -- description
- xapian-tcpsrv: Xapian-1.4.18 -- description
- xarchiver: xarchiver-0.5.4.17 -- description
- xasy: asymptote-2.70 -- description
- xauth: Xorg Applications -- description
- xbacklight: Xorg Applications -- description
- xbm2xface.pl: Compface-1.5.2 -- description
- xcam: SANE-1.0.29 -- description
- xclock: xclock-1.0.9 -- description
- xcmsdb: Xorg Applications -- description
- xcursorgen: Xorg Applications -- description
- xdg-desktop-icon: xdg-utils-1.1.3 -- description
- xdg-desktop-menu: xdg-utils-1.1.3 -- description
- xdg-email: xdg-utils-1.1.3 -- description
- xdg-icon-resource: xdg-utils-1.1.3 -- description
- xdg-mime: xdg-utils-1.1.3 -- description
- xdg-open: xdg-utils-1.1.3 -- description
- xdg-screensaver: xdg-utils-1.1.3 -- description
- xdg-settings: xdg-utils-1.1.3 -- description
- xdg-user-dir: Xdg-user-dirs-0.17 -- description
- xdg-user-dirs-update: Xdg-user-dirs-0.17 -- description
- Xdmx: Xorg-Server-1.20.13 -- description
- xdmxconfig: Xorg-Server-1.20.13 -- description
- xdpr: Xorg Applications -- description
- xdpyinfo: Xorg Applications -- description
- xdriinfo: Xorg Applications -- description
- Xephyr: Xorg-Server-1.20.13 -- description
- xev: Xorg Applications -- description
- xfburn: Xfburn-0.6.2 -- description
- xfce4-accessibility-settings: xfce4-settings-4.16.2 -- description
- xfce4-appearance-settings: xfce4-settings-4.16.2 -- description
- xfce4-appfinder: xfce4-appfinder-4.16.1 -- description
- xfce4-display-settings: xfce4-settings-4.16.2 -- description
- xfce4-keyboard-settings: xfce4-settings-4.16.2 -- description
- xfce4-kiosk-query: libxfce4util-4.16.0 -- description
- xfce4-mime-settings: xfce4-settings-4.16.2 -- description
- xfce4-mouse-settings: xfce4-settings-4.16.2 -- description
- xfce4-notifyd-config: xfce4-notifyd-0.6.2 -- description
- xfce4-panel: xfce4-panel-4.16.3 -- description
- xfce4-pm-helper: xfce4-power-manager-4.16.0 -- description
- xfce4-popup-applicationsmenu: xfce4-panel-4.16.3 -- description
- xfce4-popup-directorymenu: xfce4-panel-4.16.3 -- description
- xfce4-popup-windowmenu: xfce4-panel-4.16.3 -- description
- xfce4-power-manager: xfce4-power-manager-4.16.0 -- description
- xfce4-power-manager-settings: xfce4-power-manager-4.16.0 -- description
- xfce4-session: xfce4-session-4.16.0 -- description
- xfce4-session-logout: xfce4-session-4.16.0 -- description
- xfce4-session-settings: xfce4-session-4.16.0 -- description
- xfce4-settings-editor: xfce4-settings-4.16.2 -- description
- xfce4-settings-manager: xfce4-settings-4.16.2 -- description
- xfce4-terminal: xfce4-terminal-0.8.10 -- description
- xfconf-query: Xfconf-4.16.0 -- description
- xfdesktop: Xfdesktop-4.16.0 -- description
- xfdesktop-settings: Xfdesktop-4.16.0 -- description
- xfpm-power-backlight-helper: xfce4-power-manager-4.16.0 -- description
- xfsettingsd: xfce4-settings-4.16.2 -- description
- xfs_admin: xfsprogs-5.13.0 -- description
- xfs_bmap: xfsprogs-5.13.0 -- description
- xfs_copy: xfsprogs-5.13.0 -- description
- xfs_db: xfsprogs-5.13.0 -- description
- xfs_estimate: xfsprogs-5.13.0 -- description
- xfs_freeze: xfsprogs-5.13.0 -- description
- xfs_fsr: xfsprogs-5.13.0 -- description
- xfs_growfs: xfsprogs-5.13.0 -- description
- xfs_info: xfsprogs-5.13.0 -- description
- xfs_io: xfsprogs-5.13.0 -- description
- xfs_logprint: xfsprogs-5.13.0 -- description
- xfs_mdrestore: xfsprogs-5.13.0 -- description
- xfs_metadump: xfsprogs-5.13.0 -- description
- xfs_mkfile: xfsprogs-5.13.0 -- description
- xfs_ncheck: xfsprogs-5.13.0 -- description
- xfs_quota: xfsprogs-5.13.0 -- description
- xfs_repair: xfsprogs-5.13.0 -- description
- xfs_rtcp: xfsprogs-5.13.0 -- description
- xfs_scrub: xfsprogs-5.13.0 -- description
- xfs_scrub_all: xfsprogs-5.13.0 -- description
- xfs_spaceman: xfsprogs-5.13.0 -- description
- xfwm4: Xfwm4-4.16.1 -- description
- xfwm4-settings: Xfwm4-4.16.1 -- description
- xfwm4-tweaks-settings: Xfwm4-4.16.1 -- description
- xfwm4-workspace-settings: Xfwm4-4.16.1 -- description
- xgamma: Xorg Applications -- description
- xhost: Xorg Applications -- description
- xindy: xindy-2.5.1 -- description
- xine: xine-ui-0.99.12 -- description
- xine-bugreport: xine-ui-0.99.12 -- description
- xine-check: xine-ui-0.99.12 -- description
- xine-config: xine-lib-1.2.11 -- description
- xine-list-1.2: xine-lib-1.2.11 -- description
- xine-remote: xine-ui-0.99.12 -- description
- xinit: xinit-1.4.1 -- description
- xinput: Xorg Applications -- description
- xkbbell: Xorg Applications -- description
- xkbcli: libxkbcommon-1.3.0 -- description
- xkbcomp: Xorg Applications -- description
- xkbevd: Xorg Applications -- description
- xkbvleds: Xorg Applications -- description
- xkbwatch: Xorg Applications -- description
- xkill: Xorg Applications -- description
- xlsatoms: Xorg Applications -- description
- xlsclients: Xorg Applications -- description
- xmessage: Xorg Applications -- description
- xml2-config: libxml2-2.9.12 -- description
- xmlcatalog: libxml2-2.9.12 -- description
- xmlif: xmlto-0.0.28 -- description
- xmllint: libxml2-2.9.12 -- description
- xmlpatterns: Qt-5.15.2 -- description
- xmlpatternsvalidator: Qt-5.15.2 -- description
- xmlto: xmlto-0.0.28 -- description
- xmodmap: Xorg Applications -- description
- Xnest: Xorg-Server-1.20.13 -- description
- Xorg: Xorg-Server-1.20.13 -- description
- xorrecord: libisoburn-1.5.4 -- description
- xorriso: libisoburn-1.5.4 -- description
- xorriso-dd-target: libisoburn-1.5.4 -- description
- xorriso-tcltk: libisoburn-1.5.4 -- description
- xorrisofs: libisoburn-1.5.4 -- description
- xpr: Xorg Applications -- description
- xprop: Xorg Applications -- description
- xpstojpeg: Libgxps-0.3.2 -- description
- xpstopdf: Libgxps-0.3.2 -- description
- xpstopng: Libgxps-0.3.2 -- description
- xpstops: Libgxps-0.3.2 -- description
- xpstosvg: Libgxps-0.3.2 -- description
- xrandr: Xorg Applications -- description
- xrdb: Xorg Applications -- description
- xrefresh: Xorg Applications -- description
- xsane: XSane-0.999 -- description
- xscanimage: SANE-1.0.29 -- description
- xscreensaver: XScreenSaver-6.01 -- description
- xscreensaver-command: XScreenSaver-6.01 -- description
- xscreensaver-demo: XScreenSaver-6.01 -- description
- xscreensaver-getimage: XScreenSaver-6.01 -- description
- xscreensaver-getimage-file: XScreenSaver-6.01 -- description
- xscreensaver-getimage-video: XScreenSaver-6.01 -- description
- xscreensaver-gl-helper: XScreenSaver-6.01 -- description
- xscreensaver-gl-visual: XScreenSaver-6.01 -- description
- xscreensaver-settings: XScreenSaver-6.01 -- description
- xscreensaver-text: XScreenSaver-6.01 -- description
- xset: Xorg Applications -- description
- xsetroot: Xorg Applications -- description
- xsetwacom: Xorg Wacom Driver-0.40.0 -- description
- xslt-config: libxslt-1.1.34 -- description
- xsltproc: libxslt-1.1.34 -- description
- xtables-multi: iptables-1.8.7 -- description
- xterm: xterm-368 -- description
- Xvfb: Xorg-Server-1.20.13 -- description
- xvinfo: Xorg Applications -- description
- Xvnc: Tigervnc-1.11.0 -- description
- Xwayland: Xorg-Server-1.20.13 -- description
- xwd: Xorg Applications -- description
- xwininfo: Xorg Applications -- description
- xwud: Xorg Applications -- description
- yapp: Parse::Yapp-1.21 -- description
- yasm: yasm-1.3.0 -- description
- yat2m: libgpg-error-1.42 -- description
- yelp: Yelp-40.3 -- description
- zenity: Zenity-3.32.0 -- description
- zip: Zip-3.0 -- description
- zipcloak: Zip-3.0 -- description
- zipgrep: UnZip-6.0 -- description
- zipinfo: UnZip-6.0 -- description
- zipnote: Zip-3.0 -- description
- zipsplit: Zip-3.0 -- description
- zsh: zsh-5.8 -- description
- 4channels: libraw-0.20.2 -- description

## Libraries

- amdgpu_drv.so: Xorg AMDGPU Driver-21.0.0 -- description
- ant-*.jar: apache-ant-1.10.11 -- description
- ati_drv.so: Xorg ATI Driver-19.1.0 -- description
- c-ares.so: c-ares-1.17.2 -- description
- udev.so: dhcpcd-9.4.0 -- description
- evdev_drv.so: Xorg Evdev Driver-2.10.6 -- description
- fbdev_drv.so: Xorg Fbdev Driver-0.5.0 -- description
- fop.jar: fop-2.6 -- description
- Glib libraries: GLib-2.68.4 -- description
- intel_drv.so: Xorg Intel Driver-20210222 -- description
- libkeybinder.so: keybinder-0.3.1 -- description
- libkeybinder-3.0.so: keybinder-3.0-0.3.2 -- description
- liba52.so: Liba52-0.7.4 -- description
- libaa.{so,a}: AAlib-1.4rc5 -- description
- libabiword-3.0.so: AbiWord-3.0.5 -- description
- libaccountsservice.so: AccountsService-0.6.55 -- description
- libadwaita.so: gnome-themes-extra-3.28 -- description
- libaio.so: libaio-0.3.112 -- description
- libamtk-5.so: Amtk-5.2.0 -- description
- libao.so: Libao-1.2.0 -- description
- libapr-1.so: Apr-1.7.0 -- description
- libaprutil-1.so: Apr-Util-1.6.1 -- description
- libarchive.so: libarchive-3.5.2 -- description
- libasound.so: alsa-lib-1.2.5.1 -- description
- libasound_module_pcm_a52.so: alsa-plugins-1.2.5 -- description
- libasound_module_pcm_jack.so: alsa-plugins-1.2.5 -- description
- libasound_module_pcm_oss.so: alsa-plugins-1.2.5 -- description
- libasound_module_pcm_pulse.so: alsa-plugins-1.2.5 -- description
- libasound_module_pcm_upmix.so: alsa-plugins-1.2.5 -- description
- libasound_module_pcm_vdownmix.so: alsa-plugins-1.2.5 -- description
- libasound_module_rate_samplerate.so: alsa-plugins-1.2.5 -- description
- libaspell.so: Aspell-0.60.8 -- description
- libass.so: libass-0.15.1 -- description
- libassuan.so: libassuan-2.5.5 -- description
- libatasmart.so: libatasmart-0.19 -- description
- libatk-1.0.so: ATK-2.36.0 -- description
- libatk-bridge.so: at-spi2-atk-2.38.0 -- description
- libatk-bridge-2.0.so: at-spi2-atk-2.38.0 -- description
- libatkmm-1.6.so: Atkmm-2.28.2 -- description
- libatomic_ops.so: libatomic_ops-7.6.10 -- description
- libatopology.so: alsa-lib-1.2.5.1 -- description
- libatspi.so: at-spi2-core-2.40.3 -- description
- libaudiofile.so: AudioFile-0.3.6 -- description
- libavcodec.so: FFmpeg-4.4 -- description
- libavdevice.so: FFmpeg-4.4 -- description
- libavfilter.so: FFmpeg-4.4 -- description
- libavformat.so: FFmpeg-4.4 -- description
- libavresample: FFmpeg-4.4 -- description
- libavutil.so: FFmpeg-4.4 -- description
- libbabl-0.1.so: babl-0.1.88 -- description
- libbluetooth.so: BlueZ-5.61 -- description
- libbrasero-burn3.so: Brasero-3.12.2 -- description
- libbrasero-media3.so: Brasero-3.12.2 -- description
- libbrasero-utils3.so: Brasero-3.12.2 -- description
- libbrotlicommon{,-static.a,.so}: brotli-1.0.9 -- description
- libbrotlidec{,-static.a,.so}: brotli-1.0.9 -- description
- libbrotlienc{,-static.a,.so}: brotli-1.0.9 -- description
- libbtparse.so: Text::BibTeX-0.88 -- description
- libburn.so: libburn-1.5.4 -- description
- libbytesize.so: libbytesize-2.6 -- description
- libcairo.so: Cairo-1.17.4 -- description
- libcairo-gobject.so: Cairo-1.17.4 -- description
- libcairo-script-interpreter.so: Cairo-1.17.4 -- description
- libcairomm-1.0.so: libcairomm-1.0 (cairomm-1.14.0) -- description
- libcamel-1.2.so: evolution-data-server-3.40.4 -- description
- libcanberra.so: libcanberra-0.30 -- description
- libcanberra-gtk.so: libcanberra-0.30 -- description
- libcanberra-gtk3.so: libcanberra-0.30 -- description
- libcdda_interface.{so,a}: CDParanoia-III-10.2 -- description
- libcdda_paranoia.{so,a}: CDParanoia-III-10.2 -- description
- libcdio.so: libcdio-2.1.0 -- description
- libcdt.so: Graphviz-2.48.0 -- description
- libcgraph.so: Graphviz-2.48.0 -- description
- libchamplain-0.12.so: libchamplain-0.12.20 -- description
- libchamplain-gtk-0.12.so: libchamplain-0.12.20 -- description
- libcheese.so: Cheese-3.38.0 -- description
- libcheese-gtk.so: Cheese-3.38.0 -- description
- libclutter-1.0.so: Clutter-1.26.4 -- description
- libclutter-gst-3.0.so: clutter-gst-3.0.27 -- description
- libclutter-gtk-1.0.so: clutter-gtk-1.8.4 -- description
- libcogl.so: Cogl-1.22.8 -- description
- libcogl-gles2.so: Cogl-1.22.8 -- description
- libcogl-pango.so: Cogl-1.22.8 -- description
- libcolord-gtk.so: colord-gtk-0.2.0 -- description
- libcolord-gtk2.so: colord-gtk-0.2.0 -- description
- libcolord.so: Colord-1.4.5 -- description
- libcolordcompat.so: Colord-1.4.5 -- description
- libcolordprivate.so: Colord-1.4.5 -- description
- libcolorhug.so: Colord-1.4.5 -- description
- libcompface.{so,a}: Compface-1.5.2 -- description
- libcord.so: GC-8.0.4 -- description
- libcrack.so: CrackLib-2.9.7 -- description
- libcups.so: Cups-2.3.3op2 -- description
- libcupsfilters.so: cups-filters-1.28.10 -- description
- libcurl.so: cURL-7.78.0 -- description
- libdaemon.so: libdaemon-0.14 -- description
- libdazzle-1.0.so: libdazzle-3.40.0 -- description
- libdbus-glib-1.so: dbus-glib-0.112 -- description
- libdconf.so: DConf-0.40.0 / DConf-Editor-3.38.3 -- description
- libdevmapper.so: LVM2-2.03.13 -- description
- libdiscid.so: libdiscid-0.6.2 -- description
- libdmx.so: Xorg Libraries -- description
- libdouble-conversion.so: Double-conversion-3.1.5 -- description
- libdrm.so: libdrm-2.4.107 -- description
- libdrm_amdgpu.so: libdrm-2.4.107 -- description
- libdrm_intel.so: libdrm-2.4.107 -- description
- libdrm_nouveau.so: libdrm-2.4.107 -- description
- libdrm_radeon.so: libdrm-2.4.107 -- description
- libdv.{so,a}: Libdv-1.0.0 -- description
- libdvdcss.so: libdvdcss-1.4.3 -- description
- libdvdnav.so: Libdvdnav-6.1.1 -- description
- libdvdread.so: Libdvdread-6.1.2 -- description
- libebackend-1.2.so: evolution-data-server-3.40.4 -- description
- libebook-1.2.so: evolution-data-server-3.40.4 -- description
- libebook-contacts-1.2.so: evolution-data-server-3.40.4 -- description
- libecal-1.2.so: evolution-data-server-3.40.4 -- description
- libecpg.{so,a}: PostgreSQL-13.4 -- description
- libecpg_compat.{so,a}: PostgreSQL-13.4 -- description
- libedata-book-1.2.so: evolution-data-server-3.40.4 -- description
- libedata-cal-1.2.so: evolution-data-server-3.40.4 -- description
- libedataserver-1.2.so: evolution-data-server-3.40.4 -- description
- libedataserverui-3.0.so: evolution-data-server-3.40.4 -- description
- libefiboot.so: efivar-37 -- description
- libenchant-2.so: enchant-2.3.1 -- description
- libepoxy.so: libepoxy-1.5.9 -- description
- libetestserverutils.so: evolution-data-server-3.40.4 -- description
- ebvdev.so: libevdev 1.11.0 -- description
- libexempi.so: Exempi-2.5.2 -- description
- libexif.so: libexif-0.6.22 -- description
- libexo-2.so: Exo-4.16.2 -- description
- libexslt.so: libxslt-1.1.34 -- description
- libfaac.so: FAAC-1_30 -- description
- libfaad.so: FAAD2-2_10_0 -- description
- libFalkonPrivate.so.3: Falkon-3.1.0 -- description
- libfdk-aac.so: fdk-aac-2.0.2 -- description
- libfftw3.so: fftw-3.3.9 -- description
- libfftw3f.so: fftw-3.3.9 -- description
- libfftw3f_threads.so: fftw-3.3.9 -- description
- libfftw3l.so: fftw-3.3.9 -- description
- libfftw3l_threads.so: fftw-3.3.9 -- description
- libfftw3_threads.so: fftw-3.3.9 -- description
- libFLAC{,++}.so: FLAC-1.3.3 -- description
- libfltk.so: FLTK-1.3.7 -- description
- libfm.so: libfm-1.3.2 -- description
- libfm-extra.so: libfm-extra-1.3.2 -- description
- libfolks.so: Folks-0.15.3 -- description
- libfolks-eds.so: Folks-0.15.3 -- description
- libfolks-telepathy.so: Folks-0.15.3 -- description
- libfontconfig.so: Fontconfig-2.13.1 -- description
- libfontenc.so: Xorg Libraries -- description
- libfreetype.so: FreeType-2.11.0 -- description
- libfribidi.so: FriBidi-1.0.9 -- description
- libFS.so: Xorg Libraries -- description
- libfuse3.so: Fuse-3.10.4 -- description
- libgailutil-3.so: GTK+-3.24.30 -- description
- libgarcon-1.so: Garcon-4.16.1 -- description
- libgavl.so: gavl-1.4.0 -- description
- libgbm.so: Mesa-21.2.1 -- description
- libgc.so: GC-8.0.4 -- description
- libgccpp.so: GC-8.0.4 -- description
- libgck-1.so: Gcr-3.40.0 -- description
- libgconf-2.so: GConf-3.2.6 -- description
- libgcrypt.so: libgcrypt-1.9.4 -- description
- libgdata.so: libgdata-0.18.1 -- description
- libgdk-3.so: GTK+-3.24.30 -- description
- libgdk-x11-2.0.so: GTK+-2.24.33 -- description
- libgdkmm-2.4.so: Gtkmm-2.24.5 -- description
- libgdkmm-3.0.so: Gtkmm-3.24.5 -- description
- libgdk_pixbuf-2.0.so: gdk-pixbuf-2.42.6 -- description
- libgdk_pixbuf_xlib-2.0.so: gdk-pixbuf-xlib-2.40.2 -- description
- libgdl-3.so: GDL-3.40.0 -- description
- libgee-0.8.so: libgee-0.20.4 -- description
- libgegl-0.4.so: gegl-0.4.30 -- description
- libgegl-npd-0.4.so: gegl-0.4.30 -- description
- libgegl-sc-0.4.so: gegl-0.4.30 -- description
- libgeocode-glib.so: geocode-glib-3.26.2 -- description
- libgfbgraph-0.2.so: gfbgraph-0.2.4 -- description
- libgif.so: giflib-5.2.1 -- description
- libgimp-2.0.so: Gimp-2.10.24 -- description
- libgimpbase-2.0.so: Gimp-2.10.24 -- description
- libgimpcolor-2.0.so: Gimp-2.10.24 -- description
- libgimpconfig-2.0.so: Gimp-2.10.24 -- description
- libgimpmath-2.0.so: Gimp-2.10.24 -- description
- libgimpmodule-2.0.so: Gimp-2.10.24 -- description
- libgimpthumb-2.0.so: Gimp-2.10.24 -- description
- libgimpui-2.0.so: Gimp-2.10.24 -- description
- libgimpwidgets-2.0.so: Gimp-2.10.24 -- description
- libgiomm-2.4.so: GLibmm-2.66.1 -- description
- libgirepository-1.0.so: gobject-introspection-1.68.0 -- description
- libgjs.so: Gjs-1.68.3 -- description
- libEGL.so: Mesa-21.2.1 -- description
- libGL.so: Mesa-21.2.1 -- description
- libglade-2.0.so: libglade-2.6.4 -- description
- libGLES2.so: Mesa-21.2.1 -- description
- libGLESv1_CM.so: Mesa-21.2.1 -- description
- libGLEW.so: GLEW-2.2.0 -- description
- libglibmm-2.4.so: GLibmm-2.66.1 -- description
- libGLU.so: GLU-9.0.2 -- description
- libglut.so: Freeglut-3.2.1 -- description
- libgmime-3.0.so: GMime-3.2.7 -- description
- libgnome-autoar-0.so: gnome-autoar-0.4.0 -- description
- libgnome-autoar-gtk-0.so: gnome-autoar-0.4.0 -- description
- libgnome-bluetooth.so: gnome-bluetooth-3.34.5 -- description
- libgnome-desktop-3.so: gnome-desktop-40.4 -- description
- libgnome-menu-3.so: gnome-menus-3.36.0 -- description
- libgnutls.so: GnuTLS-3.7.2 -- description
- libgoa-1.0.so: gnome-online-accounts-3.40.0 -- description
- libgoa-backend-1.0.so: gnome-online-accounts-3.40.0 -- description
- libgoffice-0.10.so: GOffice-0.10.50 -- description
- libgpg-error.so: libgpg-error-1.42 -- description
- libgpgme.so: GPGME-1.16.0 -- description
- libgpgmepp.so: GPGME-1.16.0 -- description
- libgpm.so: GPM-1.20.7 -- description
- libgport.a: PostgreSQL-13.4 -- description
- libgraphene-1.0.so: Graphene-1.10.6 -- description
- libgraphite2.so: Graphite2-1.3.14 -- description
- libgrilo.so: Grilo-0.3.13 -- description
- libgrlnet.so: Grilo-0.3.13 -- description
- libgrlpls.so: Grilo-0.3.13 -- description
- libgrss.so: libgrss-0.7.0 -- description
- libgs.so: ghostscript-9.54.0 -- description
- libgsf-1.so: libgsf-1.14.47 -- description
- libgsl.so: Gsl-2.7 -- description
- libgslcblas.so: Gsl-2.7 -- description
- libgsound.so: GSound-1.0.3 -- description
- libgspell-1.so: gspell-1.8.4 -- description
- libgssapi_krb5.so: MIT Kerberos V5-1.19.2 -- description
- libgstbase-1.0.so: gstreamer-1.18.4 -- description
- libgstcheck-1.0.so: gstreamer-1.18.4 -- description
- libgstcontroller-1.0.so: gstreamer-1.18.4 -- description
- libgstnet-1.0.so: gstreamer-1.18.4 -- description
- libgstreamer-1.0.so: gstreamer-1.18.4 -- description
- libgtk-3.so: GTK+-3.24.30 -- description
- libgtk-4.so: GTK-4.4.0 -- description
- libgtk-vnc-2.0.so: gtk-vnc-1.2.0 -- description
- libgtk-x11-2.0.so: GTK+-2.24.33 -- description
- libgtkmm-2.4.so: Gtkmm-2.24.5 -- description
- libgtkmm-3.0.so: Gtkmm-3.24.5 -- description
- libgtksourceview-3.0.so: gtksourceview-3.24.11 -- description
- libgtksourceview-4.so: gtksourceview4-4.8.1 -- description
- libgtksourceview-5.so: gtksourceview5-5.0.0 -- description
- libgtop-2.0.so: libgtop-2.40.0 -- description
- libgucharmap_2_90.so: Gucharmap-13.0.8 -- description
- libgudev-1.0.so: libgudev-237 -- description
- libgusb.so: libgusb-0.3.7 -- description
- libgvc.so: Graphviz-2.48.0 -- description
- libgvfscommon.so: Gvfs-1.48.1 -- description
- libgvnc-1.0.so: gtk-vnc-1.2.0 -- description
- libgvncpulse-1.0.so: gtk-vnc-1.2.0 -- description
- libgweather-3.so: libgweather-40.0 -- description
- libgxps.so: Libgxps-0.3.2 -- description
- libhandle.so: xfsprogs-5.13.0 -- description
- libhandy-1.so: Libhandy-1.2.3 -- description
- libharfbuzz.so: HarfBuzz-2.9.0 -- description
- libharfbuzz-gobject.so: HarfBuzz-2.9.0 -- description
- libharfbuzz-icu.so: HarfBuzz-2.9.0 -- description
- libibus-1.0.so: ibus-1.5.25 -- description
- libical.so: libical-3.0.10 -- description
- libical-glib.so: libical-3.0.10 -- description
- libicalss.so: libical-3.0.10 -- description
- libicalss_cxx.so: libical-3.0.10 -- description
- libicalvcal.so: libical-3.0.10 -- description
- libical_cxx.so: libical-3.0.10 -- description
- libICE.so: Xorg Libraries -- description
- libicudata.so: ICU-69.1 -- description
- libicui18n.so: ICU-69.1 -- description
- libicuio.so: ICU-69.1 -- description
- libicutest.so: ICU-69.1 -- description
- libicutu.so: ICU-69.1 -- description
- libicuuc.so: ICU-69.1 -- description
- libid3.so: id3lib-3.8.3 -- description
- libidn.so: libidn-1.38 -- description
- libidn2.so: libidn2-2.3.2 -- description
- libImlib2.so: imlib2-1.7.2 -- description
- libinkscape_base.so: Inkscape-1.1 -- description
- libinput.so: libinput-1.18.1 -- description
- libinput_drv.so: Xorg Libinput Driver-1.1.0 -- description
- libisoburn.so: libisoburn-1.5.4 -- description
- libisofs.so: libisofs-1.5.4 -- description
- libiw.so: Wireless Tools-29 -- description
- libjansson.so: Jansson-2.13.1 -- description
- libjasper.so: JasPer-2.0.33 -- description
- libjavascriptcoregtk-4.0.0.so: WebKitGTK-2.32.3 -- description
- libjpeg.so: libjpeg-turbo-2.1.1 -- description
- libjson-c.so: JSON-C-0.15 -- description
- libjson-glib-1.0.so: JSON-GLib-1.6.6 -- description
- libkadm5clnt.so: MIT Kerberos V5-1.19.2 -- description
- libkadm5srv.so: MIT Kerberos V5-1.19.2 -- description
- libkcddb.so: libkcddb-21.08.0 -- description
- libkdb5.so: MIT Kerberos V5-1.19.2 -- description
- libkeyutils.so: keyutils-1.6.1 -- description
- libkms.so: libdrm-2.4.107 -- description
- libkpathsea.so: texlive-20210325-source -- description
- libkrad.so: MIT Kerberos V5-1.19.2 -- description
- libkrb5.so: MIT Kerberos V5-1.19.2 -- description
- libksba.{so,a}: libksba-1.6.0 -- description
- liblber.so: OpenLDAP-2.5.7 -- description
- liblcms.so: Little CMS-1.19 -- description
- liblcms2.so: Little CMS-2.12 -- description
- libldap.so: OpenLDAP-2.5.7 -- description
- libldns.so: ldns-1.7.1 -- description
- liblinear.so: liblinear-243 -- description
- liblua.so: Lua-5.4.3 -- description
- liblua5.2.so: Lua-5.2.4 -- description
- liblzo2.so: LZO-2.10 -- description
- libmad.so: libmad-0.15.1b -- description
- libMagick++-7.Q16HDRI.so: ImageMagick-7.1.0-4 -- description
- libMagickCore-7.Q16HDRI.so: ImageMagick-7.1.0-4 -- description
- libMagickWand-7.Q16HDRI.so: ImageMagick-7.1.0-4 -- description
- libmbim-glib.so: libmbim-1.26.0 -- description
- libmenu-cache.so: menu-cache-1.1.0 -- description
- libmission-control-plugins.so: telepathy-mission-control-5.16.6 -- description
- libmm-glib.so: ModemManager-1.16.10 -- description
- libmng.so: libmng-2.0.3 -- description
- libmnl.so: libmnl-1.0.4 -- description
- libmozjs-78.so: JS-78.13.0 -- description
- libmp3lame.so: LAME-3.100 -- description
- libmp4v2.so: FAAC-1_30 -- description
- libmpeg2.so: libmpeg2-0.5.1 -- description
- libmpeg2convert.so: libmpeg2-0.5.1 -- description
- libmpg123.so: mpg123-1.28.2 -- description
- libmtdev.so: mtdev-1.1.6 -- description
- libmupdf.so: MuPDF-1.18.0 -- description
- libmusicbrainz.{so,a}: libmusicbrainz-2.1.5 -- description
- libmusicbrainz5.so: libmusicbrainz-5.1.0 -- description
- libmutter-8.so: Mutter-40.4 -- description
- libmypaint.so: libmypaint-1.6.1 -- description
- libnautilus-extension.so: Nautilus-40.2 -- description
- libneon.so: neon-0.31.2 -- description
- libnetapi.so: Samba-4.14.7 -- description
- libnghttp2.so: nghttp2-1.44.0 -- description
- libnl*-3.so: libnl-3.5.0 -- description
- libnm.so: NetworkManager-1.32.10 -- description
- libnma.so: libnma-1.8.32 -- description
- libnotify.so: libnotify-0.7.9 -- description
- libnpth.so: npth-1.6 -- description
- libnsl.so: libnsl-1.3.0 -- description
- libnspr4.so: NSPR-4.32 -- description
- libnss_winbind.so: Samba-4.14.7 -- description
- libnss_wins.so: Samba-4.14.7 -- description
- libntfs-3g.so: ntfs-3g-2021.8.22 -- description
- liboauth.so: liboauth-1.0.3 -- description
- libobrender.so: openbox-3.6.1 -- description
- libobt.so: openbox-3.6.1 -- description
- libogg.so: libogg-1.3.5 -- description
- libopus.so: Opus-1.3.1 -- description
- libOSMesa.so: Mesa-21.2.1 -- description
- libosp.so: OpenSP-1.5.2 -- description
- libout123.so: mpg123-1.28.2 -- description
- libp11-kit.so: p11-kit-0.24.0 -- description
- libpam.so: Linux-PAM-1.5.1 -- description
- libpango-1.0.so: Pango-1.48.9 -- description
- libpangomm-1.4.so: Pangomm-2.46.1 -- description
- libpaper.so: libpaper-1.1.24+nmu5 -- description
- libparted.so: parted-3.4 -- description
- libpathplan.so: Graphviz-2.48.0 -- description
- pcap-config: libpcap-1.10.1 -- description
- libpcap.{a,so}: libpcap-1.10.1 -- description
- libpci.so: pciutils-3.7.0 -- description
- libpciaccess.so: Xorg Libraries -- description
- libpeas-1.0.so: libpeas-1.30.0 -- description
- libpeas-gtk-1.0.so: libpeas-1.30.0 -- description
- libpgtypes.{so,a}: PostgreSQL-13.4 -- description
- libpipewire-0.3.so: Pipewire-0.3.34 -- description
- libpixbufloader-svg.so: librsvg-2.50.7 -- description
- libpixman-1.so: Pixman-0.40.0 -- description
- libplc4.so: NSPR-4.32 -- description
- libplds4.so: NSPR-4.32 -- description
- libpng.so: libpng-1.6.37 -- description
- libpolkit-agent-1.so: Polkit-0.119 -- description
- libpolkit-gobject-1.so: Polkit-0.119 -- description
- libpoppler.so: Poppler-21.08.0 -- description
- libpoppler-cpp.so: Poppler-21.08.0 -- description
- libpoppler-glib.so: Poppler-21.08.0 -- description
- libpoppler-qt5.so: Poppler-21.08.0 -- description
- libpopt.so: Popt-1.18 -- description
- libportal.so: libportal-0.4 -- description
- libpostproc.so: FFmpeg-4.4 -- description
- libpotrace.so: Potrace-1.16 -- description
- libpq.{so,a}: PostgreSQL-13.4 -- description
- libpsl.so: libpsl-0.21.1 -- description
- libpspell.so: Aspell-0.60.8 -- description
- libptexenc.so: texlive-20210325-source -- description
- libpth.so: Pth-2.0.7 -- description
- libpwquality.so: libpwquality-1.4.4 -- description
- libqca-qt5.so: Qca-2.3.3 -- description
- libqgpgme.so: GPGME-1.16.0 -- description
- libqmi-glib.so: libqmi-1.30.0 -- description
- libqpdf.so: Qpdf-10.3.2 -- description
- libqrencode.so: qrencode-4.1.1 -- description
- libQtWebEngine.so: QtWebEngine-5.15.6 -- description
- libQtWebEngineCore.so: QtWebEngine-5.15.6 -- description
- libQtWebEngineWidgets.so: QtWebEngine-5.15.6 -- description
- libquicktime.so: libquicktime-1.2.4 -- description
- libraptor2.so: Raptor-2.0.15 -- description
- librarian.{so,a}: Rarian-0.8.1 -- description
- librep.so: Librep-0.92.7 -- description
- librest-0.7.so: rest-0.8.1 -- description
- librest-extras-0.7.so: rest-0.8.1 -- description
- librsvg-2.so: librsvg-2.50.7 -- description
- libruby.so: Ruby-3.0.2 -- description
- libsane.so: SANE-1.0.29 -- description
- libsane-*.so: SANE-1.0.29 -- description
- libsasl2.so: Cyrus SASL-2.1.27 -- description
- libsbc.so: SBC-1.5 -- description
- libscg.a: Cdrtools-3.02a09 -- description
- libSDL.so: SDL-1.2.15 -- description
- libSDL2.so: SDL2-2.0.16 -- description
- libseccomp.so: libseccomp-2.5.1 -- description
- libsecret-1.so: libsecret-0.20.4 -- description
- libsensors.so: lm-sensors-3-6-0 -- description
- libserf-1.so: Serf-1.3.9 -- description
- libsgutils2.so: sg3_utils-1.46 -- description
- libsigc-2.0.so: libsigc++-2.10.7 -- description
- libsigc-3.0.so: libsigc++-3.0.7 -- description
- libsigsegv.so: libsigsegv-2.13 -- description
- libSM.so: Xorg Libraries -- description
- libsmbclient.so: Samba-4.14.7 -- description
- libsndfile.so: libsndfile-1.0.31 -- description
- libSoundTouch.so: SoundTouch-2.3.0 -- description
- libsoup-2.4.so: libsoup-2.74.0 -- description
- libsoup-gnome-2.4.so: libsoup-2.74.0 -- description
- libsp.so: OpenSP-1.5.2 -- description
- libspeex.so: Speex-1.2.0 -- description
- libspeexdsp.so: Speex-1.2.0 -- description
- libspiro.so: Libspiro-20200505 -- description
- libspreadsheet.so: Gnumeric-1.12.50 -- description
- libsqlite3.so: SQLite-3.36.0 -- description
- libssh2.so: libssh2-1.9.0 -- description
- libstartup-notification-1.so: startup-notification-0.12 -- description
- libstatgrab.so: libstatgrab-0.92.1 -- description
- libstd-<16-byte-hash>.so: Rustc-1.52.0 -- description
- libstunnel.so: stunnel-5.60 -- description
- libsvn_*-1.so: Subversion-1.14.1 -- description
- libswresample.so: FFmpeg-4.4 -- description
- libswscale.so: FFmpeg-4.4 -- description
- libsynctex.so: texlive-20210325-source -- description
- libsysprof-4.so: Sysprof-3.40.1 -- description
- libsysprof-capture-4.a: Sysprof-3.40.1 -- description
- libsysprof-memory-4.so: Sysprof-3.40.1 -- description
- libsysprof-speedtrack-4.so: Sysprof-3.40.1 -- description
- libsysprof-ui-4.so: Sysprof-3.40.1 -- description
- libtalloc.so: Talloc-2.3.3 -- description
- libtasn1.so: libtasn1-4.17.0 -- description
- libtelepathy-glib.so: telepathy-glib-0.24.2 -- description
- libtelepathy-logger.so: telepathy-logger-0.8.2 -- description
- libtepl-5.so: Tepl-6.00.0 -- description
- libtexlua52.so: texlive-20210325-source -- description
- libtexluajit.so: texlive-20210325-source -- description
- libtheora*.so: libtheora-1.1.1 -- description
- libthunarx-3.so: thunar-4.16.8 -- description
- libtidy.so: tidy-html5-5.8.0 -- description
- libtiff.so: libtiff-4.3.0 -- description
- libtiffxx.so: libtiff-4.3.0 -- description
- libtirpc.so: libtirpc-1.3.2 -- description
- libtk8.6.so: Tk-8.6.11.1 -- description
- libtotem-plparser.so: totem-pl-parser-3.26.6 -- description
- libtotem-plparser-mini.so: totem-pl-parser-3.26.6 -- description
- libtracker-sparql-3.0.so: Tracker-3.1.2 -- description
- libtumbler-1.so: tumbler-4.16.0 -- description
- libuchardet.so: Uchardet-0.0.7 -- description
- libudisks2.so: UDisks-2.9.3 -- description
- libuhttpmock-0.0.so: uhttpmock-0.5.3 -- description
- libumockdev.so: Umockdev-0.16.2 -- description
- libunbound.so: Unbound-1.13.2 -- description
- libuninameslist.so: libuninameslist-20210626 -- description
- libunique-1.0.so: libunique-1.1.6 -- description
- libunistring.so: libunistring-0.9.10 -- description
- libupower-glib.so: UPower-0_99_13 -- description
- libusb-1.0.so: libusb-1.0.24 -- description
- libuv.so: libuv-1.42.0 -- description
- libva.so: libva-2.12.0 -- description
- libvala-0.52.so: Vala-0.52.5 -- description
- libvdpau.so: libvdpau-1.4 -- description
- libvdpau.so: libvdpau-va-gl-0.4.0 -- description
- libvorbis.so: libvorbis-1.3.7 -- description
- libvpx.so: libvpx-1.10.0 -- description
- libvte.so: Vte-0.28.2 -- description
- libvte-2.91.so: VTE-0.64.2 -- description
- libwacom.so: libwacom-1.11 -- description
- libwayland-client.so: Wayland-1.19.0 -- description
- libwayland-cursor.so: Wayland-1.19.0 -- description
- libwayland-egl.so: Wayland-1.19.0 -- description
- libwayland-server.so: Wayland-1.19.0 -- description
- libwbclient.so: Samba-4.14.7 -- description
- libwebkit2gtk-4.0.so: WebKitGTK-2.32.3 -- description
- libwebp.so: libwebp-1.2.1 -- description
- libwireshark.so: Wireshark-3.4.8 -- description
- libwiretap.so: Wireshark-3.4.8 -- description
- libwnck-1.so: libwnck-2.30.7 -- description
- libwnck-3.so: libwnck-40.0 -- description
- libwoff2common.so: woff2-1.0.2 -- description
- libwoff2enc.so: woff2-1.0.2 -- description
- libwoff2dec.so: woff2-1.0.2 -- description
- libwpe-1.0.so: libwpe-1.10.1 -- description
- libWPEBackend-fdo-1.0.so: wpebackend-fdo-1.10.0 -- description
- libwv-1.2.so: wv-1.2.9 -- description
- libX11.so: Xorg Libraries -- description
- libx264.so: x264-20210814 -- description
- libx265.so: x265-3.4 -- description
- libXau.so: libXau-1.0.9 -- description
- libXaw.so: Xorg Libraries -- description
- libXaw6.so: Xorg Libraries -- description
- libXaw7.so: Xorg Libraries -- description
- libxcb.so: libxcb-1.14 -- description
- libxcb-cursor.so: xcb-util-cursor-0.1.3 -- description
- libxcb-ewmh.so: xcb-util-wm-0.4.1 -- description
- libxcb-icccm.so: xcb-util-wm-0.4.1 -- description
- libxcb-image.so: xcb-util-image-0.4.0 -- description
- libxcb-keysyms.so: xcb-util-keysyms-0.4.0 -- description
- libxcb-render-util.so: xcb-util-renderutil-0.3.9 -- description
- libxcb-util.so: xcb-util-0.4.0 -- description
- libXcomposite.so: Xorg Libraries -- description
- libXcursor.so: Xorg Libraries -- description
- libXdamage.so: Xorg Libraries -- description
- libXdmcp.so: libXdmcp-1.1.3 -- description
- libxdot.so: Graphviz-2.48.0 -- description
- libXext.so: Xorg Libraries -- description
- libxfce4kbd-private-2.so: libxfce4ui-4.16.0 -- description
- libxfce4panel-2.0.so: xfce4-panel-4.16.3 -- description
- libxfce4ui-1.so: libxfce4ui-4.16.0 -- description
- libxfce4util.so: libxfce4util-4.16.0 -- description
- libxfconf-0.so: Xfconf-4.16.0 -- description
- libXfixes.so: Xorg Libraries -- description
- libXfont2.so: Xorg Libraries -- description
- libXft.so: Xorg Libraries -- description
- libXi.so: Xorg Libraries -- description
- libxine.so: xine-lib-1.2.11 -- description
- libXinerama.so: Xorg Libraries -- description
- libxkbcommon.so: libxkbcommon-1.3.0 -- description
- libxkbcommon-x11.so: libxkbcommon-1.3.0 -- description
- libxkbfile.so: Xorg Libraries -- description
- libxkbregistry.so: libxkbcommon-1.3.0 -- description
- libxklavier.so: libxklavier-5.4 -- description
- libxml2.so: libxml2-2.9.12 -- description
- libxml2mod.so: libxml2-2.9.12 -- description
  libxml2-2.9.12 (for its Python2 module) -- description
- libXmu.so: Xorg Libraries -- description
- libXmuu.so: Xorg Libraries -- description
- libXpm.so: Xorg Libraries -- description
- libXrandr.so: Xorg Libraries -- description
- libXrender.so: Xorg Libraries -- description
- libXRes.so: Xorg Libraries -- description
- libxshmfence.so: Xorg Libraries -- description
- libxslt.so: libxslt-1.1.34 -- description
- libXss.so: Xorg Libraries -- description
- libXt.so: Xorg Libraries -- description
- libXtst.so: Xorg Libraries -- description
- libXv.so: Xorg Libraries -- description
- libxvidcore.so: XviD-1.3.7 -- description
- libXvMC.so: Xorg Libraries -- description
- libXvMCW.so: Xorg Libraries -- description
- libXxf86dga.so: Xorg Libraries -- description
- libXxf86vm.so: Xorg Libraries -- description
- libyaml.so: libyaml-0.2.5 -- description
- libyasm.a: yasm-1.3.0 -- description
- libyelp.so: Yelp-40.3 -- description
- Lisp bindings: Rep-gtk-0.90.8.3 -- description
- modesetting_drv.so: Xorg-Server-1.20.13 -- description
- mod_authz_svn.so: Subversion-1.14.1 -- description
- mod_dav_svn.so: Subversion-1.14.1 -- description
- nouveau_drv.so: Xorg Nouveau Driver-1.0.17 -- description
- p11-kit-proxy.so: p11-kit-0.24.0 -- description
- pam_pwquality.so: libpwquality-1.4.4 -- description
- pam_systemd.so: Systemd-249 -- description
- radeon_drv.so: Xorg ATI Driver-19.1.0 -- description
- synaptics_drv.so: Xorg Synaptics Driver-1.9.1 -- description
- vmware_drv.so: Xorg VMware Driver-13.3.0 -- description
- volume_key.so: volume_key-0.3.12 -- description
- wacom_drv.so: Xorg Wacom Driver-0.40.0 -- description

## Kernel Configuration

- Advanced Network Bridge: Advanced Network Setup -- description
- ALSA: alsa-lib-1.2.5.1 -- description
- Automounter: autofs-5.1.7 -- description
- bluez: BlueZ-5.61 -- description
- Bridge Utilities: bridge-utils-1.7.1 -- description
- BTRFS Programs: btrfs-progs-5.13.1 -- description
- Capturing network packets : Wireshark-3.4.8 -- description
- cheese: Cheese-3.38.0 -- description
- cifs-utils: cifs-utils-6.13 -- description
- cryptsetup: cryptsetup-2.3.6 -- description
- cups: Cups-2.3.3op2 -- description
- DHCP: DHCP-4.4.2-P1 -- description
- Dosfstools Programs: dosfstools-4.2 -- description
- escputil for usb printers: Gutenprint-5.3.3 -- description
- Fuse 3: Fuse-3.10.4 -- description
- gpm: GPM-1.20.7 -- description
- iptables: iptables-1.8.7 -- description
- Wireless devices: iw-5.9 -- description
- JFS Utilities: jfsutils-1.1.15 -- description
- libevdev: libevdev 1.11.0 -- description
- libinput: libinput-1.18.1 -- description
- lm_sensors: lm-sensors-3-6-0 -- description
- lvm2: LVM2-2.03.13 -- description
- mdadm: mdadm-4.1 -- description
- NetworkManager: NetworkManager-1.32.10 -- description
- NFS Utilities: NFS-Utils-2.5.4 -- description
- ntfs-3g: ntfs-3g-2021.8.22 -- description
- pm-utils: pm-utils-1.4.1 -- description
- qemu: qemu-6.1.0 -- description
- qtwebengine: QtWebEngine-5.15.6 -- description
- Reiserfs Programs: reiserfsprogs-3.6.27 -- description
- rox-filer: Rox-Filer-2.11 -- description
- Scanning devices: SANE-1.0.29 -- description
- upower: UPower-0_99_13 -- description
- Support for Host-side USB: libusb-1.0.24 -- description
- Wireless devices: Wireless Tools-29 -- description
- wpa_supplicant: wpa_supplicant-2.9 -- description
- XFS Programs: xfsprogs-5.13.0 -- description
- xorg-amdgpu-driver: Xorg AMDGPU Driver-21.0.0 -- description
- xorg-amdgpu-firmware: Xorg AMDGPU Driver-21.0.0 -- description
- xorg-ati-driver: Xorg ATI Driver-19.1.0 -- description
- xorg-ati-firmware: Xorg ATI Driver-19.1.0 -- description
- xorg-intel-driver: Xorg Intel Driver-20210222 -- description
- xorg-nouveau-driver: Xorg Nouveau Driver-1.0.17 -- description
- xorg-vmware-driver: Xorg VMware Driver-13.3.0 -- description
- xorg-wacom-driver: Xorg Wacom Driver-0.40.0 -- description

## Configuration Files

- $PGDATA/pg_hba_conf: PostgreSQL-13.4 -- description
- $PGDATA/pg_indent.con: PostgreSQL-13.4 -- description
- $PGDATA/postgresql.conf: PostgreSQL-13.4 -- description
- ~/.AbiSuite/templates/normal.awt: AbiWord-3.0.5 -- description
- ~/.ant/ant.conf: apache-ant-1.10.11 -- description
- ~/.antrc: apache-ant-1.10.11 -- description
- ~/.asoundrc: alsa-lib-1.2.5.1 -- description
- ~/.config/openbox/autostart: openbox-3.6.1 -- description
- ~/.bashrc: The Bash Shell Startup Files -- description
- ~/.bash_logout: The Bash Shell Startup Files -- description
- ~/.bash_profile: The Bash Shell Startup Files -- description
- ~/.config/pulse: PulseAudio-15.0 -- description
- ~/.config/user-dirs.dirs: Xdg-user-dirs-0.17 -- description
- ~/.config/.mc/*: MC-4.8.27 -- description
- ~/.cshdirs: Tcsh-6.22.04 -- description
- ~/.cshrc: Tcsh-6.22.04 -- description
- ~/.dircolors: The Bash Shell Startup Files -- description
- ~/.profile: The Bash Shell Startup Files -- description
- ~/.enchant: enchant-2.3.1 -- description
- ~/.fetchmailrc: Fetchmail-6.4.21 -- description
- ~/.fluxbox/init: Fluxbox-1.3.7 -- description
- ~/.fluxbox/keys: Fluxbox-1.3.7 -- description
- ~/.fluxbox/menu: Fluxbox-1.3.7 -- description
- ~/.fonts: Fontconfig-2.13.1 -- description
- ~/.foprc: fop-2.6 -- description
- ~/.g/GIMP/2.10/*: Gimp-2.10.24 -- description
- ~/.gitconfig: Git-2.33.0 -- description
- ~/.gpm-root: GPM-1.20.7 -- description
- ~/.gtkrc-2.0: GTK+-2.24.33 -- description
- ~/.gtkrc-2.0: Pidgin-2.14.6 -- description
- ~/.hgrc: Mercurial-5.9 -- description
- ~/.history: Tcsh-6.22.04 -- description
- ~/.config/gtk-4.0/settings.ini: GTK-4.4.0 -- description
- ~/.config/gtk-3.0/settings.ini: GTK+-3.24.30 -- description
- ~/.icewm/keys: IceWM-2.7.0 -- description
- ~/.icewm/menu: IceWM-2.7.0 -- description
- ~/.icewm/preferences: IceWM-2.7.0 -- description
- ~/.icewm/toolbar: IceWM-2.7.0 -- description
- ~/.icewm/winoptions: IceWM-2.7.0 -- description
- ~/.joerc: JOE-4.6 -- description
- ~/.ldaprc: OpenLDAP-2.5.7 -- description
- ~/.libao: Libao-1.2.0 -- description
  vorbis-tools-1.4.2 -- description
- ~/.links/*: Links-2.23 -- description
- ~/.login: Tcsh-6.22.04 -- description
- ~/.logout: Tcsh-6.22.04 -- description
- ~/.mailrc: mailx-12.5 -- description
- ~/.config/openbox/menu.xml: openbox-3.6.1 -- description
- ~/.mime.types: Mutt-2.1.2 -- description
- ~/.mplayer/*: MPlayer-export-2021-07-29 -- description
- ~/.muttrc: Mutt-2.1.2 -- description
- ~/.my.cnf: MariaDB-10.6.4 -- description
- ~/.nailrc: mailx-12.5 -- description
- ~/.nanorc: Nano-5.8 -- description
- ~/.ncftp/*: NcFTP-3.2.6 -- description
- ~/.ogg123rc: vorbis-tools-1.4.2 -- description
- ~/.pangorc: Pango-1.48.9 -- description
- ~/.procmailrc: Procmail-3.22 -- description
- ~/.profile: Dash-0.5.11.4 -- description
- ~/.purple/*: Pidgin-2.14.6 -- description
- ~/.config/openbox/rc.xml: openbox-3.6.1 -- description
- ~/.screenrc: Screen-4.8.0 -- description
- ~/.slshrc: slang-2.3.2 -- description
- ~/.ssh/*: OpenSSH-8.7p1 -- description
- ~/.subversion/config: Subversion-1.14.1 -- description
- ~/.tcshrc: Tcsh-6.22.04 -- description
- ~/.vimrc: The /etc/vimrc and ~/.vimrc Files
  Vim-8.2.3337 -- description
- ~/.wgetrc: Wget-1.21.1 -- description
- ~/.wireshark/*: Wireshark-3.4.8 -- description
- ~/.xine/config: xine-ui-0.99.12 -- description
- ~/.xinitrc: Fluxbox-1.3.7 -- description
  IceWM-2.7.0 -- description
  sawfish-1.12.0 -- description
- ~/.xscreensaver: XScreenSaver-6.01 -- description
- /boot/grub/grub.cfg: About Console Fonts -- description
  Using GRUB to Set Up the Boot Process with UEFI -- description
- /etc/aliases: Exim-4.94.2 -- description
  Postfix-3.6.2 -- description
- /etc/ant/ant.conf: apache-ant-1.10.11 -- description
- /etc/asound.conf: alsa-lib-1.2.5.1 -- description
- /etc/at.allow: at-3.2.2 -- description
- /etc/at.deny: at-3.2.2 -- description
- /etc/autofs/auto.master: autofs-5.1.7 -- description
- /etc/autofs/auto.misc: autofs-5.1.7 -- description
- /etc/autofs/auto.net: autofs-5.1.7 -- description
- /etc/bashrc: The Bash Shell Startup Files -- description
- /etc/bluetooth/main.conf: BlueZ-5.61 -- description
- /etc/csh.cshrc: Tcsh-6.22.04 -- description
- /etc/csh.login: Tcsh-6.22.04 -- description
- /etc/csh.logout: Tcsh-6.22.04 -- description
- /etc/cups/*: Cups-2.3.3op2 -- description
- /etc/dbus-1/session.conf: dbus-1.12.20 -- description
- /etc/dbus-1/system.d/*: dbus-1.12.20 -- description
- /etc/dbus-1/system.conf: dbus-1.12.20 -- description
- /etc/default/nfs-utils: NFS-Utils-2.5.4 -- description
- /etc/default/useradd: Configuring for Adding Users
- /etc/dhcp/dhclient.conf: DHCP-4.4.2-P1 -- description
- /etc/dhcp/dhcpd.conf: DHCP-4.4.2-P1 -- description
- /etc/dhcpcd/dhcpcd.conf: dhcpcd-9.4.0 -- description
- /etc/dircolors: The Bash Shell Startup Files -- description
- /etc/dovecot/conf.d/*: Dovecot-2.3.16 -- description
- /etc/dovecot/dovecot.conf: Dovecot-2.3.16 -- description
- /etc/dovecot/local.conf: Dovecot-2.3.16 -- description
- /etc/exim.conf: Exim-4.94.2 -- description
- /etc/exportfs: NFS-Utils-2.5.4 -- description
- /etc/fcron.allow: Fcron-3.2.1 -- description
- /etc/fcron.conf: Fcron-3.2.1 -- description
- /etc/fcron.deny: Fcron-3.2.1 -- description
- /etc/fonts/*: Fontconfig-2.13.1 -- description
- /etc/fonts/conf.d/*: Fontconfig-2.13.1 -- description
- /etc/fstab: NFS-Utils-2.5.4 -- description
- /etc/gdm/custom.conf: GDM-40.1 -- description
- /etc/gimp/2.0/*: Gimp-2.10.24 -- description
- /etc/gitconfig: Git-2.33.0 -- description
- /etc/gpm-root.conf: GPM-1.20.7 -- description
- /etc/group: About System Users and Groups
- /etc/gtk-2.0/gtkrc: GTK+-2.24.33 -- description
- /etc/httpd/extra/*: Apache-2.4.48 -- description
- /etc/httpd/httpd.conf: Apache-2.4.48 -- description
- /etc/issue: Customizing your Logon with /etc/issue
- /etc/joe/jmacsrc: JOE-4.6 -- description
- /etc/joe/joerc: JOE-4.6 -- description
- /etc/joe/jpicorc: JOE-4.6 -- description
- /etc/joe/jstarrc: JOE-4.6 -- description
- /etc/joe/rjoerc: JOE-4.6 -- description
- /etc/krb5.conf: MIT Kerberos V5-1.19.2 -- description
- /etc/ld.so.conf: Rustc-1.52.0 -- description
  Qt-5.15.2 -- description
  KDE Frameworks 5 Pre-installation Configuration
- /etc/libao.conf: Libao-1.2.0 -- description
  vorbis-tools-1.4.2 -- description
- /etc/lightdm/lightdm.conf: lightdm-1.30.0 -- description
- /etc/login.defs: About System Users and Groups
  Shadow-4.9 -- description
  Shadow-4.9 -- description
- /etc/lxdm/lxdm.conf: lxdm-0.5.3 -- description
- /etc/lynx/lynx.cfg: Lynx-2.8.9rel.1 -- description
- /etc/mail/*: sendmail-8.17.1 -- description
- /etc/make-ca.conf: make-ca-1.7 -- description
- /etc/mercurial/hgrc: Mercurial-5.9 -- description
- /etc/mime.types: Mutt-2.1.2 -- description
- /etc/mplayer/*: MPlayer-export-2021-07-29 -- description
- /etc/Muttrc: Mutt-2.1.2 -- description
- /etc/mysql/my.cnf: MariaDB-10.6.4 -- description
- /etc/nail.rc: mailx-12.5 -- description
- /etc/named.conf: BIND-9.16.20 -- description
- /etc/namedb/pz/127.0.0.0: BIND-9.16.20 -- description
- /etc/namedb/root.hints: BIND-9.16.20 -- description
- /etc/nanorc: Nano-5.8 -- description
- /etc/ncftp.*: NcFTP-3.2.6 -- description
- /etc/NetworkManager/NetworkManager.conf: NetworkManager-1.32.10 -- description
- /etc/ntp.conf: ntp-4.2.8p15 -- description
- /etc/openldap/ldap.conf: OpenLDAP-2.5.7 -- description
- /etc/openldap/slapd.conf: OpenLDAP-2.5.7 -- description
- /etc/openldap/slapd.d/*: OpenLDAP-2.5.7 -- description
- /etc/pam.conf: Shadow-4.9 -- description
  Fcron-3.2.1 -- description
- /etc/pam.d/*: Linux-PAM-1.5.1 -- description
  Shadow-4.9 -- description
  Fcron-3.2.1 -- description
- /etc/pango/pangorc: Pango-1.48.9 -- description
- /etc/passwd: About System Users and Groups
- /etc/xdg/openbox/autostart: openbox-3.6.1 -- description
- /etc/sensors3.conf: lm-sensors-3-6-0 -- description
- /etc/xdg/openbox/menu.xml: openbox-3.6.1 -- description
- /etc/xdg/openbox/rc.xml: openbox-3.6.1 -- description
- /etc/gtk-3.0/settings.ini: GTK+-3.24.30 -- description
- /etc/pear.conf: PHP-8.0.10 -- description
- /etc/php-fpm.conf: PHP-8.0.10 -- description
- /etc/php-fpm.d/www.conf: PHP-8.0.10 -- description
- /etc/php.ini: PHP-8.0.10 -- description
- /etc/postfix/*: Postfix-3.6.2 -- description
- /etc/procmailrc: Procmail-3.22 -- description
- /etc/profile: The Bash Shell Startup Files -- description
  Dash-0.5.11.4 -- description
- /etc/profile.d: The Bash Shell Startup Files -- description
- /etc/profile.d/bash_completion.sh: The Bash Shell Startup Files -- description
- /etc/profile.d/dircolors.sh: The Bash Shell Startup Files -- description
- /etc/profile.d/extrapaths.sh: The Bash Shell Startup Files -- description
- /etc/profile.d/i18n.sh: The Bash Shell Startup Files -- description
- /etc/profile.d/readline.sh: The Bash Shell Startup Files -- description
- /etc/profile.d/umask.sh: The Bash Shell Startup Files -- description
- /etc/proftpd.conf: ProFTPD-1.3.7c -- description
- /etc/pulse/client.conf: PulseAudio-15.0 -- description
- /etc/pulse/daemon.conf: PulseAudio-15.0 -- description
- /etc/pulse/default.pa: PulseAudio-15.0 -- description
- /etc/request-key.conf: keyutils-1.6.1 -- description
- /etc/request-key.d/*: keyutils-1.6.1 -- description
- /etc/resolv.conf: dhcpcd-9.4.0 -- description
  BIND-9.16.20 -- description
- /etc/rndc.conf: BIND-9.16.20 -- description
- /etc/rsyncd.conf: rsync-3.2.3 -- description
- /etc/samba/smb.conf: Samba-4.14.7 -- description
- /etc/sane.d/*.conf: SANE-1.0.29 -- description
- /etc/saslauthd.conf: Cyrus SASL-2.1.27 -- description
- /etc/screenrc: Screen-4.8.0 -- description
- /etc/security/*: Linux-PAM-1.5.1 -- description
  Shadow-4.9 -- description
- /etc/security/access.conf: Shadow-4.9 -- description
- /etc/security/limits.conf: Shadow-4.9 -- description
- /etc/sgml/catalog: docbook-3.1-dtd -- description
  docbook-4.5-dtd -- description
- /etc/sgml/sgml.conf: sgml-common-0.6.3 -- description
- /etc/skel/*: Configuring for Adding Users
- /etc/slsh.rc: slang-2.3.2 -- description
- /etc/smartd.conf: smartmontools-7.2 -- description
- /etc/ssh/sshd_config: OpenSSH-8.7p1 -- description
- /etc/ssh/ssh_config: OpenSSH-8.7p1 -- description
- /etc/stunnel/stunnel.conf: stunnel-5.60 -- description
- /etc/subversion/config: Subversion-1.14.1 -- description
- /etc/sudoers: Sudo-1.9.7p2 -- description
- /etc/sysconfig/autofs.conf: autofs-5.1.7 -- description
- /etc/sysconfig/sysstat: Sysstat-12.5.4 -- description
- /etc/sysconfig/sysstat.ioconf: Sysstat-12.5.4 -- description
- /etc/tripwire/*: Tripwire-2.4.3.7 -- description
- /etc/udev/rules.d: About Devices
- /etc/unbound/unbound.conf: Unbound-1.13.2 -- description
- /etc/unixODBC/*: unixODBC-2.3.9 -- description
- /etc/vimrc: The /etc/vimrc and ~/.vimrc Files
  Vim-8.2.3337 -- description
- /etc/vsftpd.conf: vsftpd-3.0.5 -- description
- /etc/wgetrc: Wget-1.21.1 -- description
- /etc/wireshark.conf: Wireshark-3.4.8 -- description
- /etc/wpa_supplicant/wpa_supplicant-*.conf: wpa_supplicant-2.9 -- description
- /etc/X11/app-defaults/XScreenSaver: XScreenSaver-6.01 -- description
- /etc/xdg/user-dirs.conf: Xdg-user-dirs-0.17 -- description
- /etc/xdg/user-dirs.defaults: Xdg-user-dirs-0.17 -- description
- /etc/xml/catalog: docbook-xml-4.5 -- description
  docbook-xsl-nons-1.79.2 -- description
- /etc/xml/catalog: docbook-xml-5.0 -- description
- /etc/xml/catalog: docbook-xml-5.1 -- description
- /etc/xml/docbook: docbook-xml-4.5 -- description
- /etc/xml/docbook-5.0: docbook-xml-5.0 -- description
- /etc/xml/docbook-5.1: docbook-xml-5.1 -- description
- /etc/zsh/zlogin: zsh-5.8 -- description
- /etc/zsh/zlogout: zsh-5.8 -- description
- /etc/zsh/zprofile: zsh-5.8 -- description
- /etc/zsh/zshenv: zsh-5.8 -- description
- /etc/zsh/zshrc: zsh-5.8 -- description
- /etc/lightdm/keys.conf: lightdm-1.30.0 -- description
- /lib/firmware: About Firmware
- /etc/lightdm/lightdm-gtk-greeter.conf: lightdm-1.30.0 -- description
- /etc/lightdm/users.conf: lightdm-1.30.0 -- description
- /usr/share/enchant/enchant.ordering: enchant-2.3.1 -- description
- /usr/share/fontconfig/conf.avail/*: Fontconfig-2.13.1 -- description
- /usr/share/fonts: Fontconfig-2.13.1 -- description
- /usr/share/graphviz/config: Graphviz-2.48.0 -- description
- /usr/share/gtk-2.0/gtkrc: GTK+-2.24.33 -- description
- /usr/share/gtk-4.0/settings.ini: GTK-4.4.0 -- description
- /var/lib/alsa/asound.state: alsa-utils-1.2.5.1 -- description
- /var/lib/krb5kdc/kdc.conf: MIT Kerberos V5-1.19.2 -- description

## Bootscripts

- General Information: BLFS Systemd Units
- accounts-daemon: AccountsService-0.6.55 -- description
- acpid: acpid-2.0.32 -- description
- apache: Apache-2.4.48 -- description
- at: at-3.2.2 -- description
- autofs: autofs-5.1.7 -- description
- avahi: Avahi-0.8 -- description
- bind: BIND-9.16.20 -- description
- bluetooth: BlueZ-5.61 -- description
- cups: Cups-2.3.3op2 -- description
- cups-browsed: cups-filters-1.28.10 -- description
- dhclient@.service: DHCP-4.4.2-P1 -- description
- dhcpcd: dhcpcd-9.4.0 -- description
- dhcpd: DHCP-4.4.2-P1 -- description
- dovecot: Dovecot-2.3.16 -- description
- exim: Exim-4.94.2 -- description
- fcron: Fcron-3.2.1 -- description
- gdm: GDM-40.1 -- description
- gitserve: Running a Git Server -- description
- gpm: GPM-1.20.7 -- description
- haveged: Haveged-1.9.14 -- description
- iptables: iptables-1.8.7 -- description
- krb5: MIT Kerberos V5-1.19.2 -- description
- lightdm: lightdm-1.30.0 -- description
- lxdm: lxdm-0.5.3 -- description
- ModemManager: ModemManager-1.16.10 -- description
- mysql: MariaDB-10.6.4 -- description
- NetworkManager: NetworkManager-1.32.10 -- description
- nfs-client: NFS-Utils-2.5.4 -- description
- ntpd.service: ntp-4.2.8p15 -- description
- php: PHP-8.0.10 -- description
- postfix: Postfix-3.6.2 -- description
- postgresql: PostgreSQL-13.4 -- description
- proftpd: ProFTPD-1.3.7c -- description
- rpcbind.service: rpcbind-1.2.6 -- description
- samba: Samba-4.14.7 -- description
- saslauthd: Cyrus SASL-2.1.27 -- description
- sendmail: sendmail-8.17.1 -- description
- slapd: OpenLDAP-2.5.7 -- description
- smartd: smartmontools-7.2 -- description
- sshd: OpenSSH-8.7p1 -- description
- stunnel: stunnel-5.60 -- description
- svnserve: Running a Subversion Server -- description
- sysstat: Sysstat-12.5.4 -- description
- unbound: Unbound-1.13.2 -- description
- upower: UPower-0_99_13 -- description
- winbindd: Samba-4.14.7 -- description
- zenmap: Nmap-7.92 -- description

## Others

- ALSA Description: ALSA-1.2.5
- Configuring Xorg: Xorg-7 Testing and Configuration
- Image::Magick: ImageMagick-7.1.0-4 -- description
- KDE Frameworks Introduction: KDE Frameworks 5 Pre-installation Configuration
- Library archive (.la) files: About Libtool Archive (.la) files
- libraries: static or shared: Libraries: Static or shared?
- SGML DTD files: docbook-3.1-dtd -- description
  docbook-4.5-dtd -- description
- SGML entity files: sgml-common-0.6.3 -- description
- SGML MOD files: docbook-3.1-dtd -- description
  docbook-4.5-dtd -- description
- Tuning Fontconfig: Tuning Fontconfig
- /usr/share/consolefonts: About Console Fonts -- description
- vulnerability links: Vulnerabilities
- XML DTD Files: docbook-xml-4.5 -- description
  docbook-xml-5.0 -- description
- XML entity files: sgml-common-0.6.3 -- description
  docbook-xml-4.5 -- description
- XML MOD files: docbook-xml-4.5 -- description
- XML Schema files: docbook-xml-5.0 -- description
  docbook-xml-5.1 -- description
- XML Schematron rules: docbook-xml-5.0 -- description
- XSL Stylesheets: docbook-xml-5.1 -- description
  docbook-xsl-nons-1.79.2 -- description